네트워크 보안/네트워크 보안 실습

DoS ( 서비스 거부 공격 ) 실습

simtongs 2022. 5. 10. 17:50

- 개인적으로 교육받는 내용으로 적는 글이므로 자료의 정확도나 전문성이 떨어질 수 있음을 서두에 알리고 시작한다.

 

실습 환경은 VMware에 Kali-Linux 2022-1 버전과 Metaspolitable2를 사용한 실습이다.

 

타겟은 Metaspolitable2로 잡아 DoS 공격을 진행하며 과정을 Wireshark를 이용하여 패킷 분석을 해볼 예정이다.

 

총 준비물은 가상머신에서 칼리 리눅스와 메타스폴리터블2 그리고 스니핑을 수행할 와이어샤크 총 3가지

 

 

 

1. DoS 공격

 

DoS, Denial-of-Service : 서비스 거부 공격은 특정 네트워크나 웹 리소스에 정상적인 유저가 접근하지 못하도록 방해하는 공격이다.

 

일반적으로 막대한 양의 트래픽을 통해 과부하를 주거나 서버의 백로그 같은 자원을 고갈시켜 오작동을 일으키거나 정지시키는 것이 목적인 공격이다.

 

DoS 공격을 다수가 단일 서버로 수행하는것이 분산 서비스 거부 공격 DDoS, Distibuted Denial-of-Service 다.

 

이번 DoS 공격 실습은 칼리리눅스에 있는 hping3를 사용하여 실습을 진행한다.

 

 

 

2. ICMP Flood 공격

 

 - ICMP는 인터넷 제어 메시지 프로토콜의 약자.

 - Ping of Death 라고도 불린다.

 - 네트워크 연결상태를 점검할때 쓰는 Ping 기능에서 패킷을 최대한 길게 (65,500byte) 보내면 패킷은 네트워크의

   설정에 따라 여러개의 패킷으로 잘게 쪼개지게 되는데 공격을 받는 측에서는 대량의 작은 패킷을 수신하게 되고

   이를 재조립하는 과정에서 과부하가 걸려 네트워크가 마비되는 방식이다.

 

 

ICMP Flood 공격 명령어

$ sudo hping3 --icmp -d -i u (target  ip address)
ex) sudo hping3 --icmp -d 65000 -i u1000 192.168.5.132

 

 

-d : 데이터 사이즈 ( -d 65000 : 65000bytes )

-i : 시간 간격을 설정

u : 마이크로초 ( u1000 1000microsec )

 

 

명령어를 풀어서 설명해 보면

hping3 을 이용해 65000바이트를 1000마이크로초마다 ip주소로 보내겠다는 의미이다.

 

이를 와이어샤크 패킷 캡처를 켜 놓고 칼리 리눅스의 콘솔에서 실행시켜 본다.

 

 

칼리 리눅스에서 ICMP Flood 공격 수행

 

 

공격은 짧게 끝냈으며 도중에 멈추는 방법은 ctrl + C를 눌러 중단한다.

 

 

52초에 공격 시작
57초에 공격 끝

 

 

패킷의 시작과 끝을 캡처한 사진인데 5초도 안되는 시간에 약 317500개의 패킷을 보낸것을 볼 수 있다.

 

 

공격측에서 보낸 패킷의 내부 데이터

 

 

또한 패킷안의 데이터는 아스키 코드 58 ( X ) 로만 채워진 쓰레기 데이터임을 확인할 수 있다.

 

 

 

3. LAND Attack

 

 - LAND Attack은 위의 ICMP 공격에서 출발지 IP주소를 Target의 IP 주소로 지정한 공격이다.

 - IP 주소를 속이는 IP 스푸핑을 이용한 공격

 - 공격을 받은 서버는 자기 자신에게 패킷을 받고 다시 자기 자신에게 패킷을 전송하게 되는 루프에 걸리거나

   무의미한 연결을 지속하게 되어 부하가 걸리는 공격 방식이다.

 

 

LAND 공격 명령어
$ sudo hping3 --icmp -d -i u (target  ip address) -a (target  ip address)
ex) sudo hping3 --icmp -d 65000 -i u1000 192.168.5.132 -a 192.168.5.132

 

 

