Snort에 들어가기 앞서...

IDS/IPS의 기본 지식이 필요하기 때문에 기본 지식이 없다면 아래 글을 보고 오길 추천한다.

 

https://eatitstory.tistory.com/54

 

Firewall, DDoS, IDS 와 IPS 의 특징 및 차이점

DDoS (분산 서비스 거부 공격, Distributed Denial of Service)여러 대의 장비를 이용해 특정 서버나 네트워크에 대량의 트래픽을 보내 서비스 운영을 방해하는 공격이다DDoS 공격의 특징 분산된 공격: DDoS

eatitstory.tistory.com

 

IDS와 IPS의 요약

IDS와 IPS는 네트워크 보안을 지키는 눈(IDS)과 손(IPS)

특징 IDS IPS
주요 기능 공격 탐지 후 경고만 보냄 공격 탐지 후 자동으로 차단
비유 보안 카메라 자동문 잠금 장치
관리자 개입 필요 여부 필요 거의 필요 없음
장점 상세한 모니터링 가능 실시간으로 문제 해결 가능
단점 수동 대처 필요 오탐으로 인한 정상 활동 방해 가능

Snort와 IDS/IPS의 관계

  • Snort는 기본적으로 IDS로 설계되었다. 즉, 네트워크 트래픽을 모니터링하고 문제가 감지되면 관리자에게 경고를 보내는 역할을 한다.
  • 하지만 Snort는 추가 설정을 통해 IPS 기능도 제공할 수 있다. 이 경우, 네트워크 방화벽이나 정책 설정과 연동하여 자동으로 공격을 차단하도록 동작할 수 있다.

 

 


 

 

Snort의 개요

1998년 마틴 로슈(Martin Roesch)에 의해 개발된 Snort는 네트워크 침입 탐지 시스템(IDS, Intrusion Detection System)의 한 형태로, 주로 시그니처 기반 탐지를 수행한다.

1. 탄생 배경

  • 90년대 후반, 웹 사용이 급증하면서 인터넷 환경에서의 보안 위협이 증가.
  • 해커들이 악성 트래픽(DoS 공격, 악성 코드, 취약점 공격 등)을 이용해 시스템을 침해하는 사례가 급격히 늘어남.
  • 네트워크 트래픽 속에서 공격 패턴이나 악성 활동을 탐지하기 위해 IDS가 필요해짐.
  • Snort는 이러한 요구를 해결하기 위해 오픈 소스 기반으로 만들어진 IDS 도구로, 낮은 비용으로 강력한 네트워크 보안 기능을 제공

2. 활용 이유

  • 공격 탐지를 위한 패턴 매칭프로토콜 분석이 가능.
  • 네트워크 트래픽을 실시간으로 모니터링하고, 의심스러운 활동을 관리자에게 알림.
  • 확장성사용자 정의 규칙을 통해 다양한 환경에 적용 가능.

이미지출처:https://miro.medium.com/v2/resize:fit:750/format:webp/1*3LH_UXJZzVHYRCT18gjA1Q.png

 

Snort의 주요 기능

 

  • Sniffer 모드: 실시간 트래픽 모니터링을 통해 네트워크 상태 점검.
  • Packet Logger 모드: 트래픽을 저장해 보안 감사 또는 침입 탐지의 사후 분석 자료로 활용.
  • IDS/IPS 모드: 네트워크에서 발생하는 악의적인 활동(해킹 시도, 악성코드 다운로드 등)을 탐지 및 방지.

 

Snort의 동작 방식

Snort는 트래픽을 캡처하고, 단계별로 분석을 수행하여 의심스러운 활동을 탐지하거나 차단한다.

