Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
network-security-snort — Kali에서의 Snort 3 IDS → IPS 실습. 사용자 정의 탐지 규칙 + iptables 적용: ICMP 정찰, Nmap SYN 스캔, Hydra FTP 무차별 대입 공격, vsftpd 2.3.4 백도어(CVE-2011-2523) 대응. | Kitploit
도구/GitHubGitHub/taisa456/network-security-snort
Defensive ToolsVulnerability AnalysisExploitationIDS/IPS EvasionNetwork SecurityPenetration TestingIntrusion DetectionLearning & EducationLabs & Practice
GitHubtaisa456/network-security-snort

network-security-snort

Kali에서의 Snort 3 IDS → IPS 실습. 사용자 정의 탐지 규칙 + iptables 적용: ICMP 정찰, Nmap SYN 스캔, Hydra FTP 무차별 대입 공격, vsftpd 2.3.4 백도어(CVE-2011-2523) 대응.

63개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

Snort IDS/IPS 배포 실습

Snort 3을 침입 탐지 시스템(수동 모니터링)과 침입 방지 시스템(iptables를 통한 능동 차단)으로 모두 사용하는 전체 사이클 배포로, Kali Linux상의 세 대의 가상 머신 네트워크에서 네 가지 공격 벡터에 대해 검증했습니다.

이 실습은 탐지와 방지의 운영적 차이를 증명합니다. 동일한 네 가지 벡터 공격 체인을 두 번 실행합니다. 처음에는 로그만 기록하고 차단할 수 없는 IDS를 대상으로, 그 다음에는 선택적으로 공격을 차단하면서도 정상 트래픽은 유지하는 IDS + iptables IPS 계층을 대상으로 합니다.


목차

  • 실습 환경
  • 네트워크 토폴로지
  • 방법론
  • Snort 설정
  • 사용자 정의 탐지 규칙
  • 1단계 — IDS 모드
  • 2단계 — IPS 모드
  • IDS 대 IPS — 나란히 결과 비교
  • 논의
  • 아키텍처 참고
  • 저장소 구조
  • 실습 재현하기
  • 윤리적 고지
  • 라이선스

실습 환경

구성 요소세부 사항
분석기 / 라우터Kali Linux — 어댑터 3개: eth0 WAN (192.168.10.143, NAT), eth1 LAN1 (10.10.10.1, 호스트 전용), eth2 LAN2 (192.168.50.1, 호스트 전용)
공격자Kali Linux — VMnet9의 eth0 (10.10.10.10) — 기본 게이트웨이 10.10.10.1
대상Metasploitable 2 — VMnet10의 eth0 (192.168.50.10) — 기본 게이트웨이 192.168.50.1
Snort 버전Snort++ 3.12.1.0-0kali1 (분석기에 설치)
공격 도구Nmap 7.99, Hydra v9.6, Metasploit Framework (msfconsole)
가상화VMware — VMnet9 = 10.10.10.0/24, VMnet10 = 192.168.50.0/24 (둘 다 호스트 전용)

네트워크 토폴로지

공격자와 Metasploitable 간의 모든 트래픽은 분석기를 통해 강제로 전달되어, 모니터링과 시행 모두에 자연스러운 병목 지점이 됩니다.

root@kitploit:~
                           ┌─────────────────────────┐
                           │   분석기 / 라우터       │
                           │   Kali + Snort 3        │
                           │                         │
   공격자 Kali ──VMnet9────┤ eth1: 10.10.10.1        │
   10.10.10.10             │                         │
                           │ eth0: 192.168.10.143 ───┼──> WAN (NAT)
                           │                         │
   Metasploitable 2 ─VMnet10┤ eth2: 192.168.50.1     │
   192.168.50.10           │                         │
                           └─────────────────────────┘

그림이 준비되면 이 ASCII 스케치를 screenshots/01-network-topology.png로 교체하세요: 토폴로지


방법론

실습은 동일한 네 가지 공격 벡터 체인을 사용하여 두 단계로 실행됩니다:

  1. ICMP 정찰 — 호스트 발견을 위한 ping
  2. Nmap SYN 스캔 — 포트 열거를 위한 nmap -sS (1000개 포트)
  3. Hydra FTP 무차별 대입 — vsftpd 서비스에 대한 자격 증명 공격
  4. vsftpd 2.3.4 백도어 — CVE-2011-2523에 대한 Metasploit 익스플로잇

