SNORT
대표적으로 사용되는 룰 기반의 IDS
snort는 내가 정한 룰대로 탐지 활동을 하는 것이다.
iptables와 비슷하다고 생각해도 된다.
이 룰(Rule)은 'Rule Header' 와 'Rule Option'으로 구성되어 있다.
Snort(SNiffer and mORE)
1998년 마틴 로쉬가 오픈 소스로 개발
스그니쳐 기반 네트워크 침입 탐지 시스템
작동 방식: Sniffer Mode, Packet Logging Mode, NIDS Mode, IPS Mode
|
|
스니퍼(Sniffer) : 네트워크 패킷 수집
패킷 디코더(Packet Decoder) : 전처리기와 탐지 엔진이 파싱 할 수 있도록 정규화
전처리기(Preprocessor) : 특정 행위가 발견된 패킷을 탐지 엔진으로 전송
탐지 엔진(Detection Engine) : 전달 받은 패킷을 스노트 규칙에 매칭되는지 확인
경고/로깅(Alert/Log) : 스노트 규칙에 매칭된 경우 경고 출력 및 기록
|
|
|
# vi /etc/snort/rules/backdoor.rules
alert tcp $EXTERNAL_NET 27374 -> $HOME_NET any (msg:"BACKDOOR subseven 22";
flow:to_server,established; content:"|0D 0A|[RPL]002|0D 0A|"; reference:arachnids,485;
reference:url,www.hackfix.org/subseven/; classtype:misc-activity; sid:103; rev:7;)
alert tcp $EXTERNAL_NET 27374 -> $HOME_NET any rule header
(msg:"BACKDOOR subseven 22"; flow:to_server,established; content:"|0D 0A|[RPL]002|0D 0A|";
reference:arachnids,485; reference:url,www.hackfix.org/subseven/; classtype:misc-activity;
sid:103; rev:7;) 'rule options' 자세히 보기 위해
30000번 이하의 sid 번호들은 미리 지정이 되어 있다.
rule header의 순서와 규칙
Actions 프로토콜 소스IP 포트번호 목적지 목적지IP 목적지PORT
|
|
옵션에 sid와 rev가 꼭 포함되어 있어야 한다.
|
|
alert = Log, Pass(NULL), Activate -> Dynamic
protocol : also udp, icmp, ip (L3,L4 계층에서 사용하는 것만 정의){HTTP =X}
SEXTERNAL_NET
range 1:1024 (1번 ~ 1024번 까지)
flags: A+ (tcp플러그에 SA, SA+ 등을 나타낸다.)
reference; 참조하는 것(형식)
sid 룰을 정의하는 번호
classtype : /etc/snort/classification.config를 참조한다.
rev : 릴리즈 번호(수정시 rev번호를 올려주어야 동작한다.)
|
Action(추가적인 내용)
------------------------------------------------------------------------------------
종류 내용
------------------------------------------------------------------------------------
Drop 인라인(In-Line)방식으로 구성되어 있을 경우 IPS 역할이 가능,
규칙에 매칭되는 패킷을 차단하는 기록
Reject Drop과 같은 액션을 취함
- TCP의 RESET 패킷을 출발지로 전송
- ICMP 패킷은 Unreachable로 반송
Sdrop Drop과 동일하게 패킷을 차단하지만 로그 기록하지 않음
------------------------------------------------------------------------------------
|
|
■ 송신/수신 아이피(Src/Dst IP)
------------------------------------------------------------------------------------
종류 내용
------------------------------------------------------------------------------------
! 부전연산자로 특정 네트워크 대역 제외(EX: ! 192.168.10.50)
[] 비연속적인 아이피 지정(EX: [192.168.10.0/24,10.0.0.0/24]
any 모든 아이피 의미
192.168.10.0/32 특정 호스트 아이피 지정
192.168.100.0/24 특정 아이피 대역대 지정
$EXTERNAL_NET 외부 아이피 주소 변수
$HOME_NET 내부 아이피 주소 변수
$HTTP_SERVERS HTTP 서버의 아이피 주소 변수
$DNS_SERVERS DNS 서버의 아이피 주소 변수
$SMTP_SERVERS SMTP 서버의 아이피 주소 변수
$SSH_SERVERS SSH 서버의 아이피 주소 변수
------------------------------------------------------------------------------------
|
고정포트
전부
대역 100부터 3000ᄁᆞ지
제외 80을 제외
이하 1023이하
이상 1024이상
|
1,2,3 번 주력
■ 규칙 옵션(Rule Option)
기본 특징
규칙 헤더에 해당하는 패킷 중 특정 패턴(문자열)과 매칭하는 영역
옵션 종류는 일반 옵션, 흐름 옵션, 페이로드, HTTP 관련 옵션 등이 존재
옵션을 적절히 활용하면 정확도 향상
옵션 구분은 ;(세미콜론) 사용
전체 스노트 규칙 옵션 링크***
- http://manual-snort-org.s3-website-us-east-1.amazonaws.com/
3.3 Rule Options 3.4.4 sid
일반 옵션(General Options)
---------------------------------------------------------------------------------------------
옵션 내용
---------------------------------------------------------------------------------------------
(필)msg 경고 이벤트를 보여줄 때 나타나는 메세지(EX: msg:"SQL Injection";)
(필)sid 규칙을 구분하는 식별자(EX: sid:3000001;)
모든 규칙은 식별 번호를 가짐
0 ~ 2999999 : 이미 예약된 식별자
3000000 ~ : 사용 가능한 식별자
/etc/snort/community-sid-msg.map
(필)rev 해당 규칙에 대한 버전(EX: rev:1;)
수정 할 때 마다 숫자를 1씩 증가
priority 우선 순위를 숫자로 지정(EX: priority:1;)
1(높은) ~ 10(낮음)
classtype 스노트 규칙을 분류하는 옵션(EX: classtype:<분류명>;)
정의파일: /etc/snort/classfication.config
(분류이름:분류설명:우선순위)
reference 취약점의 참고가 되는 정보(URL 등)를 연결
(EX: reference:url,www.example.com/test.html;)
(EX: reference:cve,2012-1823;)
정의 파일: /etc/nsm/<센서명>/reference.config
/etc/snort/reference.config
---------------------------------------------------------------------------------------------
흐름 옵션(Flow Options)
---------------------------------------------------------------------------------------------
옵션 방향옵션 내용
---------------------------------------------------------------------------------------------
flow to_server 클라이언트에서 서버로 향하는 트래픽
from_client 클라이언트에서 서버로 향하는 트래픽
to_client 서버에서 클라이언트로 향하는 트래픽
from_server 서버에서 클라이언트로 향하는 트래픽
---------------------------------------------------------------------------------------------
established: 세션이 연결된 상태의 트래픽만 매칭
stateless: 세션 연결 유뮤와 상관 없이 매칭
EX) flow:to_server,established
페이로드(Payload)
---------------------------------------------------------------------------------------------
옵션 내용
---------------------------------------------------------------------------------------------
Content 탐지할 패턴을 설정하느 옵션(EX: Content:"abc";) (EX:Content:"|61 62 63|";)
Nocase 패턴 매칭시 대소문자 구별하지 않고 매칭(EX: Content:"abc";nocase;)
Offset 해당 옵션에서 지정한 바이트만큼 떨어진 위치부터 탐색 시작(EX: offset:5;)
Depth 패킷 데이터에서 찾을 내용의 범위를 지정하는 옵션
예를 들어 5로 지정하면 처음부터 5바이트까지 문자열 탐색(EX: depth:5;)
distance 이전 content 설정 값 매칭 탐색할 위치를 지정
예를 들어 abc가 매칭된 위치에서 10바이트 떨어진 위치부터 test 문자열을 탐색
시작하고 싶다.(EX: Content:"abc";nocase;content:"test";distance:32;)
within 이전 content 설정 값 매칭 후 매칭을 끝낼 상대 위치를 지정
예를 들어 abc가 매칭된 위치에서 10바이트 이내에 test 문자열 존재하는지 탐색
(Content:"abc";nocase;content:"test";within:10;)
pcre 스노트 규칙에서 사용가능한 정규 표현식
특정 문자열의 집합을 표현할 때 효과적으로 사용 가능
(EX: pcre:"/select\b.*FROM/Ui";)
---------------------------------------------------------------------------------------------
HTTP 관련 옵션(content 부분에 영향을 주는 옵션이다.)
---------------------------------------------------------------------------------------------
옵션 내용
---------------------------------------------------------------------------------------------
http_method 페이로드 앞부분의 HTTP 메소드 부분의 패턴을 매칭
메소드: GET, POST, PUT, HEAD, DELETE, TRACE ...
http_uri 페이로드에서 HTTP URI 값을 패턴 매칭
http_cookie 페이로드에서 HTTP 쿠키 값을 패턴 매칭
http_header HTTP 요청/응답 헤더 값에서 패턴 매칭 시도
http_client_body HTTP 요청/응답 바디 값에서 패턴 매칭 시도
http_stat_code HTTP 응답 메세지의 상태코드에서 매칭 시도.
http_stat_message HTTP 응답 메시지의 상태 메세지 부분에서 매칭 시도
---------------------------------------------------------------------------------------------
■ 참고 동영상
Snort - NIDS on CentOS 6.5 - part 1/4
http://www.youtube.com/watch?v=DYBfCyd6cC0
Snort - NIDS on CentOS 6.5 - part 2/4
http://www.youtube.com/watch?v=frmZWsjPBZ8
Snort - NIDS on CentOS 6.5 - part 3/4
http://www.youtube.com/watch?v=QBwwhIBav38
Snort - NIDS on CentOS 6.5 - part 4/4
http://www.youtube.com/watch?v=II80tzwEuFk
■ Snort 룰 생성기(Snort Rule Generator)
Snort Rule Generator 사용법에 대한 유투브 동영상
http://www.youtube.com/watch?v=4Eb8S-NK6f4
프로그램 다운로드
http://dl.dropbox.com/u/4864067/snort-rules.zip
Snort Rule Generator 사용법
다음과 같은 실습을 개인적으로 진행하고 분석 보고서를 작성한다.
[실습1] 스캐닝(scanning)에 대한 snort 점검 확인
- nmap 수행결과 snort 쪽에서 확인
[실습2] 플러딩 공격(flooding attack)에 대한 snort 점검 확인
- hping3 수행 결과 snort 쪽에서 확인
[실습3] 도스 공격(dos attack)에 대한 snort 점검 확인
- pyloris-3.2 버전 수행결과 snort 쪽에서 확인
- loic 툴로 공격에 대한 snort 쪽에서 확인
'Learning > └◆리눅스 서버 보안' 카테고리의 다른 글
08.4_PCRE(Perl Compatible Regular Expression) (0) | 2017.03.15 |
---|---|
08.3_ufsnet 사용한 DDoS Attack 시뮬레이션 (0) | 2017.03.15 |
08.2_LOIC(Low Orbit lon Cannon) 툴을 사용한 DoS Attack(2017.03.15수정) (3) | 2017.03.15 |
08.2_LOIC(Low Orbit lon Cannon) 툴을 사용한 DoS Attack (0) | 2017.03.15 |