동작 단계

  1. 스니퍼(Sniffer)
    • 네트워크 인터페이스에서 실시간 트래픽을 캡처.
    • 네트워크 어댑터를 프로미스큐어스 모드로 설정해 모든 트래픽을 수집.
  2. 패킷 디코딩(Packet Decoding)
    • 캡처된 패킷을 **OSI 모델 계층(2~4계층)**에 따라 분해.
    • 출발지/목적지 IP, 포트, 프로토콜 정보를 추출.
  3. 전처리(Preprocessing)
    • 데이터를 정리하고 탐지 우회를 방지하기 위한 처리 수행.
    • 패킷 재조립: 조각난 패킷 복원.
    • 프로토콜 노멀라이제이션: 비정상 데이터를 표준화.
  4. 탐지 엔진(Detection Engine)
    • Snort 규칙(시그니처)과 트래픽을 비교하여 위협 여부 탐지.
    • 탐지된 패킷은 경고를 생성하거나 로그에 기록.
  5. 경고 및 로그(Alert/Log)
    • 탐지 결과를 경고 메시지로 출력하거나 로그 파일로 저장.
    • IPS 모드에서는 트래픽을 차단하거나 연결을 종료.

이미지출처:https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSkTwFUtD__jEWMvn_jVFf-3iSc-hVR0iH5Ocfmp-bhUqG0BruD78NH4fEoGqa3lcBhX0YJYVKmcHAQQ3H_6T-Hk5jXqMnucGGvR8g2I4P1ix0AhlZ6PHLivXm38eWKoFqk7ymewIFXA/d/Screenshot+from+2020-05-14+11-20-47.png

 

 

 

Snort 시그니처(Snort Rules)

Snort 시그니처는 헤더(Header)와 옵션(Options)으로 구성되어 있다.

  • 헤더(Header): 기본적인 탐지 조건(프로토콜, IP, 포트, 트래픽 방향 등)을 정의.
  • 옵션(Options): 상세한 탐지 조건(내용 매칭, 패턴 분석, 경고 메시지 등)을 설정.
이미지출처:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVdgq3%2FbtqExZvvu1X%2FakKKerf9YqGLLLNlbdLYY1%2Fimg.png

Snort 시그니처 형식

<동작> <프로토콜> <출발지 IP> <출발지 포트> -> <목적지 IP> <목적지 포트> (<옵션>)
<Rule Action> <Protocol> <Source IP> <Source Port> <Direction> <Destination IP> <Destination Port> (<옵션>)
 

 

헤더 구성 요소

헤더 구성 요소 설명 예시
Rule Action 시그니처가 탐지 시 수행할 동작 alert
Protocol 탐지할 네트워크 프로토콜 tcp, udp, icmp
Source IP 트래픽의 소스 IP any, 192.168.1.1
Source Port 트래픽의 소스 포트 any, 80
Direction 탐지 트래픽의 방향 -> (from source to destination)
Destination IP 트래픽의 목적지 IP $HOME_NET, any
Destination Port 트래픽의 목적지 포트 80, 443

 

 

헤더 필드 설명

동작(Action)

  • Snort가 규칙 조건을 만족하는 트래픽을 탐지했을 때 수행할 작업. 
명령어 기능 설명
alert 조건에 맞는 트래픽에 대해 경고 메시지 출력 탐지한 패킷에 대해 경고를 생성하여 설정된 출력 방식으로 전송. (syslog, 콘솔, 파일 등).
log 트래픽 정보를 로그 파일에 기록 탐지된 트래픽을 상세히 기록하여 분석 자료로 활용. (pcap 형식으로 저장 가능).
pass 트래픽을 무시하고 탐지를 수행하지 않음 특정 트래픽을 허용하거나 우선순위에서 제외할 때 사용.
drop 트래픽을 탐지하고 차단 (IPS 모드에서 사용) 탐지된 트래픽을 패킷 차단 후 기록하지 않음.
sdrop 트래픽을 차단하고 상대방에게 응답하지 않음 drop과 유사하지만, 탐지 기록도 생성하지 않아 은밀하게 차단 가능.
reject 트래픽을 차단하고 발신자에게 거부 메시지 전송 drop과 달리 차단 후, 상대방에게 거부 응답 메시지(ICMP/특정 프로토콜)를 전송.

 

 

