본문 바로가기
  • AI (Artificial Intelligence)
Security/Snort

스노트(snort) 룰을 이용한 PCAP파일 생성 및 IPS탐지 TEST

by 로샤스 2014. 2. 11.

스노트(snort) 룰을 이용한 PCAP파일 생성 및 IPS탐지 TEST

 

개요

스노트(snort) 룰을 이용한 PCAP파일 생성 및 IPS탐지 TEST

 

설치

우선 linux CentOS6.4에서 돌리는게 좋다... 버전때문에 ^^;

 

설치순서는 아래 순서대로 설치한다

1. byacc bison flex python python-devel svn (yum설치)
2. libpcap (Compile 설치)
3. tcpreplay (Complie 설치)
4. scapy (python script 설치)
5. rule2alert (svn 설치)

 

필수 패키지 설치

설치전 yum을 이용하여 필요한 rpm을 손쉽게? 설치한다

 

필요한 패키지
byacc bison flex python python-devel svn (yum설치)


#yum install byacc bison flex python python-devel svn gcc make -y 

 

tcpreplay 설치

tcpreplay 설치전 libpcap 라이브러리 설치
rpm -qa |grep libpcap결과에 libpcap이 있다면 지우고 소스설치 해야한다. 

libpcap은 tcpdump에서 같은 라이브러리를 사용함으로 tcpdump도 같이 지우고 상위버전의 tcpdump 를 소스설치 한다. (주소 : http://www.tcpdump.org/ )

 

- libpcap 삭제명령
#yum remove libpcap tcpdump

 

- compile 하기전에 yum으로 관련 패키지 추가 설치
#yum install byacc bison flex –y

 

- libpcap 설치버전 libpcap-1.4.0.tar.gz 아래와 같이 compile

#./configure; make; make install
error 없이 설치되면 ok

 

tcpreplay-3.4.4.tar.gz 설치
(주소: http://tcpreplay.synfin.net/wiki/Download )

아래와 같이 compile 한다.


#./configure;make;make install

 

참~ 쉽죵? ^,.^

 

tcpreplay 설명

- tcpreplay는 pcap파일을 지정한 인터페이스로 패킷을 전송할 수 있다.
- 패킷 재전송
tcpreplay --topspeed --intf1=interface명 재전송 할 패킷 경로
예) tcpreplay --topspeed --intf1=eth0 /root/rewrite.pcap

- tcprewrite은 기존 pcap파일의 IP정보 Port정보등을 수정할 수 있다
 
- 패킷 수정 : 목적지 dst IP와 dst MAC을 수정하는 예
tcprewrite -i 원본 패킷 경로  -o 목적 패킷을 만들 경로 --dstipmap [수정할 ip]:[변경된 ip] --enet-dmac=[mac주소] -C
예) tcprewrite -i /root/dump.pcap -o /root/rewrite.pcap --dstipmap [1.1.1.1]:[2.2.2.2] --enet-dmac=[6C:F0:49:5E:A0:68] -C

- dst Port를 수정하는 예
tcprewrite -i 원본 패킷 경로  -o 목적 패킷을 만들 경로 --portmap=수정할 port:변경된 port -C
tcprewrite -i /root/dump.pcap -o /root/rewrite.pcap --portmap=2055:9991 -C 

 

Tcpreplay, tcprewrite help

너무많아서 생략한다 –- help  옵션으로 확인하시길… 미안해 불친철해서

 

rule2alert 설치
rule2alert은 snort rule을 이용하여 pcap파일을 만들어 주는 python 스크립트 이다.
rule2alert의 설치에 앞서 몇 가지의 패키지를 설치해야 한다.
CentOS5의 버전이 너무 낮아 삽질 끝에 최신 CentOS6.4에서 설치하여 성공하였다.
Python의 경우 yum을 이용하여 devel 패키지까지 같이 설치한다.

#yum install python python-devel -y

 

