SYN 플러딩: Difference between revisions

From IT Wiki
Line 30: Line 30:
** 제한된 용량을 무한정 늘릴 수는 없으므로 다른 방법도 병행하여야 한다.
** 제한된 용량을 무한정 늘릴 수는 없으므로 다른 방법도 병행하여야 한다.
** 리눅스
** 리눅스
:<syntaxhighlight lang="shell">
::<syntaxhighlight lang="shell">
# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
</syntaxhighlight>
</syntaxhighlight>
:* 유닉스
:* 유닉스
:<pre class='shell'>
::<syntaxhighlight lang="shell">
# ndd -set /dev/tcp tcp_conn_req_max_q1 1024
# ndd -set /dev/tcp tcp_conn_req_max_q1 1024
</pre>
</pre>

Revision as of 00:24, 20 May 2018

TCP의 3-Way-Handshake 취약점을 이용한 DoS공격으로 다량의 SYN 패킷을 보내 백로그큐를 가득 채우는 방법을 이용한다.

3-Way-Handshake

TCP에서 서버-클라이언트간의 신뢰성 있는 연결을 위한 매커니즘. 클라이언트가 접속을 위해 SYN을 보내면, 서버가 SYN/ACK 으로 요청을 인지했음을 응답하고, 클라이언트가 ACK으로 최종 응답을 함으로써 연결이 이루어진다.
  1. 클라이언트 -> SYN -> 서버
  2. 서버 -> SYN/ACK -> 클라이언트
  3. 클라이언트 -> ACK -> 서버

Backlog Queue

Backlog Queue
  • 3-Way-Handshake를 위해 연결이 진행중인 요청을 담아두는 큐
  • SYN Backlog Queue엔 SYN을 보내온 연결요청 정보가 임시로 저장된다.
  • 서버는 SYN에 대해 SYN/ACK을 보내고 ACK을 받기 전까지 저장해 두는 것이다.
  • 큐가 가득차면 다른 연결을 받아들일 수 없게 된다.

SYN Flooding

  • 클라이언트가 SYN만 보내고 아무런 동작을 하지 않는다면 해당 연결 요청은 TCP Connection Timeout 시간동안 계속 SYN Backlog Queue에 남아있게 된다.
  • 다수의 클라이언트가 고의로 이런 행동을 한다면 SYN Backlog Queue는 가득 차게 된다.
  • SYN Backlog Queue가 가득차면 더이상의 연결요청을 받아 들일 수 없게된다.

공격 상황

  • 공격이 이루어지고 있는 상황은 netstat -an 을 통해 확인 가능하다.
  • 연결 요청중인 목록 중 SYN_RECV로 되어 있는 요청이 많을 경우 Syn Flooding 공격 상황을 의심 해볼 수 있다.
  • SYN_RECV로 된 요청이 많고, 해당 요청 IP가 비정상적인 경우 Syn Flooding 공격일 가능성이 아주 높다.

대응법

  • TCP Connection Timeout 시간을 짧게 설정한다.
    • 단, 너무 짧게 설정할 경우 정상적인 연결요청임에도 느리다는 이유로 연결이 거부되는 경우가 생긴다.
  • Backlog Queue를 늘린다.
    • 제한된 용량을 무한정 늘릴 수는 없으므로 다른 방법도 병행하여야 한다.
    • 리눅스
# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
  • 유닉스
<syntaxhighlight lang="shell">
  1. ndd -set /dev/tcp tcp_conn_req_max_q1 1024
  • Syn Cookie를 이용한다.
  • Anti-DDoS, IDS/IPS, 방화벽/UTM 등 보안 장비, 솔루션을 이용하여 비정상적인 접근을 탐지하여 차단한다.