Protocol (프로토콜)

  • 탐지할 네트워크 트래픽의 프로토콜을 지정.
명령어 기능 설명
tcp TCP 프로토콜 탐지 HTTP, FTP, SSH 등 연결 기반 트래픽 탐지.
udp UDP 프로토콜 탐지 DNS, SNMP, VoIP와 같은 연결 없는 트래픽 탐지.
icmp ICMP 프로토콜 탐지 Ping 요청/응답 및 네트워크 상태 확인 메시지 탐지.
ip 모든 IP 기반 프로토콜 탐지 TCP, UDP, ICMP 등 모든 IP 프로토콜에 대한 트래픽을 탐지.
any 모든 프로토콜 탐지 위의 모든 프로토콜을 포함하여 트래픽을 탐지.

 

방향성(Direction)

  • 트래픽의 방향을 지정.
명령어 기능 설명
-> 출발지 → 목적지 트래픽 탐지 소스에서 목적지로 가는 트래픽만 탐지.
< > 출발지 ↔ 목적지 간의 모든 트래픽 탐지 양방향(출발지와 목적지 모두) 트래픽 탐지.

 

 

 

Source/Destination IP 및 Port

  • 탐지할 트래픽의 출발지/목적지 IP 주소를 설정.
명령어 기능 예시 설명
any 모든 IP 또는 Port를 의미 any 특정 IP나 포트를 지정하지 않을 때 사용.
[ ]
여러 IP 주소를 목록으로 지정 [192.168.1.1,10.0.0.1] 리스트 형태로 IP 주소를 묶어서 정의.
! 부정 연산자로 특정 IP 또는 Port 제외 ![192.168.1.1], !80 제외할 IP 또는 포트를 지정.
포트번호 특정 포트 번호를 지정 80, 443 해당 포트 번호만 탐지.
포트번호1:포트번호2 범위 내의 모든 포트 지정 1000:2000 1000번부터 2000번 포트까지 탐지.
:포트번호 지정된 포트 이하 모든 포트 탐지 :1024 1024번 이하 모든 포트 탐지.
포트번호: 지정된 포트 이상 모든 포트 탐지 1024: 1024번 이상 모든 포트 탐지.
$HOME_NET 내부 네트워크 IP 주소 대체 변수 $HOME_NET Snort 설정에서 정의된 내부 네트워크 범위. (예: 내부망 IP를 지정할 때 사용)
$EXTERNAL_NET 외부 네트워크 IP 주소 대체 변수 $EXTERNAL_NET Snort 설정에서 정의된 외부 네트워크 범위. (예: 외부망 IP를 지정할 때 사용)
$HTTP_SERVERS 웹 서버의 주소 변수 $HTTP_SERVERS Snort 설정 파일에서 정의된 HTTP 서버 네트워크 주소를 사용.
$SSH_SERVERS SSH 프로토콜을 사용하는 장비의  IP 주소 변 $SSH_SERVERS Snort 설정 파일에서 정의된 SSH 서버 네트워크 주소를 사용.

 

옵션 

  • Snort 규칙에서 Rule Option은 탐지 정확도를 높이는 데 중요한 역할을 하는 옵션이다.
  • Rule Option은 일반 옵션, Payload 옵션, HTTP 옵션, 흐름 옵션으로 크게 구분된다.
  • 각 옵션은 특정 조건을 지정하여 보다 정교하게 패킷을 탐지하거나, 탐지된 패킷에 대한 동작을 구체화하는 데 사용된다.
  • 모든 옵션은 세미콜론(;)을 사용해 서로를 구분하고, 규칙 옵션 키워드는 콜론(:)을 사용해 인수(예: content:"GET"; 에서 "GET" 문자)와 구분한다. 

일반 옵션 (General Options)

  • 규칙에 대한 추가 정보를 제공하며, 패킷 매칭에는 영향을 미치지 않는 옵션이다.
