본문으로 바로가기

SYN Flooding 공격이란?

category Gift/Security 2017. 7. 28. 13:42

SYN_Flooding공격이란 TCP세션이 연결될 때의 취약성을 이용한 공격



정상적인 상태


먼저 TCP의 기본적인 연결단계는 아래와 같습니다.
- A(소스서버)가 B(목적지서버)에게 접속을 요청하는 SYN패킷을 보낸다.
- B는 요청을 수락한다는 SYN과 ACK패킷을 A에게 보낸다.
- A가 B에게 ACK를 보내면 연결이 이루어지고 본격적이 데이터교환이 이루어진다.


SYN Flooding 공격을 받고있는 모습


위의 2번단계에서 목적지서버(B)는 소스서버(A)가 ACK패킷을 보내주기를 계속적으로 기다리는 것이 아니라일정시간 후 요청이 오지 않으면
백로그큐(Backlog Queue)가 허용하는 공간에 연결정보(로그)를 보관하게 됩니다.
이러한 상태가 지속적으로 요청되어 연결정보(로그)가 쌓이게 되면 목적지서버(B)의 특정서비스가 마비될 수 있습니다.
이러한 공격을 DOS공격의 일종인 SYN Flooding 공격이라고 합니다.

Syn 로그 기록후 Timeout 까지의 대기시키는데 그 타임아웃 시점보다 짧게 Syn 요청을 해서 스택을 채워네트웍을 마비시키기도 하고 Invalid 한 값의 Syn으로 무차별적으로 이루어 지기도 한다.


SYN Flooding 공격탐지

- SYN_RECV 가 있으면 공격에 노출되었다고 보면 된다.

# netstat -an | grep SYN

tcp 0 0 192.168.0.0:80 94.9.83.63:3072 SYN_RECV
tcp 0 0 192.168.0.0:80 3.7.244.2:3072 SYN_RECV
tcp 0 0 192.168.0.0:80 48.32.206.32:3072 SYN_RECV

# netstat -an |grep SYN | wc -l
146

정상적인 경우라면 거의 0이어야 함

- SYN Cookies가 작동할 때 SYN Flooding공격이 있으면 messages 파일에 아래와 같은 내용이 출력된다.

#Possible SYN flooding on port 80. Sending cookies.



SYN Flooding 공격막기
이러한 SYN Flooding 공격을 차단하기 위해서는 백로그큐의 사이즈를 늘려주는 방법과 tcp_syncookies값을 1로 설정하는 방법이 있습니다.



- SYN backlog사이즈 증가

tcp_max_syn_backlog 파일을 통해 현재 서버의 백로그큐 값을 확인

# cat /proc/sys/net/ipv4/tcp_max_syn_backlog

1024


1024 보다 작으면 아래 명령어로 1024 이상으로 설정해줍니다.

sysctl -w net.ipv4.tcp_max_syn_backlog=1024



- SYN Cookie설정

위와 같이 백로그큐의 값을 늘려주더라도 이 방법은 임시적인 방법일 뿐, 지속적인 공격을 당하게 된다면 결국 로그값이 가득차게 되겠죠. 
그렇기 때문에 백로그큐의 값을 늘려주는 것과 함께 신쿠키 기능도 설정해줘야 합니다.

cat /proc/sys/net/ipv4/tcp_syncookies 명령어로 현재 서버의 SYN 쿠키값을 확인해서 0으로 되어 있다면

sysctl -w net.ipv4.tcp_syncookies=1 ← 이렇게 값을 1로 바꿔줍니다.

# cat /proc/sys/net/ipv4/tcp_syncookies

1

# sysctl \-w net.ipv4.tcp_syncookies=1

net.ipv4.tcp_syncookies = 1


신쿠키는 백로그큐가 가득 찼을 경우에도 정상적인 접속요구를 계속 받아들일수 있도록 해주므로 신플루딩 공격에 대비한 가장 효과적인 방법중 하나입니다.

- IP TABLES

- IP직접막기
~$ iptables -A INPUT -s <Source IP> -j DROP

- Rule추가
~$ iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
~$ iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
~$ iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
~$ iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
~$ service iptables save
~$ service iptables restart

- sysctl.conf에 rule추가

~$ vi /etc/sysctl.conf

# Enable TCP SYN cookie protection

net.ipv4.tcp_syncookies = 1

# Decrease the time default value for tcp_fin_timeout connection

- net.ipv4.tcp_fin_timeout = 30

# Turn off the tcp_window_scaling

net.ipv4.tcp_window_scaling = 0

# Turn off the tcp_sack

net.ipv4.tcp_sack = 0

# /sbin/sysctl -p

- iptables 조회

# iptables -L

참고 : http://hack3r.tistory.com/2207

'Gift > Security' 카테고리의 다른 글

[정보보안기사] 암호학(4)  (0) 2017.08.08
[정보보안기사] 암호학(3)  (0) 2017.08.06
[정보보안기사] 암호학(2)  (0) 2017.08.05
[정보보안기사] 암호학(1)  (0) 2017.08.04
[정보보안기사] 정보보호관리 요약  (0) 2017.08.03