본문 바로가기
  • AI (Artificial Intelligence)
Security/Snort

Snort 시그네처 작성과 Preprocessor

by 로샤스 2014. 3. 19.

독자적인 시그네처의 작성

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

 

 

 

 

 

댓글