-패킷은 탐지 엔진까지 가기 전에 전처리기를 거친다.
-전처리기는 패킷이 탐지 엔진에 도달하기 전에 패킷에 대한 경고하거나 수정하거나 버리기 위하여 사용한다.
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 | |||||||||
옵션 |
설명 | ||||||||
방향 |
| ||||||||
noalerts |
재조합 과정에서 발생하는 비정상적인 행위에 대한 경고를 발생시키지 않는다. | ||||||||
ports |
패킷재조합을 수행할 포트를 정의한다.
|
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 프로토콜 목록을 정의한다.
| ||||||||||
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 |