시작하면서..

스노트는 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와는 다를 수 있다. 

preprocessor http_inspect_server: server default \
    profile all ports { 80 8080 8180 } \
    post_depth 0 



6.
http_stat_code
- HTTP response의 status code 필드 값을  저장하고 있다.
코드 값에 대한 내용은 이 사이트를 참고하세요. 

※사용전 확인사항 
snort.conf 파일에
'extended_response_inspection'을 반드시 지정해 주어야한다 

preprocessor http_inspect_server: server default \
    profile all ports { 80 8080 8180 } \
    extended_response_inspection 


7. http_stat_msg
- HTTP response의 status message 필드값을  저장하고 있다. 
기본적인 설정 및 사용법은 'http_stat_code'와 동일하다. 


실제 패킷 예제를 통해 확실히 이해하자!
위에서 설명한 각 옵션들이 저장하고 있는 필드값을 각각에 맞는 색상으로 표시해 두었다. 


1. client request 패킷 (GET)

0000   47 45 54 20 2f 63 63 3f 61 3d 74 6f 70 2e 6c 6f  GET /cc?a=top.lo
0010   67 6f 26 72 3d 26 69 3d 37 38 30 30 30 43 30 31  go&r=&i=78000C01
0020   5f 30 30 30 30 30 30 30 37 32 31 46 37 26 6e 73  _0000000721F7&ns
0030   63 3d 6e 61 76 65 72 74 6f 70 2e 76 33 26 77 3d  c=navertop.v3&w=
0040   31 31 31 37 26 70 78 3d 33 32 38 26 70 79 3d 39  1117&px=328&py=9
0050   38 26 73 78 3d 33 32 38 26 73 79 3d 39 38 26 6d  8&sx=328&sy=98&m
0060   3d 31 26 75 3d 68 74 74 70 25 33 41 25 32 46 25  =1&u=http%3A%2F%
0070   32 46 77 77 77 2e 6e 61 76 65 72 2e 63 6f 6d 25  2Fwww.naver.com%
0080   32 46 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73  2F HTTP/1.1..Hos
0090   74 3a 20 63 63 2e 6e 61 76 65 72 2e 63 6f 6d 0d  t: cc.naver.com.
00a0   0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65  .Connection: kee
00b0   70 2d 61 6c 69 76 65 0d 0a 55 73 65 72 2d 41 67  p-alive..User-Ag
00c0   65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30  ent: Mozilla/5.0
00d0   20 28 57 69 6e 64 6f 77 73 20 4e 54 20 36 2e 31   (Windows NT 6.1
00e0   29 20 41 70 70 6c 65 57 65 62 4b 69 74 2f 35 33  ) AppleWebKit/53
00f0   35 2e 37 20 28 4b 48 54 4d 4c 2c 20 6c 69 6b 65  5.7 (KHTML, like
0100   20 47 65 63 6b 6f 29 20 43 68 72 6f 6d 65 2f 31   Gecko) Chrome/1
0110   36 2e 30 2e 39 31 32 2e 37 37 20 53 61 66 61 72  6.0.912.77 Safar
0120   69 2f 35 33 35 2e 37 0d 0a 41 63 63 65 70 74 3a  i/535.7..Accept:
0130   20 74 65 78 74 2f 68 74 6d 6c 2c 61 70 70 6c 69   text/html,appli
0140   63 61 74 69 6f 6e 2f 78 68 74 6d 6c 2b 78 6d 6c  cation/xhtml+xml
0150   2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 6d 6c  ,application/xml
0160   3b 71 3d 30 2e 39 2c 2a 2f 2a 3b 71 3d 30 2e 38  ;q=0.9,*/*;q=0.8
0170   0d 0a 52 65 66 65 72 65 72 3a 20 68 74 74 70 3a  ..Referer: http:
0180   2f 2f 77 77 77 2e 6e 61 76 65 72 2e 63 6f 6d 2f  //www.naver.com/
0190   0d 0a 41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e  ..Accept-Encodin
01a0   67 3a 20 67 7a 69 70 2c 64 65 66 6c 61 74 65 2c  g: gzip,deflate,
01b0   73 64 63 68 0d 0a 41 63 63 65 70 74 2d 4c 61 6e  sdch..Accept-Lan
01c0   67 75 61 67 65 3a 20 65 6e 2d 55 53 2c 65 6e 3b  guage: en-US,en;
01d0   71 3d 30 2e 38 0d 0a 41 63 63 65 70 74 2d 43 68  q=0.8..Accept-Ch
01e0   61 72 73 65 74 3a 20 49 53 4f 2d 38 38 35 39 2d  arset: ISO-8859-
01f0   31 2c 75 74 66 2d 38 3b 71 3d 30 2e 37 2c 2a 3b  1,utf-8;q=0.7,*;
0200   71 3d 30 2e 33 0d 0a 43 6f 6f 6b 69 65 3a 20 4e  q=0.3..Cookie: N
0210   42 3d 47 49 33 44 43 4e 52 57 47 4d 33 54 41 4e  B=GI3DCNRWGM3TAN
0220   5a 52 3b 20 4e 4e 42 3d 5a 49 45 35 41 4a 35 4b  ZR; NNB=ZIE5AJ5K
0230   55 56 4f 55 34 3b 20 6e 70 69 63 3d 22 37 4d 58  UVOU4; npic="7MX
0240   49 78 4b 75 71 49 52 77 37 4f 69 47 61 53 2f 39  IxKuqIRw7OiGaS/9
0250   37 6e 6a 53 37 52 33 39 31 55 42 43 4e 49 63 2b  7njS7R391UBCNIc+
0260   2f 67 42 71 68 31 47 63 32 48 68 58 73 66 4e 65  /gBqh1Gc2HhXsfNe
0270   42 63 78 35 54 67 45 66 63 71 36 71 6b 43 41 3d  Bcx5TgEfcq6qkCA=
0280   3d 22 3b 20 6e 73 72 5f 61 63 6c 3d 31 3b 20 44  ="; nsr_acl=1; D
0290   41 5f 48 43 3d 4c 5a 31 31 36 38 30 35 38 30 2c  A_HC=LZ11680580,
02a0   4c 41 0d 0a 0d 0a                                LA....




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....


Posted by KT한
,