isdataat 의 정확한 용도

isdataat

Verify that the payload has data at a specified location, optionally looking for data relative to the end of

the previous content match.

 

Format

isdataat:<int>[,relative];

Example

alert tcp any any -> any 111 (content:”PASS”; isdataat:50,relative; content:!”|0a|”; distance:0;)

This rule looks for the string PASS exists in the packet, then verifies there is at least 50 bytes after the end

of the string PASS, then verifies that there is not a newline character within 50 bytes of the end of the PASS

string.

 

 

위 내용은 Snort 메뉴얼에 나온 내용이다.

isdataat이라는 옵션은 정해진 바이트 만큼의 데이터가 존재하는지 검사하는 것이다.

 

메뉴얼의 내용을 잘읽어보자.

alert tcp any any -> any 111 (content:”PASS”; isdataat:50,relative; content:!”|0a|”; distance:0;)

 

PASS라는 단어를 찾은 뒤 PASS가 탐지 된 offset 부터 50바이트의 데이터가 존재하는 지 살핀다.

그 후 PASS가 탐지 된 끝 시점부터 50바이트 내에 0a가 존재하지 않는지를 검사한다.

 

고 적혀있다..

 

하지만 테스트 결과 메뉴얼의 내용이 수정되어야 함을 알수 있다.

 

alert tcp any any -> any any (content:”kmsjlove”; nocase; depth:8; isdataat:50, relative; content:”|0a|”; distance:0;)

 and i send to packet.

 룰은 위와 같은 형식으로 패킷을 날려보았다.

패킷은 아래와 같다.

1. 6b6d736a6c6f7665505050500a

 this didn’t alert.

 

 

2. 6b6d736a6c6f7665505050505050505050505050505050505050505050

505050505050505050505050505050505050505050505050500a50505050

 there is “|0a|” on offset 46 from first “|50|”

this did alert.

 

3. 6b6d736a6c6f7665505050505050505050505050505050505050505050

5050505050505050505050505050505050505050505050505050505050505050500a

 there is “|0a|” on offset 53 from first “|50|”

this did alert.

 

테스트 결과에서 알 수 있듯이 isdataat의 바이트 즉, 50은 within을 내포하지 않는다.

단지 50바이트가 존재하는 지 보는 것이다.

탐지 포인트는 움직이지 않는다.

 

Snort쪽에 문의한 결과 메뉴얼은 수정되어야 함을 알았다.

 

“there is not a newline character after the end of pass”로..

Advertisements

About this entry