2010년 1월 27일 수요일

100 기가 가 넘는 패킷 파일이라고 ?

우연챦게 패킷 덤프를 하는 과정에서 잘못되어 100기가가 넘는 패킷파일이 생성되었다. 생각만 해도 엄청나게 큰 패킷파일이다. 그런데 이 100 기가가 넘는 패킷 파일을 어떻게 분석해야 할까? 이걸 한번에 읽어 들이는 것은 말도 안되고, 분석을 하려하면 막막하다.

자 일단 실체를 확인해보자. 127G 의 패킷 파일이다. 놀라울 따름이다.

packet:/pcap# ls -lah *
-rw-r--r-- 1 root root 127G 2009-12-16 15:46 XXXXXX.pcap

capinfos 로 정보를 확인해 보려고 하나, 너무나 큰 나머지 읽어들이지 못한다.

packet:/pcap# capinfos -c XXXXXX.pcap
capinfos: Can't open XXXXXX.pcap: Value too large for defined data type

살짝 패킷파일의 앞 부분을 살펴보니 POST 데이터가 있는 HTTP 프로토콜이 보인다.

packet:/pcap# head XXXXXX.pcap
�ò��|#(K��<<������)�)�E�o       o|#(K��**)�E�ɵɵ�@o)�E�o ~#(K    D
\\������)�EEN��Lo       o����:]��Z FHFAEBEECACACACACACACACACACACAAA ~#(K%�>>ɵ�@)�EE0�@��o       =T*Z�Pv�l�ooɵ�@)�EEa�@�No�E�ɵ�E0@=T*Z�Pv�l�%�P���POST / HTTP/1.0 ý<<┤ý@)ýEE(�@��o        =T*Z�Pv�l�%�P���~#(K
Referer: Mozilla
Accept: */*
Content-Type: application/x-www-form-urlencoded
X-Request-Kind-Code: nodes
User-Agent: Mozilla
Host: 61.84.X.X
Content-Length: 107
Pragma: no-cache

일단 잘라서라도 보기 위해 editcap 을 이용해 처음부터 1천개의 패킷을 out.pcap 에 저장하려고 시도하지만, 역시나 이것도 수행하지 못한다.

packet:/pcap#editcap -r XXXXXX.pcap out.pcap 1-1000
 editcap -r XXXXXX.pcap out.pcap 1-1000
editcap: Can't open XXXXXX.pcap: Value too large for defined data type

tcpslice 를 이용해 패킷을 자르기 위해, tcpslice 를 찾아 시스템에 설치한다.

packet:/pcap# apt-cache search tcpslice
tcpslice - extract pieces of and/or glue together tcpdump files
packet:/pcap# apt-get install tcpslice
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libgstreamer0.10-0 libwxgtk2.8-0 libgconf2-4 libwxbase2.8-0 libidl0 gconf2-common liborbit2
  filezilla-common libgstreamer-plugins-base0.10-0
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  tcpslice
0 upgraded, 1 newly installed, 0 to remove and 103 not upgraded.
Need to get 17.2kB of archives.
After this operation, 77.8kB of additional disk space will be used.
Get:1 http://http.us.debian.org lenny/main tcpslice 1.2a3-2.1 [17.2kB]
Fetched 17.2kB in 1s (9321B/s)
Selecting previously deselected package tcpslice.
(Reading database ... 48677 files and directories currently installed.)
Unpacking tcpslice (from .../tcpslice_1.2a3-2.1_i386.deb) ...
Processing triggers for man-db ...
Setting up tcpslice (1.2a3-2.1) ...

tcpslice 를 이용해 아래와 같이 5초 동안의 내용을 slice.pcap 에 저장한다.

packet:/pcap# tcpslice -w slice.pcap +0 +5s XXXXXX.pcap

5초동안 저장을 패킷을 capinfos 를 통해 패킷파일의 기본정보를 얻을 수 있다. 시간은 5초 동안이었고, 파일크기가 25 메가 였다. 패킷갯수는 13만개로 역시나 큰 파일이다.

packet:/pcap# capinfos  slice.pcap
File name: slice.pcap
File type: Wireshark/tcpdump/... - libpcap
File encapsulation: Ethernet
Number of packets: 135231
File size: 25973078 bytes
Data size: 23809358 bytes
Capture duration: 59.998932 seconds
Start time: Wed Dec 16 09:02:04 2009
End time: Wed Dec 16 09:03:04 2009
Data rate: 396829.70 bytes/s
Data rate: 3174637.57 bits/s
Average packet size: 176.06 bytes

일단 그래도 이 정도는 읽어들일 수 있으니 tcpdump 로 해당 파일을 읽어들여 아래와 같은 정보를 얻는다. HTTP 프로토콜이 다수의 랜덤 IP 로 통신이 이뤄져 있다.

  3   2.421176    X.X.X.9 -> X.X.255.255 NBNS Name query NB WPAD<00>
  4   2.505428    X.X.X.9 -> 61.84.X.X  TCP caicci > http [SYN] Seq=0 Win=65535 Len=0 MSS=1460
  5   2.505461  61.84.X.X -> X.X.X.9    TCP http > caicci [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1
460
  6   2.505656    X.X.X.9 -> 61.84.X.X  TCP caicci > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
  7   2.505916    X.X.X.9 -> 61.84.X.X  HTTP POST / HTTP/1.0  (application/x-www-form-urlencoded)
  8   2.505954  61.84.X.X -> X.X.X.9    TCP http > caicci [ACK] Seq=1 Ack=314 Win=6432 Len=0
  9   2.506196  61.84.X.X -> X.X.X.9    HTTP HTTP/1.1 200 OK  (text/html)
 10   2.506240    X.X.X.9 -> 124.153.X.77 TCP hks-lm > http [SYN] Seq=0 Win=65535 Len=0 MSS=1460
 11   2.506258  61.84.X.90 -> X.X.X.9    TCP http > caicci [FIN, ACK] Seq=283 Ack=314 Win=6432 Len=0
 12   2.506273 124.153.X.77 -> X.X.X.9    TCP http > hks-lm [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460
<일부 IP 는 X 표시>

tshark 를 통해 프로토콜별 상태를 보면, 전체 패킷 13만개중 TCP 가 거의 대다수이고 이중 HTTP 가 11만개임을 볼 수 있다. 즉, 프로토콜별 통계 정보를 보아도 HTTP 가 대다수임을 알 수 있고, 초기 HEAD 를 통해서 본 HTTP  헤더와 같은 것이 랜덤한 목적지 IP 로 발생되고 있는 패킷임을 짐작 할 수 있다.

packet:/pcap# tshark -r slice.pcap -q -z io,phs

===================================================================
Protocol Hierarchy Statistics
Filter: frame

frame                                    frames:135231 bytes:23809358
  eth                                    frames:135231 bytes:23809358
    arp                                  frames:2 bytes:102
    ip                                   frames:135229 bytes:23809256
      udp                                frames:3 bytes:276
        nbns                             frames:3 bytes:276
      tcp                                frames:135226 bytes:23808980
        http                             frames:11270 bytes:3786751
          data-text-lines                frames:11270 bytes:3786751
        tcp.segments                     frames:11268 bytes:11391948
          http                           frames:11268 bytes:11391948
            data-text-lines              frames:11268 bytes:11391948
===================================================================

127 기가의 패킷 파일에서 약 25 메가 정도만을 확인하였지만, 나머지 패킷은 보지 않더라도 대략 이런 형태의 패킷 구성으로 이루어져 있음을 추정할 수 있다. 사실 127 기가의 단일 패킷은 현실적으로 분석이 힘들고, 빠르게 대략 패킷의 구성형태를 파악하고자 한다면 이와 같이 패킷의 일부분만을 뜯어내어 구성 형태가 어떤지 파악해 보면 추정이 가능하다. 물론, 전체에서 아주 미미한 수준만큼만 확인한 것이기 때문에 딱 이것이다 라고 단정지을 수는 없지만, 이게 최선의 방법 아니겠는가. 아니면 엄청난 시간과 노력을 들여서 분석을 한다면 가능하겠지만, 필자로서는 이 정도선에서 끝낸다. 왜냐하면 왜 이런 패킷이 생성되었는지 이미 알고 있기 때문에 사실 더 이상 분석할 가치는 없기 때문이다 :-)

@Rigel


2010년 1월 26일 화요일

패킷별 색상을 이용한 분석효율 높이기 두번째 이야기!

패킷 색깔 입히기에 추가로 몇 가지 기능들을 다뤄보겠다.

View -> Colorize Conversation 을 보면 Ctrl + 1 부터 Ctrl + 0 까지의 색깔이 있다. 말 그대로 패킷간 어떤 대화가 이뤄진 부분 즉, 통신이 이뤄진 (Request , Response) 부분에 대해서 색깔을 지정할 수 있다. 분석을 하다 패킷을 세부적으로 본다든가 연관된 패킷을 본다 할때 색상를 적용해 놓으면 패킷 중 어떤 것이 같은 형태의 대화인지도 쉽게 파악이 된다. 기본 Color 룰이 적용되어 있는 상태에서는 다른 색상의 것들과 혼돈되어 헷갈릴 수도 있기는 하다. 하지만 Coloring Rule 이 적용되어 있지 않은 경우라면 대화내용에 색깔을 적용하여 쉽게 파악이 가능하다. 또는 자기만의 Coloring Rule 을 만들어 최소화 시켜 놓은 상태에서 Colorize Conversation 을 사용해도 그 효과가 더욱 높아질 것이다.

초기화 시킬 때는 Reset Coloring 을 클릭하면 된다.

나만의 컬러를 적용하거나 또는 남들이 만들어 놓은 컬러를 적용하고 싶다면 Coloring Rules 에서 Manage 에 Import 와 Export 를 이용하면 된다. Export 는 현재의 컬러에 대해서 파일로 설정을 저장해 놓는 것이고, Import 는 다른 컬러 파일을 로드하는 것이다.  다음의 URL 에는 컬러설정 샘플 파일들이 있다.

http://wiki.wireshark.org/ColoringRules

Jay's_Coloring_Rules 를 적용해 보면 아래와 같은 색상을 얻을 수 있다.

JaysColorRules.JPG

[출처 : 와이어샤크 위키]


저장된 룰 파일을 열어 보면 아래와 같이 구성되어 있는데, 라인만 보면 대충 의미가 파악 될 것이다.

지정된 이름과 필터 그리고 색상 정보이다. (Foreground, Background)


# DO NOT EDIT THIS FILE!  It was created by Wireshark

!@Bad TCP@tcp.analysis.flags@[0,0,0][65535,24383,24383]

!@HTTP@http || tcp.port == 80@[36107,65535,32590][0,0,0]


기능은 본인이 계속 사용하면서 나만의 것으로 만들어 나가야 도구의 기능을 효율적으로 쓸 수 있는 법이다. 이 기능을 이용하여 어떻게 분석을 효과적으로 할 수 있을지, 또 만들어 나갈 수 있을지 고민하면 도구는 점점 나의 것으로 다가올 것이다.


/Rigel

2010년 1월 25일 월요일

와이어샤크 패킷에 색깔을 입혀보자

다음 이미지는 와이어샤크에서 패킷파일을 읽어들인 것이다. 그런데 평소 와이어샤크에서 보던 것과 다르지 않던가? 먼가 다양한 색깔로 표시되어 있던 것과는 사뭇 다른 느낌이다. 그만큼 각 패킷 별로 색깔을 주어 표시를 해주면 보기에도 쉽고 여러가지 면에서 도움이 많이 된다. 아래 그림은 일부러 와이어샤크의 Coloring Rule 기능을 제거해 본 것으로, 한눈에 쉽게 잘 들어와 보이지가 않는다. 어쩌면 우리는 이미 와이어샤크의 기능에 너무 익숙해져 있는 것일지도 모른다. :-)

와이어샤크의 View -> Coloring Rules 을 클릭해 보면 다음그림을 볼 수 있다. 이것은 기본으로 지정되어 있는 Default 칼러이다. 이것을 보면, 아! 왜 와이어샤크에서 패킷마다 색깔이 입혀져 있었는지 알겠구나 하고 생각이 들 것이다. 필터 부분을 보면 Name, String 으로 구분되어 있는데, Name 은 말 그대로 대표 이름을 지정한 것이고 String 에 표시된 부분은 필터 구문을 나타내고 있다. 즉, 해당 필터에 맞는 것은 그림과 같은 색상대로 패킷이 표시되는 것이다. 색상은 글자색과 바탕화면으로 나누어 지정할 수 있다.  Edit 를 선택하면 설정되어 있는 색상을 변경할 수 있고, 디폴트로 Enable 되어 있다. 만약 필요치 않은 룰은 Disable 하여 색상을 제거할 수도 있다. 또, 우측의 Order 는 각 색상 필터별로 우선순위를 지정한 것이다.

만약 자기가 지정한 색깔이 실제 반영되지 않는다면, 다른 색상 필터에 의해 순서가 뒤에 있지는 않은지 확인해 보면 된다.

다음은 New 를 눌러 색상 필터를 추가로 만들어 본 것으로 TCP 포트가 5555 이고 TCP 플래그가 PUSH 상태이며 데이터가 1 이상인 것에 대해서 색상을 지정한 것이다.

기본으로 지정되어 있는 색상만 사용하지 말고, 여러분들이 주로 분석에 이용하는 포트나, 기타 특별한 경우라면 자기가 좋아하는 색상으로 꾸며보는 것은 어떨까 한다. 눈에 더 쉽게 들어와 분석이 쉬워지지 않겠는가.

2010년 1월 21일 목요일

리눅스에서 와이어샤크(WireShark) 설치하기

윈도우 환경에서의 와이어샤크는 다운로드 받아 GUI 환경에서 쉽게 설치가 가능하다. 그렇다면 리눅스는 어떠한가? 이미 많이들 알고 있지만, 그래도 필자는 가급적 모든 부분에 대해서 한번 언급을 하고 넘어가는 것이 좋을것 같아 간단히 소개하도록 한다.

옛날에는 소스파일을 가져다 다 컴파일을 하고 필요한 라이브러리를 설치하고 많은 작업들이 필요로 했었으나, 요새는 리눅스가 윈도우 사용하기 만큼이나 많이 쉬워졌다. 필요한 소프트웨어가 있으면 간단한 명령어로도 쉽게 설치할 수 있으니 말이다. 많이 사용하는 우분투나 데비안 계열에서는 apt-get 이라는 명령어가 있다. 이 명령어를 통해 아래와 같이만 하면 바로 와이어샤크 설치가 가능하다. 만약 yum 이라는 것이 있다면 그걸 사용해도 된다. (yum install wireshark)

debian:/home/debian# apt-get install wireshark
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following extra packages will be installed:
  libadns1 libfreebob0 libjack0 libpcap0.8 libportaudio2 wireshark-common
Suggested packages:
  adns-tools jackd
The following NEW packages will be installed:
  libadns1 libfreebob0 libjack0 libpcap0.8 libportaudio2 wireshark
  wireshark-common
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 11.2MB of archives.
After this operation, 42.2MB of additional disk space will be used.
Do you want to continue [Y/n]?

와이어샤크는 기본적으로 libpcap 을 이용하는데, 설치되어 있지 않아도 걱정할 필요가 없다. 관련된 추가 패키지를 알아서 설치해 주기 때문이다.  이런 바이너리 설치가 싫다면, 직접 소스코드를 받아와서 컴파일을 할 수 있다.
$ cd /home/[UserName]/temp
$ wget http://www.wireshark.org/download/src/wireshark-1.2.5.tar.bz2
$ bzip -d wireshark-1.2.5.tar.bz2
$ tar -xvf wireshark-1.2.5.tar 
$ cd wireshark-1.2.5
$ ./configure
$ make
$ make install
configure 시에는 다양한 옵션을 줄 수가 있는데, 사용할 수 있는 옵션은 ./configure --help 를 보면 된다. 예를 들어, 와이어샤크에서 스레드를 사용하기 원한다면 --enable-threads 를 넣어주면 된다. 이 옵션은 기본적으로 포함되어 있지는 않다.

만약 리눅스 환경에 익숙하지 않는 사용자라면 일단 바이너리를 설치하여 사용하길 바란다. 컴파일에는 라이브러리 및 기타 패키지들이 필요하기 때문에 처음 접해보는 사용자에겐 어렵게 느껴질 수 있다.

일단, 와이어샤크를 설치하고 함께 패킷 분석의 세계에 빠져보는 것이 마음 편할 것이다.
복잡한 것은 다 잊고 말이다.

2010년 1월 19일 화요일

pcap-util 을 이용한 또 다른 패킷 분할 방법

패킷파일이 큰 경우 Editcap 과 tcpslice 를 이용하여 패킷을 분할하는 방법에 대해서 알아보았는데, 추가로 다른 유용한 툴 한가지를 더 소개하고자 한다. 펄(Perl)로 만들어진 것으로, 사용법도 간단하고 오히려 쉽게 사용할 수 있는 부분이 있는거 같아 유용할 것이다.

파일은 다음의 경로에서 받을 수 있다.


일단, pcap-util 을 실행해 보면 옵션은 크게 split, time, filter 로 나뉘어져 있다.

tmp# ./pcap-util

This utility will take a pcap file from a packet capture program like tcpdump
and split it into smaller parts to aid analysis. There are three options.

 1. You can split the file into several smaller ones of x bytes in length
 2. You can extract packets that fall within a specified time period
 3. You can extract packets that match a libpcap filter string.

Split into smaller files
------------------------
./pcap-util split <infile> <outfile prefix> <size in MB>

Extract packets from time period
--------------------------------
./pcap-util time <infile> <outfile> <Start time> <End time>

Extract packets using libpcap filter language
---------------------------------------------
./pcap-util filter <infile> <outfile> "libpcap filter string"

** Time format should be YYYY-MM-DD:hh:mm:ss **

자, 그럼 일단면 옵션은 크게 split, time, filter 로 나뉘어져 있다. split 는 말 그대로 파일을 분할 하는 것인데 MB 단위로 분할하게 된다. 아래 예 같이 1을 넣게 되면 1 메가 단위로 output.pcap 으로 생성하는 것이다.
/tmp# ./pcap-util split rigel.pcap output.pcap 1
Writing file output.pcap.0.tcpdump
Writing file output.pcap.1.tcpdump
Writing file output.pcap.2.tcpdump
Writing file output.pcap.3.tcpdump
Writing file output.pcap.4.tcpdump
Writing file output.pcap.5.tcpdump
Writing file output.pcap.6.tcpdump
Writing file output.pcap.7.tcpdump
Writing file output.pcap.8.tcpdump

====> Done <====
/tmp# ls -l
total 93368

-rw-r--r-- 1 root    root     1023460 2010-01-19 08:54 output.pcap.0.tcpdump
-rw-r--r-- 1 root    root     1023472 2010-01-19 08:54 output.pcap.1.tcpdump
-rw-r--r-- 1 root    root     1023490 2010-01-19 08:54 output.pcap.2.tcpdump
-rw-r--r-- 1 root    root     1023466 2010-01-19 08:54 output.pcap.3.tcpdump
-rw-r--r-- 1 root    root     1023498 2010-01-19 08:54 output.pcap.4.tcpdump
-rw-r--r-- 1 root    root     1023676 2010-01-19 08:54 output.pcap.5.tcpdump
-rw-r--r-- 1 root    root     1023570 2010-01-19 08:54 output.pcap.6.tcpdump
-rw-r--r-- 1 root    root     1023559 2010-01-19 08:54 output.pcap.7.tcpdump
-rw-r--r-- 1 root    root       83061 2010-01-19 08:54 output.pcap.8.tcpdump
-rwxr-xr-x 1 root    root        8736 2009-08-30 18:16 pcap-util
-rw-r--r-- 1 root    root     8271060 2010-01-18 09:25 rigel.pcap
타임은 "YYYY-MM-DD:hh:mm:ss" 와 같은 포맷으로 시간을 지정하여 사용하면 된다. filter 는 걸러진 파일에 대해서만 추출하여 저장한다. 아래 예제는 cl.exe.pcap 에서 TCP 이며 목적지 포트가 80 번 인것을 대상으로 output.pcap 에 저장하고 있다.
/tmp# ./pcap-util filter cl.exe.pcap output.pcap "tcp and dst port 80"
Writing packets matching "tcp and dst port 80" to output.pcap

====> Done <====
/tmp# ls -l
total 88948
-rw-r--r-- 1 root    root     2334504 2010-01-19 09:01 cl.exe.pcap
-rw-r--r-- 1 root    root     1442126 2010-01-19 09:02 output.pcap

cl.exe.pcap 이 2.3 메가 정도 였는데, 80 번포트로 걸러낸 것은 1.4 메가 정도 나온다. 이 외에 유용한 것이 있으면 알려주세요.

2010년 1월 18일 월요일

분석할 패킷 데이터 크기가 큰 경우는 이렇게 하자!

요새는 고속의 네트워크로 연결되어 있고, 전송되는 데이터의 크기도 커지고 많아지다 보니 패킷 데이터 캡쳐시 패킷 파일 크기 또한 상당히 커지게 된다. 50M 이상의 크기를 읽어 들이기 시작하면 컴퓨터의 메모리 또한 많이 차지하고 분석하기에도 여간 불편해 지는 것이 아니다.

필터를 한번 적용하거나, 기타 작업을 수행할 때 속도가 느려지는 것은 당연하다.

이럴때는 분석할 패킷을 분할하여 하는 것이 효과적이다. 몇 십,몇 백메가가 되는 파일을 한번에 읽어들이면 속이 타는 것은 분석가들의 마음일 뿐이다. 어떤 방법들이 있는지 한번 알아보도록 하자.

우리가 흔히 유닉스 환경에서 사용하던 split 명령을 기억할 것이다. 이름에서 느껴지는 것과 같이 split 는 파일을 분할해 주는 것이다. 아래 화면은 -l 옵션을 사용해 1000 라인 단위로 inside.pcap 파일을 분할 하였고, 분할된 패킷은 xaa, xab, xac ... 와 같이 차례대로 분리 되었다.

# split -l 1000 inside.pcap
-rw-r--r-- 1 packet packet 39451913 2010-01-18 08:53 inside.pcap
-rw-r--r-- 1 packet packet   312239 2010-01-18 08:54 xaa
-rw-r--r-- 1 packet packet   140544 2010-01-18 08:54 xab
-rw-r--r-- 1 packet packet   218156 2010-01-18 08:54 xac
-rw-r--r-- 1 packet packet   302413 2010-01-18 08:54 xad
-rw-r--r-- 1 packet packet   127430 2010-01-18 08:54 xae

그런데, 이 split 는 우리가 사용하기에 문제가 있다. 정말 그대로 라인별로 잘라서 분할 시켜 주기 때문에, 첫번째 파일인 xaa 는 읽어 들일 수 있지만 두번째 파일인 xab 부터는 읽어들이려고 해도 에러가 발생한다. 이유인 즉, pcap 의 형식인 헤더가 xaa 만 있고 그 후에는 없기 때문이다. split 가 pcap 파일을 인식하고 분할된 파일에 pcap 헤더를 구성해서 만들어주지 않기 때문이다.

그럼 어떻게 해야 할까 ? 사용하기 편한 방법으로는 와이어샤크에 포함되어 있는 editcap 을 추천해 보고자 한다. 패킷 분석에 와이어샤크를 많이 사용하기도 하고, 기본으로 함께 설치되어 있는 파일이니 얼마나 편한가. 유닉스 뿐만 아니라 윈도우에서도 사용이 가능하다는 것도 장점이다.

다음 몇 가지 예제를 통해 사용방법에 대해 설명하겠다.

예제1) input.cap 파일에서 처음부터 100 개까지의 패킷을 output.cap 에 저장
#editcap -r input.cap output.cap 1-100

예제2) input.pcap 에서 output.pcap 파일에 10000 개의 패킷을 저장
# editcap -c 10000 input.pcap output.pcap
# ls
input.pcap                    output.pcap-00011  output.pcap-00024  output.pcap-00037
t.pcap            output.pcap-00012  output.pcap-00025  output.pcap-00038
output.pcap-00000          output.pcap-00013  output.pcap-00026  output.pcap-00039
output.pcap-00001          output.pcap-00014  output.pcap-00027  output.pcap-00040
output.pcap-00002          output.pcap-00015  output.pcap-00028  output.pcap-00041
output.pcap-00003          output.pcap-00016  output.pcap-00029  output.pcap-00042
output.pcap-00004          output.pcap-00017  output.pcap-00030  output.pcap-00043
output.pcap-00005          output.pcap-00018  output.pcap-00031  output.pcap-00044
output.pcap-00006          output.pcap-00019  output.pcap-00032  output.pcap-00045
output.pcap-00007          output.pcap-00020  output.pcap-00033  output.pcap-00046
output.pcap-00008          output.pcap-00021  output.pcap-00034  output.pcap-00047
output.pcap-00009          output.pcap-00022  output.pcap-00035  output.pcap-00048
output.pcap-00010          output.pcap-00023  output.pcap-00036

만약 input.pcap 이 10,000 개 이상인 경우는 10,000 개 단위로 output.pcap 뒤에 숫자가 붙어 만들어 진다.

예제3) -i 옵션을 통해 초 단위로 패킷을 나눈다.
#editcap -i 60 input.pcap output.pcap

예제4) 특정 시간범위를 지정하여 패킷 추출
# editcap -v -A "2010-01-15 14:00:00" -B "2010-01-15 15:00:00"  input.cap output.cap
-v 는 verbose 로 좀더 자세한 정보를 출력해 준다. -A 와 -B 로 시작과 끝을 지정한다.

예제5) 여러개의 범위를 지정하여 패킷 추출 하기
# editcap input.cap output.cap 1-100 500-600
1-100 번 까지 그리고 500-600 번 까지의 패킷을 output.cap 에 저장한다.

예제6) -r 옵션의 차이를 정확히 이해하자

1, 10, 200-300, 500-700 을 제외하고 output.cap 에 저장한다.
# editcap input.cap output.cap 1 10 200-300 500-700

1, 10, 200-300, 500-700 만 선택하여 output.cap 에 저장한다.
# editcap -r input.cap output.cap 1 10 200-300 500-700

이외 또 사용 가능한 것으로는 tcpslice 가 있다. 우선 이것도 시작과 끝 시간을 정할 수 있으며, 아래와 같이 +200 으로 시작 시간을 초로 지정할 수 있다. -R 옵션은 타임스탬프(timestamp)로 패킷 파일의 시작과 마지막 시간을 보여주며, -r 은 우리가 보기 쉬운 시간으로 -t 는 y,m,d,h 와 같은 형태로 보여주게 된다.

inside:/tmp# tcpslice -R  +200 +300 1.cap
1.cap   1263374793.063785       1263375147.306405
inside:/tmp# tcpslice -r  +200 +300 1.cap
1.cap   Wed Jan 13 18:26:33 2010        Wed Jan 13 18:32:27 2010
inside:/tmp# tcpslice -t  +200 +300 1.cap
1.cap   2010y01m13d18h26m33s063785u     2010y01m13d18h32m27s306405u
위 시간을 보면 2010년1월13일 18시26분33초 부터 시작하고 있다. 아래는 2010년1월13일 18시30분 부터 18시32분까지 패킷을 1.cap 에서 추출하여 output.cap 에 저장하는 명령어이다.  

inside:/tmp# tcpslice -w output.cap 2010y01m13d18h30m 2010y01m13d18h32m 1.cap

저장된 output.cap 파일을 tcpdump 로 살펴보면 첫 시작이 1월13일 18시30분 부터인 것을 알 수 있다.

inside:/tmp# tcpdump -tttt -r output.cap | more
reading from file output.cap, link-type EN10MB (Ethernet)
2010-01-13 18:30:02.223030 IP 111.x.x.9.1302 > 58.140.x.64.search: S 3807417969:3807417969(0) win
65535 
2010-01-13 18:30:02.223068 IP 58.140.x.64.search > 111.x.x.9.1302: S 3325899008:3325899008(0) ack
3807417970 win 2920 
Editcap 과 tcpslice 를 알았으니, 이제 큰 패킷 파일이라도 두려워하지 말자!

참고로, 저장할 때부터 큰 파일로 만들지 말고, 패킷 캡쳐 시에 저장옵션을 통해 분리하면 이렇게 분리하는 작업을 거치지 않아 편리하다. 참고) 패킷 파일의 크기, 개수등 저장 옵션을 지정해 보자


2010년 1월 14일 목요일

네트워크 패킷캡쳐 샘플파일 어디 구할데 없나요?


패킷 파일 분석과 관련한 짧은 글을 몇가지 올렸는데, 패킷 분석을 시작하는 입장에서는 어떤 것을 어떻게 분석을 시작해야 할지 막연하다. 분석을 해 보고자 해도 샘플 패킷파일도 없고 말이다. 샘플 패킷파일을 얻고자 하는 분들에게 소개한다. 와이어샤크의 도움말을 보면  샘플들을 얻을 수 있는 경로가 있다는 점.

Help -> Sample Captures 를 눌러보자. 그러면 다음의 사이트로 이동할 것이다.

http://wiki.wireshark.org/SampleCaptures
위 사이트에서 다양한 프로토콜 및 여러가지 샘플 패킷파일을 구할 수 있다. 패킷파일이 있으면
그래도 절반의 시작 아니던가. 한번씩 들여다 보고 어떤 형태인지 살펴보는 것이 도움이 될 것이다.

여기외에 해당 위키에 추가로 다운로드 받을 수 있는 주소도 있으니 그것도 함께 참고하길 바란다.
더불어, 파일을 한번에 다 다운받고 싶다면 다음의 방법을 사용해 볼 수 있다. 위키에도
몇가지 방법이 나와있지만, 필자가 확인한 바에는 아래의 방법이 제일 확실하다.