1단계 (IDS) 는 분석기에서 5개의 사용자 정의 규칙을 사용하여 Snort를 수동으로 실행합니다. 실시간으로 경보를 관찰하고, 공격이 계속 진행됨을 확인합니다.

2단계 (IPS) 는 Snort를 정밀 드롭 규칙을 사용하는 iptables 시행 계층과 결합합니다. ICMP 핑과 정상 FTP 로그인은 정상 작동하는 동안 공격이 차단됨을 확인합니다.

배포 전 설정

  1. 분석기에 VMware에서 3개의 NIC(호스트 전용 2개, NAT/브리지 1개)를 구성합니다.
  2. IP 전달을 활성화하고 MASQUERADE + FORWARD 규칙을 추가하여 분석기가 서브넷 간 및 WAN으로 라우팅할 수 있도록 합니다. 자세한 내용은 scripts/router_config.sh를 참조하세요.
  3. Snort를 설치하기 전에 scripts/ping_check.sh를 사용하여 각 VM 간 종단간 연결을 확인합니다.

Snort 설정

Snort는 Kali 패키지 관리자를 통해 설치되며(sudo apt install snort -y) /etc/snort/snort.conf에서 구성됩니다:

root@kitploit:~
HOME_NET = "10.10.10.0/24,192.168.50.0/24"
EXTERNAL_NET = "any"

ips = {
    enable_builtin_rules = true,
    include = "/etc/snort/rules/local.rules",
    variables = default_variables
}

alert_fast = { file = true, packet = false }

HOME_NET은 두 내부 서브넷을 모두 포함하므로 Snort는 분석기의 모든 서브넷 간 트래픽을 검사할 가치가 있는 것으로 간주합니다. alert_fast는 간결한 한 줄 경보를 생성합니다(패킷당 로깅은 과도한 양을 생성함).

구성 검증:

root@kitploit:~
sudo snort -T -c /etc/snort/snort.conf
# 결과: 652개 규칙 로드됨 (사용자 정의 5개 텍스트 + 내장 647개), 경고 0개

사용자 정의 탐지 규칙

/etc/snort/rules/local.rules에 있는 5개 규칙(전체 파일은 scripts/local.rules 참조):


1단계 — IDS 모드

Snort는 두 내부 인터페이스에서 수동 모드로 실행됩니다:

root@kitploit:~
sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 \
    -A alert_fast -l /var/log/snort/

# 두 번째 터미널에서 경보를 실시간 확인:
sudo tail -f /var/log/snort/alert_fast.txt

시작 출력은 pcap DAQ configured to passive를 확인합니다. Snort는 모든 패킷을 보지만 그 중 어느 것도 드롭하거나 수정할 수 없습니다.

IDS 결과

공격자에서 scripts/attack_simulator.sh 실행 후:

IDS는 모든 것을 탐지했지만 아무것도 막지 못했습니다. 이것이 1단계의 핵심 교훈입니다: 시행 없는 작동하는 IDS는 경보 시스템일 뿐, 잠금 장치가 아닙니다. 인간 분석가가 경보를 읽을 때쯤이면 공격자는 이미 루트 권한을 획득한 상태입니다.

부차적 관찰: Snort의 내장 규칙(116:408, 116:414)이 DHCP 브로드캐스트 트래픽에서 발동됩니다. 악의적이지는 않지만, 프로덕션 환경에서는 경보 로그를 실행 가능하게 유지하기 위해 억제 규칙이 필요합니다.


2단계 — IPS 모드

IPS 계층은 scripts/ips_setup.sh로 배포되며, 다음을 수행합니다:

  1. 기존 iptables 규칙을 플러시합니다.
  2. IP 전달을 다시 활성화하고 기본 라우팅을 재적용합니다.
  3. 특정 공격 시그니처를 대상으로 하는 4개의 정밀 드롭 규칙을 적용합니다.
  4. 지속적인 로깅을 위해 Snort를 데몬 모드(-D)로 실행합니다.

iptables 규칙

IPS 결과

공격자에서 동일한 공격 스크립트를 재실행:

정상 트래픽 유지

두 가지 수동 확인으로 선택적 시행이 확인됨:

  • ping -c 4 192.168.50.10 → 4개 패킷 전송, 4개 수신, 0% 손실
  • msfadmin:msfadmin으로 ftp 192.168.50.10 → 220 (vsFTPd 2.3.4) … 230 Login successful

