[ 정보보안기사 / 정보보안산업기사 ]
스노트 (Snort)
1. 스노트 (Snort)
네트워크 침입 탐지 시스템
2. 스노트 (Snort) 기능
- 스니퍼 : 네트워크 패킷 스니핑
- 패킷 로거 : 패킷을 로깅
- 네트워크 침입탐지 : 트랙픽 분석 후 침입탐지
3. 스노트 룰 (Snort Rule)
스노트 사용자 설정 헤더부분과 바디부분으로 나뉜다.
3-1. 룰 헤더 부분
탐지 후 행동들, 프로토콜, IP, 포트번호 명시, 방향
룰 헤더(head) | ||||||
Action | protocal | src_ip address | src_port | direction | dst_ip address | dst_port |
탐지 후 행동들 | 탐지 프로토콜 | 출발 IP | 출발 포트 | 탐지방향지정 | 목적지 IP | 목적지 포트 |
3-1-1. Action : 탐지 후 행동들
Action | 설명 |
alert | 경고 알림 후 로그 기록 |
log | 로그 기록 |
pass | 패킷 무시 |
activate | alert 실행 후 dynamic 실행 |
dynamic | 더 많은 로그 기록 |
drop | 패킷 차단 후 로그 기록 |
reject | 패킷 차단 후 로그 기록 후 TCP - TCP RST UDP - ICMP port unreachable 메시지 전송 |
sdrop | 패킷 차단 후 로그 기록 없음 |
3-1-2. protocal : 탐지 할 프로토콜 종류
protocal | 설명 |
TCP | TCP 탐지 |
UDP | UDP 탐지 |
ICMP | ICMP 탐지 |
IP | IP 탐지 |
3-1-3. ip address : 출발지 , 목적지 ip 지정
ip address | 설명 |
any | 모든 IP |
IP | 특정 IP |
IP/20 | 특정 IP대역 |
[IP,IP] | []를 사용하여 다수 IP 지정 |
!(I) | IP를 제외한 모든 IP |
$HOME_NET | 스노트 설정 파일의 내부 IP 주소 |
$EXTERNAL_NET | 스노트 설정 파일의 외부 IP 주소 |
3-1-4. port : 출발지 , 목적지 포트 지정
port | 설명 |
any | 모든 포트 |
포트번호 | 특정 포트 |
포트번호:포트번호 | 포트번호 ~ 포트번호 |
:포트번호 | 포트번호 이하 모든 포트 |
포트번호: | 포트번호 이상 모든 포트 |
3-1-5. direction : 방향지정
direction | 설명 |
-> | 출발지 -> 목적지 패킷 탐지 |
<> | 출발지 목적지 사이 모든 패킷 탐지 |
3-2. 룰 바디 부분
패킷 탐지 사용자 설정
3-2-1. 일반옵션 설정
msg : alert 발생 시 이벤트 명
sid : 스노트 룰 ID
99이하 : 시스템 예약 ID
100 ~ 1000000 이하 : snort 자체지정 sid
1000001 이상 : 사용자 정의 sid
rev : 룰 수정횟수 수정 시 숫자가 증가
3-2-2. 페이로드 범위 설정
content : 검사할 문자열 지정
- content:"문자열" : text형식의 해당 문자열 검사
- content:"|00 11|" : 바이너리형식의 해당 값 검사
offset : 검사 시작 위치 ( offset은 0부터 시작 )
depth : 검사 시작 위치 기준으로 몇 바이트 검사 할 것인지 결정
distance : 이전 검사 패턴 후 몇 바이트 떨어진 곳에서 다음 패턴 검사할지 결정
within : distance 위치 기준으로 몇 바이트 검사 할 것인지 결정
nocase : 페이로드 검사 시 대소문자 구분 X
문제1 ) 다음의 snort 룰에 대한 물음에 답하시오.
alter tcp any any -> 80 *msg "XSS"; ①content:"GET"; offset:1; depth:3; ②content:"/login.php?iD:<script?"; distance:1;)
1) content: "GET"; offset:1; depth:3; 무슨 뜻인가?
2) content: "/login.php?iD:<script?"; distance:1; 무슨 뜻인가?
3) 문자열 " GET /login.Php?iD :<script> " 검색이 안된다면 어떻게 변형해야하는가?
답1 )
1. 패킷 중 2번째 문자열 부터 3바이트 내에 GET 문자열 있는지 검사
즉, 2번째 문자열부터 4번째 문자열까지 GET 문자열 패턴 검사
(2번째 문자열) G |
(3번째 문자열) E |
(4번째 문자열) T |
|||
offset 1 depth 1 |
depth 2 | depth3 |
2. 첫번째 content 패턴 검색 후 1바이트 떨어진 위치에서 "/login.php?iD:<script?"문자열 있는지 검사
(2번째 문자열) G |
(3번째 문자열) E |
(4번째 문자열) T |
/login.php?iD:<script? | ||
offset 1 depth 1 |
depth 2 | depth3 | distance:1 |
3. nocase 옵션을 사용하여 대소문자 구분을 하지않고 sid를 추가한다.
alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1;)
↓
alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1; nocase; sid:100001;)
문제2 ) 다음의 snort 룰에 대한 물음에 답하시오.
alert tcp any any < > any ①[443,465,523] (②content:"|18 03 00|"; depth: 3; ③content:"|01|"; distance: 2; within: 1; ④content:!"|00|"; within: 1; ⑤msg: "SSLv3 Malicious Heartbleed Request V2"; sid:1;)
답2 )
1. 목적지 포트는 443번, 465번, 523번 포트로 지정한다.
2. 3byte 내에 18 03 00 바이너리 값이 있는지 검사한다.
3. 첫번째 컨텐츠 2byte 떨어진 곳에서 1byte 범위 내에 01 바이너리 값이 있는지 검사한다.
4. 두번째 컨첸츠 끝난 위치에서 1byte 내에 00 바이너리 값이 없는지 검사한다.
5. alert 알림명으로 SSL~V2를 쓴다.
6. sid번호 (스노트 룰 번호)는 1로 지정한다.
'[자격증] 정보보안기사 > ↘ 정보보안 실무' 카테고리의 다른 글
[정보보안기사 / 정보보안산업기사] 포트 스캐닝 (Port Scanning) (1) | 2020.06.02 |
---|---|
[정보보안기사 / 정보보안산업기사 ] 웹 서버 보안 설정 파일 (httpd.conf) (0) | 2020.06.02 |
[ 정보보안기사 ] 쉘 ( Shell ) (0) | 2020.05.13 |
[ 정보보안기사 ] 커널 ( Kernel ) (0) | 2020.05.13 |
[ 정보보안기사 / 정보보안산업기사 ] 인터럽트 ( Interrupt ) (0) | 2020.05.12 |
댓글