[서버보안] SYN Flooding(신플루딩) 공격 막기

2010. 2. 23. 11:55개발/리눅스

반응형
1. SYN Flooding 공격이란?

신플루딩공격이란 TCP세션이 연결될 때의 취약성을 이용한 서버공격이다.
근데 왜 신종플루라는 단어가 자꾸 떠오르는것인지 -_-;;

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


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




2. SYN Flooding 공격막기?

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

playi@playi:~$ cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024
playi@playi:~$

cat /proc/sys/net/ipv4/tcp_max_syn_backlog 로 현재 서버의 백로그큐 값을 확인
1024 보다 작으면 1024 정도로 설정해줍니다.

sysctl -w net.ipv4.tcp_max_syn_backlog=1024


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

playi@playi:~$ cat /proc/sys/net/ipv4/tcp_syncookies
1
playi@playi:~$ sysctl -w net.ipv4.tcp_syncookies=1
error: permission denied on key 'net.ipv4.tcp_syncookies'
playi@playi:~$ sudo sysctl -w net.ipv4.tcp_syncookies=1
[sudo] password for playi:
net.ipv4.tcp_syncookies = 1
playi@playi:~$


cat /proc/sys/net/ipv4/tcp_syncookies 로 현재 서버의 신쿠키 값을 확인해서 0으로 되어 있다면
sysctl -w net.ipv4.tcp_syncookies=1  ← 요렇게 값을 1로 바꿔줍니다.

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



그러나 이것은 대비책일 뿐 절대방어책은 아니기에 게으름 피우지 말고 관리해야 한다는 진리는 변함이 없습니다.ㅠ



참고. centos리눅스 구축관리실무(김태용 저) + 인터넷자료들


반응형