SYN 플러드는 시스템이 합법적인 트래픽에 응답하지 않게 만들기에 충분한 서버 리소스를 소비하기 위해 공격자가 대상 서버에 연속적인 SYN
요청을 보내는 DoS 공격의 한 형태입니다 [1] .
SYN
요청과SYN
패킷은 동일합니다.
SYN 플러드 공격은 TCP 연결의 핸드셰이크 프로세스를 이용하여 작동합니다. 정상적인 조건에서 TCP는 연결을 위해 세 가지 고유한 프로세스를 나타냅니다(그림 1a).
SYN
( 동기화 ) 패킷을 전송하여 연결을 요청합니다.ACK
( 확인 )하기 위해 SYN-ACK
패킷으로 응답합니다.ACK
패킷을 보내고 연결이 설정됩니다.이러한 패킷 송수신 순서가 완료되면 TCP 연결이 열리고 데이터를 보내고 받을 수 있습니다. 이를 TCP 3방향 핸드셰이크라고 합니다. 이 기술은 TCP를 사용하여 설정된 모든 연결의 기초입니다.
DoS를 생성하기 위해 공격자는 초기 SYN
패킷이 수신된 후 서버가 하나 이상의 SYN-ACK
패킷으로 응답하고 핸드셰이크의 마지막 단계를 기다린다는 사실을 이용합니다. Cloudflare [2] 에서는 작동 방식을 설명합니다(그림 1b).
SYN
패킷을 대상 서버에 보냅니다.ACK
패킷을 기다리는 동안 공격자는 계속해서 더 많은 SYN
패킷을 보냅니다. 각각의 새로운 SYN
패킷이 도착하면 서버는 특정 시간 동안 일시적으로 새로운 열린 포트 연결을 유지하게 되며, 사용 가능한 모든 포트가 활용되면 서버는 정상적으로 작동할 수 없습니다. 이 저장소의 공격은 VM에서 수행되었습니다. 공격을 수행하려면 세 대의 기계가 필요합니다. 한 머신은 공격자 로 사용되고, 다른 머신은 피해자 (즉, 서버)로 사용되고, 세 번째 머신은 관찰자 (즉, 클라이언트)로 사용됩니다.
공격을 설정하려면 동일한 호스트 컴퓨터에 세 개의 VM을 설정할 수 있습니다. 또는 호스트 컴퓨터 자체가 세 번째 컴퓨터 역할을 하는 호스트 컴퓨터에 두 개의 VM을 설정할 수 있습니다.
이 공격은 공격자가 피해자와 동일한 물리적 네트워크에 있다는 가정하에 구현되었으므로 TCP 시퀀스 번호와 소스 포트 번호를 결정하는 작업이 단순화되었습니다. 스니퍼 도구를 사용하여 필요한 정보를 수집할 수 있습니다.
이 저장소의 공격은 netwox
도구를 사용하여 수행되었습니다. 그런 다음 Wireshark [3] 와 같은 스니퍼 도구를 사용하여 공격 패킷을 캡처했습니다. 공격이 진행되는 동안 피해자 컴퓨터에서 netstat -na
실행하여 공격 전 결과와 결과를 비교했습니다.
# check the size of the queue for holding half-open connections
sudo sysctl -q net.ipv4.tcp_max_syn_backlog
# check the current usage of the queue;
# i.e., the number of half-open connections associated with some listening port
netstat -na
# one netwox tool that may be useful is tool number 76: synflood
netwox 76 --help
SYN 쿠키:
이 저장소에 대한 공격은 SYN 쿠키를 조작하여 수행되었습니다.
SYN 쿠키를 사용하면 SYN 대기열이 가득 찼을 때 서버에서 연결이 끊어지는 것을 방지할 수 있습니다. 추가 연결을 저장하는 대신 SYN 대기열 항목은 SYN-ACK 응답으로 전송된 시퀀스 번호로 인코딩됩니다. 서버가 증가된 시퀀스 번호를 사용하여 클라이언트로부터 후속 ACK 응답을 받으면 서버는 TCP 시퀀스 번호에 인코딩된 정보를 사용하여 SYN 대기열 항목을 재구성하고 평소와 같이 연결을 진행할 수 있습니다.
이러한 완화 노력으로 인해 TCP 연결에 대한 일부 정보가 손실되기는 하지만 공격으로 인해 합법적인 사용자에게 DoS가 발생하도록 허용하는 것보다 낫습니다.
SYN 쿠키는 SYN 플러딩에 대한 직접적인 대응으로 DJ Bernstein [4] 에 의해 만들어졌습니다.
sysctl
명령을 사용하여 SYN 쿠키 메커니즘을 켜거나 끄십시오.
sudo sysctl -a | grep cookie # Display the SYN cookie flag
sudo sysctl -w net.ipv4.tcp_syncookies=0 # turn off SYN cookie
sudo sysctl -w net.ipv4.tcp_syncookies=1 # turn on SYN cookie
SYN 쿠키는 SYN 플러딩을 막기 위해 구현할 수 있는 많은 대책 중 하나입니다. 다른 완화 방법으로는 대기열의 최대 크기 늘리기, SYN-RECEIVED
타이머 줄이기, 가장 오래된 반쯤 열린 TCP 연결 재활용 등이 있습니다.
^ "CERT 권고 CA-1996-21 TCP SYN Flooding 및 IP 스푸핑 공격" Carnegie Mellon University
^ "SYN Flood 공격" Cloudflare
^ "Wireshark 소개" Wireshark 재단
↑ "SYN 쿠키" DJ 번스타인
많은 관심 부탁드립니다. 이번 프로젝트는 재미있고 통찰력이 있었습니다!