- [Suricata] Suricata RULES 알아보기 (IP, TCP, UDP, ICMP)2024년 07월 08일 19시 57분 47초에 업로드 된 글입니다.작성자: 방세연
Suricata 7.0.6 USAGE: suricata [OPTIONS] [BPF FILTER] -c <path> : path to configuration file -T : test configuration file (use with -c) -i <dev or ip> : run in pcap live mode -F <bpf filter file> : bpf filter file -r <path> : run in pcap file/offline mode -q <qid[:qid]> : run in inline nfqueue mode (use colon to specify a range of queues) -s <path> : path to signature file loaded in addition to suricata.yaml settings (optional) -S <path> : path to signature file loaded exclusively (optional) -l <dir> : default log directory -D : run as daemon -k [all|none] : force checksum check (all) or disabled it (none) -V : display Suricata version -v : be more verbose (use multiple times to increase verbosity) --list-app-layer-protos : list supported app layer protocols --list-keywords[=all|csv|<kword>] : list keywords implemented by the engine --list-runmodes : list supported runmodes --runmode <runmode_id> : specific runmode modification the engine should run. The argument supplied should be the id for the runmode obtained by running --list-runmodes --engine-analysis : print reports on analysis of different sections in the engine and exit. Please have a look at the conf parameter engine-analysis on what reports can be printed --pidfile <file> : write pid to this file --init-errors-fatal : enable fatal failure on signature init error --disable-detection : disable detection engine --dump-config : show the running configuration --dump-features : display provided features --build-info : display build information --pcap[=<dev>] : run in pcap mode, no value select interfaces from suricata.yaml --pcap-file-continuous : when running in pcap mode with a directory, continue checking directory for pcaps u --pcap-file-delete : when running in replay mode (-r with directory or file), will delete pcap files tha done --pcap-file-recursive : will descend into subdirectories when running in replay mode (-r) --pcap-buffer-size : size of the pcap buffer value from 0 - 2147483647 --dpdk : run in dpdk mode, uses interfaces from suricata.yaml --af-packet[=<dev>] : run in af-packet mode, no value select interfaces from suricata.yaml --af-xdp[=<dev>] : run in af-xdp mode, no value select interfaces from suricata.yaml --simulate-ips : force engine into IPS mode. Useful for QA --user <user> : run suricata as this user after init --group <group> : run suricata as this group after init --erf-in <path> : process an ERF file --unix-socket[=<file>] : use unix socket to control suricata work --reject-dev <dev> : send reject packets from this interface --include <path> : additional configuration file --set name=value : set a configuration value To run the engine with default configuration on interface eth0 with signature file "signatures.rules", run the command as: suricata -c suricata.yaml -s signatures.rules -i eth0
kali리눅스에 suricata를 설치해주었다.
규칙이 매우 방대하기 때문에 가장 대표적으로 사용되는 Meta, TCP, UDP, IP, IMCP 키워드 규칙에 대해서 정리해볼 것이다. 규칙을 작성하며 Snort와 겹치는 부분들도 많이 있어서 신기했다.
Contents. 클릭하면 이동합니다. 🚀
Suricata RULES
https://docs.suricata.io/en/suricata-4.1.4/rules/intro.html
이곳에 친절하게 나와있다.
Suricata Rules는 큰 세 가지 덩어리로 쪼갤 수 있다.
🚨ACTION : red
drop
🌐HEADER : green
tcp $HOME_NET any -> $EXTERNAL_NET any
✒️RULE OPTIONS : blue
(msg:”ET TROJAN Likely Bot Nick in IRC (USA +..)”; flow:established,to_server; flowbits:isset,is_proto_irc; content:”NICK “; pcre:”/NICK .*USA.*[0-9]{3,}/i”; reference:url,doc.emergingthreats.net/2008124; classtype:trojan-activity; sid:2008124; rev:2;)
🚨Action-order
drop
Pass Drop Reject Alert 현재 패킷에 대해 패킷 스캐닝을 중지 (패킷 무시) 패킷 차단.
(ONLY IPS/인라인 모드일 때만)TCP 문제, ICMP 에러 패킷이 발생할 때 패킷 차단 경고문 출력, 로그 기록
🌐Protocol
tcp
tcp udp icmp ip (ALL, ANY) http ftp tls smb dns dcerpc ssh smtp imap mmsn modbus dnp3 enip nfs ikev2 krb5 ntp dhcp Suricata에서 지원하는 프로토콜 종류이다.
🌐Source and destination
$HOME_NET any -> $EXTERNAL_NET any
출발지 목적지 $HOME_NET
(외부 IP 주소 변수)$EXTERNAL_NET
(외부 IP 주소 변수)vars: address-groups: HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]" #By using [], it is possible to set #complicated variables. EXTERNAL_NET: any HTTP_SERVERS: "$HOME_NET" #The $-sign tells that what follows is #a variable. SMTP_SERVERS: "$HOME_NET" SQL_SERVERS: "$HOME_NET" DNS_SERVERS: "$HOME_NET" TELNET_SERVERS: "$HOME_NET" AIM_SERVERS: any
HOME_NET에 HOME IP주소를 지정해주는 것도 가능하다.
Operator Description ../.. ip 범위 ! 부정/예외 [.., ..] 그룹화 🌐Ports (source and destination)
$HOME_NET any -> $EXTERNAL_NET any
출발지 목적지 any any Operator Description : 포트 범위 ! 예외/부정 [.., ..] 그룹 🌐Direction
-> ->방향의 패킷만 일치 <> 양방향 패킷 일치
✒️Rule options
(msg:”ET TROJAN Likely Bot Nick in IRC (USA +..)”; flow:established,to_server; flowbits:isset,is_proto_irc; content:”NICK “; pcre:”/NICK .*USA.*[0-9]{3,}/i”; reference:url,doc.emergingthreats.net/2008124; classtype:trojan-activity; sid:2008124; rev:2;)
괄호 () : rule options는 괄호로 묶여야 한다.
semicolon; : rule option value를 사용할 때 ;를 사용해야 한다. (백슬래시\ 포함)
rule options에 적어주는 순서에 따라 규칙의 내용은 달라진다!
1. <키워드 옵션>: 2. <설정>; 3. <키워드 옵션>;
이제부터는 각각의 규칙을 작성하는 Syntax를 다루어볼 것이다.
Meta Keywords
msg: 맥락 정보 표시 ( ; \ " ) sid: sid ID, rules 내에 있는 규칙들 rev: sid와 함께 사용, 버전을 나타냄 gid: 그룹 ID (일반적으로 gid 1 사용) classtype 규칙과 알림 분류에 대한 정보 제공
(sid, rev 키워드 앞에 와야 함)reference: 문제에 대한 해결 정보 위치 표시
(url, CVE-데이터베이스 사용하기)priority: 우선순위 (가장 높은 우선순위 = 1) metadata: 일반적으로 [key, value] 형식 target: 경고의 어느 쪽이 공격 타겟인지 지정
[scr_ip|dest_ip]requires: Suricata 버전의 범위, 특정 기능 활성화 --class 유형 심화 설명
config classification: web-application-attack,Web Application Attack,1 config classification: not-suspicious,Not Suspicious Traffic,3
클래스 유형 알리는 방식 (표시) 우선순위 web-application-attack web Application Attack 1 not-suspicious Not Suspicious Traffic 3 IP Keywords
ttl: IP TTL값을 확인하기 id 특정 IP ID 값에 매치시킴
(패킷 조각화 -> 동일 ID)ipopts 특정 ip 옵션 설정 확인하기 geoip 트래픽의 소스, 목적지, 국가 매칭 (IPv4만 제공) sameip 소스 IP주소 = 대상 IP주소인지 확인 fragbits IP 헤더에 단편화 되었는지 확인 (MTU) ip_proto 프로토콜을 일치시킴
🌱프로토콜 번호 (클릭!)fragoffset IP 단편화 offset을 10진수 값에 일치 ipv4.hdr IPv4 헤더 콘텐츠와 일치하기 위함 tos ipv6.hdr IPv6 헤더 콘텐츠와 일치하기 위함 --ipopts: <name> 심화 설명
rr 경로 기록 eol 리스트 끝 nop No Op ts 타임 스탬프 sec IP 보안 esec IP 확장 보안 lsrr loose 소스 라우팅 ssrr strict 소스 라우팅 satid 스트림 식별자 any 모든 IP 옵션 --geoip 심화 설명
both 소스, 대상 모두 geoip와 일치 any 소스, 목적지 중 지리적 IP와 일치 dest 목적지가 geoip와 일치 src 소스가 주어진 geoip와 일치 --fragments 심화 설명
M more fragments D do not fragment R reserved bit --fragoffest
< match: 특정 값보다 작을 때 > match: 특정 값보다 클 때 ! match: 특정 값이 제공되지 않을 때 TCP Keywords
tcp.flags: 특정 TCP Flag bits를 확인한다 seq: 특정 TCP 시퀸스 번호를 확인한다 ack: 특정 TCP 번호를 확인한다. window: TCP window의 크기 확인
(수신할 수 있는 byte 양)tcp.mss: TCP MSS 옵션 값 일치 확인 tcp.hdr tcp.mss를 주로 사용하지만 특정 키워드를 사용할 수 없는 경우 사용됨 -- tcp.flags 형식
tcp.flags:[modifier]<test flags>[,<ignore flags>]; tcp.flags:[!|*|+]<FSRPAUCE0>[,<FSRPAUCE>];
F FIN Finish S SYN Synchronize sequence numbers R RST Reset P PSH Push A ACK Acknowledgment U URG Urgent C CWR Congestion Window Reduced E ECE ECN - Echo 0 No TCP Flags Set 일치 기준
+ bits에 대한 일치 및 기타 모든 일치 * bits 중 하나라도 일치 ! bits가 설정되지 않은 경우 일치 --패킷의 seq 예시 (Wireshark)
--패킷의 ack 예시 (Wireshark)
UDP Keywords
alert udp any any -> any any (udp.hdr; content:"|00 08|"; offset:4; depth:2; sid:1234; rev:5;)
udp.hdr ICMP Keywords
itype: 특정 ICMP type (숫자)와 일치시킴 icode: 특정 ICMP code와 매칭시킴 icmp_id 특정 ICMP ID 값을 매칭시킴 icmp_seq ICMP 시퀸스 번호를 알아냄
(어떤 응답 메세지가 어떤 요청 메세지에 속한지 확인 가능)icmpv4.hdr icmpv6.hdr icmpv6.mtu --ICMP Type 목록
🦫기타 Suricata rules 관련 유용한 사이트 모음:
참고해서 실습해볼 예정,,
https://github.com/michalpurzynski/suricata-rules/blob/master/README.md
https://github.com/OISF/suricata/blob/master/doc/userguide/rules/intro.rst
https://readthedocs.org/projects/suricata/downloads/pdf/latest/
다음글이 없습니다.이전글이 없습니다.댓글