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: 설정 파일 경로를 지정
[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 |