정보보안 공부/네트워크

[네트워크] IP Fragmentation의 취약점을 이용한 Ping Of Death 공격

pxatd 2022. 6. 26. 18:21
728x90

*2022-1 네트워크 보안 과제 백업입니다. 

 

1. 공격 대상

서비스 거부(DoS) 공격은 가장 파괴적이고 전 세계적으로 비즈니스 운영에 영향을 미치 는 사이버 공격 유형 중 하나이다. DoS의 확장된 공격은 분산 DoS (DDoS, Distribution Denial of Service)로, 여러 장치에서 공격을 가하여 희생자 컴퓨터의 네트워크 트래픽을 과부하 시키고 궁 극적으로는 시스템의 막대한 자원을 활용하여 서비스를 중단시킨다. DDoS 공격은 불필요한 요청 을 네트워크 서버로 과도하게 많이 보내며, 불필요한 요청은 희생자가 원하는 시스템 자원을 사 용할 수 없게 만든다. 그 중 프로토콜 공격의 유형에는 Ping of Death가 있다.

Ping 프로그램은 호스트에게 ICMP 에코 요청 메시지를 보내고, 그 응답으로 ICMP 에코를 수신하여 호스트에 도달할 수 있는지 여부를 테스트한다. Ping은 또한 호스트까지의 왕복 시간을 측정하여 호스트가 얼마나 멀리 떨어져 있는지에 대한 표시를 제공하고 네트워크가 혼잡한지 여부를 결정하는 데 유용하게 활용된다. IP 데이터그램의 최대 크기는 65,535(2^16 -1) 이다. 기본 링크 계층이 처리할 수 있는 최대 크기보다 더 큰 데이터그램을 보낼 경우 작은 데이터그램으로 조각낸 다음 재조립 된다. Ping of Death 공격은 이 과정에서 생기는 허점을 악용한 것이다.

 

예를 들어, 20000Byte의 크기로 ping을 보냈다고 가정해보자. 이더넷 환경에서 MTU(Maximum Transmission Unit)는 기본적으로 1500으로 설정되어 있기 때문에 20000Byte의 크기로 ping을 보내면 최대 전송 단위인 MTU를 초과해버린다. 따라서 단편화(Fragmetation)가 발생해 약 13개의 패킷으로 분할되어 전송되며, 패킷을 수신한 후에 다시 재조합하여 원래의 패킷이 만들어진다.

 

하지만, 운영 체제는 일반적으로 모든 조각을 재조립할 때까지 데이터그램을 처리하지 않는다는 특성이 있다. 따라서, 앞서 제시한 예시처럼 ICMP 패킷을 정상적인 크기보다 아주 크게 만들어진 패킷을 전송할 경우 공격대상 시스템은 작게 조각화 된 패킷을 모두 처리해야 하는 상황이 발생한다. , 정상적인 Ping의 경우보다 훨씬 많은 부하가 걸리게 되어 결론적으로 시스템 충돌, 재부팅, 커널 덤프 등의 오류로 이어지게 된다. 특히 Windows 95, Windows NT Linux와 같이 사용자가 불법적인 크기의 Ping을 보낼 수 있는 운영 체제를 사용하는 경우에는 더욱 그렇다. 이 보고서는 DoS DDoS 공격 중 하나인 Ping of Death 공격 실습을 진행하고 그 결과를 자세하게 분석하여 서술할 예정이다.

 

 

2. 실험 환경

2.1 실험 환경 구성

실험 환경은 가상머신에 설치된 리눅스 우분투와 윈도우 서버 2016, 윈도우 10 총 세대를 사용한다.

  • 공격자 PC : Linux Ubuntu 192.168.189.1XX
  • 희생자 PC : Windows server 2016 192.168.189.1XX
  • 공격 확인용 PC : Windows 10 192.168.1.1XX
  • 필요 프로그램 : hping3, wireshark
  •  

2.2 실험 환경 설치

1) sudo apt-get install hping3 명령어를 통해 hping3을 설치 한다.

 

2) sudo apt-get -y install wireshark 명령어를 통해 wireshark를 설치 한다.

 

 

3. 공격 과정

1) 공격 확인용 PC(Windows 10)에서 희생자 PC(Windows Server 2016)에게 ping을 보내 통신에 문제가 없다는 응답 메세지를 확인한다.

 

2) 희생자 PC (Windows Server 2016) 작업관리자의 CPU와 네트워크의 사용량 상태를 확인한다.

 

3) 원활한 실습을 위해 희생자 PC (Windows XP)의 방화벽을 해제한다.

 

4) 공격자 PC (Ubuntu)를 실행시켜 sudo hping3 --icmp --rand-source --flood 192.168.189.138 -d 65000를 입력한다.

hping 각각의 옵션은 다음과 같다.  

  • --icmp : icmp 프로토콜 사용
  • -d 65000 : 65000byte의 패킷을 전송
  • -flood : 최대한 빨리 전송을 요청함

 

5) 공격을 실행한 후 희생자 PC (Windows Server 2016) 작업관리자의 CPU와 네트워크 사용량을 확인한다. 추가로 공격자 PC(Ubuntu)에 설치된 wireshark를 통해 패킷도 분석해본다.

 

6) 공격 확인용 PC(Windows 10)에서 희생자 PC (Windows Server 2016) 에게 ping을 날렸을 때 응답 메시지를 확인한다.

공격을 시작하게 되면 다른 PC에서 icmp 패킷을 보냈을 때 응답까지 오랜 시간이 걸리는 것을 확인할 수 있다.

 

 

4. 결과 분석

4.1 wireshark 패킷 분석

와이어샤크 프로그램을 통해 ICMP 패킷을 캡쳐하여 확인한다.

패킷의 크기가 MTU 1500byte를 넘어서 조각으로 나누어 전송하고 있는 모습을 확인할 수 있다. 이러한 행위를 단편화(fragment)라고 한다.

 

4.2 작업 관리자 확인

희생자 PC 의 작업관리자 창에서 ping of death 공격을 진행했을 때 CPU 사용량과 네트워크 사용량을 확인한다.

Ping of death 공격을 진행하기 전 CPU()와 네트워크()의 상태이다. CPU의 점유율이 10%정도 차지하고 있다. 네트워크 사용량 역시 적음을 알 수 있다.

Ping of death 공격을 진행하고 있을 때 캡쳐한 사진이다. 위의 사진과 비교하여 확연히 CPU 점유율과 네트워크 사용량이 늘어났음을 확인하였다.

추가로, Ping of death 공격을 시작한 직후와 공격을 중단한 직후의 CPU 점유율도 캡쳐 해 보았다. 공격 전 후로 CPU점유율이 많이 차이 차이나는 것을 육안으로 확인하였다. 이러한 실습 과정과 비교를 통해 일정 규격 이상의 ICMP 패킷을 전송하여 시스템을 마비시키는 Ping of death 공격을 확실히 이해할 수 있다.

 

4.3 공격에 대한 대응 방안

1) 브로드캐스트나 멀티캐스트 주소로 들어오는 ICMP Echo Request에 대해서 응답하지 않도록 설정한다.

2) ICMP Echo Reply 패킷을 차단하거나 rate-limit을 이용하여 서비스 품질(Quality of Service)을 설정한다.

3) 방화벽이나 라우터를 필터링하여 증폭기 역할을 하지 않도록 한다.

4) MTU보다 큰 Ping을 차단하거나 일정 수 이상의 ICMP 패킷을 무시하도록 설정한다.

5) Ping of death 공격에 방어할 수 있도록 업데이트 된 운영체제를 설치한다.

728x90