명령어 기능 예시
msg Snort 규칙이 탐지될 경우 출력되는 메시지. msg:"악성 트래픽 탐지";
sid Snort 규칙을 구별하는 식별자. 0~1,000,000번까지 예약된 식별자. sid:1000001;
rev 규칙의 수정 버전. 수정할 때마다 1씩 증가. rev:1;
classtype Snort 규칙을 분류하는 옵션. classtype:attempted-recon;
priority 규칙의 우선 순위를 지정. 1~10까지 수치, 값이 작을수록 우선순위 높음. priority:1;
reference 해당 규칙에 참고되는 URL 또는 문서 지정. reference:url,www.example.com;

Payload 옵션 (Payload Options)

  • 패킷의 데이터를 분석하여 악성 패킷을 탐지하는 옵션이다.
명령어 기능 예시
content 패킷 데이터에서 매칭할 문자열을 지정. content:"abc";
=> abc 문자열 탐지
nocase 대소문자를 구분하지 않고 매칭. content:"abc"; nocase;
=> 대소문자 구분없이 abc 탐지
offset 매칭을 시작할 위치 지정 (0 바이트부터 시작). offset:3;
=> 0/1/2/3 총4개 => 4byte부터 탐색 시작
distance 이전 매칭 후 무시해야 할 바이트 수를 지정. content:"abc"; content:"test"; distance:5;
=> abc 문자열 매칭 후 지점을 기준으로 5byte 이후 test 문자열 탐색
within 매칭된 후 검색을 진행할 범위를 지정. content:"abc"; content:"test"; within:5;
=> abc 문자열 매칭 후 지점을 기준으로 5byte 이내 test 문자열 탐색
pcre 정규 표현식을 사용하여 패턴을 매칭. (정규 표현식 기반 패턴 탐지) pcre:"/GET\s+/path/to/file/";
=> "GET" 메소드와 그 뒤에 하나 이상의 공백이 있는 "/path/to/file" 경로를 찾는 규칙.

HTTP 옵션 (HTTP Options)

  • HTTP 프로토콜의 특정 부분에서만 패턴을 매칭할 때 사용하는 옵션이다.
명령어 기능
http_method HTTP 메소드 영역에서 패턴을 매칭
http_uri HTTP URI 영역에서 패턴을 매칭
http_raw_uri 디코딩되지 않은 HTTP URI 영역에서 패턴을 매칭
http_cookie HTTP 쿠키 값을 탐색
http_header HTTP 헤더 영역을 요청/응답 구분 없이 탐색
http_raw_header 디코딩되지 않은 HTTP 헤더를 탐색
http_client_body HTTP 바디 영역을 탐색
http_stat_code HTTP 응답 메시지의 상태 코드 탐색
http_stat_msg HTTP 응답 메시지의 상태 메시지 탐색

흐름 옵션 (Flow Options)

  • 패킷이 흐르는 방향을 지정하여 트래픽의 흐름을 제어하는 옵션다.
명령어 기능 예시
flow 흐름 옵션을 사용할 때 필수로 지정해야 하는 옵션. flow:to_server,established;
to_client 서버에서 클라이언트로 오는 패킷을 탐지 to_client;
from_server 서버에서 클라이언트로 오는 패킷을 탐지 from_server;
to_server 클라이언트에서 서버로 가는 패킷을 탐지 to_server;
from_client 클라이언트에서 서버로 가는 패킷을 탐지 from_client;
established 세션이 이미 성립된 패킷을 탐지 established;
stateless 세션 여부와 관계없이 패킷을 매칭 stateless;

예시 시그니처

alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"HTTP 공격 탐지"; content:"GET"; nocase; http_uri; offset:3; distance:5; content:"test"; within:5; sid:1000001; flow:to_server,established; rev:1;)

 

