-->

[네트워크] 스노트(snort) TCP SYN Flooding(DDoS) 공격 탐지

저번 포스팅에서 포트스캐닝을 탐지해보았는데 이번엔 DDoS 공격 유형 중 하나로 TCP SYN Flooding을 선택해 snort 룰을 생성하여 탐지해본다.

 

 

TCP SYN Flooding (DDoS) 공격이란

TCP SYN Flodding은 DDoS 공격 중 하나로 대량의 SYN 패킷을 타깃 서버로 보내, 서버의 대기큐를 가득 채워 정상 클라이언트의 연결 요청을 방해하는 공격이다.

 

원래 서버는 SYN을 받으면 SYN_ACK를 보내주고 해당 정보를 incomplete 큐에 저장한다. 그리고 클라이언트에게서 ACK를 다시 받게되면, 연결이 완료되었으니 incomplete 큐에 있던 정보를 complete 큐에 보낸다. 그리고 이 2개의 큐를 합쳐서 TCP 대기큐라고 한다.

 

그런데 공격자가 대량의 SYN만 보내고 ACK를 보내지 않아 incomplete 큐가 꽉차도록 하는 것이다. 여기서 SYN 패킷을 보낼 때, source IP를 존재하지 않는 IP로 위조하면 ACK가 안가기게 된다.

 

 

실습 환경설명

칼리리눅스(192.168.21.135)에서 TCP SYN Flooding 공격을 수행하고 우분투(162.168.21.130)에서 snort로 탐지를 수행한다.

 

- DDoS 수행 PC: Kali Linux2018.1, 192.168.21.139

- DDoS  탐지 PC(snort): Ubuntu 16.04, 162.168.21.130

 

 

TCP SYN Flooding 실습

커널 파리미터 중에 백로그 큐 사이즈가 있고 이 값은 sysctl이라는 커널 변수값을 제어할 수 있는 명령어를 사용하여 임의로 설정해줄 수 있다.  DDoS 공격을 바로 확인하기 위해 사이즈를 10으로 일단 줄여준다.

 

- sysctl : 커널 변수 값을 제어할 수 있는 명령어

- 옵션 a : 모든 커널 변수값을 보여줌

- 옵션 w : 커널 변수값 쓰기

- net.ipv4.tcp_max_syn_backlog : TCP SYN 대기큐 사이즈

 

 

 

netstat을 사용해서 네트워크 상태를 바로 확인해보도록 할 것이다. 명령 라인에 스크립트를 사용하면 반복적으로 netstat 결과를 콘솔에 출력시킬 수 있다.

 

 

 

이제 칼리리눅스에서 hping3를 사용해서 TCP SYN Flooding 공격을 해보자. 칼리리눅스에는 hping3라는 네트워크 툴이 내장되어 있는데 이 툴을 사용하면 여러 네트워크 공격을 쉽게 수행할 수 있다.  -S는 SYN flag를 의미하고 --rand-source는 Source IP 주소를 랜덤으로 지정하겠다는 뜻이다. 80번 포트에 빠르게 SYN 패킷을 보내보자.

 

 

 

netstat 결과를 확인해보면, Souce IP가 전부 랜덤인 것과 소켓 상태가 전부 SYN_RECV인 것을 볼 수 있다. 즉, ACK를 받지 못해 아직 연결이 성립되지 못했고 SYN만 받아 대기큐가 차고 있다는 것을 의미한다.

 

 

 

tcpdump 로도 확인을 해보자. SYN flag만 지속적으로 날아온 것을 볼 수 있다.

 

 

 

TCP SYN Flooding 탐지를 위한 snort 룰 추가

그럼, TCP SYN Flooding 탐지를 위한 snort 룰을 생성해보자. 저번 snort 포트스캔 탐지 포스팅에서와 동일하게 threshold 옵션을 사용할 것이다. threshold는 패킷 발생량을 검사하는 옵션으로 사용법은 아래에 링크해둔 포스팅 <스노트(snort) threshold를 사용한 nmap 포트스캐닝 탐지>을 참고하길 바란다.

 

사실, 포트스캐닝 탐지 룰 생성시에는 threshold type을 both로 했었는데, limit이나 both는 패킷 발생량을 정확히 반영하지 못한다고 한다. threshold가 제일 정확하다고 하기 때문에 이번 룰에는 threshold type으로 threshold를 사용하도록 하겠다.

 

임의의 곳에서 192.168.21.130 80 포트로 TCP SYN flag가 동일한 목적지로 10초동안 5번 날라온다면 alert를 띄우는 id 1000002인 룰이다. 사실 DDoS 공격 중 하나의 예시로 SYN Flooding을 선택했을 뿐이지 UDP이든 ICMP이든 룰 내용은 거의 비슷할 수밖에 없다. 참고로, ip source가 랜덤이기 때문에 'track by_dst'로 해주어야 한다.

 

alert tcp any any 
-> 192.168.21.130 80 
(msg:"SYN Flooding Detection"; 
flags:S; 
threshold:type threshold,
track by_dst,
count 5,
seconds 10;
sid:1000002;)

 

 

위 룰을 '/etc/snort/rules/local/rules' 에 추가한다.

 

 

 

snort 실행 및 로그파일 확인

snort 실행 옵션은 많지만 'snort -v -c /etc/snort/rules/local.rules' 로 실행시켜본다. snort를 실행시킨 후 칼리리눅스 PC에서 hping3 툴을 사용해 SYN Flooding 공격을 해주면, snort log 파일에 'SYN Flooding Detection' 로그가 남은 것을 볼 수 있다.

 

 

 

또한, snort 종료 후 'Action Stats'도 확인해 볼 수 있는데 alert, log 수가 기록되어있다.

 

 

 


관련포스팅

[네트워크] 스노트(snort) content를 사용한 XSS 공격 탐지

 

[네트워크] 스노트(snort) content를 사용한 XSS 공격 탐지

실습환경 설명 웹서버로 사용하기 위해 Ubuntu 16.04에 apache2, MySQL, PHP를 설치했고 XSS를 테스트할 목적으로 간단하게 'xss_test.php'와 'xss_test_server.php'를 넣어놓았다. xss_test.php는 클라이언트가..

liveyourit.tistory.com

[네트워크] 스노트(snort) threshold를 사용한 nmap 포트스캐닝 탐지

 

[네트워크] 스노트(snort) threshold를 사용한 nmap 포트스캐닝 탐지

nmap은 대표적인 포트스캐닝 도구로 공격자가 정보수집을 할 때 주로 nmap을 이용해 target pc에 대한 포트스캔을 수행한다. nmap을 사용하면 열린 포트를 찾거나 OS, 네트워크 장치의 버전과 같은 정보를 혹인할..

liveyourit.tistory.com

[네트워크] 스노트(snort) 우분투(ubuntu) 설치 방법

 

[네트워크] 스노트(snort) 우분투(ubuntu) 설치 방법

지난 포스팅에서 무료로 사용할 수 있는 오픈소스 IDS/IPS/방화벽/웹방화벽 을 살펴보았다. 이번 포스팅에서는 그 중 첫번째인 snort를 우분투 16.04에 직접 구축, 사용해보려 한다. 관련포스팅 [네트워크] 오픈소..

liveyourit.tistory.com

[네트워크] 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 추천

 

[네트워크] 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 추천

IDS/IPS/방화벽/웹방화벽 중에서는 IDS로 분류되는 snort와 IPS로 분류되는 iptables를 써봤던 게 다이다. 보안 솔루션에 좀 더 친숙해지기 위해 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 방화벽 중, 많이 알려져..

liveyourit.tistory.com

 

댓글

Designed by JB FACTORY