글 작성자: nouu

https://www.inflearn.com/course/it-%EB%B3%B4%EC%95%88-%EC%9D%B8%ED%94%84%EB%9D%BC-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81

 

ESXi 가상 인프라 구축과 보안 솔루션을 활용한 이상징후 탐지 모니터링 - 인프런 | 강의

IT 인프라들이 가상화, 클라우드 환경 기반으로 서비스가 옮겨지고 있습니다. 서비스는 다양해지고, 매우 많은 애플리케이션들이 인프라 위에서 운영되고 있습니다. 점점 복잡해지는 인프라의

www.inflearn.com

 

http://www.yes24.com/Product/Goods/43219492

 

오픈소스 도구를 활용한 웹 모의해킹과 침해대응 - YES24

다양한 오픈소스 도구를 활용하여 웹 취약점 진단부터 침입 탐지 분석까지의 실무를 배워보자.『오픈소스 도구를 활용한 웹 모의해킹과 침해대응』은 웹 취약점 점검 도구의 기능을 알아보고

www.yes24.com

 

해당 강의와 서적을 바탕으로 작성하였습니다. 

 

EsXi 가상 인프라 구축과 보안 솔루션을 강의중 snort룰 부분에 대해 전반적으로 이해가 가지 않아 구글링과 서적을 참고했고, 특히 오픈소스 도구를 활용한 웹 모의해킹과 침해대응 서적을 새로 구입하여 패턴을 익히고 있다. 

 

우선 스노트룰을 살펴 보기 전 오픈소스 NIDS(Network Instrusion Detection System) 스노트를 알아봐야 한다. 

 

https://www.slideshare.net/mhkang/ss-29039995

 

보안과 빅데이터의 올바른 접목

강명훈 ‘빅데이터 분석으로 살펴본 IDS와 보안관제의 완성’ 저자 truese@daum.net

www.slideshare.net

마틴로쉬 

스노트는 1998년 마틴 로쉬에 의해 개발된 오픈소스 시그니처 기반 네트워크 침입탐지 시스템이다. 네트워크에 있는 패킷을 수집하여 트래픽을 모니터링 하며, 스노트룰 기반의 준비된 규칙과 비교해서 침입 탐지 및 경고를 발생시킨다. 시그니처 기반이란 침입 탐지를 문자열로 판단한다는 의미로, 패킷 데이터에서 악의적인 문자열을 탐지하여 침입의 여부를 결정한다.

 

스노트 동작은 다음과 같은 순으로 처리가 된다. 

1. 스니퍼가 네트워크 패킷을 수집한다

2. 스니퍼에 의해 수집된 패킷은 패킷 디코더로 전처리기와 탐지 엔진이 파싱할 수 있도록 정규화 작업을 거친다.

3. 전처리기는 특정 행위가 발견된 패킷을 탐지 엔진으로 전송한다. 

4. 탐지엔진은 해당 패킷이 스노트 규칙에 매칭되는지 확인한다.

5-1. 스노트 규칙에 매칭된다면 콘솔 창이나 분석도구에 경고를 출력하고 기록한다.

5-2 스노트 규칙에 매칭되지 않는다면 pass 한다.

 

 

 

 

스노트룰의 규칙 구조

스노트 규칙은 아래의 표와 같이 규칙 헤더 (Rule Header)와 규칙 옵션(Rule Option) 영역으로 나뉜다.

 

규칙 헤더(Rule Header) 규칙 옵션 (Rule Option)
Action    Protocol    Source IP    Source Port
--> Dst IP Dst Port 
Options

 

규칙 헤더는 수집된 패킷 중 규칙과 비교할 패킷을 결정하는 영역으로 이벤트 처리방법(Action), 탐지할 프로토콜, 출발지 IP와 포트, 목적지 IP와 포트를 지정한다. 즉, 위에서 말한 스노트 동작 순서에서 전처리기와 탐지 영역이 수행되어야 할 기준을 제시해준다.

 

규칙옵션은 규칙헤더로 결정된 패킷 데이터의 악성 문자열과 매칭할 패턴을 지정하는 영역이다.

 

정리하자면...

1. 규칙헤더를 통해 수집된 패킷 중 규칙과 비교할 패킷을 결정한다.

2. 규칙옵션을 통해 규칙 헤더로 결정된 패킷 데이터의 악성 문자열과 매칭할 패턴을 지정한다.

 

 

 

규칙 헤더 

규칙헤더는 수집된 패킷이 헤더의 지정된 출발지 IP, Port, 목적지 IP, 포트, 패킷의 프로토콜 해당되는지 확인하는 침입 탐지의 첫 번째 조건이다. 그리고 액션 필드에 의해 침입 탐지가 확정될 경우 어떻게 액션을 취할지도 결정한다. 

 

액션(Action)

해당 규칙에 의해서 패킷이 탐지되었을 때 처리하는 방법을 결정하는 명령어이다. 처리 방법에는 총 8가지가 있다. 모든 값은 스노트 규칙에 일치하는 경우에 발생한다. 시큐리티 어니언과 같은 NIDS는 침입 탐지가 목적이기 때문에 경고 신호를 주는 Alert를 발생시킨다. IDS와 달리 네트워크 In-line 방식으로 사용하는 IPS 장비는 침입을 차단하는 Drop을 사용할 수 있다.

 

