독자적인 시그네처의 작성
IDS를 운용할 때 특정 호스트사이의 통신은 무시하고 싶은 경우가 있을 것이다. 이와 같은 경우, action에 pass 를 지정한 시그네처를 작성하면 편리하다.
예를 들어, 신뢰할 수 있는 네트워크(192.168.0.0/24)와 DNS서버(192.168.10.20) 간의 통신을 감시 대상으로부터 제외하고 싶은 경우에는 다음과 같은 시그네처를 작성하면 된다.
pass udp 192.168.0.0/24 any <> 192.168.10.20/32 53
이와 같이 하면, 감시 대상으로 할 필요가 없는 패킷을 무시하고, 오검출을 줄여 Snort의 부하를 경감할 수 있다.
반대로, 표준 시그네처로는 검출할 수 없는 패킷을 검출하고 싶은 경우도 있을 것이다. 예를 들어, FTP에서 songlist.txt라는 파일에 액세스하는 것을 검출하려면 다음과 같은 시그네처를 기술하면 된다.
alert tcp any any -> 192.168.0.100 21 (msg: “songlist.txt access”; content: “songlist.txt”;)
이와 같이 하여 작성한 독자적인 시그네처는 local.rules처럼 별도의 파일로 보관하는 것이 좋다. 또한 pass를 유효하게 하려면, Snort를 -o 옵션을 지정하여 기동시킬 필요가 있다.
Preprocessor의 사용
프리프로세서는 시그네처로는 검출할 수 없는 공격의 검출이나 패턴 매칭의 전처리 등을 실시하기 위한 플러그인이다. Snort.conf에 다음과 같은 행을 추가하면 지정한 프리프로세서를 사용할 수 있다.
preprocessor <프리프로세서명>: <옵션>
프리프로세서는 개발중인 것을 포함하여 다수의 종류가 있으므로, 자주 사용되는 것만 해설한다. 이 외의 프리프로세서나 옵션에 대한 상세한 내용은 snort.conf의 주석 부분이나 Snort홈페이지를 참고하라.
·frag2
단편화(fragment)되어 있는 IP패킷을 재구축한다(표5). IP패킷이 고의로 단편화되어 있는 경우, 원래 1개의 패킷에 포함되어 있는 공격 문자열이 분할되어 있기 때문에 단순 패턴 매칭에서는 IDS의 검출을 회피하게 된다. 이에 대응하기 위한 프리프로세서이다.
preprocessor frag2: [memcap<바이트>], [timeout<초>], [min_ttl<정수값>], [detect_state_problems], [ttl_limit<정수값>]
flag2옵션 |
의미 |
timeout <초> |
다음 단편화 패킷을 기다리는 시간 |
memcap <바이트> |
Frag2가 사용하는 메모리 용량 |
detect_state_problem |
패킷의 오버랩 등의 alert를 생성 |
min_ttl <수치> |
Frag2가 받을 수 있는 TTL의 최소값 |
ttl_limit <수치> |
TTL의 차이가 지정한 값을 초과한 경우에 alert를 생성 |
표5 frag2프리프로세서는 단편화되어 있는 IP패킷을 재구축할 수 있다.
·stream4
TCP스트림의 재구축이나 TCP stateful inspection을 해석한다(표6). 또한 이 프리프로세서를 유효로 하면, 스텔스 스캔을 검출할 수 있다.
preprocessor stream4: [noinspect], [keepstats], [timeout<초>], [memcap<바이트>], [detect_scans], [detect_state_problems], [disable_evasion_alerts], [ttl_limit<정수값>]
Snort 기동시에 -z 옵션을 지정하면 stick이나 snot와 같은 툴이 송신한 패킷을 무시하게 된다. 실제로는 커넥션이 확립되어 있지 않은 TCP패킷을 무시하게 되지만, stick이나 snot는 TCP 커넥션을 확립하지 않고 IDS가 반응할만한 패킷만 송신하기 때문에 이런 툴이 생성한 패킷은 기록되지 않는다. 다만 이것은 TCP만 유효하므로, UDP나 ICMP에 관해서는 거짓 이벤트가 기록된다.
snot은 IDS가 검출할만한 패킷을 대량으로 송신하는 툴이다. 대량의 이벤트 중에 실제 공격을 포함시켜, 어떤 이벤트가 실제 공격인지 어렵게 한다. IDS에 따라서는 패킷 블록킹을 발생시키기도 한다.
stream4옵션 |
의미 |
noinspect |
Stateful inspection 을 해석하지 않음 |
keepstats [machine | binary] |
세션 정보를 기록 |
timeout <초> |
세션 타임 아웃 |
memcap <바이트> |
stream4가 사용하는 메모리 용량 |
detect_scans |
스탤스 포트 스캔을 검출 |
detect_state_problem |
이상한 TCP패킷을 검출 |
disable_evasion_alerts |
TCP 오버랩과 같은 alert를 생성하지 않음 |
ttl_limit <수치> |
TTL의 차이가 지정한 값을 초과한 경우에 alert를 생성 |
표6 stream4프리프로세서는 TCP스트림을 재구축하거나, TCP stateful inspection을 해석한다.
·stream4_reassemble
stream4프리프로세서에서 재구축하는 TCP스트림의 방향과 포트 번호를 지정한다(표7).
preprocessor stream4_reassemble: [clientonly], [serveronly], [both], [noalerts], [ports <포트번호>]
stream4_reasemble옵션 |
의미 |
clientonly |
클라이언트의 트래픽만 재구축 |
serveronly |
서버의 트래픽만 재구축 |
both |
양쪽 트래픽을 재구축 |
noalerts |
스트림 재구축시에 alert를 생성하지 않음 |
ports <포트번호> |
재구축할 포트를 지정 |
표7 stream4_reassemble에는 stream4에서 재구축하는 TCP 스트림의 방향과 포트 번호는 지정한다.
·http_decode
HTTP의 URI문자열에 %20과 같은 16진수 표기나 Unicode인코딩된 문자를 ASCII코드로 변환하거나, 디렉터리 구분 문자인 “\”를 “/”로 변환하여, IIS나 Apache와 동일하게 해석한다(표8).
preprocessor http_decode: <포트번호> [unicode] [iis_alt_unicode] [double_encode] [iis_flip_slash] [full_whitespace]
http_decode옵션 |
의미 |
unicode |
Unicode를 ASCII로 치환 |
iis_alt_unicode |
%u로 시작하는 unicode를 ASCII로 치환 |
double_encode |
이중 인코딩 가능성을 alert함 |
iis_flip_slash |
“\”를 “/”로 치환 |
full_whitespace |
탭 코드를 공백으로 치환 |
표8 http_decode는 HTTP의 URI문자열을 치환하여 IIS나 Apache와 동일한 해석을 실행할 수 있다.
·portscan2
포트 스캔을 검출하기 위한 프리프로세서이다(표9). Nmap과 같은 고속의 스캔을 검출할 수 있다.
preprocessor portscan2: [scanners_max <정수값>], [targets_max <정수값>], [target_limit <정수값>], [port_limit <정수값>], [timeout <초>]
또한 portscan2를 유효하게 하려면 conversation프리프로세서를 유효하게 할 필요가 있다.
portscan2옵션 |
의미 |
scanners_max <수치> |
동시에 처리할 수 있는 스캔 소스의 최대수 |
targets_max <수치> |
동시에 처리할 수 있는 스캔 대상의 최대수 |
target_limit <수치> |
스캔이라고 판단할 호스트수의 한계 값 |
port_limit <수치> |
스캔이라고 판단할 포트수의 한계 값 |
timeout <초> |
스캔의 타임 아웃 |
portscan2-ignorehosts
포트 스캔을 검출하고 싶지 않은 호스트나 IP주소를 기술한다. 단시간에 대량의 액세스가 행해질 가능성이 있는 서버(NTP, DNS, FTP 등)는 오검출이 발생할 가능성이 있으므로, 필요하다면 지정해서 무시하도록 한다. 복수의 IP주소를 지정할 때에는 공백을 두고 열거한다.
preprocessor portscan-ignorehosts2: <호스트 목록>
출처 : http://blog.naver.com/misman95?Redirect=Log&logNo=80041668574
'Security > Snort' 카테고리의 다른 글
Snort를 이용한 DOS 형태의 공격 탐지 (0) | 2014.03.31 |
---|---|
Snort 시그네처의 구조 (0) | 2014.03.19 |
Snort 의 Stream4 (TCP) Integer Overflow 취약점 (0) | 2014.03.19 |
snort HTTP 관련 매칭 옵션 (http_uri, http_client_body, http_header, etc..) (0) | 2014.03.18 |
Snort 3.0 Alpha and IPv6 - Friday, April 06, 2007 (0) | 2014.02.25 |
댓글