2014-01-24 9 views
1

배경 나는 scapy를 사용하여 Windows OS 검색 스크립트를 작성하고 있습니다. p0f, nmap과 같은 다른 도구를 SMB 스크립트와 같이 사용할 수는 있지만,이 기능 부분은 전체적으로 하나의 작은 조각이므로 scapy 라우트에 전념하고 있습니다.scapy SMB/CIFS 디코딩

문제점 scapy 꽤 초보자이기 때문에, 나는 몇 가지 문제가 SMB 디코더를 사용하기위한 최선의 방법을 파악하는 데 문제. 지금까지 내가 가진 :

def disp(pkt): 
    print(pkt.getlayer(IP).src) 
    if pkt.haslayer(Raw): 
     print(SMBSession_Setup_AndX_Request(pkt.getlayer(Raw).load).NativeOS) 

foo=sniff(prn=disp,filter="port 445",count=10) 

당신이 볼 수 있듯이, 나는 단순히는 '원시'페이로드 옳은 일을 할 것입니다 희망에서 SMBSession_Setup_AndX_Request() 클래스를 통해 '원시'레이어를 때우는하고있다.

이것은 기능적으로 보이지만 "Windows 4.0"의 NativeOS 특성에 대한 "기본"클래스 설정을 반환합니다 (글쎄, 내 버전의 scapy의 smb.py에 있음). 때때로 나를 스택으로 처리합니다. Mac이 네트워크에 있는지 여부에 따라 CIFS를 추적합니다. NativeOS를 잡고 그걸로 끝낼 수있는 장님이 분명히 나쁘다.

질문에 대한 답변 : 내 방법론이 잘못되면, scapy의 sniff() 메소드를 사용하는 맞춤 프로토콜 디코딩에 대한 올바른 접근 방법은 무엇입니까?

조언 해 주셔서 감사합니다.

sc.

답변

2

짧은 대답은 Scapy의 SMB 계층 구현은 SMB를 TCP (기본적으로 TCP/445)를 통해 직접적으로 처리하지만 SMB는 TCP를 통한 NetBios (기본적으로 TCP/139)를 처리하지 않습니다.

변경하기가 정말 어려울 것이라고 생각하지 않지만 layers/smb.py에 대해 다이빙을해야합니다 (예 : SMB* 레이어를 사용해야하는지 결정하는 경우). Scapy는 기본 필드의 값을 사용합니다 NBTSession 계층, TCP를 통한 SMB에는 더 이상 존재하지 않음).

SMB를 사용하지 않고 Scapy의 OS를 식별하려면 p0f 모듈을 사용하는 것이 좋습니다. 그것을 시도해보십시오 :

+0

당신의 답장을 보내 주셔서 감사합니다 - 나는 어딘가에 popen을 포함시킬 것이고 또한 belt-and-bracers 접근을 위해 p0f를 구현할 것입니다. HTTP user-agent는 scapy를 사용하여 좋은 결과를 얻는다. 많은 감사합니다! – swisscheese