작성자 : 유창훈
Synflooding attack의 핵심은 백로그큐를 꽉 채우는 것!!! 이것이다. 서버 클라이언트 관계에서 3way handshaking 과정은 알고있으리라고 보고 다음을 읽도록 하자.
이 백로그큐는 그냥 막 들이댄다고 채워지는게 아니라 Syn패킷을 받았을때, Syn Ack를 응답해 주고 나서 Ack가 올때까지 기다리는 동안 여기에 살짝 집어넣어놓는다.
근데 응답이 안오면???? Ack가 돌아와야 서버에서 큐가 비워지는데 응답이 안오니까 비워지지 않은상태로 다음 Syn이 오면 또 쌓이고 응답없으면 그대로 쌓여있다가 . 또 쌓이고 쌓이고 ..... 그래서 최악의 경우는 큐가 다 차서 더이상 Syn 패킷을 받을 수 없는 상태가 된다.
이렇게 되면 서비스 거부가 되고( 3way handshaking 이 안되니까) 중요한 회사에서 중요한 타이밍에 서비스를 할 수가 없다면 엄청난 손실을 받게 된다.
이러면안된다....
통상적으로 백로그 큐 안에서 Syn 패킷이 존재하는 시간은 75초, .
공격자가 75초 안에 서버의 백로그큐를 다 채워버리면 끝나는거다 . 일반적으로 공격후 3초면 서비스 다운된다.
따라서 이러한 공격을 예방하기 위해 몇가지 대안이 있다.
1. 백로그 큐의 크기를 증가!
[root@net /root]# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
또는[root@net /root]# echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
일반적으로 128M 이면 128로 하고 그 이상이면 1024로 한다.
이 때 주의할 점은 이 값을 무작정 크게 설정한다고 좋은 것은 아니며 1024 이상으로 설정할 경우 는 /usr/src/linux/include/ net/tcp.h 소스에서 TCP_SYNQ_HSIZE 변수를 수정 후 커널을 재컴파일해야 한다. 이 변수를 설정시 TCP_SYNQ_HSIZE에 16을 곱한 값이 tcp_mas_syn_backlog 보다는 작거나 같아야 하는데, 그렇지 않을 경우에 는 시스템에 문제가 발생할 수 있으니 1024 보다 높은 값으로 설정하지 말기 바란다
이 때 주의할 점은 이 값을 무작정 크게 설정한다고 좋은 것은 아니며 1024 이상으로 설정할 경우 는 /usr/src/linux/include/ net/tcp.h 소스에서 TCP_SYNQ_HSIZE 변수를 수정 후 커널을 재컴파일해야 한다. 이 변수를 설정시 TCP_SYNQ_HSIZE에 16을 곱한 값이 tcp_mas_syn_backlog 보다는 작거나 같아야 하는데, 그렇지 않을 경우에 는 시스템에 문제가 발생할 수 있으니 1024 보다 높은 값으로 설정하지 말기 바란다
솔직히 백로그 큐 증가해 봤자 정작 Syn flooding공격이 들어왔을때는 아무~소용없다.
다만 평상시 서비스하는 서버라면 적당한 백로그 큐는 네트워크의 성능을 조금 향상시켜준다.
그래도!! 정작 공격이 들어왔을때, 최대한의 서비스 보장을 위해서 설정해놓는게 좋다.
2. Syncookie를 셋팅해 놓는다.
백로그 큐에 가득차서 서비스가 안되면 백로그 큐가 가득 찼을때, cookie 개념을 이용해 백로그큐의 역할을 대신하는 공간을 지정해 주면된다. 그럼 서비스가 계속될 것이지 않은가?
이것이 Syncookie이다.
다만 평상시 서비스하는 서버라면 적당한 백로그 큐는 네트워크의 성능을 조금 향상시켜준다.
그래도!! 정작 공격이 들어왔을때, 최대한의 서비스 보장을 위해서 설정해놓는게 좋다.
2. Syncookie를 셋팅해 놓는다.
백로그 큐에 가득차서 서비스가 안되면 백로그 큐가 가득 찼을때, cookie 개념을 이용해 백로그큐의 역할을 대신하는 공간을 지정해 주면된다. 그럼 서비스가 계속될 것이지 않은가?
이것이 Syncookie이다.
먼저 현재 설정값 확인
syncookie 설정을 해놓은 상태에서 Synflooding공격이 들어오면 (즉, 백로그큐가 가득찼을때) /var/log/message 파일에 아래와 같이 SynFlooding 공격이 진행중이라는 메시지가 출력된다.
[root@control src]# sysctl net.ipv4.tcp_syncookies
0
0 으로 설정되어 있으므로 현재 syncookies는 적용되지 않는다. 따라서 다음과 같이 1을 설정하여 syncookies 기능을 활성화도록 한다.
[root@control src]# sysctl -w net.ipv4.tcp_syncookies=1
또는
[root@net /root]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
syncookie 설정을 해놓은 상태에서 Synflooding공격이 들어오면 (즉, 백로그큐가 가득찼을때) /var/log/message 파일에 아래와 같이 SynFlooding 공격이 진행중이라는 메시지가 출력된다.
"Jun 11 18:54:08 net kernel: possible SYN flooding on port 80. Sending cookies."
3. 라우터에서 intercept 모드 사용
http://dbckdgns0515.tistory.com/entry/Router-Syn-Flooding-Defence-Router-intercept-mode
'보안 > Network' 카테고리의 다른 글
Covert Channel (0) | 2011.07.29 |
---|---|
Hping 을 이용한 SynFlooding 공격 (0) | 2011.07.18 |
스위치 보안정리 2 (0) | 2011.07.13 |
스위치 보안정리 1 (0) | 2011.07.13 |
Linux kernel parameter 설정(네트워크) (0) | 2011.07.13 |