kjh00n의 기록저장소

TCP SYN Flooding 본문

네트워크 보안 운영

TCP SYN Flooding

kjh00n 2024. 12. 16. 11:04

TCP SYN Flooding

● TCP가 데이터를 보내기 전에 연결을 먼저 맺어야하는 연결지향성을 이용한 방법

● Attacker 는 Victim 에 Source IP Address 를 Spoofing 하여 SYN 패킷을 특정 포트로 전송하여 해당 포트의 대기큐(Backlog Queue)를 가득 차게 하여 해당 포트에 들어오는 정상적인 연결요청을 큐가 빌 때까지 무시하도록 함

● UDP Flooding이 주류를 이루기 전에 많이 사용되던 방식

● 시스템 부하 → 메모리 부하(프로그램의 Backlog Queue)

 

Backlog Queue

● TCP 서비스에서 Client의 연결 상태정보를 기억하기 위한 공간(IP로 구분)

  • SYN Backlog → Client의 SYN을 받고 SYN/ACK를 전달한 SYN_RCVD 상태정보 기억
  • Listen Backlog → SYN/ACK의 대한 응답받은 Established 상태정보 기억

 

공격원리

● 출발지 IP를 Random하게 변조하여 연결요청(SYN)을 전달함

● 공격 대상의 Backlog Queue가 가득차서 정상 Client의 연결 정보를 저장하지 못하게 된다

● hping3 --rand-source [공격대상 IP] -p 80 -S --flood

보안

● 시스템 최적화

  • Backlog Queue 사이즈 증가, SYN_RCVD 대기시간 단축, Registry 설정

● syncookie 기능 활성화

● 보안 솔루션을 통한 방어

 

syncookie

● SYN Flooding이 발생했을 때 정상 사용자의 Connection을 보장하는 기술

● 연결요청(SYN)의 초기 순서번호(ISN)을 이용하여 정상 연결된 연결을 구분함

● Backlog Queue에 저장하는 것이 아닌 syncookie에 저장하는 것이다.

  • 정상적인 연결을 할 때 syncookie에 저장된 것을 Backlog Queue로 불러와서 실행하는 구조

● 동작 순서

  • Client의 SYN에 대한 SYN/ACK를 전달한 후 ISN을 식별값으로 설정함
  • syncookie에게 전달 정보를 전달하고 서버는 SYN에 대한 정보를 Backlog Queue에서 삭제함
  • 이후 정상적인 확인응답(ACK)를 전달받아서 3WAY-Handshake가 정상적으로 이뤄지면 식별값(ISN)을 이용하여 Backlog Queue에 클라이언트 정보를 복원시킴

● sysctl net.ipv4.tcp_syncookies=1

 

실습

Kali Linux - 192.168.50.200

Server - 192.168.50.50


hping3 --rand-source 192.168.50.50 -p 80 -S --flood

[SYN Data를 보내기 때문에 -S를 입력]

[Server에서 httpd를 실행했기 때문에 port번호 80을 입력]

Source IP와 Port가 계속 변경되서 간다

※Source IP와 Port가 실존하지 않기 때문에 RST(Reset)이 발생함

server에서 netstat -antup을 입력

무수한 SYN_Recieved

'네트워크 보안 운영' 카테고리의 다른 글

UDP Flooding & ICMP Flooding  (0) 2024.12.16
TCP Connect Flood  (0) 2024.12.16
Smurf Attack  (0) 2024.12.16
Land Attack 실습  (0) 2024.12.13
Ping of Death 실습  (0) 2024.12.13