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 을 사용해 보겠습니다.
테스트를 위해 위 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 |
댓글