offset:<number>;
offset 옵션은 Snort 규칙에서 중요한 역할을 수행하는 옵션 중 하나입니다. offset 을 사용하면 패턴 검색의 시작 위치를 지정할 수 있습니다. offset 은 content modifier 이므로 offset 키워드를 지정하기 전에 content 키워드가 있어야 합니다. offset 뒤에 정의된 숫자만큼의 bytes 건너뛰고 content 를 탐지합니다. 이렇게 범위를 지정함으로써 snort rule의 오탐을 줄이고, 엔진의 성능을 향상할 수 있습니다.
※ 테스트를 진행하기 위해 아래의 Snort 및 websnort 설치 방법을 참고 부탁드립니다.
[Kali Linux] Kali(Debian)에 Snort 설치 방법
offset snort rule Test
offset 테스트를 위한 패킷을 준비합니다.
websnort 를 구동 후 접속 시 아래와 같은 트래픽이 생성됨을 확인하였습니다.
이번에 만들 Rule은 content:"HTTP/1.1"; 와 modifier로 offset 을 사용해 보겠습니다.
테스트를 위해 위 HTTP GET 패킷을 저장합니다.
※ 위에서 저장한 테스트용 샘플 패킷을 아래 첨부합니다.
이 패킷에서 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.... |
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;)
websnort 를 구동하고 다운로드한 pcap 을 첨부합니다.
submit 버튼을 클릭하면 탐지 결과가 나옵니다.
참고) 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 부터 매칭을 시작하기 때문에 탐지되지 않음을 확인할 수 있습니다.
'IT > Snort' 카테고리의 다른 글
[Snort] #6 Payload Option - offset, depth & Rule test (2) | 2023.08.11 |
---|---|
Colasoft Packet Builder - Windows용 패킷 전송툴(snort rule 검증) (1) | 2023.07.28 |
[Snort] #4 Payload Option - content, nocase / rule test (0) | 2023.07.27 |
[Snort] #3 Payload Option - Snort Rule OTN (0) | 2023.07.19 |
[Kali Linux] Kali(Debian)에 Snort 설치 방법 (8) | 2023.07.17 |
댓글