요새는 고속의 네트워크로 연결되어 있고, 전송되는 데이터의 크기도 커지고 많아지다 보니 패킷 데이터 캡쳐시 패킷 파일 크기 또한 상당히 커지게 된다. 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 655352010-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 를 알았으니, 이제 큰 패킷 파일이라도 두려워하지 말자!
참고로, 저장할 때부터 큰 파일로 만들지 말고, 패킷 캡쳐 시에 저장옵션을 통해 분리하면 이렇게 분리하는 작업을 거치지 않아 편리하다. 참고) 패킷 파일의 크기, 개수등 저장 옵션을 지정해 보자
댓글 없음:
댓글 쓰기