Open Source/BackTrack

[BackTrack5 R1] Tcpreplay

DarkSoul.Story 2013. 2. 5. 16:41
반응형




개요

Tcpreplay는 패킷 캡처 Tool로 캡처 된 네트워크 트래픽을 편집 및 재 전송을위한 UNIX 시스템 유틸리티 모음입니다.  Tcpreplay은 클라이언트 또는 서버로 트래픽 분류 하는 기능을 제공합니다, Layers2 ~ 4에서 패킷을 수정하여 스니핑 또는 장치를 통해 네트워크에 임의의 속도로 트래픽을 보낼수 있습니다. 쉽게 풀이 한다면, 캡처된 패킷을 재 전송할때 유용하게 사용 할 수 있습니다. 

 

Tcpreplay는 1.x 버전에서는 단순히 패킷을 읽고 다시 전송하는 기능만 있었지만, 2.x버전에서 부터 패킷을 다양하게 재 작성 기능하는 기능을 추가하여 기능면에서 크게 향상되었지만 복잡성 및 성능등에 약간의 문제가 있었습니다. 하지만 현재 3.x버전에서 앞에서의 문제점들 수정과 동시에 tcprewrite와 결합하여 더욱 성능이 향상 되었습니다.



테스트 환경 


 운영 체제 (OS) : BackTrack5 R1


상세 분석

  

아래는 tcpreplay를 실행한 화면입니다.




[옵션]

-q, --quit : 자동 모드

-T, --timer=str : 패킷 타이밍 모드를 선택 (select, ioport, rdtsc, gtod, nano, abstime)

       --sleep-accel=num : Sleep 시간을 지정

       --rdtsc-clicks=num : RDTSC clicks 지정 /usec

-v, --verbose : Tcpdump 디코딩  패킷을 출력 (STDOUT:표준출력)

-A, --decode=str :값을 Tcpdump 디코더로 전달

-K, --enable-file-cache : 파일 캐시 활성화

     --preload-pcap : RAM 보내기 전에 미리 로드

-c, --cachefile=str : tcpprep 캐시 파일을 통해 트래픽 분할

-i, --intf1=str : 서버나 일반적인 패킷 트래픽을 출력할 인터페이스

-I, --intf2=str : 클라이언트나 보조 패킷 트래픽을 출력할 인터페이스

    --listnics : 사용가능한 네트워크 인터페이스 목록 출력

-l, --loop=num : 캡처된 패킷을 지정한 횟수 만큼  전송

    --pktlen : snaplen 무시하고 실제 패킷 사용

-L, --limit=num : 전송 패킷  제한

-x, --multiplier=str : multiple replay 속도 지정

-p, --pps=num :  전송 패킷의 Packets/sec(PPS) 지정

-M, --mbps=str :  전송 패킷 Mbps 지정

-t, --topspeed : 가장 빠른 속도로 Replay packet 전송

-o, --oneatatime : 사용자 정의로 한번에 하나의 Replay packet 전송

     --pps-multi=num  : Replay packet 전송하는 간격 지정

-P, --pid : tcpreplay PID 출력

     --stats=num  : 지정한 시간 마다 통계 출력 (단위:)

-V, --version : 버전 정보 출력

-h, --less-help : 간단한 Help 메시지 출력

-H, --help : Help 메시지 출력

-!, --more-help : 전체 Help 메시지 출력 (자세한 내용)

    --save-opts[=arg] : 설정 파일에 옵션 저장

    --load-opts=str : 설정 파일에서 옵션 로드 


tcpreplay를 사용하기 위해서는 미리 패킷을 캡처하여 *.pcap 형식으로 저장하고 있어야 합니다. 미리 준비된 *.pcap파일을 가지고 다시 패킷을 캡처된 목적지 IP로 재전송 하는것이 tcpreplay의 가장 중요한 역할 입니다.


아래는 그림은 tcpreplay를 사용하려는 PC의 IP와 재전송에 필요한 *.pcap 파일 내용 입니다.



캡처된 패킷의 Soure IP를 살펴 보면 동일한 PC가 아닌것을 확인 할 수 있습니다. 이제 tcpreplay를 이용하여, Destnation IP (74.125.128.147)로 패킷을 재 전송해 보도록 하겠습니다.    

 

가장 기본적인 방법으로 아래와 같이 tcpreplay를 진행합니다.


root@bt# ./tcpreplay --intf1 eth1(인터페이스) /root/tcpreplay_test(캡처된 패킷 파일) 



재 전송되는 패킷을 Wireshark를 이용하여, 다시 캡처 해보면 아래와 같이 tcpreplay_test(캡처된 패킷 파일)과 동일하게 Destnation IP으로 전송하고 있는것을 확인 할 수 있습니다.



패킷을 재 전송 할때는 위 그림에서 보듯이 동일한 시간으로 패킷을 재 전송하는 것을 확인 할 수 있습니다.

캡처된 패킷을 모두 재 전송하면, 아래 그림과 같은 결과를 확인 할 수 있습니다.



Actual: 1062 packets (467067 bytes) sent in 59.45 seconds.             Rated: 7856.5 bps, 0.06 Mbps, 17.86 pps