실행 중 iptables 패킷 카운터의 정량적 증거: 2051개 패킷 허용, 12개 패킷이 FTP connlimit 규칙에 의해 드롭됨, 808개 ICMP 패킷 허용됨 — 숫자로 보는 선택적 시행.

지속적인 Snort 로깅

IPS 모드에서도 Snort는 iptables가 후속 패킷을 드롭하기 전에 수동 검사 지점에 도달한 패킷에 대해 SID 1000002 / 1000003 경보를 계속 발동했습니다. 즉, iptables는 시행을 제공하고 Snort는 감사 로깅을 제공하며 함께 작동합니다.


IDS 대 IPS — 나란히 결과 비교


논의

IDS 모드에서 모든 시뮬레이션 공격이 탐지되었나요?

네 — SID 1000001–1000004 각각이 공격 시뮬레이션 중에 올바르게 발동되었습니다:

  • ICMP 핑 (1000001) — 모든 에코/응답에 대한 양방향 경보.
  • Nmap SYN 스캔 (1000003) — 수 밀리초 내에 경보 폭주, 특징적인 소스 포트 무작위화.
  • FTP 무차별 대입 (1000002) — 정확한 타임스탬프와 함께 Hydra의 병렬 연결 시도에 대한 깨끗한 감사 추적.
  • vsftpd 백도어 (1000004) — :) 내용 일치가 정확한 익스플로잇 바이트 시퀀스를 포착했습니다.

하지만 탐지 ≠ 예방입니다. vsftpd 익스플로잇은 모든 경보가 발동되는 동안 루트 Meterpreter 셸을 열었습니다. IDS를 실시간으로 모니터링하는 SOC 분석가는 침해를 보았을 것입니다. 그러나 공격자가 몇 초 만에 루트가 된 상황에서 경보만으로는 충분하지 않습니다. 이것이 IPS가 존재하는 운영적 핵심입니다.

IPS가 정상 트래픽을 방해하지 않고 공격을 차단하는 데 얼마나 효과적이었나요?

구현은 정상 트래픽에 관찰 가능한 영향 없이 완전한 공격 완화를 달성했습니다. 효과성은 정밀 규칙 설계에서 비롯됩니다. 각 iptables 규칙은 광범위한 프로토콜이 아닌 행동 시그니처를 대상으로 합니다:

  • SYN 속도 제한은 정상 핸드셰이크에 영향을 주지 않으면서 포트 스캔의 플러드 패턴을 깨뜨립니다.
  • 소스당 connlimit 은 단일 세션 FTP를 방해하지 않으면서 무차별 대입 도구의 병렬 처리를 차단합니다.
  • STRING 일치는 정상 FTP 로그인 트래픽을 필터링하지 않으면서 정확한 익스플로잇 페이로드를 드롭합니다.

인정된 한계: ICMP는 완전히 허용되므로 공격자는 여전히 핑을 통해 Metasploitable이 살아 있음을 확인할 수 있습니다. 보안 수준이 더 높은 환경에서는 속도 제한을 두거나 신뢰할 수 있는 소스로 제한할 것입니다. 이 실습에서 ICMP는 기본 연결 확인 메커니즘이므로 열어 둡니다.

전용 Snort 머신 대 pfSense/OPNsense 플러그인

이 실습은 전용 Snort 머신을 사용합니다. pfSense 또는 OPNsense와 같은 방화벽 어플라이언스 내에서 Snort를 플러그인으로 실행하는 것과 비교하여:

전용 접근 방식의 장점:

  • 성능 격리 — 패킷 검사 전용으로 전체 CPU 및 RAM 사용 가능; 라우팅, DHCP, VPN, DNS와의 경합 없음.
  • 배치 유연성 — IDS/IPS는 인라인, SPAN/미러 포트, 또는 경계 방화벽에 도달하지 않는 동서 트래픽을 모니터링하기 위해 내부 세그먼트 경계에 배치할 수 있습니다.
  • 완전한 구성 제어 — 모든 전처리기, DAQ 설정, 출력 플러그인 및 규칙 업데이트 일정을 CLI를 통해 구성할 수 있습니다. pfSense는 GUI를 통해 하위 집합만 노출합니다.
  • 복원력 — IDS/IPS 머신은 라우터와 독립적으로 오픈 실패 또는 폐쇄 실패 모드를 선택할 수 있습니다. pfSense에서 Snort 충돌은 라우팅과 탐지를 동시에 중단시킵니다.

트레이드오프:

  • 더 가파른 학습 곡선 — CLI 숙련도와 직접적인 규칙 세트 관리가 필요합니다.
  • 유지 관리 오버헤드 — 규칙 업데이트, 버전 업그레이드, 로그 로테이션이 모두 수동입니다.

전용 Snort는 성능, 배치 및 사용자 정의가 필요한 엔터프라이즈 환경에 올바른 선택입니다. pfSense/OPNsense 플러그인 접근 방식은 사용 편의성을 우선시하는 소규모 비즈니스 또는 홈 랩 환경에 더 적합합니다.


아키텍처 참고

2단계는 기술적으로 수동 Snort + iptables 시행이며, Snort가 진정한 인라인 모드로 실행되는 것은 아닙니다. Snort 자체는 로깅(pcap DAQ configured to passive)하고 iptables가 속도 제한, 문자열 일치 및 연결 수를 기반으로 드롭을 수행합니다.

이는 합법적이고 일반적인 배포 패턴입니다(많은 실제 Linux 기반 IDS/IPS 스택이 이렇게 작동합니다). 자연스러운 후속 작업은 Snort의 reject / drop 규칙 작업을 사용하여 snort --daq nfq(또는 인라인 모드의 afpacket)를 사용한 진정한 인라인 구성으로 2단계를 마이그레이션하여 Snort 자체가 iptables에 위임하는 대신 전체 시그니처 일치를 기반으로 드롭을 수행하도록 하는 것입니다.


저장소 구조

root@kitploit:~
snort-ids-ips-lab/
├── README.md                       ← 이 파일
├── report/
│   ├── Snort-IDS-IPS-Report.pdf    ← 전체 실습 보고서
│   └── Snort-IDS-IPS-Report.docx   ← 편집 가능한 소스
├── scripts/
│   ├── router_config.sh            ← IP 전달 + iptables 라우팅
│   ├── ping_check.sh               ← 연결 확인
│   ├── attack_simulator.sh         ← 4-벡터 공격 체인
│   ├── ips_setup.sh                ← IPS iptables 규칙 + Snort 데몬
│   └── local.rules                 ← 5개 사용자 지정 Snort 규칙 (SID 1000001-1000005)
├── screenshots/                    ← 보고서 그림
├── .gitignore
└── LICENSE

실습 재현하기

⚠️ 실습용으로만 사용하세요. 이 스크립트는 의도적으로 취약한 대상에 대해 실제 익스플로잇 및 무차별 대입 도구를 실행합니다. 소유하고 있으며 명시적인 서면 승인을 받은 시스템이 아닌 모든 시스템에 대해 실행하지 마십시오.

  1. 위 토폴로지에 따라 VMware에서 세 대의 VM을 구축합니다(VMnet9 및 VMnet10을 호스트 전용으로).
  2. 분석기에서: scripts/router_config.sh를 실행한 다음 scripts/ping_check.sh를 실행하여 완전한 연결을 확인합니다.
  3. 분석기에 Snort 3을 설치합니다:
    root@kitploit:~
    sudo apt update && sudo apt install snort -y
    
  4. scripts/local.rules를 /etc/snort/rules/local.rules에 배치하고 /etc/snort/snort.conf에서 HOME_NET = "10.10.10.0/24,192.168.50.0/24"를 설정합니다.
  5. 검증: sudo snort -T -c /etc/snort/snort.conf — 652개 규칙 로드, 경고 0개 예상.
  6. 1단계 — IDS:
    root@kitploit:~
    sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 -A alert_fast -l /var/log/snort/
    # 다른 터미널에서:
    sudo tail -f /var/log/snort/alert_fast.txt
    
    공격자에서: sudo ./scripts/attack_simulator.sh — 경보 발동 및 Meterpreter 셸 관찰.
  7. 분석기에서 를 실행한 다음 공격자에서 공격 체인을 재실행합니다. 차단을 확인한 후 수동으로 테스트합니다:

윤리적 고지

