본문 바로가기
툴/Snort

Snort 전처리기

by ITPro 2010. 11. 30.

-패킷은 탐지 엔진까지 가기 전에 전처리기를 거친다.

-전처리기는 패킷이 탐지 엔진에 도달하기 전에 패킷에 대한 경고하거나 수정하거나 버리기 위하여 사용한다.


frag2 전처리기

-수많은 패킷이 분할되어 전송 되는 경우, 분할된 패킷을 재조합하는데 상당한 메모리와 자원이 필요하고, IDS 서버가 많은 부하를 받고 있다면 일부 패킷을 캡처하지 못 할 수 있기 때문에 IDS 서버의 성능이 떨어지게 된다.

※단 하나의 분할 패킷이라도 캡처하지 못한다면 IDS는 서명 비교를 제대로 할 수 없다.

-따라서, Snort는 frag2 전처리기를 사용하여 분할된 패킷이 탐지 엔진에 도달하기 전에 재조합하여 Snort가 서명비교를 개별 패킷이 아닌 전체 세션에 적용할 수 있도록 한다.

또한, frag2 전처리기는 분할 패킷이 임계 치에 도달할 경우 경고를 발생시킨다.


frag2 전처리기 옵션

-frag2 전처리기 옵션을 주기위해서는 snort.conf 파일에 해당 옵션을 추가하면 된다.

preprocessor frag2: 옵션1, 옵션2 ...

ex:) preprocessor frag2: timeout 60, memcap 4194304

옵션

기본

설명

timeout

30초

특정 시간동안 분할 패킷을 받지 않았을 경우에 분할패킷 조합을 하지 않도록 한다.

(권장 값 : 60~90초)

memcap

4194304

패킷을 재조합하기 위해 사용하는 메모리의 크기를 제한한다.

min_ttl

 

재조합할 패킷의 최소 TTL 값을 설정한다.

ttl_limit

 

한 세션에 속한 패킷 사이에서 허용할 수 있는 최대 TTL 차이를 설정한다.

(권장 값 : 10)

detect_stateproblems

 

분할 패킷 재조합 과정에서의 비정상적인 상황에 대해 경고를 발생시킨다.


stream4 전처리기

-stream4 전처리기는 상태 유지 기능을 추가함으로써, stick 프로그램에 의해 생긴 문제를 피할 수 있으며, 좀 더 나은 서명-비교 기능을 제공할 수 있고 NMAP에서 사용하는 운영체제 핑거프린팅과 스캔을 구분할 수 있다. 그리고 NMAP의 스텔스 FIN스캔과 같은 순서 불일치 스캔 기법을 탐지할 수 있다.

※stick란? stick는 Snort의 모든 서명 파일을 입력으로 받아서 IDS의 경고를 수많이 발생시키는 패킷을 전송하여 IDS의 자원을 모두 소비시키는 프로그램.


stream4전처리기 동작 과정

과정

설명

내부 테이블 생성

stream4 전처리기를 사용할 경우 Snort는 초기 세션 연결 과정(3way-handshake)동안 세션 정보를 저장할 내부 테이블을 생성한다.

패킷 검사

Snort는 패킷 흐름을 모니터링하고, 패킷 검사시 단순히 패킷을 서명과 비교하는 것이 아닌 현재 패킷이 기존에 맺어진 세션의 일부인지 검사한다.

(따라서 Snort는 stick 프로그램의 공격을 막을 수 있다.)

경고 발생

마지막으로 Snort는 연결이 성립된 세션의 공격에 한해서 경고를 발생시킨다.


stream4 전처리기 옵션

-stream4전처리기 옵션을 주기위해서는 snort.conf 파일에 해당 옵션을 추가하면 된다.

preprocessor stream4: 옵션1, 옵션2 ...

ex:) preprocessor stream4:detect_scans, ttl_limit 10

옵션

기본

설명

detect_scans

꺼짐

스텔스 스캔에 대한 경고를 발생시킨다.

detect_state_problems

