1. 개요
- AWS Network Firewall에서 제공하는 기능인 5-tuple, Url Filter, Suricata 중 suricata에 대해 Rule을 적용해보려함.
(Url Filtering은 온프레미스이긴 하나 L7방화벽이나, 유해차단 솔루션에서 많이 해봤으니 이번엔 테스트 생략...)
- Suricata IPS Rule은 url이나 cve를 참조하여 취약점에 대해 정책을 적용할 수 있고, Payload에 대해 특정 패턴으로 정책 적용가능.
2. 구문상세
- [Action] [Header] [Rule옵션] 구조
- [Action] [Protocol, SrcIP, SrcPort, DstIP, DstPort][Rule옵션]이 상세 구조
Action | Protocol | SrcIP | SrcPort | DstIP | DstPort | Rule옵션 |
drop | tls | $HOME_NET | any | $EXTERNAL_NET | any | tls.sni; content:"evil.com"; startswith; nocase; endswith; msg:"matching TLS denylisted FQDNs"; priority:1; flow:to_server, established; sid:1; rev:1; |
drop tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"evil.com"; startswith; nocase; endswith; msg:"matching TLS denylisted FQDNs"; priority:1; flow:to_server, established; sid:1; rev:1;)
--> TLS의 SNI필드 값이 evil.com이면 drop시키고 메시지를 출력하는 구문.
3. 상세설명
[Action]
alert : 경고 및 로깅
pass : 패킷 무시
drop : 패킷 차단 및 로깅 (인라인 차단)
reject : 패킷 차단 및 로깅 (TCP 리셋패킷 또는 ICMP Unreachable로 차단)
rejectsrc : reject와 동일하게 소스에게만 RST/ICMP 오류 패킷 송신
rejectdst : 데스티네이션에 RST/ICMP 오류 패킷 송신
rejectboth : 소스/데스티네이션 RST/ICMP 오류 패킷 송신
[Protocol]
- TCP/UDP/ICMP/IP/ANY/TLS/HTTP/HTTPS 등
[SrcIP/DstIP]
1.1.1.1/32
1.1.1.0/24
[1.1.1.0/24, 2.2.2.0/24]
![1.1.1.0/24, 2.2.2.0/24]
$HOME_NET : 내부 IP 주소 변수
$EXTERNAL_NET : 외부 IP 주소 변수
$XXX_SERVERS : 특정 서버 IP 주소 변수
[SrcPort/DstPort]
80
[80:82]
[80, 81, 82]
!80
any
[방향]
-> : Request 탐지/차단
<- : 이건 없음. ->으로 src/dst만 바꾸자
<> : Request/Reply 탐지/차단
[옵션]
- 기본 옵션
1. msg : 경고 이벤트
msg:"ICMP Ping test";
2. sid : sequence
sid:300001;
3. rev : 룰 버전. 수정될 때마다 1씩 상승
rev:1;
4. priority : 우선순위 (1~10)
priority:1;
5. classtype : snort 룰 분류.
classtype:분류이름;
6. reference : 취약점 참고 배포 URL 정보
reference:타입, reference:내용
reference: cve, CVE-2014-1234
- 흐름옵션
1. flow
2. to_server/from_server : 클라이언트 > 서버 패킷 룰 매칭
3. to_client/from_client : 서버 > 클라이언트 패킷 룰 매칭
4. established : 세션이 연결된 패킷 룰 매칭
5. stateless : 세션 연결 유무와 상관 없이 룰 매칭
6. flow:to_server, estableished; : 클라이언트 > 서버 세션 연결 패킷 룰 매칭
- 페이로드 탐색 옵션
1. content : 문자/숫자 탐지
content:"evil.com"
2. nocase : 대소문자 구별 없이 탐지
3. offset :...
옵션이 너무 많아서 여기까지 씀
4. 해석
1) drop tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"evil.com"; startswith; nocase; endswith; msg:"matching TLS denylisted FQDNs"; priority:1; flow:to_server, established; sid:1; rev:1;)
tls 프로토콜을 사용하는 내부 네트워크 any가 외부 네트워크 any로 통신에 대해 인라인 차단
drop tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"evil.com"; startswith; nocase; endswith; msg:"matching TLS denylisted FQDNs"; priority:1; flow:to_server, established; sid:1; rev:1;)
tls의 sni 필드에 evil.com(대소문자 구별x)가 탐지되면 "matching TLS denylisted FQDNs"의 msg를 띄워줌. 이때, 우선순위는 1이며, 버전도 1 그리고 플로우는 클라이언트 > 서버 방향이며 성립된 세션에 대해 매칭
(startswith와 endswith는 content에 따라오는 옵션이며, 버퍼의 시작과 끝을 나타냄)
참고 : https://suricata.readthedocs.io/en/suricata-6.0.3/rules/intro.html
5. 테스트
- 기본 Action : ALL Deny
- Pass 설정한 web01.cloudtest.shop을 제외하고 모두 drop
- 추가로 ALL Permit 정책을 깔아줘야 BlackList 방식으로 사용가능
그래서 한번 깔아보고 테스트 해보자
※ 주의 : 모두삭제 상태에선 어떤 규칙도 안먹힘...심지어 pass 규칙도..
'네트워크 & 클라우드 > AWS' 카테고리의 다른 글
[AWS-04] Macie (0) | 2022.08.28 |
---|---|
[AWS.03] AWS WAF (0) | 2022.07.21 |
[AWS.02-02] AWS Network Firewall (테스트 요약) (0) | 2022.07.21 |
[AWS.02-01] Network Firewall (0) | 2022.07.21 |
[AWS.01] Route53 Resolver DNS Firewall (0) | 2022.07.21 |