[스노트-snort] snort HTTP 관련 매칭 옵션 (http_uri, http_client_body, http_header, etc..)
IT 생활/IPS & Snort 2012. 1. 27. 09:35스노트는 HTTP 패킷에 대해..
패킷 전체가 아닌 특정 필드값에서 패턴을 찾는 작업을 지원한다.
이는 오탐을 줄이는 동시에 성능을 향상시켜주는 효과가 있다.
스노트 사용에 어느정도 자신감이 생겼다면..
이 옵션을 사용하는 것을 강력히 추천한다.
기본적인 사용법은 메뉴얼을 보면 되겠지만
HTTP 패킷을 분석하는 일에 친숙하지 않은 사람들을 위해..
각 옵션들이 가리키는 필드에 대해 자세하게 알아보도록 하자.
먼저, HTTP관련 매칭 옵션들은 크게 다음 7가지가 있다.
이 옵션들은 'content'라는 패턴 매칭 옵션과 함께 사용해야 한다.
1. http_method
-HTTP 패킷의 method값을 저장하고 있다.
그러므로, 다른 옵션들과 비교해서 패킷의 가장 앞 부분을 가리킨다.
2. http_uri (http_raw_uri)
-HTTP 패킷의 uri값을 저장하고 있다.
'uricontent'옵션을 사용하는 것과 동일하다.
'raw'는 normalized(디코딩, 정규화)한 값과 하지 않은 값의 차이이다.
(당연히 'raw'가 붙은것이 하지 않은 값이다.)
참고로, 'http_uri'와 'rawbytes'옵션을 함께 사용하면 'http_raw_uri'와 동일하다고 생각하기 쉽지만..
이런 조합은 허용되지 않는다.
content + http_uri = uricontent (O)
content + http_uri + rawbytes ≠ http_raw_uri (X)
uricontent + rawbytes ≠ http_raw_uri (X)
3. http_header (http_raw_header)
- HTTP 패킷의 header값을 저장하고 있다.
request와 response에 모두 사용하는 옵션이다.
'raw'의 의미는 'http_raw_uri'와 동일하다.
4. http_cookie (http_raw_cookie)
- HTTP 패킷의 cookie값을 저장하고 있다.
'raw'의 의미는 'http_raw_uri'와 동일하다.
5. http_client_body
- HTTP 패킷의 body값을 저장하고 있다.
참고로, GET패킷에는 body가 없다.
아래 예제에서 POST패킷에만 HTTP body를 가리키는 색이 칠해져 있는 이유이다.
※ 사용전 확인사항
snort.conf 파일에
'post_depth 0'을 반드시 지정해 주어야한다. (0은 body전체를 extract한다는 의미)
default 값이 -1인데 이는 body를 extract하지 않는 다는 의미이기 때문이다.
참고로, 이 값은 이전 버전의 snort와는 다를 수 있다.
6. http_stat_code
- HTTP response의 status code 필드 값을 저장하고 있다.
※사용전 확인사항
snort.conf 파일에
'extended_response_inspection'을 반드시 지정해 주어야한다
- HTTP response의 status message 필드값을 저장하고 있다.
기본적인 설정 및 사용법은 'http_stat_code'와 동일하다.
실제 패킷 예제를 통해 확실히 이해하자!
위에서 설명한 각 옵션들이 저장하고 있는 필드값을 각각에 맞는 색상으로 표시해 두었다.
1. client request 패킷 (GET)
2. Client Request 패킷 (POST)
0000 50 4f 53 54 20 2f 65 6e 67 69 6e 65 5f 70 72 6f POST /engine_pro
0010 63 6f 6e 2e 6a 73 70 3f 70 72 6f 6d 6f 74 69 6f con.jsp?promotio
0020 6e 33 20 48 54 54 50 2f 31 2e 31 0d 0a 52 65 66 n3 HTTP/1.1..Ref
0030 65 72 65 72 3a 20 2f 65 6e 67 69 6e 65 5f 70 72 erer: /engine_pr
0040 6f 63 6f 6e 2e 6a 73 70 3f 70 72 6f 6d 6f 74 69 ocon.jsp?promoti
0050 6f 6e 33 0d 0a 41 63 63 65 70 74 3a 20 74 65 78 on3..Accept: tex
0060 74 2f 2a 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 t/*..Content-Typ
0070 65 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 e: application/x
0080 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e 63 -www-form-urlenc
0090 6f 64 65 64 0d 0a 55 73 65 72 2d 41 67 65 6e 74 oded..User-Agent
00a0 3a 20 4d 65 6c 4f 6e 20 50 6c 61 79 65 72 20 56 : MelOn Player V
00b0 33 2e 30 0d 0a 48 6f 73 74 3a 20 61 70 70 73 76 3.0..Host: appsv
00c0 72 2e 6d 65 6c 6f 6e 2e 63 6f 6d 0d 0a 43 6f 6e r.melon.com..Con
00d0 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 33 32 0d tent-Length: 32.
00e0 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-Control:
00f0 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6f 6b 69 65 no-cache..Cookie
0100 3a 20 57 4d 4f 4e 49 44 3d 56 32 64 2d 67 7a 36 : WMONID=V2d-gz6
0110 4e 31 47 2d 3b 20 4a 53 45 53 53 49 4f 4e 49 44 N1G-; JSESSIONID
0120 3d 4d 47 71 51 50 37 7a 30 70 34 79 33 35 59 78 =MGqQP7z0p4y35Yx
0130 4e 32 7a 4a 59 63 56 64 71 6b 59 37 4e 33 34 6e N2zJYcVdqkY7N34n
0140 38 6e 54 76 59 36 34 58 4c 4a 53 54 47 58 76 58 8nTvY64XLJSTGXvX
0150 71 79 7a 78 4b 21 34 30 39 33 32 32 33 32 34 3b qyzxK!409322324;
0160 20 58 54 56 49 44 3d 31 30 30 37 32 31 31 37 30 XTVID=100721170
0170 34 31 36 35 35 39 37 39 34 33 39 3b 20 58 54 4c 41655979439; XTL
0180 49 44 3d 31 36 37 33 34 31 33 30 0d 0a 0d 0a 74 ID=16734130....t
0190 72 65 65 70 6f 6c 65 0b 31 36 37 33 34 31 33 30 reepole.16734130
01a0 2a 31 32 37 39 36 39 39 34 35 36 35 35 36 0b *1279699456556.
3. Server Response 패킷
※주의할 점은 header의 시작 지점이 status 메시지 직후에 오는 hex값 '0d 0a'를 포함한다는 것이다.
offset, depth와 같은 옵션을 함께 사용할꺼라면 반드시 기억해야 한다.
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
0010 0a 44 61 74 65 3a 20 57 65 64 2c 20 32 31 20 4a .Date: Wed, 21 J
0020 75 6c 20 32 30 31 30 20 30 38 3a 30 33 3a 35 33 ul 2010 08:03:53
0030 20 47 4d 54 0d 0a 53 65 72 76 65 72 3a 20 41 70 GMT..Server: Ap
0040 61 63 68 65 0d 0a 4c 61 73 74 2d 4d 6f 64 69 66 ache..Last-Modif
0050 69 65 64 3a 20 4d 6f 6e 2c 20 31 39 20 4a 75 6c ied: Mon, 19 Jul
0060 20 32 30 31 30 20 31 31 3a 33 33 3a 32 35 20 47 2010 11:33:25 G
0070 4d 54 0d 0a 45 54 61 67 3a 20 22 31 34 38 61 63 MT..ETag: "148ac
0080 30 2d 64 32 2d 34 38 62 62 62 65 66 63 61 34 62 0-d2-48bbbefca4b
0090 34 30 22 0d 0a 41 63 63 65 70 74 2d 52 61 6e 67 40"..Accept-Rang
00a0 65 73 3a 20 62 79 74 65 73 0d 0a 43 6f 6e 74 65 es: bytes..Conte
00b0 6e 74 2d 4c 65 6e 67 74 68 3a 20 32 31 30 0d 0a nt-Length: 210..
00c0 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 Content-Type: te
00d0 78 74 2f 70 6c 61 69 6e 0d 0a 0d 0a xt/plain....
'IT 생활 > IPS & Snort' 카테고리의 다른 글
스노트(Snort)를 위협하는 IPS시장의 신 강자 수리카타(Suricata) (0) | 2012.10.23 |
---|---|
[스노트-Snort] 시그니처 content 옵션 이해하기 (43) | 2012.08.22 |
[스노트-snort] HTTP Inspection 전처리기의 모든 것 (0) | 2012.08.16 |
[스노트-snort] byte 관련 옵션 (byte_test, byte_jump, byte_extract) (3) | 2011.11.04 |
[스노트-snort] snort-2.9.1 이후 버전 설치 (12) | 2011.11.04 |