{ Action }.{ Protocol }.{ S_IP (송신자 IP) }.{ S_Port }.{ ->, <> }.{ D_IP (목적지 IP) }.{ D_Port }.{ Options }
Action
alert : 룰에 일치하는 경우, 경고를 발생 시키며 로그를 기록한다.
log : 로그를 기록한다.
pass : 패킷을 무시한다.
drop : 패킷을 차단하고 로그로 남긴다.
reject : 패킷을 차단하고 로그를 남기지 않는다.
tcp 패킷 : rst(Reset TCP) 응답
udp 패킷 : icmp unreachable 패킷 응답
sdrop : 패킷을 차단하고 로그를 남기지 않는다.
Protocol
IP Address
any : 모두
논리부정연산 사용 가능 (!)
[] : 여러 IP 주소 지정 가능
Port Number
1:1024 = 1 ~ 1024
:1024 = 1024 port 이하
1024: = 1024 port 이상
!1:1024 = 1 ~ 1024 제외 나머지
Packet 방향
-> : outgoing
<- : 존재 X
<> : 양방향
Options
genaral : 룰에 대한 정보를 포함해 탐지
msg:"<Message Text>";
sid:<Snort Rules ID>;
payload : Protocaol의 내용으로 탐지
ex) content:"cgi-bin/phf"; offset:4; depth:20;
non-payload : 페이로드가 없는 데이터에서 사용
fragoffset : Fragment 오프셋 필드 값 비교
fragoffset:[!]<|>]<number>;
ttl : traceroute 명령어 탐지 키워드
ttl:[<,>,=,<=,>=]<number>; , ttl:[<number>]-[<number>];
fragbits : 단편화 패킷이나 IP Header 내 Flags 필드에 비트 설정 확인
fragbits:MD+;
flags : TCP Flag 비트 확인 시 사용 (U, A, P, R, S, F, 0)
U : URG (Urgent): 긴급한 데이터 전송을 요청할 때 사용.
A : ACK (Acknowledgment): 수신측이 데이터를 받았음을 확인하는 데 사용.
P : PSH (Push): 버퍼의 데이터를 즉시 수신측에게 전송하라는 의미로 사용.
R : RST (Reset): 연결을 강제로 종료하고 초기화할 때 사용.
S : SYN (Synchronize): 연결을 초기화하고 통신을 시작할 때 사용.
F : FIN (Finish): 연결을 종료할 때 사용.
0 : 특정 TCP 플래그가 설정되지 않은 모든 패킷을 탐지.
flags:SF;
seq : TCP Sequence Number 확인
seq:0;
ack : TCP Acknowledge Number 확인
ack:0;
Post-detection : 사후탐지에 대한 옵션, 룰 실행 후의 규칙
react:block;
nocase : 패턴을 매칭할 때 대문자와 소문자를 구분하지 않는다.
threshold : 동일한 특정 패킷에 대해서 설정한 시간 내에 일정 수가 발생하면 탐지한다.
both : 매 seconds마다, count 동안 횟수만큼 트래픽이 탐지 될 시에 한번만 탐지.
threshold : 매 seconds마다, count 횟수에 해당 시 마다 계속 탐지한다.
limit : 매 seconds마다, count 동안에 횟수 번째 트레픽까지 계속 탐지한다.
by_src : 출발지 패킷만 탐지한다.
by_dst : 목적지 패킷만 탐지한다.
1. 비정상적인 SSH 로그인 시도 탐지 시나리오 (Brute Force Attack : 30초안에 5번 로그인 시도 공격 탐지)
2. XMAS 스캔 탐지 시나리오
3. HTTP Get Flooding 탐지 시나리오