각 구성 요소의 설명:

    1. alert
      • 동작 (Action): 조건을 만족하는 트래픽을 탐지하면 경고 메시지를 출력하는 규칙이다.
    2. tcp
      • 프로토콜 (Protocol): TCP 프로토콜을 사용하는 트래픽을 탐지하는 규칙이다.
    3. $EXTERNAL_NET any -> $HOME_NET 80
      • 출발지 IP: $EXTERNAL_NET은 외부 네트워크를 의미하며, any는 모든 출발지 IP를 의미한다.
      • 출발지 포트: any는 모든 포트를 의미한다.
      • 목적지 IP: $HOME_NET은 내부 네트워크를 의미한다.
      • 목적지 포트: 80번 포트는 HTTP 기본 포트를 의미한다.
    4. (msg:"HTTP 공격 탐지";
      • msg: 트래픽이 매칭되면 "HTTP 공격 탐지"라는 메시지를 출력하는 규칙이다.
    5. content:"GET";
      • content: 패킷 데이터에서 "GET"이라는 문자열을 찾는 규칙이다.
    6. nocase;
      • nocase: "GET" 문자열을 대소문자 구분 없이 탐지하는 규칙이다.
    7. http_uri;
      • http_uri: 패킷의 HTTP URI 부분에서 "GET" 문자열을 찾는 규칙이다.
    8. offset:3;
      • offset: 패킷 데이터의 첫 3바이트를 건너뛰고, 4바이트부터 "GET" 문자열을 탐지하는 규칙이다.
    9. distance:5;
      • distance: "GET" 문자열이 매칭된 후, 5바이트를 건너뛰고 "test" 문자열을 탐지하는 규칙이다.
    10. content:"test";
      • content: "GET" 문자열 뒤에 "test"라는 문자열을 찾는 규칙이다.
    11. within:5;
      • within: "GET" 문자열과 "test" 문자열 사이의 거리가 5바이트 이내여야 매칭되는 규칙이다.
    12. sid:1000001;
      • sid (Signature ID): 이 규칙의 고유 식별자 1000001을 의미하며, 규칙을 구별하는 데 사용되는 규칙이다.
    13. flow:to_server,established;
      • flow: 패킷의 흐름을 지정하는 규칙이다.
      • to_server: 클라이언트에서 서버로 가는 트래픽을 탐지하는 규칙이다.
      • established: 이미 세션이 성립된 상태에서 발생하는 트래픽을 탐지하는 규칙이다.
    14. rev:1;)
      • rev: 이 규칙의 버전 1을 의미하며, 최초 버전임을 나타내는 규칙이다.

 

참고자료

https://maker5587.tistory.com/24

 

Snort / Snort Rule Signature ( Snort 개요 / Snort 기능 / Snort Rule )

※ Snort 를 공부하기 앞서 이전 IDS 와 IPS 에 대한 내용을 숙지한 후 보시는걸 추천합니다. https://maker5587.tistory.com/8 Snort 란 ? Snort 는 1998년 Martin Roesch에 의해 개발된 오픈 소스 기반 IDPS ( Intrusion Dete

maker5587.tistory.com

https://medium.com/@acaremrullahkku/what-is-snort-547916bece5f

 

What is Snort?

Synopsis

medium.com

https://www.youtube.com/watch?v=QzYerZ7hDrM

https://net123.tistory.com/579

 

Snort - 03. Snort Rule 구조

Snort - 03. Snort Rule 구조 1. Snort Rule Signiture - 스노트는 다음과 같은 룰 헤더와 옵션으로 구성된다. Snort 룰 시그니처 구조 Action 유형 명령어 내용 alert 경고 발생 및 로그 기록 log 로그 기록 pass 패켓

net123.tistory.com

 

 

ppt

[18주차]snort.pptx
1.95MB

'Security > 보안관제' 카테고리의 다른 글

악성코드 샘플 분석3(상)  (0) 2024.12.27
Snort 환경 구성  (1) 2024.12.01
악성코드 샘플 분석2  (0) 2024.11.10
악성코드 샘플 분석  (0) 2024.11.03
정적, 동적 Tool 실습  (4) 2024.10.26

+ Recent posts