룰 헤더부분과 룰 옵션으로 구성된다.
액션 | 프로토콜 | 송신 IP | 송신 PORT | 방향 | 수신 IP | 수신 PORT | (룰 옵션) |
---|---|---|---|---|---|---|---|
탐지 후 행동들 | 탐지 프로토콜 | 출발 IP | 출발 PORT | 탐지방향지정 | 목적 IP | 목적 포트 |
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. 모든 네트워크 대역에서 Telnet으로 접속하는 패킷 중 14번째 자리까지 'anonymous'가 포함된 트래픽에 대해서 'Dangerous' 메시지로 경고하는 snort rule을 만드시오.
alert tcp any any -> any 23 (msg:"Dangerous"; content:"anonymous"; depth:14; sid:1;)
3. 다음 보기를 보고 문제점과 해결방안을 제시하시오.
tcp any any -> any any PCRE(/^POST.*Contentx2dLengthx2ax20evilstring)
3.1. 해당 Rule은 어떤 문제점을 가지고 있는가?
Rule에는 HTTP프로토콜에 대한 정규식(POST, Content-Length가 포함)이지만 모든 포트 any로 설정되어 있어 HTTP서비스가 아닌 불필요한 트랙픽에 대해서도 감시를 수행함. 시스템에 오버헤드 유발.
3.2. 해결방안은 무엇인가? 목적지 주소와 포트를 웹서버주소, 80 포트로 설정하여 부하를 감소
tcp any any -> 웹서버IP 80
4. 다음의 snort 룰에 대한 물음에 답하시오.
alter tcp any any -> 80 *msg "XSS"; ①content:"GET"; offset:1; depth:3; ②content:"/login.php?iD:<script?"; distance:1;)
4.1. content: "GET"; offset:1; depth:3; 무슨 뜻인가?
패킷 중 2번째 문자열 부터 3바이트 내에 GET 문자열 있는지 검사(=2번째 문자열부터 4번째 문자열까지 GET 문자열 패턴 검사)
4.2. content: "/login.php?iD"; distance:1; 무슨 뜻인가?
첫번째 content 패턴 검색 후 1바이트 떨어진 위치에서 "/login.php?iD" 문자열 있는지 검사
4.3. 문자열 " GET /login.Php?iD :<script? " 검색이 안된다면 어떻게 변형해야하는가?
nocase 옵션을 사용, sid 추가
alter tcp any any -> 80 *msg "XSS"; content:"GET"; offset:1; depth:3; content:"/login.php?iD:<script?"; distance:1; **nocase; sid:100001;**)
5. 다음의 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;)
1. 목적지 포트는 443번, 465번, 523번 포트로 지정한다.
2. 3byte 내에 18 03 00 바이너리 값이 있는지 검사한다.
3. 첫번째 컨텐츠 2byte 떨어진 곳에서 1byte 범위 내에 01 바이너리 값이 있는지 검사한다.
4. 두번째 컨첸츠 끝난 위치에서 1byte 내에 00 바이너리 값이 없는지 검사한다.
5. alert 알림명으로 SSL~V2를 쓴다.
6. sid번호 (스노트 룰 번호)는 1로 지정한다.
6. 모든 네트워크 대역에서 Telnet으로 접속하는 패킷 중 14번째 자리까지 'anonymous'가 포함된 트래픽에 대해서 'Dangerous' 메시지로 경고한느 snort rule을 만드시오.
alert tcp any any -> any 23 (msg:"Dangerous"; content:"anonymous"; depth:14; sid:1;)
7. 다음은 HTTP GET Flooding 공격에 대한 스노트 탐지이다.
alert tcp any any -> any 80 (msg:'HTTP Get Flooding Detect'; content:"GET/HTTP1";( ); nocase; threshold: type threshold, track by src, count 10, seconds 1; sid:1000001)
7.1) 스노트 룰의 action 은 패킷이 탐지 되었을때의 처리 방식을 의미한다. 탐지된 패킷을 차단하고 로그를 남기는 action 2가지는? drop, reject
7.2) content를 첫번째 바이트로부터 13번째 바이트 범위안애서 검사하고자 할때 () 안에 들어갈 옵션은? depth 13
7.3) threshold 옵션은 특정 시간동안 발생하는 이벤트 수를 제한하여 과도하게 많은 이벤트가 발생하는 것을 방지하기 위한 옵션이다. 위에서 alert 이벤트 발생 수를 제한하는 기준과 방식은? 출발지를 기준으로 매 1초동안 10번째 이벤트마다 action을 수행
https://itwiki.kr/w/%EC%8A%A4%EB%85%B8%ED%8A%B8
https://goc1221.tistory.com/60
https://q.fran.kr/%EB%AC%B8%EC%A0%9C/9815