꺼짐

TCP 상태매커니즘의 비정상적인 상황이나 남용을 검사한다. 이 옵션은 대량의 노이즈를 발생시키기 때문에 주의해서 사용해야한다.

disable_evasion_alerts

꺼짐

IDS 회피 공격 경고를 해제한다.

ttl_limit

 

한 세션에 속한 패킷 사이에서 허용 가능한 최대 TTL 차이를 설정한다.

(권장 값 : 10)

keepstats

꺼짐

각 세션에 대한 통게를 유지한다.

(옵션 값 : machine(텍스트), binary(2진))

noinspect

꺼짐

stream4_reassemble의 포트 옵션에 나열된 포트를 제외한 모든 포트에서 상태 유지 검사를 비활성화한다.

timeout

30초

세션을 중단하기 전까지 기다릴 시간을 설정한다.

log_flushed_streams

꺼짐

스트림의 여러 패킷으로부터 구성한 패킷이 경고를 발생시킬 경우에 그 패킷을 로그로 저장하도록 한다.

memcap

8388608

상태 유지와 세션 재조합을 위해 사용할 최대 메모리 크기를 Byte 단위로 설정한다.

preprocessor stream4_reassemble: 방향 [noalerts] ports 포트번호

ex:) preprocessor stream4_reassemble: both ports 21 23 25 80

옵션

설명

방향

설명

clientonly

HOME_NET으로 향하는 트래픽

serveronly

HOME_NET으로부터 오는 트래픽

both

모두

noalerts

재조합 과정에서 발생하는 비정상적인 행위에 대한 경고를 발생시키지 않는다.

ports

패킷재조합을 수행할 포트를 정의한다.

설명

숫자

포트 번호를 띄어쓰기로 구분하여 정의

default

21 23 25 53 80 143 110 111 513

all

모든 포트



portscan 전처리기

-Snort는 2개의 portscan 전처리기를 가지고 있으며 두 전처리기의 동작방식은 차이가 있다.

기능

portscan

portscan2

스캔 탐지

특정 시간동안 단일 서버의 여러 포트에 접속하는 것을 감시한다.

portscan의 탐지기법과 기본 동작은 동일하나 stream4와 유사한 방법으로 연결을 추적하는 플러그인이 추가되어 있다.

정보 제공

보통

많음

스텔스 스캔 탐지

보통

고성능

임계값 설정

X

O

※포트 스캔이 아주 느린 속도로 진행된다면 스캔 패킷과 정상 패킷을 구분하기 힘들기 때문에 포트 스캔을 제대로 탐지해내지 못 한다.


-로그 파일 : Portscan.log 파일과 Scan.log 파일이 존재하며 Scan.log 파일이 더 많은 정보를 담고 있다.

※portscan 전처리기는 snort로만 경고를 전송하기 때문에, 로그를 데이터베이스로 저장하도록 설정했다면 아무런 정보도 쌓이지 않는다.


-portscan 전처리기 옵션

preprocessor portscan: 네트워크 탐지개수 시간 로그파일

ex:) preprocessor portscan: 192.168.1.0/24 10 60 /var/log/snort/portscan.log

옵션

설명

네트워크

모니터링을 하고자하는 대상 네트워크 주소다.

탐지개수

경고를 발생시킬 패킷 개수 임계치다.

시간

경고를 발생시킬 시간 임계치다.

로그파일

로그 파일의 경로를 지정한다.


-portscan2 전처리기 옵션

preprocessor portscan2: 옵션1, 옵션2 ...

ex:) preprocessor portscan2: targets_max 2000, scanners_max 2000

옵션

기본

설명

targets_max

1000

관리할 최대 목적지 호스트의 수를 정의한다.

scanners_max

1000

관리할 최대 출발지 호스트의 수를 정의한다.

target_limit

5

목적지 호스트의 임계값을 정의한다. 특정 호스트가 설정 값만큼의 호스트로 검사 패킷을 보낼 경우 경고를 발생시킨다.

