네트워크 침입 탐지 기술에 대해 공부하면서 대표적인 오픈소스 NIDS인 Snort를 이용해서 네트워크 공격을 탐지하는 실습을 진행했다.
Snort는 네트워크 보안에서 널리 사용되는 오픈 소스 기반의 침입 탐지 시스템(IDS) 및 침입 방지 시스템(IPS)으로 네트워크 트래픽을 분석하고, 악성 활동을 탐지하며, 이를 차단하거나 경고를 생성하는 데 사용된다.
먼저 net-tools를 설치해주고 ifconfig 명령어로 기기의 ip 주소를 확인해준다
sudo apt install net-tools

sudo apt update
sudo apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf libtool
sudo apt install snort
기기의 IP 주소를 확인하고 다음 명령어를 입력해 snort를 설치한다

/etc/snort/snort.conf 경로에 있는 snort.conf 파일을 nano 편집기로 편집한다. 권한이 없다고 뜨면 sudo 명령어를 붙여서 root 권한으로 실행하면 된다

파일에서 'ipvar HOME_NET any'를 찾아서 any를 ifconfig를 통해서 확인했던 IP주소로 변경한다.

snort.conf 파일에서 'include $RULE_PATH/local.rules'를 제외한 나머지 규칙을 주석처리한다.
local.rules 파일에 공격이 탐지될 때 작동할 수 있는 규칙을 적어놓기 위해서 local.rules 파일과 연결해준다

이후 rules 디렉토리 안에 있는 local.rules 파일로 들어가서 규칙을 추가해준다
✅ Snort 룰 필수 구조 (기본 템플릿)
alert 프로토콜 source_IP source_port -> dest_IP dest_port (옵션들)
옵션 필수 항목들:
msg: → 경고 메시지
sid: → 고유 룰 ID
rev: → 룰 수정 버전
classtype: → 분류 (선택적이지만 좋음)

alert icmp any any -> [snort 설치된 기기의 ip주소] any (msg:"ICMP to target"; sid:1000001; rev:1;)
다음과 같이 ICMP flood 감지를 위한 룰을 추가했다


sudo snort -T -c /etc/snort/snort.conf -i lo 명령어를 입력해 snort를 구동해주면 snort successfully 라고 뜨는 걸 확인할 수 있다
실습을 위해 snort가 설치된 vm 외에 다른 리눅스pc나 vm을 준비한다
sudo tcpdump -i ens33 icmp 명령어를 입력해서 tcpdump로 icmp 핑을 잡는 테스트를 해보았다
여기에서 ens33은 실습을 위해 사용하는 네트워크 인터페이스이고 icmp는 실시간으로 오는 패킷들 중 icmp만 필터링해서 보기 위해 추가해주었다


이렇게 같은 vm에서 구글의 DNS인 8.8.8.8로 핑을 보내주면 tcpdump가 정상적으로 패킷을 잡는 것을 확인하였다
이제 hping3 flood를 이용해서 snort가 설치된 vm에 공격을 할 것이다
hping3는 네트워크 보안 및 테스트를 위해 사용되는 TCP/IP 패킷 생성 도구로, 다양한 프로토콜(TCP, UDP, ICMP)을 지원하며 네트워크 상태 분석, 포트 스캔, 그리고 DDoS 공격 테스트 등에 활용된다. Flood 공격은 hping3의 주요 기능 중 하나로, 특정 대상에 대량의 패킷을 빠르게 전송하여 네트워크나 시스템에 과부하를 유발하는 역할을 한다
snort가 설치된 vm에 다음과 같은 명령어를 입력해준다
sudo snort -A console -q -c /etc/snort/snort.conf -i ens33
-A console: 경고를 화면에 출력 -q: 잡다한 출력 제거 -i ens33: 실제 네트워크 인터페이스 이름 넣기
그리고 공격을 할 vm에도 터미널 2개에 tcpdump 명령어와 hping3 flood를 실행하는 명령어를 각각 입력한다
sudo tcpdump -i ens33 icmp
sudo hping3 [snort설치ip] -a [공격ip] --flood --icmp

그러면 다음과 같이 snort가 정해놓은 규칙대로 공격을 탐지하고 alert를 보내는 것을 확인할 수 있다
ICMP to target → msg: 메시지 정상 출력됨
[Priority: 0] → 경고 우선순위도 잘 표시됨
공격 vm ip -> snort vm ip → 소스/목적지 IP도 정확히 나옴
룰 SID 1000001도 잘 보임 → 설정한 custom 룰 작동 중
참고
https://velog.io/@dkdldb7769/snort-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%EC%8A%B5
snort 설치 및 실습
snort를 설치하고 잘 작동하는지 확인한다.
velog.io