VMware Workstation 15/Snort (스노트)

[VMware] Snort(스노트)에 대하여 알아보기 & 실습하기 - 1

YaluStar 2018. 11. 1. 01:23

[VMware] Snort(스노트)에 대하여 알아보기 & 실습하기 - 1

 

실습 환경

VMware Workstation 15 Player (FREE 버전)

Security Onion 14.04.4.2 (Sguil)

Kali-Linux-2018.3a-i386 (32 bit)

Metasploitable-Linux-2.0.0

BeeBox (bWAPP) v1.6.7

 

 


 

스노트(Snort)는 무료 오픈 소스 네트워크 침입 차단 시스템(NIPS: Network Intrusion Prevention System)이자, 네트워크 침입 탐지 시스템(NIDS: Network Intrusion Detection System)으로 마틴 로시가 1998년에 개발하였습니다.

 

스노트 공식 홈페이지


네트워크 기반 침입 탐지 시스템(NIDS)는 실시간 트래픽 분석과 IP에서의 패킷 로깅을 수행하는 능력을 갖습니다. 스노트(Snort)는 프로토콜 분석, 내용 검색 그리고 매칭을 수행합니다.

 

스노트(Snort)는 스니퍼, 패킷 로거, 네트워크 침입 탐지 3가지 모드를 주로 사용합니다.

1.  스니퍼 모드

프로그램은 네트워크 패킷을 읽고 콘솔에 보여줍니다.

2. 패킷 로거 모드

프로그램은 패킷을 디스크에 기록합니다.

3. 침입 탐지 모드

프로그램은 네트워크 트래픽을 모니터하고 사용자에 의해 정의된 규칙에 반하는지를 분석하고, 특정한 동작을 수행합니다.

 

실습하기 전에 gedit 프로그램이 설치되어 있지 않으신 분은 설치를 먼저 하고 진행합니다.

sudo apt-get install gedit 명령어를 입력합니다.

 

터미널창을 새로 열어 nsm 폴더로 이동합니다.

cd /etc/nsm/ 명령어를 입력합니다.

ls 명령어를 입력하여 파일 목록을 확인합니다.

목록 중에서 securityonion.conf 파일수정합니다.





securityonion.conf 파일을 열어줍니다.

수정을 위해 sudo 명령어를 사용합니다.

sudo 명령어를 안 쓰고 작성할 시 수정이 안 되는 경우가 발생합니다.

sudo gedit securityonion.conf

 




securityonion.conf 파일을 열어서 Ctrl + F 키를 눌러 찾기 기능을 이용합니다.

LOCAL_NIDS_RULE_TUNING 를 입력하여 이동합니다.

 




그 중에서 맨 밑에 LOCAL_NIDS_RULE_TUNING=no 앞에 # 을 추가하여 주석처리를 합니다.

한 줄 밑에 LOCAL_NIDS_RULE_TUNING=yes추가합니다.

그리고 저장한 후 닫아줍니다.

 




이번에는 snort 폴더로 이동합니다.

cd /etc/nsm/templates/snort 명령어를 입력합니다.

ls 명령어를 입력하여 snort.conf 파일이 있는지 확인합니다.

sudo gedit snort.conf 명령어를 입력합니다.

 




실행하면 여러 가지 스노트(Snort)에 관한 정보들이 나옵니다.

 




스크롤을 밑으로 내리면 스노트 규칙(Snort rule)에 사용하는 여러 변수들을 확인할 수 있습니다.

필요하실 경우 수정하여 사용할 수 있습니다.

정보들을 확인한 후 창을 닫습니다.

 




이번에는 rules 폴더로 이동합니다.

cd /etc/nsm/rules 명령어를 입력합니다.

ls 명령어를 입력하여 목록을 확인합니다.


그 중 downloaded.rules 파일이 있는지 확인합니다.

스노트에 사용하는 여러 규칙들이 저장되어 있는 파일입니다.

 




실습을 하기전downloaded.rules 파일의 원본을 복사해둡니다.

cp downloaded.rules downloaded.rules.bak 명령어를 입력합니다.

downloaded.rules와 같은 내용을 가지고 있는 downloaded.rules.bak 라는 이름으로 파일을 새로 만듭니다.

 




ls -l 명령어를 입력하여 확인합니다.

 




이어서 local.rules 파일수정합니다.

새로운 규칙작성할 수 있는 파일입니다.

sudo gedit local.rules

 




local.rules 파일에 다음과 같이 입력합니다.

 

1. Alert IP any any -> any any

2. Drop ICMP any any -> 192.168.1.103 any

3. Pass TCP 192.168.178.123 any -> $HOME_NET 22

