IDS (Intrusion Detection System) - 침입 탐지 시스템
침입 탐지 시스템(IDS)은 네트워크나 시스템에서 발생하는 침입 사고를 탐지하고 대응하기 위한 보안 솔루션이다.
이 시스템은 고도화된 침해 공격을 빠르고 정확하게 탐지할 수 있도록 설계되었으며, 주로 정책 기반 탐지, 패킷 계산 또는 특정 시그니처 기반 탐지 방식을 사용한다.
Snort - 오픈 소스 IDS
Snort는 네트워크 트래픽을 실시간으로 분석하고, 패킷을 로깅하며, 공격을 탐지하는 IDS이다.
Snort는 오픈 소스로 제공되며, 많은 보안 전문가와 기업에서 널리 사용되고 있다. 무료임이도 실무에서 쓰이는 곳도 있다고 하니 학습용으로 매우 좋은 것 같다.
Snort를 사용하면 침입 탐지뿐만 아니라 공격의 종류와 경로를 상세히 파악할 수 있어, 보안 사고 발생 시 빠르게 대응할 수 있다.
Snort의 주요 구성 요소
- 스니퍼 (Sniffer)
- Snort는 NIC 장비를 프로모스큐어스 모드(promiscuous mode)로 설정하여 네트워크 패킷을 수집한다.
- 전처리기 (Preprocessor)
- 수집한 패킷을 전처리하여 탐지 엔진이 이해할 수 있는 형태로 가공.
- 탐지 엔진 (Detection Engine)
- 정의된 정책을 기반으로 패킷이 공격인지 아닌지를 판단. 그 결과에 따라 알림을 보내거나 로그를 기록하는 등의 조치를 취한다.
- 경고 및 로그 시스템 (Alert/Logging)
- 탐지된 공격에 대해 관리자에게 경고 메시지를 보내거나, 경고를 로그 파일로 기록.
Snort 설치 방법
Snort를 설치하는 방법은 여러 가지가 있음.
- dnf 프로그램
- 자동으로 다운로드 및 설치하는 방법
- rpm 패키지 관리 도구
- 사용자가 직접 RPM 파일을 다운로드하여 설치하는 방법
- 소스 코드 컴파일 (Source Code Compile)
- Snort의 소스 코드를 직접 다운로드하여 컴파일 후 설치하는 방법
-> 3번으로 진행하는데 파일 3개 미리 가상머신에 다운받아놓아야 한다
# 1. 필수 패키지 설치
yum install -y epel-release
vim /etc/yum.repos.d/epel.repo
# /입력해서 아래 문자를 변경하는 것
%s /mirrorlist/#mirrorlist/g
%s /#baseurl=http:\/\/download.fedoraproject.org\/pub/baseurl=http:\/\/archives.fedoraproject.org\/pub\/archive/g
yum repolist
yum install -y gcc flex bison zlib zlib-devel libpcap libpcap-devel \
pcre pcre-devel libdnet libdnet-devel tcpdump \
make libtool wget unzip git
# 2. 설치 디렉토리로 이동
cd /usr/local/src
# 3. DAQ 설치
cp /root/바탕화면/daq-2.0.7.tar.gz ./
tar -xzvf daq-2.0.7.tar.gz
cd daq-2.0.7
./configure && make && make install
sudo yum install -y libpcap libpcap-devel
sudo yum install -y automake autoconf libtool m4 perl
# 4. Snort 설치
sudo yum groupinstall "Development Tools" -y
sudo yum install wget unzip -y
cd /usr/local/src
cp /root/바탕화면/snort-2.9.16.tar.gz ./
tar -xzvf snort-2.9.16.tar.gz
cd snort-2.9.16
./configure --enable-sourcefire
make
sudo make install
cd /usr/local/src
wget https://github.com/LuaJIT/LuaJIT/archive/refs/heads/master.zip --no-check-certificate
unzip master.zip
cd LuaJIT-master
make
sudo make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
sudo yum install -y openssl-devel
cd /usr/local/src/snort-2.9.8.3
./configure --enable-sourcefire
make
sudo make install
# 5. Snort 사용자 및 디렉터리 생성
mkdir -p /etc/snort /etc/snort/rules /etc/snort/preproc_rules
mkdir -p /var/log/snort /usr/local/lib/snort_dynamicrules
touch /etc/snort/rules/local.rules
touch /etc/snort/snort.conf
chmod -R 700 /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules
sudo groupadd snort
sudo useradd -r -s /sbin/nologin -c "Snort IDS" -g snort snort
chown -R snort:snort /etc/snort /var/log/snort /usr/local/lib/snort_dynamicrules
snort.conf에 아래 추가
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules
include $RULE_PATH/local.rules
touch /etc/snort/rules/white_list.rules
touch /etc/snort/rules/black_list.rules
chown snort:snort /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
# 6. 환경 변수 및 라이브러리 설정
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
ldconfig
# 7. Snort 설정파일(snort.conf)
decompress_swf deflate
decompress_pdf deflate
snort.conf에 아래 내용 수정 -326번째 줄
decompress_swf deflate
decompress_pdf deflate
snort -i eth1 -c /etc/snort/snort.conf
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/snort
vi /etc/snort/rules/local.rules
alert icmp 10.10.10.1 any -> 10.10.10.254 any (msg:"ICMP DETECT"; sid:1000001;)
snort -i eth1 -c /etc/snort/snort.conf -A console -q
tail -f /var/log/snort/alert
Snort 룰(정책) 구성
Snort에서는 규칙(룰)을 설정하여 특정 패킷이나 트래픽을 탐지한다.
룰은
/etc/snort/rules/local.rules
에 저장된다.
룰의 문법을 정확히 지켜야 하며, 하나의 룰은 한 줄로 작성해야 함!
룰의 형식
액션 프로토콜 IP주소 포트주소 방향연산자 IP주소 포트주소 (옵션);
- 액션: 패킷을 어떻게 처리할지 정의. (예: alert, log, pass, drop, reject, sdrop, activate, dynamic)
- 프로토콜: 탐지할 프로토콜을 설정. (예: tcp, udp, icmp, ip)
- IP주소: 탐지할 IP 주소를 설정.
- 포트주소: 탐지할 포트 주소를 설정.
- 방향 연산자: 출발지와 목적지 간의 패킷 흐름 방향을 설정. (예: ->, <-, <>)
액션 유형
- alert: 경고 발생 및 패킷 기록
- log: 패킷 기록
- pass: 무시
- drop: 패킷 차단 및 기록
- reject: 패킷 차단 + 차단 메시지 전송
- sdrop: 패킷 차단
- activate: 기본 alert로 동작 후 연동된 dynamic 룰을 실행
- dynamic: activate로 활성화된 정책이 실행될 때 동작
Snort 룰 옵션
룰에서 사용되는 옵션은 탐지 조건을 더욱 구체적으로 정의가능 하게 한다.
-주요 옵션알아보기-
1. msg
- 경고 메시지를 정의
- 예: msg:"root access attempt";
2. sid
- 정책의 식별값(SID)을 지정
- . SID는 고유한 번호로, 수많은 정책 중에서 특정 정책을 식별하기 위해 사용
- 예: sid:1000001;
3. rev
- 정책의 버전을 지정
- 여러 사람이 정책을 관리할 경우 수정된 버전을 추적가능
- 예: rev:2;
4. priority
- 위험도를 설정.
- 일반적으로 1~3의 값으로 설정
- 예: priority:1;
Payload Detection 룰 옵션
패킷 안의 원본 데이터를 검색하는 옵션
1. content
- 특정 문자열을 검색
- 예: content:"root";
2. nocase
- 대소문자 구분 없이 검색
- 예: content:"root"; nocase;
3. rawbytes
- 가공되지 않은 데이터를 검색
- 예: content:"|162030|"; rawbytes;
4. depth
- 검색할 데이터의 크기를 지정
- 예: content:"root"; depth:10;
5. offset
- 검색 시작 위치를 지정
- 예: content:"67"; offset:2; depth:5;
Non-Payload Detection 룰 옵션
패킷의 헤더나 기타 설정값을 검색하는 옵션
1. id
- IP의 Identification 필드를 검색
- 예: id:10000;
2. ttl
- IP 패킷의 TTL(Time To Live) 값을 검색
- 예: ttl:100;
3. flags
- TCP 플래그 값을 검색
- 예: flags:S; (SYN 플래그)
Threshold 룰 옵션
패킷 발생 수나 시간에 따라 탐지 여부를 결정. 주로 반복되는 패킷을 탐지하는 데 사용
예시:
- Threshold 타입: 발생 패킷 수를 설정하여 탐지할 방식을 정의.
- type both → 설정된 시간 내에 발생한 모든 패킷을 1번만 탐지
- limit → 특정 시간 동안 발생한 패킷을 탐지
- threshold → 일정 수 이상의 패킷이 발생하면 탐지
- track: 패킷을 탐지하는 기준을 설정.
- by_src → 출발지 주소를 기준으로 카운트
- by_dst → 목적지 주소를 기준으로 카운트
- count: 발생한 패킷 수를 설정
- seconds: 시간을 설정하여 패킷 수를 추적
Snort 룰 작성 예시
alert tcp any any -> 10.10.10.0/24 80 (msg:"Possible web attack"; sid:1000001; priority:1;)
위 룰은 출발지 주소가 any (모든 주소), 목적지 주소가 10.10.10.0/24인 IP로 80번 포트로 전달되는 TCP 패킷에 대해
Possible web attack이라는 경고 메시지를 출력하고, 해당 패킷을 탐지
sid는 1000001이며, priority는 1로 설정
<추가예시>
# TELNET 로그인 성공/실패탐지
alert tcp 10.10.10.1 23 -> any any (msg:"TELNET Login Success";content:"Last login";nocase; flags:PA; sid:1000002; rev:2;)
alert tcp 10.10.10.1 23 -> any any (msg:"TELNET Login Fail"; content:"Login incorrect";nocase;flags:PA; sid:1000003; rev:2;)
# 웹 접근 탐지
alert tcp !10.10.10.0/24 any -> 10.10.10.1 80 (msg:"HTTP GET Access";content:!"favicon"; content:"GET";content:!"/admin"; flow:to_server,established; sid:1000004; rev:2;)
# 관리자 페이지 접근 탐지
alert tcp any any -> any 80 (msg:"ADMIN Access Detected"; content:"/admin/index.html";nocase; http_uri;content:!"favicon"; sid:1000005; rev:2;)
# LAND 공격 탐지
alert tcp any any -> any any (msg:"LAND Attack Detected"; ipopts:lsrr; sid:1000101; rev:1;)
#alert tcp any any -> any any (msg:"land attack icmp"; sameip; threshold: type both, track by_dst, count 1000, seconds 3; sid 1000005;)
# Ping of Death 감지
alert icmp any any -> any any (msg:"Ping of Death Attempt"; dsize:>1400; itype:8; sid:1000102; rev:1;)
# SYN Flood 감지
alert tcp any any -> any 80 (msg:"SYN Flood Detected"; flags:S; threshold:type both, track by_src, count 1000, seconds 3; flow:stateless; sid:1000103; rev:2;)
# UDP Flood 감지
alert udp any any -> any any (msg:"UDP Flood Detected"; threshold:type both, track by_src, count 1000, seconds 10; sid:1000104; rev:1;)
# ICMP Flood 감지
alert icmp any any -> any any (msg:"ICMP Flood Detected"; threshold:type both, track by_src, count 50, seconds 10; sid:1000105; rev:1;)
#drop icmp any any -> any any (msg:"ICMP DROP"; sid:1000106;)
+NFO(snort는 탐지해서 알려주는 것만 해주고 막거나 허용은 NFO가 있어야 함)
'Hacking' 카테고리의 다른 글
네트워크 해킹 (0) | 2025.06.16 |
---|---|
바이러스, 웜, 트로이목마, 스파이웨어, 애드웨어, 랜섬웨어 등 설명 (5) | 2025.06.12 |
단편화 조작 공격, DDoS공격 (0) | 2025.06.05 |
네트워크 해킹 방법 (0) | 2025.06.04 |
ARP 스푸핑, DNS spoofing, dhcp spoofing ARP+ 이를 방어하는 HSTS와 DNSSEC (0) | 2025.06.04 |