SYN이란 무엇인가요?

TCP에서 SYN은 연결을 시작하기 위해 클라이언트가 서버로 보내는 패킷을 의미합니다. TCP 연결은 다음 단계에 따라 설정됩니다:

  1. 클라이언트가 먼저 서버에 SYN 패킷을 전송합니다.
  2. 서버는 SYN/ACK 패킷으로 응답하여 요청을 확인합니다. 이때 서버는 연결 세부 정보를 저장하기 위해 연결 테이블에 리소스를 할당하고, 반개방 연결 상태를 설정합니다.
  3. SYN/ACK 패킷을 수신하면 클라이언트는 ACK 패킷으로 응답합니다.
  4. 서버가 ACK 패킷을 수신하면 연결이 완전히 설정됩니다.

세 번의 패킷 교환으로 이루어지는 이 연결 과정을 3-way handshake라고 합니다. 이를 통해 서버는 자신이 보낸 응답 패킷이 클라이언트에 도달했는지 확인할 수 있습니다. 그러나 클라이언트가 출발지 IP 주소를 스푸핑하면 서버가 SYN/ACK 패킷에 대한 응답을 받지 못해 문제가 발생합니다. 이 경우 서버는 타임아웃될 때까지 반개방 상태를 유지하므로 리소스가 불필요하게 소모됩니다. 악의적인 공격자는 이러한 취약점을 악용해 DoS/DDoS 공격의 일종인 SYN flood 공격을 수행합니다.

F5의 BIG-IP 플랫폼은 풀 프록시로 작동하며, SYN 패킷을 서버로 전달하기 전에 검사하여 SYN 플러드 공격을 방지합니다. 또한 BIG-IP에는 대량의 SYN 패킷으로부터 자체 시스템을 보호하는 SYN Cookies라는 기능이 포함되어 있습니다. 이 방식에서는 MD5로 생성된 숫자("Cookie"라고 함)를 SYN/ACK 패킷의 TCP 시퀀스 번호에 삽입합니다. 이후 ACK 패킷이 수신되면 해당 패킷의 내용을 바탕으로 Cookie를 다시 계산합니다. 따라서 SYN/ACK 패킷을 전송할 때 연결 세부 정보를 저장할 필요가 없어, SYN 플러드 공격 중에도 메모리 고갈을 방지할 수 있습니다.