kjh00n의 기록저장소
TCP SYN Flooding 본문
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가 실존하지 않기 때문에 RST(Reset)이 발생함
무수한 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 |