port_limit

20

포트의 임계값을 정의한다.

timeout

60

스캔 정보 데이터를 유지할 시간을 정의한다.

log

/scan.log

로그 파일의 경로를 지정한다.


기타 전처리기

전처리기

설명

rpc_decode

HTTP 디코더와 유사한, RPC 디코더

telnet_decode

Telnet, FTP 디코더

conversation

프로토콜의 기본 통신 절차를 분석 (portscan2 전처리기에서 사용)

Back Orifice detector

Back Orifice 네트워크 트래픽을 디코딩

arpspoof

ARP 오용 탐지 코드

asn1_decode

ASN1 탐지 코드

fnord

다형성 쉘코드 분석기와 탐지기


-rpc_decode 전처리기 옵션

preprocessor rpc_decode: 포트번호 옵션1 옵션 2 .. ..

ex:) preprocessor rpc_decode: 111 32771 alert_fragments

옵션

설명

alert_fragments

여러 조각으로 분할된 RPC 메시지에 대해 경고를 발생시킨다.

no_alert_multiple_requests

단일 패킷에 하나 이상의 RPC 쿼리가 들어있을 때 경고를 발생시키지 않는다.

no_alert_large_fragments

RPC 조각이 정수 오버플로우를 불러 일으켜서 매우 큰 조각인 것처럼 보일 때 경고를 발생시키지 않는다.

no_alert_incomplete

단일 RPC 메시지가 그 메시지를 포함하고 있는 패킷보다 클 때 경고를 발생시키지 않는다.


-conversation 전처리기 옵션

preprocessor conversation: 옵션1, 옵션2 ...

ex:) preprocessor conversation: timeout 120, max_conversations 65335

옵션

기본

설명

timeout

120

정보를 유지하고 있는 시간을 정의한다.

max_conversations

65335

특정 시점에서 관리할 수 있는 최대 연결의 수를 의미한다.

allowed_ip_protocols

all

허용된 IP 프로토콜 목록을 정의한다.

설명

6

TCP

17

UDP

1

ICMP

all

모든 프로토콜

allowed_odd_protocols

꺼짐

allowed_ip_protocols에 설정되지 않은 프로토콜을 발견할 경우에 경고를 발생시킬지 여부를 결정한다.


-http_decode 전처리기 옵션

preprocessor http_decode: 포트번호 옵션1 옵션 2 .. ..

ex:) preprocessor http_decode: 80 8080 unicode iis_alt_unicode

옵션

설명

unicode

unicode를 정규화해 일반 ASCII 코드로 바꾸도록 한다.

iis_alt_unicode

IIS의 대체 Unicode 표현식을 처리하도록 한다.

double_encode

% 기호가 들어간 URL을 처리하도록 한다. (최신 버전의 IIS를 사용하는 경우 활성화하지 않아도 된다. MS01-44)

iis_flip_slash

정규화과정에서 \s를 /s로 변환한다.

full_whitespace

탭 문자를 일반 공백문자로 변환한다. (Apache 서버가 있는 경우 활성화한다.)

abort_invalid_hex

잘못된 16진수 문자를 찾았을 경우 정규화 과정을 중단하도록한다.

drop_url_param

URL 문자로부터 인자를 버리도록 한다.

internal_alerts

정규화 과정에서 이상한 현상을 발견했을 경우 경고를 발생시킨다.


-BackOrifice 전처리기

preprocessor bo: 옵션

ex:) preprocessor bo : -nobrute

옵션

설명

-nobrute

더 이상 사용되지 않고 아무런 의미를 가지지 않는다.



반응형

' > Snort' 카테고리의 다른 글

Snort 규칙  (1) 2010.11.30
Snort 규칙 생성기 동작 과정  (0) 2010.11.30
Snort 패킷 디코딩 과정  (0) 2010.11.30
Snort.conf 설정 (/etc/snort/snort.conf)  (0) 2010.11.30
Snort 시스템 보호  (0) 2010.11.30

바로가기