-a : 패킷 출발지 주소를 지정

 

 

칼리 리눅스에서 LAND Attack 수행

 

 

LAND Attack은 길게 뜨지 않았다.. 역시 ctrl + C 로 탈출.

 

 

LAND Attack의 IP주소 확인

 

 

LAND 공격은 출발지와 도착지 IP 주소가 같음을 확인할 수 있고,

 

 

LAND Attack 패킷의 데이터

 

 

역시 패킷 내부는 X로 채워져 있는 쓰레기 데이터 임을 확인할 수 있다.

 

 

 

4. Smurf Attack

 

- Smurf Attack은 LAND Attack 과 비슷하게 출발지 IP 주소를 공격 대상의 IP 주소로 설정하나

  목적지 IP 주소를 Direct Broadcast로 설정하는 공격이다.

- 공격자는 공격대상의 IP주소로 위장한 ICMP Echo Request 메시지를 브로드캐스트하는데

  이는 브로드캐스트 주소에서 공격대상으로 대량의 ICMP Echo Request 메시지가 전송되게 된다.

- 브로드캐스트 주소에서 다수의 패킷을 생성하여 이를 공격대상은 Echo Reply 패킷을 출발지로 보내려고 하는과정에서

  공격대상이 과부하가 걸려 네트워크가 마비되는 공격이다.

 

 

Smurf 공격 명령어

$ sudo hping3 --icmp -d -i u (Broadcast address) -a (target  ip address)
ex) sudo hping3 --icmp -d 65000 -i u1000 192.168.5.255 -a 192.168.5.132

 

 

스머프 공격에 앞서 ICMP Echo를 Broadcast로 받더라도 응답하도록 설정을 해줘야 공격이 되는것을 볼 수 있다.

 

명령어는 다음과 같다.

 

 

ICMP Echo를 Broadcast로 받더라도 응답하도록 설정하는 명령어

$ sudo  sysctl  -w  net.ipv4.icmp_echo_ignore_broadcasts=0

 

 

ICMP Echo를 Broadcast로 받더라도 응답하도록 설정

 

 

설정이 완료 되었다면 스머프 공격 명령어를 수행한다.

 

 

칼리 리눅스에서 Smurf Attack 수행

 

공격이 두곳에서 되는 모습

 

 

공격자가 되는 칼리 리눅스 주소인 192.168.5.128이 공격을 진행하고 있고,

브로드캐스트로 잡힌 192.168.5.2 주소 또한 공격에 동원되고 있음을 확인하고 있다.

 

 

서버의 request 패킷

 

 

공격 대상에서는 브로드캐스트인 192.168.5.132로 request를 보내는 모습을 확인할 수 있다.

 

 

5. SYN Flooding

 

- 위의 세가지 DoS 공격은 ICMP를 이용한 공격이라면 SYN Flooding 공격은 SYN 패킷을 보내 공격하는 방식이다.

- 공격자는 공격 대상의 서버에 SYN 패킷을 보내고 SYN 패킷을 받은 서버는 SYN-ACK로 응답한후 대기하게 된다.

  이때 공격자는 응답하지 않고 계속해서 SYN 패킷만을 보내는데 공격 대상이 된 서버는 연결요청을 저장하는

  백로그가 가득 차게 되어 다른 연결 요청의 정보를 저장이 불가능하게 되는 공격 방식이다.

- 서버의 백로그 큐는 한정적인 용량을 가지고 공격자는 가용성을 침해하는 방식이다.

 

 

SYN Flooding 공격 명령어

$ sudo hping3 -S (target  ip address) -p (port) -i u(microsec)
ex) sudo hping3 -S 192.168.5.132 -p 80 -i u1000

 

 

칼리 리눅스에서 SYN Flooding 공격 수행

 

 

포트 80번에 대해 SYN Flooding 공격을 진행했다.

 

 

SYN Flooding의 공격 방식

 

 

서버는 SYN을 받고 SYN, ACK 패킷을 보내고 있으나 공격자는 무시하고 계속 SYN만을 보내고 있는것을 확인했다.

 

이렇게 서버의 백로그 큐가 가득차게 되면 정상적인 트래픽의 접근이 불가능해지는 공격이다.