이 저장소에 문서화된 모든 활동은 감독된 학술 학습 목적으로 완전히 자체 포함된 VMware 가상 실습 환경 내에서만 수행되었습니다. 외부, 프로덕션 또는 실제 시스템은 대상으로 지정되거나 스캔되거나 어떤 방식으로든 영향을 받지 않았습니다. Metasploitable 2는 보안 교육을 위해 특별히 설계된 의도적으로 취약한 가상 머신입니다.

이 자료는 시스템 소유자의 명시적인 서면 승인 없이 실제 시스템에 대해 이러한 활동을 복제하는 데 사용되어서는 안 됩니다. 무단 포트 스캔, 자격 증명 공격 또는 네트워크 서비스 악용은 대부분의 관할권에서 불법입니다.


라이선스

MIT — LICENSE를 참조하세요. 실습 보고서 자체는 교육적 참고 자료로 제공됩니다.

도구 다운로드
SID이름트리거
1000001ICMP 핑 탐지됨양방향의 모든 ICMP 트래픽 — 정찰 핑을 포착함
1000002FTP 연결 시도포트 21에 대한 모든 TCP 연결 — 정상 및 무차별 대입 트래픽을 포착함
1000003가능한 Nmap SYN 스캔SYN 플래그만 설정된 TCP 패킷 (flags:S) — 반개방 스캔의 시그니처
1000004VSFTPD 2.3.4 백도어 시도FTP 포트 21에서 content:":)" — CVE-2011-2523 트리거 문자열
1000005가능한 Metasploit 셸코드`content:"
공격탐지결과
ICMP 정찰✅ SID 1000001 — 양방향 경보핑 완료
Nmap SYN 스캔✅ SID 1000003 — 1초 미만에 수천 개의 경보23개의 열린 포트가 열거됨
Hydra FTP 무차별 대입✅ SID 1000002 — 반복적인 FTP 연결 경보msfadmin:msfadmin 자격 증명이 해독됨
vsftpd 2.3.4 백도어✅ SID 1000004 — :) 내용 일치 발생루트 Meterpreter 셸 획득
규칙기능
ACCEPT icmp모든 ICMP를 명시적으로 허용 — 연결 확인을 유지합니다
DROP tcp dpt:21 STRING ":)"포트 21에서 vsftpd 2.3.4 백도어 트리거를 포함하는 패킷을 드롭합니다
ACCEPT tcp --syn -m limit --limit 10/s --limit-burst 20속도 제한 내에서 정상 TCP 핸드셰이크를 허용합니다
DROP tcp --syn (제한 초과 후)10/초를 초과하는 SYN 플러드를 드롭합니다 — Nmap SYN 스캔을 무력화합니다
DROP tcp dpt:21 -m connlimit --connlimit-above 5 --connlimit-mask 32소스당 5개 이상의 동시 FTP 연결을 차단합니다 — Hydra의 병렬 처리를 무력화합니다
ACCEPT eth1→eth0, ACCEPT eth2→eth0정상적인 출력 라우팅
ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED상태 기반 — 설정된 세션을 유지합니다
공격2단계 결과
ICMP 정찰✅ 허용됨 (의도적)
Nmap SYN 스캔❌ 차단됨 — 1000 filtered tcp ports (무응답), 스캔에 21.71초 소요 (1초 미만 대신)
Hydra FTP 무차별 대입❌ 차단됨 — too many connection errors로 인해 모든 하위 프로세스가 비활성화됨 — 유효한 비밀번호 0개 발견
vsftpd 백도어❌ 차단됨 — Rex::ConnectionTimeout — 익스플로잇이 완료되었지만 세션이 생성되지 않음
공격 / 트래픽1단계 (IDS만)2단계 (IDS + iptables IPS)
ICMP 핑탐지됨 ✅허용됨 ✅ (의도적)
Nmap SYN 스캔탐지됨 — 23개 열린 포트 발견차단됨 — 1000개 필터링됨
Hydra FTP 무차별 대입탐지됨 — msfadmin:msfadmin 해독됨차단됨 — 비밀번호 0개 발견
vsftpd 2.3.4 익스플로잇탐지됨 — 루트 Meterpreter 셸차단됨 — 연결 시간 초과
정상 FTP 로그인해당 없음유지됨 (230 Login successful)
2단계 — IPS:
sudo ./scripts/ips_setup.sh
root@kitploit:~
ping -c 4 192.168.50.10        # 성공해야 함
ftp 192.168.50.10              # msfadmin / msfadmin — 성공해야 함