alert tcp $EXTERNAL_NET any -> $HOME_NET 139
(msg:"OS-WINDOWS Microsoft Windows SMB Session Setup NTLMSSP unicode asn1 overflow attempt";
flow:to_server,established;
① content:"|00|"; depth:1;
② content:"|FF|SMBs"; within:5; distance:3;
③ byte_test:1,&,128,6,relative;
④ pcre:"/^.{27}/R";
⑤ byte_test:4,&,2147483648,21,relative,little;
⑥ content:!"NTLMSSP"; within:7; distance:27;
⑦ asn1:double_overflow, bitstring_overflow, relative_offset 27, oversize_length 2048;
metadata:ruleset community; reference:bugtraq,9633; reference:bugtraq,9635; reference:cve,2003-0818; reference:nessus,12052; reference:nessus,12065; reference:url ,technet.microsoft.com/en-us/security/bulletin/MS04-007; classtype:protocol-command-decode; sid:3000; rev:11;)
탐지 과정은 다음과 같다.
① content:"|00|"; depth:1;
-> 페이로드 시작 지점부터 1byte내에서(depth:1) 문자열 검사.
② content:"|FF|SMBs"; within:5; distance:3;
-> 이전 패턴매칭이 끝난 지점에서 3byte를 건너뛴 후(distance:3), 5byte내에서(within:5) SMB 헤더 문자열 검사.
-> SMB 'Session Setup Andx' 명령어 확인
③ byte_test:1,&,128,6,relative;
-> 이전 패턴매칭이 끝난 지점에서(relative) 6byte를 건너뛴 후, 1byte(c8)를 128과 AND 비트연산.
-> unicode string 여부 검사
-> 바이트 오더는 '07 c8'인데 'c8 07(0xc807)'로 읽는다.
④ pcre:"/^.{27}/R";
-> 이전 패턴매칭이 끝난 지점부터(R) 27개의 문자열 검사.
-> 왜 27개를 검사할까? Max Buffer 영역까지 검사하기 위해서?
⑤ byte_test:4,&,2147483648,21,relative,little;
-> 이전 패턴매칭이 끝난 지점에서(relative) 21byte를 건너뛴 지점에 위치하는 4byte를 2147483648과 AND 비트 연산.
-> 'little endian'을 적용하기 때문에 '81 a3 30 81'은 원래 순서로 정렬. 그런데 'big endian' 순서로 계산해도 결과가 같네?-_-
-> 더 큰 문제는 해당 비트가 특정 패킷 구조를 의미하지 않는다. 비트 연산 왜 하지?
⑥ content:!"NTLMSSP"; within:7; distance:27;
-> 이전 패턴매칭이 끝난 지점에서 27byte를 건너뛴 후(distance:27), 7byte내에서(within:7) 문자열 검사.
-> 해당 문자열 매칭이 실패했을 때 검사 성공.
⑦ asn1:double_overflow, bitstring_overflow, relative_offset 27, oversize_length 2048;
-> 이전 패턴매칭이 끝난 지점에서 27byte를 건너뛴 후(relative_offset 27), 나머지 바이트 스트림에서 ASN.1 규격을 벗어나는 인코딩 형식 및 사이즈 등을 체크하는 듯.
이전 검사가 성공하면 순서대로 다음 검사 옵션으로 이어지는데, 옵션 ⑦을 비활성화하면, 정상적인 윈도우 시스템간 파일 공유 환경에서도 탐지로그를 발생시킬 수 있다.
모두 NTML 인증 과정에서 발생 |
byte_test에서 'little endian' 옵션이 어떻게 쓰이나 궁금해서 일부러 오탐을 만들어 봤는데, 해당 옵션이 있으나 없으나 결과가 같음. -_-
관련 글
댓글 없음:
댓글 쓰기