IDS & IPS
IDS
IDS는 Intrusion Detection Systems의 줄임말로, 악의적인 네트워크 트래픽을 감지하는 도구이다.
- Passive monitoring and anslysis
- Alert generation
- Logging
- Out-of-band
IPS
IPS는 Intrusion Prevention Systems의 줄임말로, 악의적인 트래픽에 대해서 악성 행위가 일어나기 전에 차단하는 도구이다.
- Traffic inspection
- Blocking and dropping packets
- Terminating connections
- Logging
- Inline deployment
Network Based-IDS/IPS
- Operate at the nerwork level
- Analyze traffic flowing through network appliances
- Alert, log and/or block malicious traffic
Host-Based IDS/IPS
- Operate at the endpoint level
- analyze activities on the host
- Alert, log, and/or block malicious host actions
탐지 방법

- Signature-based Detection
- 기존 악의적인 트래픽 혹은 행위와 비교한다.
- 기존에 알고 있던 악성 행위 차단에 효과적이다.
- 새로운 방법의 공격을 탐지하지 못한다.
- Behavior-based Detection
- 사전에 확립된 기준을 바탕으로 변칙적인 행위를 탐지한다.
- 비교적 새로운 공격 탐지에 효과적임
- 위양성이 발생할수있다.
- Rule-based Detection
- 허용 행위 혹은 위반을 정의하고 정책을 시행한다.
- 집단의 요구사항에 맞게 커스텀이 가능하다.
- 잦은 규칙 변경 및 유지가 필수적이다.
Snort란?
snort는 1998년에 만들어진 오픈소스 IDPS( Instrusion Detection Prevention System )입니다. snort packet sniffing & snort packet filtering 기술과 같은 시그니처 기반 탐지는 시스템 패턴과 매칭될 경우 탐지되는 방식을 사용합니다.
동작 구조
sniffer > Preprocessor > Detection Engine > Alert & Log
다음과 같은 순서를 통해서 동작합니다.
- sniffer
- 네트워크에서 이뤄지는 모든 패킷을 수집하는 단계입니다. 네트워크 인터페이스를 선택하고, 해당 인터페이스를 통해 수신되는 모든 패킷을 캡쳐합니다.
- Preprocessor
- 전처리기는 패킷의 압축 해제, IP 조각화 처리, 이상 패킷 필터링 등의 다양한 전처리를 수행하는 단계입니다.
- Detection Engine
- 탐지 엔진은 전처리로 이미 정제된 패킷을 기반으로 규칙을 적용하여, 침입 여부를 판단합니다.
- Alert & Log
- 침입 탐지 시 해당하는 정보를 로그 파일에 남기거나, 경고(alert)를 발생시킵니다.
Snort 규칙 설정
Snort Rule Signature
Snort Rule는 2개의 영역(Rule Header / Rule Option)으로 분리됩니다.
ex ) alert tcp any any → any 80 (msg:“SQL injection”;content:“‘1’=‘1”;nocase;sid:1000001;)
Rule Header
- Action : 패턴이 매칭이 되었을 경우 할 행동을 정의
| 명령어 | 설명 |
|---|---|
| alert | 로그를 남기고 경고를 발생시킨다. |
| log | 해당 패킷을 기록합니다. |
| pass | 해당 패킷을 무시합니다. |
| activate | alert를 발생 시킨 후 대응하는 Dynamic 을 유효합니다. |
| reject | 패킷을 차단하고 기록합니다. TCP Protocol 의 경우 TCP Reset UDP Protocol 의 경우 ICMP Port Unrechable 메세지를 전송 |
| drop | 상대방에게 응답하지 않고 패킷을 차단하고 기록합니다. |
| sdrop | 기록을 남기지 않고 패킷을 차단합니다. |
- Protocol : 탐지할 프로토콜을 정의
| 명령어 | 설명 |
|---|---|
| TCP | |
| UDP | |
| ICMP | |
| IP | |
| Any |
- Direction : 탐지할 방향 지시
| 명령어 | 설명 |
|---|---|
| → | |
| <> |
- Source IP & Port / Destination IP & Port : 출발지 & 목적지 IP 및 Port 설정
| 명령어 | 설명 |
|---|---|
| ! | 부정 연산자 |
| Any | |
| Port Number | |
| Poer Number1 : Port Number2 | |
| : Port Number2 | |
| Portnumber1 : |
Rule Option
Snort 설치
sudo apt-get update
sudo apt-get install snort2설치가 잘 되었는지 확인하기 위해서 다음 명령어를 사용합니다.
sudo snort --versionsnort는 /etc/snort에서 rule 설정 파일을 수정할 수 있습니다.
cd /etc/snort
sudo nano snort.conf
sudo snort -T -c /etc/snort/snort.confSnort 실행 실습
- -i : interface 선택
- -e :
- -d :
- -X :
- -l : 특정 로그 파일 만들기
- -r : 로그 파일 읽어오기
sudo snort -i enp0s3 -e -d
sudo snort -i enp0s3 -X
sudo snort -A console -l /var/log/snort -i enp0s3 -c /etc/snort/snort.conf -qSnort 규칙 작성 실습
alert tcp any any -> any 4444 (msg: "Connection to Remote IP on Port 4444; sid:1000002; rev:1;)다음과 같이 규칙을 작성할 경우 tcp 통신으로 나가는 모든 IP에 대해서 도착지 IP 상관없이 4444 포트로 들어가는 모든 네트워크 트래픽에 대해서 요청을 보내라라는 명령어입니다.
sudo snort -A console -l /var/log/snort -i enp0s3 -c /etc/snort/snort.conf -q
sudo hping3 -c 1 -p 4444 -S example.comcommunity rule 실습
community rule은 공식 사이트에서 제공하는 공식적인 snort 규칙입니다.
위 사이트로 들어가서 download로 들어갑니다.

Download 페이지에서 살짝 내려가면 다음과 같이 community rule.tar.gz라는 압출 파일을 볼수 있습니다.

snorpy
https://snorpy.cyb3rs3c.net 다음 사이트 링크를 통해서 snorpy에 접속할수 있습니다.
snorpy는 snort의 filtering 규칙을 자동으로 만들어주는 프로그램입니다.

1.PCAP 실습

alert tcp any any -> any 80 ( msg:"HTTP URI contains.exe"; content:"|2e|exe"; nocase; http_uri; sid:1000001; rev:1; )sudo snort -r /var/log/snort/<snort_file_name> -n 5 -q -d