Snort 란?
-오픈소스 시그니처 기반 네트워크 침입탐지 시스템
-네트워크에 있는 패킷을 수집하여 트래픽을 모니터링 하며, 스노트룰 기반의 준비된 규칙과 비교해서 침입 탐지 및 경고를 발생
-시그니처 기반이란 침입탐지를 문자열로 판단
패킷 데이터에서 악의적인 문자열을 탐지하여 침입의 여부를 결정
Snort 동작 순서
1. Sniffer 가 네트워크 패킷을 수집
2. Packet Decoder로 정규화를 함.정규화 : 인코딩된 URL 값을 디코딩하는 작업 (분석할 수 있는 형태로 만들어준다)
3. Preprocessor(전처리기)는 특정행위가 발견된 패킷을 Detection Engine(탐지 엔진)으로 전송
4. Detection Engine은 해당 패킷이 스노트 규칙에 매칭되는지 확인하고 매칭되면 경고를 출력하고 기록매칭이 안되면 넘긴다.
Snort 운용 모드
Sniffer Mode : 네트워크 인터페이스의 패킷을 읽고 스니핑하여 보여준다.
Packet Logger Mode : 수집한 패킷에 대한 Log를 저장한다.
NIDS (Network IDS) Mode : 네트워크 트래픽을 사용자에 의해 정의된 규칙에 의해 탐지 되는지 분석한다.
Snort Rule signature
Action | Protocol | SrcIP | SrcPort | -> | DstIP | DstPort | Option |
액션 | 프로토콜 | 송신IP | 송신PORT | 방향 | 수신IP | 수신PORT | 룰옵션 |
탐지후 행동 | 탐지프로토콜 | 출발IP | 출발PORT | 탐지방향지정 | 목적IP | 목적PORT |
두 개의 논리적 섹션으로 나뉜다.
빨간색 부분의 룰 헤더와 검은색 부분의 룰옵션
보통 오탐률을 줄이고 정탐률을 높이도록 룰옵션 해당하는 부분까지 내용을 작성한다.
Snort Rule signature - (1) 룰 헤더
Action
-해당 규칙에 의해서 패킷이 탐지되었을 때 처리하는 방법을 결정하는 명령어
명령어 | 내용 |
alert | 경고 발생 및 로그 기록 |
log | 로그 기록 |
pass | 패켓 무시 |
drop | 패켓 차단 및 로그 기록 (IPS 기능으로 사용됨, 단 인라인 구조가 되어야 한다.) |
reject | 패켓 차단 및 로그 기록(TCP - TCP RST 응답, UDP - ICMP Unreachable 응답) |
sdrop | 패켓 차단 및 로그 기록 없음 |
Protocol
유형 | 내용 |
tcp | TCP 탐지 |
udp | UDP 탐지 |
ip | IP 전체 탐지 |
icmp | ICMP 메세지 탐지 |
any | 전체 |
송수신 IP
-우회 확률이 높아서 대부분 any 옵션을 사용
형식 | 내용 |
192.168.20.50/32 | 192.168.20.50 Host |
192.168.20.0/24 | 192.168.20.0/24 서브넷 |
[192.168.20.0/24, 172.20.0.0/16] | 192.168.20.0/24, 172.20.0.0/16 서브넷 (비연속적) |
!192.168.20.0/24 | 192.168.20.0/24를 제외한 나머지 서브넷 |
$HOME_NET | 내부 IP 주소 변수 |
$EXTERNAL_NET | 외부 IP 주소 변수 |
$XXX_SERVERS | 특정 서버 IP 주소 변수 |
송수신 포트
-1~1024번 포트는 well known port(잘 알려진 포트)로 서비스가 고정적으로 지정되어 있어 변화하지 않음.
원하는 서비스만 탐지패턴에 넣어서 찾아보려면 이러한 포트를 지정할 수 있다.
-공격자는 대부분 랜덤한 포트를 사용하기 때문에 any 옵션 사용
형식 | 내용 |
80 | 80번 포트 |
1:500 | 1~500번 포트 |
!80 | 80번 포트를 제외한 나머지 포트 |
!1:500 | 1~500번 포트를 제외한 나머지 포트 |
any | 모든 포트 |
방향 연산자
- 패킷이 흘러가는 방향을 나타내며, IDS 장비의 부하가 적은 단방향 ->를 많이 사용
형식 | 내용 |
-> | 요청 패켓 탐지 (응답패켓 탐지는 SrcIP/DstIP 반대로 설정) |
<> | 요청/응답 패켓 둘다 탐지 |
Snort Rule signature - (2)룰 옵션
룰 옵션은 탐지패턴의 이름을 지정, 스노트 규칙을 구별하는 식별자, 대소문자를 구별하지 않는 옵션 등 다양하다.
일반 옵션(General Options)
-일반 옵션은 규칙에 대한 정보를 제공하는 옵션으로 검색하는 동안은 어떠한 영향도 미치지 않는 옵션
명령어 | 내용 | 형식 |
msg | 경고 이벤트 메세지 | msg:"ICMP Ping test"; |
sid | 룰 식별자 (3000000번 이상 권장) | sid:3000001; |
rev | 룰 버전, 수정될 경우 1씩 증가 | rev:1; |
priority | 우선 순위 (값이 작을수록 먼저 매칭) 범위 : 1~10) | priority:1; |
classtype | 스노트 룰 분류 | classtype:분류이름; |
reference | 취약점 참고 배포 URL 정보 | reference: 이름 http://~; |
*페이로드 탐색 옵션
-페이로드는 스노트 규칙에서 실질적으로 악성 패킷을 탐지하는 옵션
명령어 | 내용 | 예제 |
content | 문자/숫자 탐지 | content: "xxx"; content: "|16진수 16진수|"; |
nocase | 대소문자 구분 없이 탐지 | content: "xxx"; nocase; |
offset | 지정한 바이트번째 부터 탐지(0번째 부터 시작) | offset:3; |
depth | 지정한 바이트까지 탐지(0번째 부터 시작) | depth:3; |
distance | content 매칭 후 지정 위치 이후 다른 content 탐색 | content:"xxx"; content:"yyy"; distance:5; |
within | content 매칭 후 지정 위치 안에 다른 content 탐색 | content:"xxx"; content:"yyy"; within:5; |
pcre | 정규화 표기, '/'는 시작과 끝에 표기, 16진수는 앞에 \x | pcre:"/(http|ftp) Traffic/" |
HTTP 옵션
-content 옵션 값이 탐색할 범위를 HTTP 영역으로 한정할 때 사용
명령어 | 내용 |
http_method | 페이로드 앞부분 HTTP 메소드 패턴 매칭 |
http_uri | 페이로드의 HTTP URI 패턴 매칭 |
http_cookie | 페이로드의 HTTP 쿠키 패턴 매칭 |
http_header | HTTP 요청/응답 Header 내용 패턴 매칭 |
http_client_body | HTTP 요청/응답 Body 내용 패턴 매칭 |
http_stat_code | HTTP 응답 상태 코드 패턴 매칭 |
http_stat_message | HTTP 응답 상태 메세지 패턴 매칭 |
흐름 옵션(Flow Option)
-패킷의 방향을 정의하는 옵션. 패킷의 방향뿐 아니라 세션 연결 상태의 조건에 해당되는 패킷을 한번 더 걸러내는 역할
명령어 | 내용 |
flow | 흐름 옵션 명령어 |
to_server 또는 from_client | 클라이언트 -> 서버 패켓 룰 매칭 |
to_client 또는 from_server | 서버 -> 클라이언트 패켓 룰 매칭 |
established | 세션이 연결된 상태의 패켓 룰 매칭 |
statless | 세션 연결 유무와 상관 없이 룰 매칭 |
flow:to_server,established | 클라이언트 -> 서버 세션 연결 패켓 룰 매칭 |
Snort 환경구성 시 주의점
https://koromoon.blogspot.com/2018/06/windows-ids-snort-base-apm_74.html
-위 블로그의 순서대로 환경구성하였으며
개인적으로 구성할 때 한번 더 확인하고 주의해야 한다고 생각하는 것을 적어보았다.
IDS 설치
설치할 Snort가 64비트 운영체제에서 쓸 것이므로 64비트 운영체제로 가상환경 구성했음.
WinPcap 이란 Windows 버전의 libpcap 라이브러리이다.
Windows 에서 실시간 네트워크 트래픽을 캡처할려면 설치해야 한다.
mysql 연동은 설치옵션에 없으나 Snort 설치 후, 설정파일을 수정하면 된다.
-IPv6 설정은 필요없으니 선택하지 않는다.
데이터베이스 연동 시 필요한 Schemas 콤포넌트가 보인다. 체크해주어야 한다.
데이터베이스 내에서 데이터가 어떤 구조로 저장되는지를 나타내는 것을 스키마라고 한다.
크로스 플랫폼 웹 서버 자유 소프트웨어 패키지로 Apache, PHP, MySQL 등을 포함되어 있다.
3가지를 모두 선택해준다.
IDS 설정
1. MySQL 초기 비밀번호 설정 시
update user set password = password('비밀번호') where user = 'root';
비밀번호 설정 시 특수문자 없이 평문으로 입력하여야 한다.
2. MySQL 전용 schemas 적용 시
3. BASE 설정 시
Database User Name 와 Database Password 설정은 MySQL 계정 정보를 입력함.
4. Snort.conf 설정 시
IDS 테스트
NIC를 확인할 때 사용하는 snort.exe -W 를 입력 후에
네트워크 인터페이스 카드가 명시되어 있는 것이 저 같은 경우 두번째 것이므로 2 로 입력하였다.
cd C:\Snort\bin
snort.exe -W
snort.exe -T -c c:\snort\etc\snort.conf -l c:\snort\log -i 2 <= snort 오류 확인
snort.exe -c c:\snort\etc\snort.conf -l c:\snort\log -i 2 <= snort 실행
XAMPP가 실행되고 오른쪽 아래 실행창에 있는 것을 확인한다.
핑 테스트 후에 BASE에서 확인하였더니 성공적으로 ICMP 에서 확인됨.
자신의 IP로 핑테스트 했을 때 안되는 경우 다른 IP address로도 날려볼 것을 권한다.
출처 : https://nouu94.tistory.com/60
https://net123.tistory.com/579
https://feccle.tistory.com/m/52
https://koromoon.blogspot.com/2018/06/windows-ids-snort-base-apm_74.html
'Security > 보안관제' 카테고리의 다른 글
http 헤더 및 DDoS 관련 (0) | 2024.03.22 |
---|---|
webdrive 악성코드 분석보고서 (0) | 2023.04.13 |
악성코드샘플 분석 (2) (2) | 2023.02.15 |
악성코드 샘플 분석 (0) | 2023.02.12 |
가상환경 구성 (Vmware 15) (2) | 2023.01.23 |