본문 바로가기
IT/Snort

[Snort] #5 Payload Option - offset & Rule test

by 초록술 2023. 8. 10.
반응형

offset:<number>;

offset 옵션은 Snort 규칙에서 중요한 역할을 수행하는 옵션 중 하나입니다. offset 을 사용하면 패턴 검색의 시작 위치를 지정할 수 있습니다.  offset 은 content modifier 이므로 offset 키워드를 지정하기 전에 content 키워드가 있어야 합니다. offset 뒤에 정의된 숫자만큼의 bytes 건너뛰고 content 를 탐지합니다. 이렇게 범위를 지정함으로써 snort rule의 오탐을 줄이고, 엔진의 성능을 향상할 수 있습니다.

 

※ 테스트를 진행하기 위해 아래의 Snort 및 websnort 설치 방법을 참고 부탁드립니다.

[Kali Linux] Kali(Debian)에 Snort 설치 방법

 

[Kali Linux] Kali(Debian)에 Snort 설치 방법

Snort 설치 및 구동 방법 - Kali Linux (Debian) 제가 운영 중인 Kali Linux(Debian) VM에 snort 테스트를 하기 위해 snort 설치를 진행하였습니다. Snort는 Network 보안에서 IPS, IDS의 중요한 부분을 차지하고 있습니

greensul.tistory.com

 

offset snort rule Test

offset 테스트를 위한 패킷을 준비합니다.

websnort 를 구동 후 접속 시 아래와 같은 트래픽이 생성됨을 확인하였습니다.

이번에 만들 Rule은 content:"HTTP/1.1"; 와 modifier로 offset 을 사용해 보겠습니다.

wireshark snort rule 탐지 테스트용 패킷
wireshark snort rule 탐지 테스트용 패킷

테스트를 위해 위 HTTP GET 패킷을 저장합니다.

http get 패킷 저장
http get 패킷 저장

 

※ 위에서 저장한 테스트용 샘플 패킷을 아래 첨부합니다.

websnort_http_get.pcap
0.00MB

 

이 패킷에서 Payload 의 시작점은 파란색 음영부터입니다.

그중 "HTTP/1.1"의 Hex 값은 48 54 54 50 2f 31 2e 31 입니다.

이는 Payload 시작 위치에서 6 bytes 떨어진 위치에 있습니다.

47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 31 30 2e 30....

HTTP/1.1 패킷
HTTP/1.1 패킷

offset 테스트를 위해 다음 snort rule 을 만들어 보겠습니다.

alert tcp any any -> any 8080 (msg:"offset-0"; content:"HTTP/1.1"; offset:0; sid:10000001;)
alert tcp any any -> any 8080 (msg:"offset-5"; content:"HTTP/1.1"; offset:5; sid:10000002;)
alert tcp any any -> any 8080 (msg:"offset-6"; content:"HTTP/1.1"; offset:6; sid:10000003;)
alert tcp any any -> any 8080 (msg:"offset-7"; content:"HTTP/1.1"; offset:7; sid:10000004;)

/etc/snort/rules/local.rules에 snort rule 작성
/etc/snort/rules/local.rules에 snort rule 작성

websnort 를 구동하고 다운로드한 pcap 을 첨부합니다. 

websnort 구동

submit 버튼을 클릭하면 탐지 결과가 나옵니다.

snort rule offset 탐지 테스트 결과
snort rule offset 탐지 테스트 결과

 

참고) Payload Hex 값

|47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 31 30 2e 30....|

 

다시 한번 더 Payload를 확인해 보면"HTTP/1.1" (Hex : 48 54 54 50 2f 31 2e 31)는 Payload 의 시작점에서 6 bytes 떨어진 위치에 존재합니다. 

sid snort rule content의 탐지를 시작할 위치 결과
10000001 content:"HTTP/1.1"; offset:0; |47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31...|
GET\x20/\x20HTTP 1.1
탐지
10000002 content:"HTTP/1.1"; offset:5; |47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31...|
GET\x20/\x20HTTP 1.1
탐지
10000003 content:"HTTP/1.1"; offset:6; |47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31...|
GET\x20/\x20HTTP 1.1
탐지
10000004 content:"HTTP/1.1"; offset:7; |47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31...|
GET\x20/\x20HTTP 1.1
미탐

offset:7; 은 payload 시작 위치에서 7 byte 패턴을 찾게 되기 때문입니다.

따라서 아래 이미지와 같이 TTP 부터 매칭을 시작하기 때문에 탐지되지 않음을 확인할 수 있습니다.

snort rule payload offset:7; 위치
snort rule payload offset:7; 위치

 

반응형

댓글