#1 Snort(스노트) 문법
- snort(스노트)란 자유-오픈 소스 네트워크 침입 차단 시스템이자, 네트워크 침입 탐지 시스템이다. (IPS/IDS)
IP network 상에서 실시간 트래픽 분석과 패킷 로깅을 뛰어나게 수행하는 작고 가벼운 네트워크 침입 탐지 시스템!
[Header]
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;)
alert : 룰 액션 (alert, log, pass, drop, reject 등)
alert : alert만 발생, 패킷은 로그에 기록, log : alert발생 없이 로그만 기록, pass : 패킷 통과, drop : 패킷을 차단하고 로그에 기록, reject : Reset, ICMP 메시지를 전송
tcp : 프로토콜 (tcp, udp, icmp, ip)
any : 출발지 IP
any : 출발지 port
-> : 방향 ( -> , <> ), <- 이건없다.
[Body]
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;)
content : 패킷의 페이로드의 검사할 문자열 |18 03 00| 이건 바이너리 값을 검사
depth : 바이트의 길이, 값 (depth:3은 3바이트 값)
distance : 지정된 값만큼 바이트값 건너뜀 (distance:2는 2바이트값을 건너뜀)
within : 범위 내 검사 (within:1은 1바이트 내 값)
msg : 해당 룰 조건만족 시 로깅하는 메시지
#2 Snort(스노트) 예제
1) 비정상적인 SSH 로그인 시도 탐지 시나리오 (Brute Force Attack : 30초안에 5번 로그인 시도 공격 탐지)
alert tcp any any -> any 22 (msg:"SSH Brute Force Attack"; content:"SSH-2.0"; nocase; threshold:type both, track by_src, count 5, seconds 30; sid:1000001;)
2) XMAS 스캔 탐지 시나리오
alert tcp any any -> any 22 (msg:"XMAS scan detected"; flags:FPU+; threshold:type both, track by_src, count 1, seconds 30; sid:1000002;)
3) HTTP Get Flooding 탐지 시나리오
alert tcp any any -> any 80 (msg:"HTTP GET Flooding detected"; content:"GET"; offset:0; depth:3; nocase; threshold:type threshold, track by_src, count 5, seconds 30; sid:1000003;)
#3 Snort(스노트) 기출문제
11회 문제) 모든 네트워크 대역에서 Telnet으로 접속하는 패킷 중 14번째 자리까지 'anonymous'가 포함된 트래픽에 대해서 'Dangerous' 메시지로 경고한느 snort rule을 만드시오.
alert tcp any any -> any 23 (msg:"Dangerous"; content:"anonymous"; depth:14; sid:1;)
13회 문제) Snort Role 설정 의미를 설명하시오.
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;)
① 목적지 443, 465, 523 포트
② content에서 첫 3바이트를 바이너리 값으로 |18 03 00| 을 검사
③ 2번이 끝난 위치에서 2바이트 건너뛰고 1바이트 값이 바이너리 값으로 |01| 검사
④ 3번이 끝난 위치에서 바로 1바이트 값이 바이너리 값 |00|이 아닌지(!) 검사
⑤ 위의 모든 조건 만족시 msg : "SSLv3 ~" 를 기록하고 해당 룰의 식별자를 1로 지정
14회 문제) XSS 공격을 탐지하기 위한 Snort rule에 대하여 다음 물음에 답하시오.
alert any any -> any 80 ( msg : "XSS"; content : "GET "; offset : 1; depth : 3; content : "/Login.php<script>XSS"; distance 1; )
1) content : "GET", offset : 1, depth : 3 의미
- 전송된 패킷의 첫 1바이트 띄고(offset) 3바이트(depth) 값이 "GET"인지 검사
2) content:"/Login.php XSS"; distance 1; 의미
- 위의 첫번째 검사 후 한칸 띄고(distance) "/Login.php XSS" 값 검사
3) 위의 룰로 탐지 안될 경우 어떻게 수정해야 하는지 기술
- 패킷의 내용 이 "/login.php xss" 소문자로 들어올 수도 있으니, nocase(대소문자 구분안함)옵션을 추가하거나 offset을 0 또는 삭제한다.
'⭐ 보안기사' 카테고리의 다른 글
클라우드 서비스 제공모델 3가지(SaaS,PaaS,IaaS), 구축모델 4가지 (1) | 2020.06.22 |
---|---|
리눅스 슈퍼데몬 Xinetd (Xinetd.conf) (0) | 2020.06.17 |
OWASP Top 10 (2017) (0) | 2020.06.12 |
정보보안기사 실기 13회 기출문제 (0) | 2020.06.11 |
정보보안기사 실기 14회 기출문제 (0) | 2020.06.10 |