종류 내용
Alert 패킷 정보를 로그에 기록하고 사용자가 확인할 수 있게 경고를 발생시킨다.
Log 패킷 정보를 설정한 로그 파일에 기록을 한다.
Pass 패킷을 그냥 무시한다. 특정 네트워크 트래픽을 무시하고 싶을 때 사용하지만 거의 사용되지 않는다
Activate 경고를 발생시키고, 동적 규칙을 활성화 한다.
Dynamic 동적 규칙이라 불리며, Activate에 의해 활성화되면 패킷의 정보를 기록한다.
Drop 인라인 방식으로 구성된 IPS 역할을 할 수 있으며, 규칙에 해당하는 패킷을 차단하고 기록한다.
Reject Drop과 같은 액션을 취하며, TCP RST 패킷은 출발지로 재전송하고 ICMP 패킷은 Unreachable로 반송한다.
Sdrop Drop과 공통점은 패킷을 차단한다는 것이며 차이점은 로그에 기록하지 않는다는 것이다.

 

 

 

프로토콜(Protocol)

TCP, UDP, IP, ICMP, ANY를 지원하며, ANY는 모든 프로토콜을 의미한다. 

 

 

출발지, 목적지 아이피 

출발지 아이피(Source IP)는 프로토콜 다음으로 작성하고 목적지 아이피(Dst IP)는 방향 연산자 뒤에 작성한다. IP 지정 방법으로 CIDR(Classless Inter-Domain Routing) 방식을 사용하거나 파이썬의 리스트 문법과 같은 []를 써서 네트워크 대역대를 포괄시킬 수 있다.

 

종류 내용
! 부정 연산자로서 ! 우측에 특정 네트워크 대역을 쓰면 그 네트워크 대역을 제외한 나머지 라는 뜻이다.
[] 파이썬의 리스트 문법을 생각하면 되며, 비연속적인 IP를 지정한다.
any 모든 IP를 의미한다.
192.168.100.100/32 특정 호스트 IP를 지정한다.
192.168.100.0/24 특정 네트워크 대역만 지정한다
!192.168.100.0/24 전제 IP에서 특정 IP 대역인 192.168.100.0/24 대역만 제외한다.
![192.168.100.100/24, 10.10.10.10/24] 192.168.100.100/24, 10.10.10.10/24를 제외한 모든 IP에 해당한다.
$EXTERNAL_NET Snort.conf에 정의된 IP 변수이며, 외부 IP 변수이다. 
$HOME_NET Snort.conf에 정의된 IP 변수이며, 내부 IP 변수이다.
$HTTP_SERVERS Snort.conf에 정의된 IP 변수이며, 웹 서버 IP 변수이다.
$DNS_SERVERS Snort.conf에 정의된 IP 변수이며, DNS 서버 IP 변수이다.
$SMTP_SERVERS Snort.conf에 정의된 IP 변수이며, SMTP 메일 서버 IP 변수이다.
$SSH_SERVERS Snort.conf에 정의된 IP 변수이며, SSH 변수이다.

 

규칙헤더에 작성하는 출발지와 목적지 IP는 스노트 설정 파일인 snort.conf에서 정의한 변수를 사용할 수 있다. 해당 변수의 장점은 변수를 자신의 환경에 맞게 수정하고 스노트 규칙에 사용한다면 규칙이 복잡해 보이지 않고 환경이 바뀌더라도 설정 파일만 수정하면 되므로 유지 관리하기 쉽다.

 

 

송수신 포트(Port)

포트는 송신/수신 아이피 다음에 위치하며, 아이피와 마찬가지로 any나 부정연산자인 !를 사용할 수 있다. 추가적으로 :파이썬 슬라이싱처럼 생긴 기호를 이용하여 연속적인 포트를 지정 가능하다. 

 

종류 내용
! 부정 연산자로 특정 포트를 제외시킨다.
: 연속적인 포트번호를 지정한다.
any 어떠한 포트도 허용한다는 뜻이다.
1:1024 1부터 1024까지의 포트를 지정한다.
!1:1024 1부터 1024까지를 제외한 나머지 포트를 지정한다.(1025 ~ 65535가 될 것이다.)

 

포트도 마찬가지로 Snort.conf에 정의된 포트 변수를 통해 규칙을 설정할 수 있다. 

종류 내용
$HTTP_PORTS HTTP 포트 변수
$SHELLCODE_PORTS 쉘 코드 포트 변수
$ORACLE_PORTS 오라클 DB 포트 변수
$SSH_PORTS SSH 포트 변수
$FTP_PORTS FTP 포트 변수

 

 

방향 연산자

방향 연산자는 패킷이 흘러가는 방향을 나타내며, ->와 <> 두 가지의 방법으로 사용가능하다. 하지만 주로 IDS의 부하가 적은 단방향 ->를 많이 사용한다. 

 

종류 내용
-> 출발지 -> 목적지로 향함을 의미한다.
<> 출발지와 목적지를 오가는 패킷을 의미한다.