hping3를 이용한 DoS공격 실습

Simcurity·2023년 4월 4일
0
post-thumbnail

1. DoS(Denial of Service)란?

DoSDenial of Service의 약자로 서비스 거부라는 뜻을 가집니다.
즉, DoS 공격을 당한 서버나 기관 등은 보안의 3요소 중 하나인 가용성(availabillity)이 저하되어 정상적인 서비스를 수행하지 못하는 거부상태가 되는것을 의미합니다.
DoS 공격은 이제는 고전적인 공격 방법으로 취급되지만 취약한 환경이나 여전히 그 위험성은 존재합니다.
주요한 DoS 공격 몇 가지를 실습해보겠습니다.

실습 환경 준비

Kali와 제가 구축한 웹 서버로 실습을 해보겠습니다.

웹 서버 우분투 버전이 서버 버전이라 GUI가 없지만 그래도 상태는 확인 할 수 있으니 일단 해보겠습니다.

공격자 : 192.168.6.129
희생자 : 192.168.6.136

1. SYN FLOODING

이 공격은 공격자가 희생자의 서버로 TCP 3-way handshake를 이용한 공격입니다. 정상적인 연결이라면 클라이언트 측에서 SYN 신호를 보내고 서버 측에서 SYN+ACK를 보내고 다시 클라이언트 측에서 ACK 신호를 보내야 합니다.

그러나 만약 악의적인 공격자가 랜덤한 값의 IP로 IP스푸핑을 한 뒤 SYN 패킷을 빠른 속도로 보낸다면 서버 입장에서는 SYN+ACK 신호를 보내지만 ACK 값을 받을 수 없게 됩니다. 그렇게 TCP의 Backlog Queue가 가득 차게 되면 더 이상 서버는 SYN패킷을 받을 수 없는 서비스 거부 상태가 됩니다. 이게 바로 SYN FLOODING 공격입니다.

Backlog Queue란 TCP가 연결을 하고자 3-way handshake를 요청을 받을 때 요청을 받았다는 사실을 기억하기 위한 공간으로 일시적으로 큐에 SYN을 받은 요청을 넣어 놓고 ACK 패킷을 받으면 ACCEPT상태가 되어 큐를 나온다.


그러면 실습으로 한번 직접 공격을 해보겠습니다.

Kali에서 공격 코드

sudo hping3 [타겟 IP] -p [포트 번호] -S --rand-source --flood

해당 명령을 입력하면 공격자는 수 많은 SYN패킷을 보내 서버를 다운 시킵니다.

이 때 서버 쪽에서 netstat -antp 명령어로 현재 포트 상태를 보면 다음과 같습니다.

이렇게 수 많은 포트들이 SYN_RECV 상태로 머물게 되고 ACK 패킷을 받지 못하므로 Backlog Queue는 쌓이게 되고 결국엔 서비스 거부 상태가 됩니다.

2. Land Attack

이 공격은 공격자가 희생자의 IP로 IP스푸핑을 하고 수 많은 icmp패킷을 전송하여 희생자가 자기 자신에 대해 응답을 하게하여 서비스 거부 상태를 만드는 공격입니다.

Kali에서 공격 코드

sudo hping3 [타켓 IP] -a [타겟 IP] --icmp --flood

공격자의 환경에서 wireshark로 캡쳐한 패킷들입니다. 보기와 같이 출발지와 목적지가 동일한 패킷이 엄청 많이 나가고 있습니다.

3. Ping Of Death

해당 공격은 공격자가 ping, 즉 icmp 패킷을 보내는데 패킷이 분할되어 전송되어지기 때문에 크기가 매우 큰 패킷을 보내어 희생자가 재조립하는 과정에서 자원을 모두 소진시키는 공격입니다.

Kali에서 공격 코드

sudo hping3 [타겟 IP] --icmp -d [패킷 사이즈]


Ethernet프로토콜MTU인 1500Byte씩 분할하여 전송하는 것을 볼 수 있습니다.

4. Tear Drop

이 공격은 공격자가 희생자에게 패킷을 보낼 때 offset 값을 변조해 희생자가 재조합 과정에서 자원을 소모하게 만들어 서비스 거부 상태를 유발하는 공격입니다.

offset이란 패킷이 전송 될 때 프로토콜의 MTU(최대 전송 단위)값에 의해 단편화가 일어난다. 다음 단편과 재조합을 해야하는데 그 재조합을 할 위치를 나타내는 값이다.

Kali에서 공격 코드

sudo hping [타겟 IP] --icmp -M [sequence number] -d [패킷 사이즈] --flood

5. UDP FLOODING

이 공격은 공격자가 희생자에게 엄청난 양의 UDP 패킷을 전송하여 희생자의 자원을 소모하게 만드는 공격입니다.

Kali에서 공격 코드

sudo hping3 [타겟 IP] --rand-source -2 -d [패킷 사이즈] -p [포트번호] --flood

랜덤한 값의 IP주소에서 출발한 것처럼 보입니다.

2. 대응 방안

SYN FLOODING 같은 경우엔 서버 측에서 SYN 요청을 모두 거부할 수는 없으므로 아예 차단은 불가합니다.
방화벽 정책 설정을 통한 제어가 필요합니다. 또한 syncookies라는 기능이 있습니다.
syncookies란 연결에 필요한 정보를 쿠키에 담아 저장하기 때문에 Backlog Queue기능을 쓰지 않습니다.

sysctl -w net.ipv4.tcp_syncookies=1 을 입력

또한, Backlog Queue를 늘려주는 방법이 있습니다.

cat /proc/sys/net/ipv4/tcp_max_syn_backlog 값 확인 후
sysctl -w net.ipv4.tcp_max_syn_backlog=[변경 값]

icmp에 의한 공격들의 대응 방안은 현재는 보통 주요 서버나 라우터에서 기본적으로 icmp를 받지 않도록 설정을 하고 있습니다. 또한 따라서 icmp를 받지 않는게 가장 좋은 방법이라 할 수 있습니다.

UDP FLOODING는 미사용 udp포트 차단, 라우터 config에서 액세스 리스트를 만들어 차단합니다.

0개의 댓글