본문 바로가기

Network

[Snort] 개념 / 설치 / FTP

Snort란?

 

- 오픈소스 기반의 네트워크 침입 탐지 시스템

- 거의 모든 IDS/IPS는 Snort에 기반함

- Snort의 기본 문법 숙지 잘하기

- 미러링 모드, 인라인 모드 둘 다 구축 가능 (Iptables는 미러링 모드 불가)

 

Snort 구축방식: 미러링 모드 vs. 인라인 모드

[미러링 모드 (Mirroring)]
Client - Tap(Switch, Hub) - Server
                         |
                    Snort
⭐ 탐지만 가능, 차단은 불가능 (IDS)
- 장점: 네트워크 부하 없음
- 단점: packet loss 발생 비율 높음, Tap과 같은 추가 장치가 필요 

[인라인 모드 (Inline)]
Client - Snort or Iptables - Server
⭐ 탐지와 차단 모두 가능 (IPS)
- 장점: packet loss 발생 거의 없음 
- 단점: 네트워크 과부하 발생

 

 

 

Snort 설치 방법

 

1. 설치 명령어 입력

$ sudo apt install snort

 

2. 네트워크 인터페이스 ens33으로 입력(Ubuntu - 33, 35 ..), 네트워크 범위 설정

 

 

※ 네트워크 범위 예 (IPv4 - 각 8bits)

192.168.100.0/24 (범위: 192.168.100.1 ~ 192.168.100.255)

192.168.0.0/16 (범위: 192.168.1.1 ~ 192.168.255.255)

 

3. 설치 완료 확인

 

 

 

 

Snort 룰 확인하기

 

1. 룰이 저장된 폴더로 이동 후 확인

$ cd /etc/snort/rules

$ ls

$ cat attack-responses.rules

 

 

 

 

Snort 설정 파일 확인 및 룰 사용 설정하기

 

1. Snort 설정 파일 확인하기

$ sudo vim /etc/snort/snort.conf -n

- Snort 동작 및 구성을 제어하는 주요 설정 파일

- 네트워크 인터페이스, 로깅 및 출력 옵션, 룰 등의 설정이 가능

 

2. Snort의 보안 정책을 local.rules로만 설정하기

- local.rules를 제외하고 아래로 모두 주석처리 (사용 X)

- :571로 571라인으로 이동 -> i -> 주석처리 -> esc -> :wq

- local.rules: Snort에서 사용자가 직접 작성한 룰을 저장하는 파일

 

 

3. local.rules에 룰 작성

$ sudo vim /etc/snort/rules/local.rules

- (룰) alert icmp any any -> any any (sid:1000001;)

- (옵션) sid: 룰의 인덱스, 10000 아래는 이미 정의되어 있어서 10001부터 사용 가능함

 

 

4. 룰 실행 

$ sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf

- (옵션) -A console: 콘솔에 출력 표시

- (옵션) -q: 조용한 모드로 실행 (출력 최소화)

- (옵션) -u snort: 프로세스가 사용할 사용자를 지정, 여기서는 'snort'라는 사용자를 지정

- (옵션) -g snort: 프로세스가 속할 그룹을 지정, 여기서는 'snort'라는 그룹을 지정

- (옵션) -c /etc/snort/snort.conf: 설정 파일 경로를 지정

 

Host OS에서 ping 전송 후, 탐지한 결과

 

[Snort 룰 구성요소]
alert tcp any any -> 192.168.100.0/24 1945 (msg:"Snort rule detected.")
ㄴ 룰 헤더                                                             ㄴ 룰 옵션 (옵션 구분자: ;)
⭐ src 포트는 랜덤이므로 보통 any
ㄴ FTP alert를 위한 룰: alert tcp 192.168.100.128 21 -> 192.168.100.20 any (sid:1000001;) (X)
   ㄴ alert tcp 192.168.100.128 any -> 192.168.100.20 21 (sid:1000001;) (O)
      ㄴ 실행하면, src 포트가 랜덤인 것을 확인 가능
⭐ 팁: 넓은 의미의 룰 작성 후 점점 좁은 의미의 룰로 수정 


[주요 룰 옵션]
1) nocase: 대/소문자 구분 X
2) rawbytes: decod하지 않은 raw data와 매칭 시도
3) depth: payload에서 패턴 매칭을 할 끝 위치 지정
4) offset: payload에서 패턴 매칭을 할 시작 위치 지정
5) distance: 이전 content에 매칭된 경우, 패턴 매칭을 시작할 상대 위치 지정 
6) within: 이전 content에 매칭된 경우, 패턴 매칭을 끝낼 상대 위치 지정
7) http_client_body: HTTP body 부분에 대해 패턴 매칭 시도
8) http_cookie: HTTP cookie 부분에 대해 패턴 매칭 시도
9) http_raw_cookie: HTTP cookie를 decode하지 않은 부분에 대해 패턴 매칭 시도
10) http_header: HTTP header 부분에 대해 패턴 매칭 시도
등등

 

 

 

Snort를 통한 FTP 연결알림, 차단

 

1. FTP 접속 가능 확인

$ ftp 192.168.100.20

 

2. Snort 룰 작성

$ sudo vim /etc/snort/rules/local.rules

alert tcp 192.168.100.128 any -> 192.168.100.20 21 (sid:1000001;)

 

3. 와이어샤크와 Snort 실행 후, FTP 접속

$ sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf

-> 와이어샤크에서 FTP 프로토콜의 TCP Stream을 확인하면, ID/PW가 모두 노출됨을 확인 가능

-> 아예 차단시키자

 

4. Snort 룰 수정

reject tcp 192.168.100.128 any -> 192.168.100.20 21 (sid:1000001;)

 

5. FTP 접속

- PW 입력 자체가 불가능함, 차단 성공

'Network' 카테고리의 다른 글

[FRP] RDP, FRP 설치  (1) 2023.06.22
[Snort] DoS / 응용 계층  (0) 2023.06.02
Firewall (1)  (0) 2021.12.20
Sniffing and Spoofing  (0) 2021.10.25
DNS and DNS Attack  (0) 2021.10.24