4. Pass TCP 192.168.178.123 any <> $HOME_NET 22

 

차례대로 설명하면 다음과 같습니다.

1. IP 프로토콜을 사용하고 모든 IP의 모든 포트에서 모든 IP의 모든 포트로 가는 패킷을 탐지하여 경고를 띄운다.

2. ICMP 프로토콜을 사용하고 모든 IP의 모든 포트에서 192.168.1.103의 모든 포트로 가는 패킷을 탐지하여 드롭시킨다.

3. TCP 프로토콜을 사용하고 192.168.178.123의 모든 포트에서 $HOME_NET(미리 설정한 변수)의 ssh(포트 번호 22)로 가는 패킷을 패스한다.

4. TCP 프로토콜을 사용하고 192.168.178.123의 모든 포트에서 $HOME_NET(미리 설정한 변수)의 ssh(포트 번호 22)로 오가는 패킷을 패스한다.

 




좀 더 자세하게 살펴보면 좋겠지만, 간단하게 이 정도만 확인하고 실습을 진행합니다.


위에 작성한 내용들을 전부 삭제한 후 다음 내용을 입력합니다.

Alert TCP $EXTERNAL_NET any -> $HOME_NET any (msg:”Path traversal vuln /etc/passwd”; content:”/etc/passwd”; nocase; sid:3000001; rev:1;)

 

외부에서 내부로 들어가는 패킷을 탐지하여 경고를 띄우고, 메시지(msg)의 내용을 출력합니다. 탐지할 문자는(content) “/etc/passwd” 이며, 대소문자를 구분하지 않습니다.(nocase)

규칙을 구분하는 식별자(sid)로 3000001을 사용합니다. 사용자가 새롭게 추가할 때는 1,000,001 이상으로 설정합니다.

시그니처에 대한 버전(rev)는 1을 사용합니다. 수정작업을 거치면 rev 값에 +1을 합니다.

 

정리하면

외부 모든 포트에서 내부 모든 포트로 들어가는 패킷을 탐지하는데 탐지할 문자는 “/etc/passwd”이며 대소문자를 구분하지 않고, 탐지가 되면 “Path traversal vuln /etc/passwd” 메시지를 출력합니다. 규칙 식별자는 3000001을 사용하며 시그니처 버전은 1입니다.

 




이어서 2개의 규칙도 추가합니다.

 

Alert TCP $HTTP_SERVERS any -> $EXTERNAL_NET any (msg:”Directory Browsing Vuln”; content:”index of /”; nocase; classtype:web-application-attack; sid:2000001; rev:1;)

 

Alert TCP $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:”Persistent XSS in POST”; content:”script%3e”; nocase; http_client_body; classtype:web-application-attack; sid:2000002; rev:1;)

 

여기서는 다른 것들만 설명하겠습니다.

 

$HTTP_SERVERS는 웹 서버의 주소 변수입니다.

classtype은 미리 설정해둔 공격의 우선순위, 규칙 우선순위를 설정합니다.

http_client_body는 HTTP_client_body에서 특정 값을 패턴 매칭하며, Body를 사용하지 않는 GET 메소드는 해당 사항이 없고 POST 메소드에서는 매칭이 가능합니다.

 

해당 내용들을 입력한 후 저장합니다.

 




gedit 창 열어둔 상태에서 터미널(Terminal)창으로 돌아옵니다.

이 상태에서 Ctrl + Z 키를 눌러줍니다.

Ctrl + Z 키가 안될 경우 Enter 키를 눌러줍니다.

 




이어서 bg 명령어로 확인합니다.

 




이번에는 작성한 규칙업데이트합니다.

sudo rule-update 명령어를 입력합니다.


중간에 perl 경고가 나올 경우 다음 방법을 사용해 보시기바랍니다.

perl 고치는 링크

 




OK4개가 나오면 정상적으로 되었습니다.

중간에 경고실패가 나오면 오타가 발생한 확률이 높으므로 확인하시기 바랍니다.

 




마지막으로

sudo nsm --sensor --restart --only-snort-alert 명령어를 입력합니다.

OK2개가 나오면 규칙이 정상적으로 적용되었습니다.





만약에 warningok같이 뜨고 오타도 없을 경우에는 다음과 같은 명령어를 실행합니다.

단 원본을 미리 복사해둔 경우에만 가능합니다.

sudo cp downloaded.rules.bak download.rules

 

해당 명령어를 실행한 뒤에는 sudo rule-update 명령어부터 다시 시작합니다.

 



이상으로 스노트(Snort)에 대하여 알아보았습니다.

실습은 다음 글에서 이어서 진행하겠습니다.

감사합니다.

 


반응형