본문 바로가기
Study/Network

[Network] DDos공격에 대응하는 법

by 검프 2021. 5. 1.

먼저 Dos와 다른점을 살펴볼 필요가있어요

Dos(Denial of Service)

Dos공격은 서비스 거부 공격의 약자로, 인터넷에 연결된 호스트의 서비스를 악의적으로 공격해 해당 시스템의 리소스를 부족하게 하여 사용자가 시스템 또는 네트워크 리소스를 사용할 수 없도록 만드는 사이버 공격이에요.

즉, 특정 서버에게 수많은 접속 시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 바닥내는 등의 공격이 이 범위에 포함돼요.

https://user-images.githubusercontent.com/48986787/116772281-d32abe00-aa88-11eb-9af7-f4985e474ea1.png

DDos(Distributed DoS)

분산 서비스 거부 공격으로. 여러 대의 공격자를 분산적으로 배치해 동시에 서비스 거부 공격을 하는 방법이에요.

https://user-images.githubusercontent.com/48986787/116772288-e3429d80-aa88-11eb-88c8-6867ec13062b.png

차이점

Dos는 공격자 PC에서 희생자 서버에게 바로 악의성 패킷을 보내요.

희생자가 공격자의 주소를 확인하고 차단하면 공격자는 더 이상 공격을 하지 못하게 돼요.

이를 보완하기 위해 DDos공격 기법이 탄생됐어요.

 

DDos는 좀비 PC를 이용해서 악의성 패킷을 보내요.

공격자는 여러 PC들에게 바이러스를 침투시켜 좀비PC를 만들어요, 감염된 PC는 원격조종을 당해 함께 공격해요. 그러면 서버는 하나의 PC가 아닌 여러대의 PC에서 공격을 당하기 때문에 이를 모두 차단하기 힘들어져요.

 

대응 방법

준비물

리눅스 서버, sudo사용자

서브넷 확인

공통 서브넷(/16 or /24)의 연결을 먼저 확인해요.

1.아래 명령어를 사용하여 동일한 서브넷(/16)에서 들어오는 연결을 확인해요

$ netstat -ntu|awk '{print $5}'|cut -d: -f1 -s |cut -f1,2 -d'.'|sed 's/$/.0.0/'|sort|uniq -c|sort -nk1 -r

https://user-images.githubusercontent.com/48986787/116774032-86e57b00-aa94-11eb-801e-1ee55b80b92a.png

옥텟(192.168.x.x)과 동일한 서브넷의 모든 연결을 표시해요

2.다음으로 /24 서브넷의 연결을 확인해요

$ netstat -ntu|awk '{print $5}'|cut -d: -f1 -s |cut -f1,2,3 -d'.'|sed 's/$/.0/'|sort|uniq -c|sort -nk1 -r

https://user-images.githubusercontent.com/48986787/116774140-708bef00-aa95-11eb-8c08-41d1f73c2874.png

위의 명령은 처음 3 개의 옥텟 (예 : 192.168.1.x)과 동일한 서브넷의 모든 연결을 표시해요. 이러한 서브넷 중 하나에서 오는 많은 연결을 발견하면 검색 범위를 약간 좁힌 것이에요.

3.서버에 연결된 모든 IP 주소를 나열해요

$ netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c

https://user-images.githubusercontent.com/48986787/116774202-f90a8f80-aa95-11eb-9282-a5b383973e50.png

연결된 모든 IP 주소 목록과 연결 횟수가 표시돼요.

4.각 IP 주소가 서버메 연결하는 수를 계산하고 더해요.( 정렬됨 )

$ sudo netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

https://user-images.githubusercontent.com/48986787/116774266-69191580-aa96-11eb-81eb-6a66278a6dbb.png

위 명령어는 실제로 서버에 대한 연결 요청을 보내는 모든 서브넷의 IP주소를 나열해요

5.연결이 시작되는 위치와 해당 연결과 연결된 IP주소를 잘 알고 있어야해요.

하나의 특정 서브넷에서 오는 많은 연결이 있을 수 있어요. 해당 서브넷이 서버 트래픽 level에 도달하지 않아야 하는 경우 DDos 공격이 발생하는 곳일 가능성이 높아요.

공격 중지하기

Dos 공격을 확인하고 중지하는 것 만큼 쉽지 않지만. DDos 공격의 출처를 확인 한 후에는 Dos 공격을 중지 한 것과 동일한 방식으로 중지해요.

아래 명령을 실행하기만 하면 돼요

$ sudo route add DDos공격지주소 reject

위의 커멘드를 netstat을 사용해서 모두 찾아서 삭제해야해요 .

공격이 모두 하나의 서브넷에서 발생하는 것을 발견 한 경우 iptables를 이용하여 전체 서브넷을 차단할 수 있어요

$ sudo iptables -A INPUT -s DDos공격지주소/SUBNET -j DROP

추가 고려사항

공격이 같은 LAN내의 서브넷에서 발생하는 경우 즉, 해당 시스템이 서버에 공격을 퍼붓는 경우.

원치 않는 로그인 및 공격 방지를 자동화 할 수 있는 fail2ban을 설치해요

 

결론

공격이 발생하는 위치를 좁히기 위한 방법과 공격을 중지하는 법을 살펴봤어요.

실제 공격이 어떻게 일어나는지를 테스트 해볼 필요가 있어요 (그래야 실 서버 운영시 도움이 될 것 같아요)

 

Refer

https://www.techrepublic.com/article/how-to-check-for-and-stop-ddos-attacks-on-linux/

https://www.techrepublic.com/article/how-to-quickly-check-to-see-if-your-linux-server-is-under-a-ddos-attack-from-a-single-ip-address/

https://www.techrepublic.com/article/how-to-install-fail2ban-on-ubuntu-server-18-04/

댓글