
SYN Flooding(싱 플러딩) 공격은 TCP의 3-Way Handshake 과정을 악용하여 서버의 자원을 소진시키는 네트워크 계층 공격입니다. 이는 서비스 거부(DoS, Denial of Service) 공격의 한 형태로, 다량의 SYN 패킷을 보내 서버가 정상적인 연결을 처리하지 못하도록 만듭니다.
인터넷에서 클라이언트와 서버 간 신뢰성 있는 데이터 전송을 위해 사용되는 TCP(Transmission Control Protocol)는 연결을 설정하기 위해 3-Way Handshake라는 과정을 수행합니다. SYN Flooding 공격은 이 과정을 악용하여 서버가 처리할 수 없는 SYN 요청을 과부하 상태로 유도하여 서비스 거부 상태를 초래하는 공격 방식입니다.
TCP 3-Way Handshake 개요
TCP는 신뢰성 있는 연결을 보장하기 위해 3-Way Handshake를 사용하여 클라이언트와 서버 간의 연결을 설정합니다.
-
클라이언트 → 서버:
SYN
패킷 전송 (연결 요청)-
클라이언트는 서버에 TCP 연결을 요청하는
SYN
플래그가 설정된 패킷을 보냅니다. -
이 패킷에는 초기 순차 번호(ISN, Initial Sequence Number)가 포함됩니다.
-
-
서버 → 클라이언트:
SYN-ACK
패킷 전송 (응답)-
서버는
SYN
요청을 받은 후 클라이언트의 연결 요청을 승인하고, 자체적인SYN-ACK
패킷을 응답합니다. -
이 패킷은 서버의 초기 순차 번호(ISN)와 함께 전달됩니다.
-
-
클라이언트 → 서버:
ACK
패킷 전송 (연결 확립)-
클라이언트는 서버의
SYN-ACK
패킷을 확인한 후, 최종적으로ACK
패킷을 서버로 보내며 연결이 확립됩니다. -
이후, 클라이언트와 서버 간 데이터 전송이 시작됩니다.
-
정상적인 경우 이 과정이 정상적으로 완료되지만, SYN Flooding 공격에서는 악의적인 클라이언트가 이 과정을 악용하여 서버가 무의미한 연결 요청을 처리하도록 만듭니다.
SYN Flooding 공격 방식
SYN Flooding 공격은 위의 3-Way Handshake 과정에서 3번째 단계(ACK 전송)를 수행하지 않고, 대량의 SYN 패킷을 무작위로 보내는 방식으로 이루어집니다. 공격자가 다음과 같이 행동합니다.
-
다수의 SYN 패킷을 생성하여 서버에 전송
-
공격자는 허위 IP 주소를 사용하여 서버로 SYN 요청을 지속적으로 보냅니다.
-
이때 공격자는 실제로 응답할 의도가 없습니다.
-
-
서버는 각 요청에 대해 SYN-ACK 패킷을 반환하고, 클라이언트의 ACK 응답을 기다리며 일정 시간 동안 연결 정보를 유지
-
서버는 클라이언트가
ACK
패킷을 보내지 않아도 일정 시간 동안 연결을 대기 상태로 유지해야 합니다. -
이를 반연결(Half-Open Connection) 상태라고 합니다.
-
-
공격자는 ACK를 보내지 않고 추가로 새로운 SYN 패킷을 계속해서 보냄
-
서버는 기존 요청이 만료되지 않은 상태에서 새로운 SYN 요청을 받게 되며, 지속적으로 리소스를 사용해야 합니다.
-
-
서버는 계속해서 SYN-ACK를 전송하며, 일정 시간 동안 해당 연결을 대기 상태로 유지하게 됨
-
백로그 큐(Backlog Queue)가 가득 차면서 새로운 정상적인 연결 요청을 처리할 수 없게 됩니다.
-
결국 서버의 네트워크 자원이 소진되고, 정상적인 사용자가 서버와 연결할 수 없는 서비스 마비 상태가 발생합니다.
-
SYN Flooding 공격의 특징
-
TCP 프로토콜의 연결 설정 과정(3-Way Handshake)을 악용
-
공격자가 ACK 패킷을 보내지 않음
-
서버가 다량의 반응을 대기하면서 자원 소모
-
백로그 큐(Backlog Queue)가 초과되면 서비스가 중단됨
-
네트워크 계층에서 이루어지는 공격으로, 방화벽이 제대로 설정되지 않으면 쉽게 수행 가능
-
분산 서비스 거부 공격(DDoS) 형태로도 활용될 수 있음
-
IP 스푸핑을 활용하여 추적을 어렵게 만듦
SYN Flooding 공격 방어 방법
SYN Flooding 공격을 방어하기 위해 다양한 보안 기법이 활용됩니다.
SYN Cookies 사용
SYN Cookies는 서버가 SYN-ACK 패킷을 보낼 때 클라이언트의 상태 정보를 쿠키 값으로 변환하여 응답하는 방법입니다. 클라이언트가 실제로 ACK를 보내면 쿠키 값을 확인하여 정당한 요청인지 판별할 수 있습니다.
백로그 큐 크기 조정
서버의 SYN 요청 대기 큐(Backlog Queue) 크기를 증가시키면 일시적으로 더 많은 요청을 처리할 수 있습니다. 그러나 근본적인 해결책은 아닙니다.
IP 블랙리스트 및 제한 설정
특정 IP에서 비정상적인 SYN 요청이 과도하게 발생할 경우 해당 IP를 차단하는 방법입니다. 그러나 공격자가 IP 스푸핑을 사용하면 효과가 제한적일 수 있습니다.
방화벽 및 IDS/IPS 활용
방화벽을 설정하여 비정상적인 트래픽을 차단하거나, 침입 탐지 시스템(IDS) 및 침입 방지 시스템(IPS)을 이용하여 SYN Flooding 패턴을 감지하고 차단할 수 있습니다.
레이트 리미팅 (Rate Limiting)
서버가 특정 시간 내에 받아들일 수 있는 SYN 패킷의 개수를 제한하는 방식입니다. 일정 개수를 초과하면 추가 요청을 차단하거나 지연시킵니다.
SYN Flooding과 DDoS 공격
SYN Flooding 공격은 단일 공격자가 수행할 수도 있지만, 더 강력한 형태로 발전하면 분산 서비스 거부(DDoS) 공격이 될 수 있습니다. DDoS SYN Flooding 공격에서는 수천 개의 봇넷(Botnet) 장치가 동시에 SYN 패킷을 전송하여 대상 서버를 과부하 상태로 만듭니다. 이를 방어하기 위해서는 트래픽 분석 및 네트워크 모니터링이 중요합니다.
결론
SYN Flooding 공격은 TCP 3-Way Handshake의 구조적 특성을 악용하여 서버를 과부하 상태로 만드는 대표적인 DoS 공격입니다. 효과적인 방어를 위해서는 SYN Cookies, 방화벽, IP 차단, 레이트 리미팅 등 다양한 보안 기술을 조합하여 사용해야 합니다. 네트워크 보안을 강화하여 이러한 공격으로부터 서버를 보호하는 것이 중요합니다.
[…] SYN Flooding 공격이란? […]