[Security] Syn Flooding

Syn Flooding

Tcp 3way handshaking에서 Syn패킷을 악의적으로 계속 보내 서비스를 마비시키는 공격
Tcp Listen 상태에서는 두 종류의 큐가 존재한다

- Backlog Queue : 커넥션을 위한 3hand shake단계의 소켓들을 처리하는 큐
- Accept Queue : 커넥션이 완료된 소켓들이 존재하는 큐


소켓의 수는 리눅스의 파일 디스크립터 개수만큼 생성할 수 있지만 커널 4.3 커널레벨에서 기본 설정에 1024개로 되어있다
별도의 설정을 하지 않았다면 1024개가 된다
이렇듯 소켓의 수는 제한이 되어있고 제한된 소켓 내에서 커넥션을 맺어야 하는점에 있어 Syn Flooding 공격을 받게 되면 Backlog Queue에 Syn 패킷이 쌓이게 되어 더이상 커넥션을 받을 수 없는 상태가 된다

Syn Flooding 방어방법

  • Syn Cookie를 통해 방어를 할 수 있다
  • L4(방화벽 레이어)에서 Syn Cookie값을 1로 설정하여 활성화 할 수 있다
    • Syn 메세지 수신시 방화벽에서 Syn+Ack에 Cookie를 삽입해 보낸다
    • 정상적인 쿠키값을 확인하게 되었다면 커넥션을 맺는다
  • 동작은 커널이나 하드웨어레벨에서 이루어지기 때문에 매우 빠르다


대규모 서비스를 고려한다면

대규모 서비스를 고려한다면 Accep Queue나 Backlog Queue의 크기를 늘리는 방법을 고려할 수 있다
애초에 받을 수 있는 크기를 늘리는 방법이다
다만 크기를 늘리는 방법이 Syn Flooding의 근본적인 방어 방법이 될 수는 없다


참조

https://tech.kakao.com/2016/04/21/closewait-timewait/

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/02/Security/Syn_Flooding/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.