Statistics for network device: eth1

           Attempted packets:         1062

           Successful packets:        1062

           Failed packets:            0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):  0

 

캡처된 패킷의 전송 속도가 너무 느리다 생각되면, 옵션을 적용하여 다양한 속도로 재 전송이 가능합니다.

 

① 최대속도로 재 전송

 

패킷을 최대 속도로 재 전송하고자 할때는 --topspeed옵션을 적용합니다.


./tcpreplay --topspeed --intf1 eth1 /root/tcpreplay_test     

 


Actual: 1062 packets (467067 bytes) sent in 0.03 seconds.              Rated: 15568900.0 bps, 118.78 Mbps, 35400.00 pps

Statistics for network device: eth1

           Attempted packets:         1062

           Successful packets:        1062

           Failed packets:            0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):  0

 


앞서 기본적으로 패킷을 재 전송한 경우 59.45초의 시간이 걸렸지만, 최대 속도 (--topspeed)옵션을 적용하였을때는 0.03초가 걸린것을 볼 수 있습니다.

 

② 캡처된 패킷의 전송 속도보다 n배 이상의 빠른 속도로 전송

 

캡처된 패킷의 전송 속도보다 n배 이상으로 빠른 속도로 전송하기 위해서는 --multiplier 옵션을 사용합니다.

 

./tcpreplay --multiplier=3 --intf1 eth1 /root/tcpreplay_test

 



Actual: 1062 packets (467067 bytes) sent in 19.89 seconds.             Rated: 23482.5 bps, 0.18 Mbps, 53.39 pps

Statistics for network device: eth1

           Attempted packets:        1062

           Successful packets:        1062

           Failed packets:            0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):  0

 










③ 사용자가 원하는 PPS로 패킷을 전송

 

사용자가 원하는 PPS로 패킷을 전송하기 위해서는 --pps 옵션을 사용합니다.

 

./tcpreplay --pps=15 --intf1 eth1 /root/tcpreplay_test

 



Actual: 1062 packets (467067 bytes) sent in 70.76 seconds.             Rated: 6600.7 bps, 0.05 Mbps, 15.01 pps

Statistics for network device: eth1

           Attempted packets:        1062

           Successful packets:        1062

           Failed packets:                  0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):   0

   

④ 사용자가 원하는 Mbps로 패킷을 전송

 

사용자가 원하는 PPS로 패킷을 전송하기 위해서는 --mbps 옵션을 사용합니다.

 

./tcpreplay --mbps=5 --intf1 eth1 /root/tcpreplay_test

 


Actual: 1062 packets (467067 bytes) sent in 0.80 seconds.               Rated: 583833.8 bps, 4.45 Mbps, 1327.50 pps

Statistics for network device: eth1

           Attempted packets:        1062

           Successful packets:        1062

           Failed packets:                 0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):  0


 

  

페킷을 한번만 재 전송하여 IDS/IPS에서 잘 모르겠다 생각되면, --loop 옵션을 적용하여 사용자가 원하는 만큼  해당 패킷을 재 전송이 가능 합니다. 

 

./tcpreplay --loop=3 --intf1 eth1 /root/tcpreplay_test

 

 


root@bt:/pentest/sniffers/tcpreplay# ./tcpreplay --loop=3 --intf1 eth1 /root/tcpreplay_test 

sending out eth1

processing file: /root/tcpreplay_test

processing file: /root/tcpreplay_test

processing file: /root/tcpreplay_test

Actual: 3186 packets (1401201 bytes) sent in 178.16 seconds.                     Rated: 7864.8 bps, 0.06 Mbps, 17.88 pps

Statistics for network device: eth1

           Attempted packets:         3186

           Successful packets:            3186

           Failed packets:                  0

           Retried packets (ENOBUFS): 0

           Retried packets (EAGAIN):   0

 

  

여기서 --loop 옵션값을 0을 주게 되면, 사용자가 강제로 멈추기 전까지 패킷을 재 전송하게 됩니다. 

 

캡처된 패킷을 왜 재 전송 할까 의문을 가지면서 테스트를 진행 하였으나,  테스트를 진행 하면서 느낀것이 도입된 신규 장비에 대해서 다양한 테스트를 수행할 수도 있고, 안티 바이러스가 탐지 하지 못하는 신종 바이러스 및 악성코드들을 발견 할 경우 패킷을 캡처 후 IDS/IPS에 사용자 정의로 패턴 시그너처를  만든후 정상적으로 차단하는지 테스트하는 등에 쓰일수 있겠구나 생각되었습니다.

 

참고 URL 및 도서

http://tcpreplay.synfin.net

http://sourceforge.net/projects/tcpreplay/




반응형

'Open Source > BackTrack' 카테고리의 다른 글

[BackTrack5 R3] WebSploit  (0) 2013.02.05
[BackTrack5 R1] Xplico  (0) 2013.02.05
[BackTrack5 R2] extundelete  (0) 2013.02.04
[BackTrack5 R2] findmyhash  (0) 2013.02.04
[BackTrack5 R2] hash-identifier  (0) 2013.02.04