2010년 9월 10일 금요일

Bit-Twist 로 패킷파일의 편집과 생성까지 자유자재로..

지금까지 패킷 편집 도구를 몇 가지 소개하였다. 패킷생성기능, 편집 기능등. 패킷인사이드를 검색해 보면 몇 가지를 찾아볼 수 있을 것이다. 이번 도구의 이름은 Bit-Twist 로 패킷을 생성하고, 편집할 수 있는 기능까지 갖추고 있다. 사용방법도 너무 쉬워서 한번 사용예제를 보는 것만으로도 쉽게 이해가 될 것이다.

- bittwist  : PCAP 기반의 패킷 생성기
- bittwistb : PCAP 기반의 이더넷 브릿지
- bittwiste : PCAP 파일 에디터

일단, 다음의 경로를 통해 파일을 다운로드 받을 수 있다.


아차, 여기 예는 리눅스 기반에서 소개한 것이지만. 윈도우에서도 사용가능하다는 점!

도움말은 -h 를 통해서 볼 수 있고, 몇 가지 옵션을 살펴보도록 하자.  우선, 패킷 생성기인 bittwist 로 시작해 보자.  -d 옵션은 현재 사용가능한 네트워크 인터페이스를 보여준다.

# bittwist -d
1. eth0
2. any (Pseudo-device that captures on all interfaces)
3. lo

-i 를 통해 인터페이스를 정할 수 있고, 인자로 패킷파일을 주면 해당 인터페이스로 패킷을 발송한다.

# bittwist -i eth0 test.pcap
sending packets through eth0
trace file: test.pcap
^C
1235 packets (1041023 bytes) sent
Elapsed time = 36.533449 seconds

위 예를 보면 1235 개의 패킷을 전송하였고, Ctrl+C 를 눌러 중단했다. 바로 전송이 빠르게 이뤄지지 않았기
때문에 수동으로 중지한 것이다. 이럴때 -m 옵션을 사용하면 즉시 전송하게 된다.

# bittwist -i eth1 test.pcap -m 0
sending packets through eth1
trace file: test.pcap

2040 packets (1578854 bytes) sent
Elapsed time = 0.037914 seconds

-m 옵션을 사용하였더니 즉시 패킷이 전송되었고, 2040개의 패킷이 다 전달되었다.
-c 옵션은 전송할 패킷 갯수를 지정할 수 있다. 만약 test.pcap 에서 10 개의 패킷만을 전달하고 싶다면 -c 10 을 사용하면 된다.

# bittwist -i lo test.pcap -m 0 -c 10
sending packets through lo
trace file: test.pcap

10 packets (4247 bytes) sent
Elapsed time = 0.000414 seconds

간단한 옵션 몇가지를 통해 금방 패킷을 전송할 수 있는 것을 보았다. 이와 비슷한 기능을 가진 도구로는 tcpreplay 가 기억이 날 것이다.  자, 이번에는 편집 기능을 사용 예를 통해 한번 알아보도록 한다.

1) 패킷에서 1-2 까지만의 패킷을 뽑아내 저장해 보자.

# bittwiste -I test.pcap -O rigel.pcap -R 1-2
input file: test.pcap
output file: rigel.pcap

2 packets (128 bytes) written

2) 패킷 덤프 할 시간을 지정해 저장하기

일단 PCAP 파일의 첫 시간을 살펴보았더니 2010년7월21일 10시26분이다.

# tcpdump -r test.pcap -tttt | more
reading from file test.pcap, link-type EN10MB (Ethernet)
2010-07-21 10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:59297
7294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>

그리고, -S 옵션을 통해 시작시간과 끝 시간을 지정한다. 참고로 -I 옵션은 Input 파일 -O 옵션은 Output 파일을
뜻한다.

# bittwiste -I test.pcap -O rigel.pcap -S 21/07/2010,10:20:00-21/07/2010,10:26:40
input file: test.pcap
output file: rigel.pcap

944 packets (866907 bytes) written

3) IP 를 변경해 보자.

# tcpdump -r rigel.pcap
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:592977294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>

위 172.222.51.219 출발지 주소를 -> 192.168.0.0 으로 변경해 보자.

# bittwiste -I test.pcap -O rigel.pcap -R 1 -T ip -s 179.222.51.219,192.168.0.0
input file: test.pcap
output file: rigel.pcap

1 packets (66 bytes) written

# tcpdump -r rigel.pcap
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 192.168.0.0.3645 > 147.245.206.234.www: S 592977294:592977294(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>

확인해 보면 출발지 주소가 설정한대로 변경되었다.

4) -R 옵션을 사용하지 않으면 모든 범위에 적용된다.

# bittwiste -I test.pcap -O rigel.pcap  -T ip -s 179.222.51.219,192.168.0.0
input file: test.pcap
output file: rigel.pcap

2040 packets (1578854 bytes) written

3번과 같은 예제인데, 편집된 패킷 개수를 보면 2040 개이다. -R 을 사용하지 않아 전체에 적용이 된 것이다.

5) 포트 번호 변경

# bittwiste -I test.pcap -O rigel.pcap -R 1 -T tcp -d 80,8080
input file: test.pcap
output file: rigel.pcap

1 packets (66 bytes) written

6) Payload 삽입하기

# echo "hahaha" | xxd
0000000: 6861 6861 6861 0a                        hahaha.

-X 옵션을 통해 위 HEX 값을 삽입.

# bittwiste -I test.pcap -O rigel.pcap -R 1 -L 4 -X 686168616861 -T tcp
input file: test.pcap
output file: rigel.pcap

1 packets (72 bytes) written

편집된 rigel.pcap 을 아래와 같이 확인해 보면 Payload 가 삽입된 걸 볼 수 있다.

# tcpdump -r rigel.pcap -XX
reading from file rigel.pcap, link-type EN10MB (Ethernet)
10:26:39.659705 IP 179.222.51.219.3645 > 147.245.206.234.www: S 592977294:592977300(6) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
        0x0000:  001e 4a48 3900 0024 2119 7756 0800 4500  ..JH9..$!.wV..E.
        0x0010:  003a 7ee5 4000 3006 813f b3de 33db 93f5  .:~.@.0..?..3...
        0x0020:  ceea 0e3d 0050 2358 1d8e 0000 0000 8002  ...=.P#X........
        0x0030:  2000 7bdf 0000 0204 05b4 0103 0302 0101  ..{.............
        0x0040:  0402 6861 6861 6861                      ..hahaha
    
이외 옵션을 잘못사용하면 아래와 같은 에러메시지를 얻게 된다.

bittwiste: invalid header specification

이 도구를 소개하면서 느낀것은 다른 도구들보다 사용이 쉬웠다. 도움말만 참고해서도 쉽게 사용할 수 있을
만큼 간단하고 기능또한 필요한 것으로 잘 모아져 있다.

패킷을 편집하고 생성하는 기능을 원한다면 이 도구가 큰 도움이 될 것이다.

댓글 1개: