정구리의 우주정복
스노트 규칙 작성법, 규칙 읽는법 (Snort Rule example) 본문
*공부 기록용임 !*
스노트(Snort)
스노트는 자유-오픈 소스 네트워크 침입 탐지 차단 시스템이자, 네트워크 침입 탐지 시스템으로서 1998년 개발되었다.
스노트엔 총 3가지 작동 방식이 있다. 1) 스니퍼 모드 2) 패킹 로깅 모드 3) 네트워크 IDS 모드이다.(Sniffer Mode, Packet Logging Mode, NIDS Mode)
동작 과정
스니퍼 -> 패킷 디코더 -> 전처리기 -> 탐지엔진 -> 경고/로깅
스니퍼 : 네트워크 패킷 수집
패킷 디코더 : 전처리기와 탐지 엔진이 파싱 할 수 있도록 정규화
전처리기 : 특정 행위가 발견된 패킷을 탐지 엔진으로 전송
경고/로깅 : 스노트 규칙에 매칭된 경우 경고 출력 및 기록
수리카타는 스노트의 상위호환(?) 으로서 스노트의 기능 및 규칙이 호환된다는 특징이 있다.
How to write snort rules 스노트 룰 작성
룰셋 정의 파일 : /etc/nsm/rules 에 들어있다
local.rules : 사용자 정의로 세팅하는 룰들
downloaded.rules : 기본적으로 제공되는 스노트 규칙 파일
Rule Header (룰 헤더 작성하기)
1. Action : 룰을 통해 탐지된 의심 트래픽들 처리 하기
2. Protocol : 어떤 프로토콜 대상으로
3. Source IP : 출발지 IP
4. Source Port : 출발지 Port
->
5. Destination IP : 도착지 IP
6. Destination Port : 도착지 Port
S.IP S.Port -> D.IP D.Port 이런 방향 연산자를 사용해서 작성하게 된다
ex)
Alert TCP $EXTERNAL_NET any -> 10.20.30.160 any
Local IP 대역이 아닌 External 에서 유입 , 10.20.30.160 의 어떤 포트에 들어오든 Alert 를 띄워주세요
Alert TCP $EXTERNAL_NET any -> $HOME_NET any
외부에서 내부 네트워크에 접속했을때 Alert 를 띄워주세용가리
Rule Option (관리용도로 사용한다 7계층 어플리케이션 프로토콜의 페이로드 규칙)
1. msg : 의심행위가 발견되었을때 그 트래픽에 대한 메시지 (우리가 탐지하게 될 룰이 어떤건지 알려주는 메세지)
2. gid : 패턴이나 시그니처를 그룹으로 관리하기 위해 아이디를 주는 것
3. sid : 규칙을 식별하는 식별자 보통 1000001 부터 사용하는 경우가 많다 ! 작성하는 버릇을 들이도록 해야지
4. rev : 시그니처 관리 용도로 버전을 나타낸다
사용자에게 정보를 주는 용도
1. priority : 우선순위(위험도가 높다 !)
2. reference : 참고 정보들
3. classtype : 어떤 악성코드인지
유입되는 패턴을 검사하는 용도
1. content : 탐지하고자 하는 문자열을 작성하면 문자열을 포함하는 트래픽을 히트 ("ABC" <- 문자열 "|41 42 43|" <- 16진수로 ABC)
2. nocase : 대소문자 구분을 하지 않는다 "|41 42 43|";nocase => ABC,abc Abc .. 모두 히트가 된다
3. depth : depth:5; 시작부터 5바이트까지 검사를 하겠다
4. offset : offset:5; 시작부터 5 떨어진 부분부터 검사 해주세요
5. distance : 정의한 패턴이 있는 곳부터(시작점) 몇 바이트 떨어진 지점까지 정의하기 패턴 시작 상대위치
"123";distance:10; 123으로부터 10바이트 떨어진곳까지 검사해주세요
6. pcre : 정규표현식을 기록할수있는 옵션
How to read snort rules 스노트 규칙 해석하기
1. pass tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS(flow:to_server,established; content:"|2e2e5c2e2e|";)
pass tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS
외부 네트워크의 모든 포트에서 웹 서버에 웹 서비스 포트로 유입되는 tcp 트래픽을 패스한다
flow:to_server,established;
flow = 네트워크 상태정보
서버로 가는 패킷중 세션 연결리 완료 된 상태의 패킷
content:"|2e2e5c2e2e|";
0x2e2e5c2e2e 라는 문자열을 탐지해주세요
2. alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS(msg:"WEB-IIS..\.. access"; flow:to_server,established; content : "|2e2e5c2e2e|";
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS
외부 네트워크의 모든 포트에서 웹 서버에 웹 서비스 포트로 유입되는 TCP가 있으면 Alert
(msg:"WEB-IIS..\.. access"; Alert message 는 이렇게 해주세요
flow:to_server,established; 서버로 가는 패킷 중 세션 연결이 완료된 패킷
content : "|2e2e5c2e2e|"; 탐지하고자 하는 문자열
3.다음 내용을 포함하는 룰을 작성하라.
» 웹 서버에서 외부로 가는 패킷
» 메시지 : Directory Browsing Vuln
» 탐지 문자열 : index of /
» 대소문자 무시
» 클래스 타입 : web-application-attack
Alert TCP $HTTP_SERVERS any -> $EXTERNAL_NET any (msg:"Directory Browsing Vuln"; content:"index of /";nocase;classtype:web-application-attack;)
4. 다음 내용을 포함하는 룰을 작성하라.
» 외부에서 웹 서버로 가는 패킷
» 메시지 : Persistent XSS in POST
» 탐지 문자열 : script%3e
» 대소문자 무시
» 클라이언트 바디에서 탐지
» 클래스 타입 : web-application-attack
Alert TCP $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"persistent XSS in POST"; flow:to_server,established; Content:"="; http_client_body; content:"script%3e"; nocase; distence:0; classtype:web-application-attack; sid:2020202;rev:001;)
script 라고하는 문자열을 = 로 준다
3e 는 url 로 된거
어렵지만 ! 많이 보면 알거같다
'STUDY > RECORD' 카테고리의 다른 글
HTML 과 XHTML 의 차이 (0) | 2023.03.20 |
---|---|
Git repository 변경하기 , error: src refspec master does not match any 해결하기 (0) | 2022.02.24 |
MySql Setting (workbench command) (0) | 2022.02.24 |
맥북 M1 Github 설치 및 사용법 (0) | 2022.01.21 |
보안 로그 ,리눅스 로그 공부 (0) | 2021.09.03 |