본문 바로가기

네트워크 & 클라우드/AWS

[AWS.02-03] AWS Network Firewall (Suricata)

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

 

pass 설정한 web1만 허용. 나머지는 drop 정책과 묵시적 deny로 차단됨 유유

- 추가로 ALL Permit 정책을 깔아줘야 BlackList 방식으로 사용가능

  그래서 한번 깔아보고 테스트 해보자

차단 설정한 test.cloudtest.shop만 차단

 

 

 

※ 주의 : 모두삭제 상태에선 어떤 규칙도 안먹힘...심지어 pass 규칙도..

5-tuple 테스트와 동일한 결과다...

'네트워크 & 클라우드 > 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