python 설치가 완료되면 python 패킷생성 라이브러리인 scapy를 설치한다.

 (주소 : http://www.secdev.org/projects/scapy/ )
tar.gz 파일을 wget으로 다운받은 후 압축을 풀고 디렉토리 들어가서 아래 명령어로 인스톨 한다.

#python setup.py install

 

별에러 없으면 설치 성공이며 scapy라고 입력하면 scapy consol에 들어갈 수 있다. 

 

Scapy 확인

 

[root@itls-test ~]# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: Failed to execute tcpdump. Check it is installed and in the PATH
WARNING: No route found for IPv6 destination :: (no default route?)
INFO: Can't import python Crypto lib. Won't be able to decrypt WEP.
INFO: Can't import python Crypto lib. Disabled certificate manipulation tools
Welcome to Scapy (2.2.0-dev)
>>>
>>>
>>>
>>>
>>>

위에처럼 나오면 설치가 완료된 것 이며, ls() 명령으로 잘 동작하는지 테스트 합니다.
>>> ls()
ARP        : ARP
BOOTP      : BOOTP
CookedLinux : cooked linux
DHCP       : DHCP options
DNS        : DNS
DNSQR      : DNS Question Record
DNSRR      : DNS Resource Record
....

Ctrl+D 를 입력해서 scapy에서 나올 수 있습니다.

 

이제 드디어 rule2alert을 설치한다.
공식사이트 : https://code.google.com/p/rule2alert/
다운로드는 svn을 이용하여 설치하며, svn이 없으면 당근 설치해야 한다.
#yum install svn –y

#svn checkout http://rule2alert.googlecode.com/svn/trunk/ rule2alert-read-only

 

위 명령으로 설치하면 현재 위치에 rule2alert-read-only 디렉토리가 생기며, 디렉토리 안에 들어가면 r2a.py 파일이 있고 해당 파일이 실행 파일이다. 

rule2alert 정상적인 동작을 확인하기 위햐여  help 옵션을 사용해 에러가 안나오는지 확인한다. 아래와 같이 나오면 정상이다.

 

 [root@itls-test rule2alert-read-only]# python r2a.py -h
WARNING: Failed to execute tcpdump. Check it is installed and in the PATH
WARNING: No route found for IPv6 destination :: (no default route?)
Usage: python r2a.py [-vtT] -f rule_file -e <EXTERNAL IP> -m <HOME IP> -w pcap [-E<num>]
Evasion Techniques in evasion.txt

Options:
  -h, --help     show this help message and exit
  -c SNORT_CONF  Read in snort configuration file
  -f RULE_FILE   Read in snort rule file
  -F             Write failed streams to pcap
  -w PCAP        Name of pcap file
  -v             Verbose hex output of raw alert
  -t             Test rule against current snort configuration
  -T             Test rule against current Suricata configuration
  -m HOMENET     Set $HOME_NET IP Address
  -e EXTNET      Set $EXTERNAL_NET IP Address
  -s MANUALSID   Manual SID Selection
  -n MANUALNUM   Number of times to alert SID
  -E EVASION     Evasion Technique
[root@itls-test rule2alert-read-only]#

 

Tomahawk 설치
tomahawk 의 현재버전은 1.1로 2006년에 마지막 업데이트 되었다.
(다운로드 주소 : http://sourceforge.net/projects/tomahawk/files/latest/download )
소스설치 할 수 있지만 binary 도 잘 동작하기 때문에 그냥 사용한다(어디서 받았는지 기억이 없음)

복사한 tomahawk파일을 chmod 777 해서 실행파일로 만들고 그냥 실행하면 된다.

[root@itls-test ~]# ./tomahawk
Beginning test

 

위에처럼 나오면 성공이다

여기까지가 모든 설치가 완료된 것이다.

 Tcpdump 소스설치가 없지만 그낭 받아서 compile하면 된다.
생각보다 쉽지만은 않다….

 

PCAP 만들기

rule2alert으로 PCAP파일을 만드는 방법을 설명한다.

 

1. vi편집기를 이용하여 snort패턴을 임의의 파일에 작성한다

#vi test3.rule
#cat test3.rule
alert tcp any any -> any 1234(content:"JOIN !nn!";classtype:high-rarity;rev:0;)

패턴은 snort rule 형식으로 인터넷을 참고하기 바란다.

 

2. r2a.py로 패킷을 생성하면 ethernet frame에 MAC주소가 생성이 안된다.

해당 문제를 해결하기 위해서는 Generatior 모듈의 Payload.py의 IP()부분에 scapy형식의 Ether부분을 추가한다. (MAC주소는 내맘이다)

 

요청 인터넷에 친절하신 분이 올려주셔서 참고했다

()

 

- 변경전
 #This is the actual data packet that will be sent containing the payload
p = IP(src=source_ip, dst=dest_ip)/TCP(flags=flag, sport=source_port, dport=dest_port, seq=seq_num, ack=ack_num)/payload

 

 - 변경후
 #This is the actual data packet that will be sent containing the payload
p = Ether(src="00:13:20:15:55:93",dst="00:13:20:15:66:93")/IP(src=source_ip, dst=dest_ip)/TCP(flags=flag, sport=source_port, dport=dest_port, seq=seq_num, ack=ack_num)/payload

 

3. rule2alert으로 PCAP파일을 아래와 같은 옵션으로 생성한다.

-m 은 출발지 -e 는 목적지 -f는 snort룰 -w 는 PCAP파일 명을 넣어준다.

 #python r2a.py -f test3.rule -m 1.1.1.1 -e 2.2.2.2 -w test3.pcap
WARNING: Failed to execute tcpdump. Check it is installed and in the PATH
WARNING: No route found for IPv6 destination :: (no default route?)
Building Rule:
Loaded 1 rules succesfully!
Writing packets to pcap...
Finished writing packets

 

succesfully! 나오면 성공이다.

 

4. tcpdump을 이용하여 파일을 읽어보자 만약 읽어지지 않는다면 뭔가 문제가? 있는 것 이다.

 

 # tcpdump -vvenr test3.pcap
reading from file test3.pcap, link-type EN10MB (Ethernet)
04:02:41.165373 00:13:20:15:55:93 > 00:13:20:15:66:93, ethertype IPv4 (0x0800), length 68: (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto TCP (6), length 54)
    1.1.1.1.41857 > 2.2.2.2.1234: Flags [P.], cksum 0x8ee6 (correct), seq 1283695945:1283695955, ack 1544212287, win 10, options [mss 10], length 10
04:02:41.168823 00:00:40:06:74:c6 > 45:00:00:2c:00:01, 802.3, length 44: LLC, dsap 802.1B I (0x02) Individual, ssap 802.1B I (0x02) Command, ctrl 0x0101: Supervisory, Receiver Ready, rcv seq 0, Flags [Poll], length 30
04:02:41.171066 00:00:40:06:74:c6 > 45:00:00:2c:00:01, 802.3, length 44: LLC, dsap Null (0x00) Group, ssap Null (0x00) Response, ctrl 0x0202: Information, send seq 1, rcv seq 1, Flags [Response], length 30
04:02:41.173259 00:00:40:06:74:c6 > 45:00:00:2c:00:01, 802.3, length 44: LLC, dsap 802.1B I (0x02) Individual, ssap 802.1B I (0x02) Command, ctrl 0x0101: Supervisory, Receiver Ready, rcv seq 0, Flags [Poll], length 30

 

아래는 snort rule파일과 wireshark에서 PCAP파일 비교한 화면이다. content 부분에 "JOIN #!nn!"이 있는 것을 확인 할 수 있다.

 

tcpreplay을 이용한 패킷 전송 

tcpreplay로 간단히 패킷을 전송하여 IPS장비의 탐지여부를 확인해보자

--intf=전송할 인터페이스 뒤에 pcap파일명을 적으면 아래와 같이 전송된다.

 # tcpreplay --intf1=eth3 test3.pcap
sending out eth3
processing file: test3.pcap
Actual: 4 packets (200 bytes) sent in 0.01 seconds.             Rated: 20000.0 bps, 0.15 Mbps, 400.00 pps
Statistics for network device: eth3
        Attempted packets:         4
        Successful packets:        4
        Failed packets:            0
        Retried packets (ENOBUFS): 0
        Retried packets (EAGAIN):  0

 

아래 IPS 장비에서 탐지/차단된 것을 확인할 수 있다.

음음??? 무슨장비?? 요건 넣을수가 없다 ㅎㅎ

 

Tomahawk를 이용한 패킷 전송 

 아래 간단한 옵션으로 패킷을 전송한다.

출발지/목적지는 랜덤하게 전송된다.

-f 는 PCAP파일을 지정하고 -i는 sent -j recv 인터페이스를 지정한다(반대일 수 있음...?)

 

아래 테스트는 IPS에서 차단되면서 Timeout이 걸리는 화면

 # ./tomahawk -f test3.pcap -j eth3 -i eth4
Beginning test

Timeout 1 loop of trace test3.pcap (hid: 1)
Timeout 1 loop of trace test3.pcap (hid: 2)
Timeout 1 loop of trace test3.pcap (hid: 3)
Timeout 1 loop of trace test3.pcap (hid: 4)
Timeout 1 loop of trace test3.pcap (hid: 5)
Finished 5 loops of trace test3.pcap Completed: 0, Timed out: 5
Retrans: 20
Sent: 26
Recv: 0 -> 응답이 없음 ^^

 

아래 간단한 옵션으로 패킷을 전송한다.

아래는 같은 옵션으로 패킷이 IPS장비를 통과한 내역이다.

 # ./tomahawk -f test3.pcap -j eth3 -i eth4

Completed 1 loop of trace test3.pcap (hid: 209)
Completed 1 loop of trace test3.pcap (hid: 210)
Completed 1 loop of trace test3.pcap (hid: 211)
Completed 1 loop of trace test3.pcap (hid: 212)
Finished 712 loops of trace test3.pcap Completed: 712, Timed out: 0
Retrans: 0
Sent: 712
Recv: 712

 

테스트구성 

 

 Tmoahawk는 IPS를 탐지 및 차단을 테스트하는 Tool로 패킷을 sent 및 recv를 받음으로 IPS는 무조건 TP로 구성되어야 한다.
★ 해당 tool은 출발지 및 목적지 IP를 무작위로 변경하여 패킷을 전송한다.

 

 

Tcpreplay는 지정한 인터페이스로 PCAP파일을 단방향 전송함으로 별도의 TP구성은 필요없다

 

 

 

★ 도움이된 사이트
http://www.hackthepacket.com/
http://tcpreplay.synfin.net/wiki/Download
http://www.tcpdump.org/
http://www.python.org/
https://code.google.com/p/rule2alert/
http://tomahawk.sourceforge.net/
http://www.secdev.org/projects/scapy/
https://www.virustotal.com/

 

 

 

 

 

출처 : http://neospring_.blog.me/50176482644

 

 

 

 

 

 

 

'Security > Snort' 카테고리의 다른 글

[Snort] 설치  (0) 2014.02.11
[Snort] SnortReport 설치  (0) 2014.02.11
[Snort] 사용 방법  (0) 2014.02.11
[Snort] User Manual  (0) 2014.02.11
rule2alert - 스노트 룰로 패킷 만들기  (0) 2014.02.11

댓글