해킹 실습/Network

Ping Flooding (DoS) 공격과 Snort 탐지

mi,, 2022. 9. 5. 03:06

예전에 냈던 과제 정리함

1. 공격 개요

  • Ping Flooding

DoS 공격의 일종인 Ping Flooding은 막대한 양의 ICMP 에코 요청 패킷(ping 패킷)을 대상 호스트에게 전송해 네트워크 자원을 소모시켜 궁극적으로 대상 시스템을 마비시킨다. ping 응답을 기다리지 않고 되도록 빨리 대량의 ICMP 패킷을 보내는 ping 옵션을 사용하는 것이 공격의 핵심이다.

 

  • hping3

Ping Flooding 공격을 수행하기 위해 hping3를 이용한다. hping3는 패킷 생성 툴로 TCP/UDP/ICMP 등의 3계층 이상의 다양한 패킷 생성이 가능하며, 이 툴을 이용해 ICMP 패킷을 생성하여 공격 대상에게 대량으로 전송할 것이다. 

 

  •  Snort

Ping Flooding 공격을 수행한 후, Snort를 이용해 DoS 공격을 탐지할 것이다. Snort란 네트워크 상에서 실시간으로 트래픽을 분석하며 패킷 로깅을 수행하는 네트워크 침입 차단 및 탐지 시스템이다. 따라서 Snort를 이용해 DoS 공격을 탐지한 결과를 로그 파일로 생성하여 확인한다. 

 

 

2. 실험 환경

 

• 공격자 PC: 우분투 20.04 - 192.168.81.132 

 

• 공격 대상 PC: 우분투 20.04 - 192.168.81.129 

 

• 필요 프로그램: hping3, Snort 

 

• Snort 파일 위치

- 정책(룰) 파일: /etc/snort/rules/local.rules

- alert 로그 파일: /var/log/snort/alert 

 

 

3. 공격 과정

 

 공격을 위한 환경 세팅

 

  • Snort 설치

Snort 설치는 전반적으로 이 링크를 보고 따라함(https://fni8383.tistory.com/35) 친절하게 잘 정리되어있어서 도움을 많이 받음

 

여담이지만 snort 설치 방법 찾아보면 모두 관련 패키지 설치 →  daq 설치 → snort 설치 순으로 진행하는데, 하라는대로 다 했는데도 snort가 실행되지 않아서 ^^..  물론 내가 설치 과정중에 뭔가를 잘못한거겠지만 암튼 위 링크 방법으로 설치하는 것이 가장 간단하고 좋은 거 같다.

 

돼지와 함께 설치 완료 문구 뜸

 

기존의 룰 주석 처리(/etc/snort/snort.conf에서 578~696줄) 

사용자가 설정한 대로 실행하는 local.rules만 남게 된다. 

 

 

 

② Ping Flooding 탐지를 위한 snort 사용자만의 룰 추가 

 

  • Snort 기본 구문 

alert icmp any any  192.168.81.129 any (msg: “Ping Flooding Detection”; threshold: type threshold, track by_dst, count 5, seconds 10; sid: 1000001;) 

 

 

HEADER: alert icmp any any  192.168.81.129 any 

ICMP 프로토콜에 대해 임의의 IP에서 192.168.81.129로 들어오는 패킷에 대해 alert를 해라라는 뜻이다. 

 

OPTION: (msg: “Ping Flooding Detection”; threshold: type threshold, track by_dst, count 5, seconds 10; sid: 1000001;) 

 

#msg

alert가 발생하면 msg가 설정된 문장을 로그파일에 기록 

 

#threshold 옵션

threshold는 설정시간 동안 동일한 패킷이 일정 수 발생하게 되면 경고나 알림을 기록하며, 패킷 발생량을 검사하는 역할을 수행한다. 

threshold: type <threshold|limit|both>, track by_<dst|src>, count <num>, seconds <sec>; 

threshold: 횟수마다 탐지 

dst: 목적지 패킷만 탐지 

 

#sid

1000000 이상의 값은 사용자가 local.rules 탐지 규칙을 설정할 때 임의로 사용

 

 

alert icmp any any  192.168.81.129 any (msg: “Ping Flooding Detection”; threshold: type threshold, track by_dst, count 5, seconds 10; sid: 1000001;) 

→ 결국 해당 구문을 해석하자면 임의의 IP에서 192.168.81.129ICMP 패킷이 10초에 5번 수신된다면 alert를 띄우는 id 1000001룰이다. 

 

위의 룰을 /etc/snort/rules/local.rules에 추가한다. 

 

 

 

 

③ Snort 실행 

 

Snort를 사용자가 설정한 룰 파일에 대한 탐지모드로 실행한다. 정상적으로 실행된다면 ‘Running in IDS mode’라는 문구를 볼 수 있다. 

 snort -i eth0 -A console -c /etc/snort/rules/local.rules로 실행 

 

-i : eth0으로 설정 

-A : 콘솔로 경고를 출력

-c : 자신이 만든 룰로 실행 

 

 

④ Ping Flooding 공격 및 snort 탐지

 

  • Ping Flooding 공격 ①

 hping3 --icmp --rand-source --flood 192.168.81.129로 실행 

 

--icmp: 패킷 종류를 icmp로 선택 

--rand-source: 공격자의 IP주소를 랜덤하게 생성 

192.168.81.129: 공격 대상 시스템의 IP 주소 

--flood: 시스템이 생성 가능한 만큼 빠른 속도로 패킷 전송 

 

  • snort 탐지 결과 확인 ① 

공격자의 IP는 랜덤하게 생성된 모습을 볼 수 있으며, 공격 대상 IP192.168.81.129으로 고정된 것을 확인할 수 있다. 

 

 6 동안 패킷을 전송하고 그 결과 ICMP 패킷 25649개가 수집된 것을 확인할 수 있다. 

 

 

 

  • Ping Flooding 공격 ②
실명이 나와서 가렸는데 경로는 공격 1과 같음

 snort -i eth0 -q -c /etc/snort/rules/local.rules로 실행 

-q: 조용히 실행

 

  • snort 탐지 결과 확인 ② 

more /var/log/snort/alert 확인 

 

 

이전과 같이 콘솔 창에서 실시간으로 탐지 결과가 뜨는 것이 아니라 alert 로그 파일에서 Ping Flooding 탐지 결과를 확인할 수 있다.