2011년 5월 24일 화요일

PCAP 파일에서 TCP 스트림 정보를 쉽게 다루기

패킷파일에서 스트림 정보를 좀더 쉽게 볼 수 있는 도구가 있다. 'streams' 라는 것으로 pcap 파일에서 TCP 스트림 정보를 브라우징 해서 볼 수 있도록 도와주는 것이다. 각 세션 정보를 Interactive 하게 볼 수 있으며, pipe 를 통해 스트림 정보를 외부로 호출할 수 도 있다.
일단, 다음의 경로에서 다운로드 받을 수 있다.

http://src.carnivore.it/streams/

파일을 받아 압축을 풀고 컴파일을 해야 하는데, 약간은 불편하게 되어 있다. configure 파일을 생성하고 해야 하는데, 에러가 발생하여 바로 src/ 안에서 직접 컴파일을 하였다.

컴파일을 하기 위해서는 Libpcap 이 당연히 설치되어 있어야 하고, Interactive 하게 커맨드 사용이 가능하여야 해서 readline 라이브러리도 필요하다. 이 2가지만 갖춰져 있으면 다음과 같이 컴파일을 하면 된다. (에러가 발생하는데, 소스파일에 VERSION 정보가 define 되어 있지 않아서 발생한다. 소스코드에 define 으로 VERSION 정보만 입력해 준다)

gcc cmd.c hash.c sig.c streams.c strm.c util.c -I/usr/include/readline -lpcap -lreadline

그러면 a.out 파일이 생성된다. -o 옵션을 이용해 바로 streams 로 바이너리를 생성해도 된다.
컴파일된 파일을 실행해 보면 아래 화면과 같이 볼 수 있다.


PCAP 파일을 테스트해 보기 위해 43개의 패킷이 들어있는 임의의 패킷파일을 선정하였다. 패킷 파일의 정보를 보면 아래와 같다. (와이어샤크에서 받을 수 있는 샘플 패킷 데이터를 이용하였는데, 덤프된 시간이 2004 년이다^^ )


File type:           Wireshark/tcpdump/... - libpcap
File encapsulation:  Ethernet
Number of packets:   43
File size:           25803 bytes
Data size:           25091 bytes
Capture duration:    30 seconds
Start time:          Thu May 13 19:17:07 2004
End time:            Thu May 13 19:17:37 2004
Data byte rate:      825.53 bytes/sec
Data bit rate:       6604.26 bits/sec
Average packet size: 583.51 bytes
Average packet rate: 1.41 packets/sec


일단 실행된 상태에서 패킷을 로드하기 위해 analyze 명령어를 사용한다. http.cap 을 로드하였더니 2개의 스트림을 볼 수 있다. list 명령어는 스트림된 화면을 출력한다. 전체 패킷이 42개 였는데, 스트림된 형태로 요약해 보면 아래와 같이 2개라는 것이다. 하나가 479 바이트 나머지는 18,364 바이트다.

streams>
streams> analyze ./http.cap
file processed, 2 streams (2 non-empty and complete).
streams> list
    0:       0.000000      30.063228  145.254.160.237:3372 > 65.208.228.223:80 (479 bytes)
    1:       0.911310      17.905747  65.208.228.223:80 > 145.254.160.237:3372 (18364 bytes)
streams>

패킷내용을 살펴보기 위해 ext 로 외부 기능을 호출해 본다. hd 를 호출하면 되는데 hd 가 무엇인가 해서 util.c 를 보았더니 HEX DUMP 형태로 출력해 주는 기능을 가진 것이다.


void hd(const u_char *data, size_t len) {
        register int i, j;

        if (!data || !len) return;

        for (i = 0; i < len; i += 0x10) {
                printf("0x%08x  ", i);

                for (j = 0; j < 0x10 && i+j<len; j++) {
                        if (j == 0x8) putchar(' ');
                        printf("%02x ", data[i+j]);
                }

                printf("%-*c|", (3 * (0x10 - j)) + (j > 0x8 ? 1 : 2), ' ');

                for (j = 0; j < 0x10 && i + j < len; j++)
                        putchar(isprint(data[i+j]) ? data[i+j] : '.');

                puts("|");
        }
        putchar('\n');

        return;
}


호출하면 pipe 로 그 정보를 넘기는데 0 번째 정보를 보고자 하면 pipe 0 을 한다.

streams> ext hd
streams> pipe 0
479 bytes written (479 in total)
00000000  47 45 54 20 2f 64 6f 77  6e 6c 6f 61 64 2e 68 74  |GET /download.ht|
00000010  6d 6c 20 48 54 54 50 2f  31 2e 31 0d 0a 48 6f 73  |ml HTTP/1.1..Hos|
00000020  74 3a 20 77 77 77 2e 65  74 68 65 72 65 61 6c 2e  |t: www.ethereal.|
00000030  63 6f 6d 0d 0a 55 73 65  72 2d 41 67 65 6e 74 3a  |com..User-Agent:|
00000040  20 4d 6f 7a 69 6c 6c 61  2f 35 2e 30 20 28 57 69  | Mozilla/5.0 (Wi|
00000050  6e 64 6f 77 73 3b 20 55  3b 20 57 69 6e 64 6f 77  |ndows; U; Window|
00000060  73 20 4e 54 20 35 2e 31  3b 20 65 6e 2d 55 53 3b  |s NT 5.1; en-US;|
00000070  20 72 76 3a 31 2e 36 29  20 47 65 63 6b 6f 2f 32  | rv:1.6) Gecko/2|
00000080  30 30 34 30 31 31 33 0d  0a 41 63 63 65 70 74 3a  |0040113..Accept:|
00000090  20 74 65 78 74 2f 78 6d  6c 2c 61 70 70 6c 69 63  | text/xml,applic|
000000a0  61 74 69 6f 6e 2f 78 6d  6c 2c 61 70 70 6c 69 63  |ation/xml,applic|
000000b0  61 74 69 6f 6e 2f 78 68  74 6d 6c 2b 78 6d 6c 2c  |ation/xhtml+xml,|

그러면 0번째의 정보를 볼 수 있는 GET 방식으로 다운로드 하는 헤더 정보를 볼 수 있다.
그리고 이런 정보를 파일로 저장하기 위해서는 outfile 로 저장할 파일 이름을 지정해 주고 , dump 로 저장할 스트림 번호를 지정하면 된다.

streams> outfile ./http.bin
streams> list
    0:       0.000000      30.063228  145.254.160.237:3372 > 65.208.228.223:80 (479 bytes)
    1:       0.911310      17.905747  65.208.228.223:80 > 145.254.160.237:3372 (18364 bytes)
streams> dump 1
18364 bytes written to ./http.bin

저장된 파일을 보면 18,364 바이트를 확인할 수 있으며, 해당 텍스트 내용이 기록되어 있다.


$ ls -l http.bin
-rw-r--r-- 1 rigel rigel 18364 2011-05-20 23:42 http.bin
$ head http.bin
HTTP/1.1 200 OK
Date: Thu, 13 May 2004 10:17:12 GMT
Server: Apache
Last-Modified: Tue, 20 Apr 2004 13:17:00 GMT
ETag: "9a01a-4696-7e354b00"
Accept-Ranges: bytes
Content-Length: 18070
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=ISO-8859-1


다시 streams 로 돌아와서 필터정보를 사용해 보자. match 라는 명령어를 이용하면 되고, 아래 예는 GET 으로 필터를 건 것이다.

streams> match GET
applying new match expression...
streams> list
    0:       0.000000      30.063228  145.254.160.237:3372 > 65.208.228.223:80 (479 bytes)
streams>

그리고 status 정보는 현재의 상태 정보를 보여준다.

streams> status

  trace file:           ./http.cap
  bpf expression:       tcp
  match expression:     GET
  stream filter:        off (list all streams)
  time display mode:    relative
  external program:     hd
  output file:          ./http.bin

사용방법은 간단하며, 스트림화된 정보를 다루는 경우 유용하게 사용될 수 있다. 패킷파일을 다루는 도구는 다양하며, 업무 및 기타 사용목적에 따라서 필요한 도구는 달라진다. 앞으로도 다양한 도구를 소개할 예정이며, 여러분들에게 필요한 도구를 선택해 사용하면 된다.

지금 당장 이런것이 필요없더라도, 이런것이 있구나 하는 정도 알아두고 필요할때 패킷인사이드에서 검색해서 사용해 보자.

2011년 5월 23일 월요일

*NIX 시스템에서 파일 삭제가 안되는 경우 이런 방법을 사용해보자

*NIX 시스템에서 삭제할 파일이 너무 많은 경우 실패를 한다. 예를 들어, rm -rf * 로 파일을 지운다고 하였을때 다음과 같은 메시지를 받는 경우가 있다:

bash: /bin/rm: Argument list too long

이런 경우는 정말 삭제할 파일이 너무나 많은 경우로, 인자로 해당 리스트가 다 넘어가지 못했기 때문이다. 이럴때 find 를 이용해 보자. *.log 라는 파일을 다 삭제하는 경우 현 디렉토리에서 *.log 를 찾아서 xargs 로 Input 을 받아 rm 명령어로 삭제하는 것이다.

find . -name '*.log' | xargs rm

이러면 일단 삭제는 할 수 있다. 또, 파일이름이 이상해서 삭제가 안되는 경우도 있다. 그러면 inode 번호를 이용해 삭제하면 된다. ls 명령어에서 -i 옵션은 inode 번호를 보여준다. 그러면 find 의 -inum 옵션을 이용해서 아래와 같은 형태로 삭제할 수 있다.

$ ls -l
total 0
-rw-r--r-- 1 rigel rigel 0 May 19 23:33 test.txt
$ ls -li
total 0
38207514 -rw-r--r-- 1 rigel rigel 0 May 19 23:33 test.txt
$ find . -inum 38207514 -exec rm {} \;
$ ls -l
total 0
$

시스템 운영에 참고하길 바란다.

2011년 5월 19일 목요일

와이어샤크 패킷리스트 화면에서 IP 국가정보를 바로 확인해보자!

와이어샤크를 이용해 분석을 하다보면, 메인 화면의 패킷 리스트 컬럼에 더 추가적인 정보가 있으면 분석이 수월해지지 않을까 생각해 보지 않았는가? 예를들어, 리스트 화면을 보는데 IP 정보와 포트 그리고 간단히 출력되는 정보는 그 정보 자체만으로는 한계가 있다. 그런데 여기에 IP 에 대한 국가 정보가 출력된다면 어떨까?  IP 정보외 바로 국가 정보까지 보여준다면, 분석이 더 용이할 것이다.

물론, 일전에 와이어샤크에서 GeoIP 를 이용하여 국가 정보를 얻는 방법에 대해서 소개한 적이 있다. 그런데 이것은 메인 리스트 화면에서 나오는 것이 아니라, 해당 리스트의 세부정보에서 IP 영역을 보았을때 나타나는 정보이다.


즉, 이 정보를 바로 메인 리스트 화면으로 끌어오겠다는 것이다. 실행은 간단하다.
일단, GeoIP 가 설정되어 있어야 하므로 위 블로그 글을 참고하길 바란다. 그리고 출발지 또는 목적지 국가 정보를 선택하고 마우스의 오른쪽 버튼을 클릭하면 'Apply as Column' 이라는 메뉴가 있다. 바로 이 메뉴만 선택해 주면 된다. 그러면 아래와 같이 패킷 리스트 화면에 국가 정보 컬럼이 추가된다. 패킷을 살펴보면서 국가 정보까지 바로 확인할 수 있으니 패킷 분석 업무에 따라 다르겠지만 유용한 것이 될 것이다.


이렇게 설정된 정보는 Edit->Preferences->Column 에서 확인할 수 있다. 여기에서 직접 추가할 수도 있지만 앞서 소개한 방법이 더욱 쉬울 것이다. 추가한 컬럼이 우측 끝에 위치해 있는데, 순서도 정할 수 있다. 목적지 IP 에 대한 국가를 출력한 것이다. 드래그 하여 목적지 IP 주소 다음 컬럼으로 옮겨봐도 될 것이다.



국가 정보뿐 아니라, 'Apply as Column' 으로 할 수 있는 것은 다 컬럼 정보로 뺄 수가 있다. 아래그림은 HTTP 프로토콜에서 호스트 정보를 컬럼으로 빼 본것이다. 그리고 Bytes 정보도 함께 나와있다.


이런 컬럼정보를 활용하여 일전에 그래프 생성과 관련하여 소개한 적이 있다. 통계로 뽑고 싶은 데이터를 컬럼으로 내보내고 CSV 로 저장해 OpenOffice를 통해 그래프 작업한 것이다. 이때 컬럼에 패킷 길이 정보를 포함하여 사용하였다.


상용제품의 화려함과 편의성에 약간 불편할 수 있지만, 오픈소스만으로도 얼마나 훌륭한 작업들을 해낼 수 있는지 앞으로 계속 소개할 것이다.

2011년 5월 18일 수요일

브라우저에서 동작하는 자바스크립트 리눅스

재미있는 것을 하나 소개하고자 한다. 그것은 바로 브라우저에서 동작하는 리눅스이다.
일단, 몇 마디 보다도 직접 사이트를 방문해서 사용해 보는 것이 가장 좋을 것이다. 사이트는
http://bellard.org/jslinux/ 이며, 동작하게 되면 아래와 같은 화면을 볼 수 있다.


리눅스 부팅되는 화면을 볼 수 있으며, 램디스크가 설정되고 Welcome to JS/Linux 을 볼 수 있다. 커서가 깜빡이며 명령어를 사용할 수 있으며, 사용된 커널은 2.6.20 이다.

~ # uname -a                                                                  
Linux (none) 2.6.20 #3 Sat May 14 19:08:30 CEST 2011 i586 GNU/Linux            
~ # df -k                                                                      
Filesystem           1K-blocks      Used Available Use% Mounted on            
/dev/root                 2011      1467       442  77% /                      
tmpfs                    15224         0     15224   0% /tmp                  
~ #                                                                            
~ #      

이 모든 것이 자바스크립트로 구현되었다는 것이 놀라울 따름이다. 이것을 사용하기 위해서는
파이워폭스 4, 구글 크롬 11 버전이 필요하다.

자바스크립트 리눅스에서 컴파일도 가능한데 살펴보면 아래와 같다.
                                               
~ # ls                                                                        
hello.c                                                                        
~ #                                                                            
~ # ls                                                                        
hello.c                                                                        
~ # tcc hello.c                                                                
~ # ls -l                                                                      
total 4                                                                        
-rwxr-xr-x    1 root     root          1940 May 18 13:51 a.out                
-rw-r--r--    1 root     root           214 May 18 13:51 hello.c              
~ # ./a.out                                                                    
Hello PacketInside                                                            
http://packetinside.com                                                        
~ #                    

리눅스가 브라우저 안으로까지 들어왔다는 놀라운 사실. 그렇다면 이게 뜻하는 것은 무엇일까?
앞으로 계속 발전되면 더욱 다양한 것들이 동작할 수 있게 될 것이고, 브라우저만 있으면
많은 것들을 할 수 있게 된다. 다만, 아직 아쉬운 것은 네트워크 관련한 부분은 가능하지 않다.
네트워크 인터페이스가 없기 때문이다. 설마 이 안에서 네트워크 패킷 덤프까지 가능해진다면 ? 그건 상상에 맡기고, 한번 사용해 보기 바란다.

P.S TOP 명령어도 사용가능하다. 이렇게 동작하는거 보면 진짜 동작하는게 맞다 :-)

[참고]
1. 자바스크립트 리눅스 기술적 배경
http://bellard.org/jslinux/tech.html        
2. JavaScript: Linux in a browser 기사
http://us.generation-nt.com/emulator-linux-javascript-bellard-news-2922501.html          

2011년 5월 17일 화요일

패킷캡쳐 라이브러리 Libpcap 의 MMAP 방식

오늘은 한번 Libpcap 이야기를 잠깐 꺼내볼까 한다. Libpcap 에서 사용하는 방법중에 하나가 Memory Mapped 방식의 MMAP 방식이다. 패킷이 커널로부터 유저 공간으로 포워딩 되는 방식이 아니라, 링버퍼를 이용한 것이다. 패킷 캡쳐 방식으로 가장 많이 이용하는 Libpcap 은 상위 레벨의 패킷 캡쳐 라이브러리이다. Tcpdump, Snort, Wireshark 등 많은 네트워크 패킷 관련 프로그램이 사용하고 있다.

Libpcap 은 네트워크 인터페이스 카드에 Promiscuous 모드 설정을 허용하며, 네트워크 카드에서 패킷을 커널로 포워드 시킨다. 커널의 패킷은 다시 PF_PACKET 소켓을 거쳐 유저 공간으로 까지 넘어와 사용할 수 있게 되는 것이다. libpcap 1.0.0 이상이면 MMAP 을 지원하고 있고, 리눅스 커널은 정확하지는 않지만 대략 2.6.27 부터인가 기본 설정으로 지원한다. 즉, 컴파일시

CONFIG_PACKET_MMAP=y 라는 것이다. 물론 그 이전 버전에서도 직접 설정하여 컴파일을 하면 사용할 수 있다.

만약, 여러분이 패킷 캡쳐 시스템으로 사용하는 시스템이 리눅스 이며, 오래된 커널 버전을 사용하고 있다면 이 부분도 한번 검토해 볼 필요가 있다. PACKET_MMAP 방식을 사용하지 않는 상태라면 성능이 저하되기 때문이다. 최근, 고속화되고 있는 네트워크 구조에 따라 10,100 메가를 넘어 기가비트는 기본이 되었다. 말은 쉽게 기가비트를 얘기하지만, 이런 네트워크 환경에서 패킷 덤프를 하는게 쉬운일 만은 아니다. 어떻게 하면 고속으로 패킷 손실 없이 패킷을 저장할 수 있을까 하는 연구가 계속되는 것이다. 전문적인 장비도 나오지만, 필자 입장에서는 일반적인 시스템 상에서 커널 파라미터를 어떻게 조정하고 또 어떤 방식을 통해 효율적인 패킷 모니터링을 구현할 수 있을까가 관심사다. 이런 부분은 앞으로도 차차 언급해 보도록 하겠다.

어찌되었든 여러분의 시스템에서 MMAP 버전을 사용하는지 확인하고 싶다면, 다음과 같이 알아볼 수 있다.

$ cat /proc/net/ptype
Type Device      Function
ALL  eth3     tpacket_rcv+0x0
ALL  dummy0   tpacket_rcv+0x0
0800          ip_rcv+0x0
0011          llc_rcv+0x0
0004          llc_rcv+0x0
0806          arp_rcv+0x0
86dd          :ipv6:ipv6_rcv+0x0

"tpacket_rcv" 가 보인다면 MMAP 버전을 사용하는 것이다. 만약 앞에 't' 가 없다면 MMAP 버전이 아니라 오래된 버전을 사용하는 것일 것이다. 아주 오래된 시스템만 아니면, 기본적으로는 많이 사용하고 있을 것이다.

[참고]
1. Linux Packet MMAP
http://wiki.ipxwarzone.com/index.php5?title=Linux_packet_mmap

2011년 5월 16일 월요일

패킷인사이드 검색 기능 추가

기존에 오른쪽 상단에 붙어 있던 검색기능이 제대로 되지 않아, 새롭게 추가로 검색 기능을 넣었습니다. 구글 검색 기능을 이용하고, 기존보단 훨씬 더 정확하고 많은 결과를 볼 수 있습니다.

패킷인사이드 로고 아래에 있는 '패킷인사이드 검색' 을 누르시면 됩니다. 앞으로도 몇 가지 페이지를 더 추가할 계획을 가지고 있으며, 현재 검색범위는 패킷인사이드로만 한정하고 있습니다.

2011년 5월 12일 목요일

Scapy 에서 텍스트형태의 HEX 패킷 데이터 쉽게 가져다 쓰기

이전 포스팅한 글에서 텍스트로 표현된 패킷을 바이너리로 변환하는 몇 가지 방법에 대해서 소개한 적이 있다. text2pcap 같은 것과 같이 말이다. 오늘은 Scapy 를 이용해 쉽게 로드해서 사용하는 방법을 소개해 본다. Scapy 를 처음 접해 본 사용자라면, 이 블로그에서 검색해서 세 개로 나눠 소개한 글을 참고하면 된다.

tcpdump 에서 -xX 와 같이 출력되는 형태의 데이터를 가져오고자 한다.

$ tcpdump -xX -n -r test.pcap

에서 출력되는 다음의 내용을 대상으로 가정해 보겠다.


0x0000:  4500 003e 344e 4000 4011 5d49 c0a8 00f0  E..>4N@.@.]I....
0x0010:  a87e 3f01 bddb 0035 002a 7cef 8555 0100  .~?....5.*|..U..
0x0020:  0001 0000 0000 0000 0377 7777 0667 6f6f  .........www.goo
0x0030:  676c 6502 636f 026b 7200 001c 0001       gle.co.kr.....

대략 추정되는 것과 같이 DNS  패킷이다.  자, 그럼 일단 Scapy 를 실행하고 'IP(import_hexcap())' 를 이용해서 패킷 HEX 데이터를 로드해 보자. tcpdump 의 텍스트 내용을 복사하고 import_hexcap() 를 수행후 그 상태에서, 바로 붙여 넣기를 한다. 그리고 Ctrl+D 를 누른다. Ctrl+C 를 누르면 안된다. 붙여 넣기가 완료되면 그 아래에 바로 해당 값들이 변환되어 Scapy 에서 보기 쉽게 표현해 준다.

Welcome to Scapy (2.1.0)
>>> IP(import_hexcap())
        0x0000:  4500 003e 344e 4000 4011 5d49 c0a8 00f0  E..>4N@.@.]I....
0x0010:  a87e 3f01 bddb 0035 002a 7cef 8555 0100  .~?....5.*|..U..
0x0020:  0001 0000 0000 0000 0377 7777 0667 6f6f  .........www.goo
0x0030:  676c 6502 636f 026b 7200 001c 0001       gle.co.kr.....
^D
<IP  version=4L ihl=5L tos=0x0 len=62 id=13390 flags=DF frag=0L ttl=64 proto=udp chksum=0x5d49 src=192.168.0.240 dst=168.126.63.1 options=[] |<UDP  sport=48603 dport=domain len=42 chksum=0x7cef |<DNS  id=34133 qr=0L opcode=QUERY aa=0L tc=0L rd=1L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=0 arcount=0 qd=<DNSQR  qname='www.google.co.kr.' qtype=AAAA qclass=IN |> an=None ns=None ar=None |>>>
>>>

한눈에 보기 쉽게 정리가 된다. 자, 그럼 이제 무엇을 할 수 있겠는가? 이렇게 로드가 되었다면 이제 이 데이터는 내 마음대로 수정이 가능한 것이다. 데이터는 원하는 형태로 조정하고 전송시킬 수도 있게 되는 것이다. 예를 들어, 아래 그림과 같이 _.show() 해서 보면 패킷 구조를 한눈에 쉽게 파악할 수도 있다.


만약 특정 값을 수정한다면 아래와 같이 쉽게 할 수도 있다. 로드한 값을 a 에 저장하고 UDP 의 목적지 포트인 53을 9999로 변경해 보고 확인한 것이다.

>>> a[UDP].dport
53
>>> a[UDP].dport = 9999
>>> a
<IP  version=4L ihl=5L tos=0x0 len=62 id=13390 flags=DF frag=0L ttl=64 proto=udp chksum=0x5d49 src=192.168.0.240 dst=168.126.63.1 options=[] |<UDP  sport=48603 dport=9999 len=42 chksum=0x7cef |<DNS  id=34133 qr=0L opcode=QUERY aa=0L tc=0L rd=1L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=0 arcount=0 qd=<DNSQR  qname='www.google.co.kr.' qtype=AAAA qclass=IN |> an=None ns=None ar=None |>>>

Scapy 의 활용도는 무궁무진 하다. 패킷 데이터를 쉽고, 간단하게 처리할 수 있으니 이 얼마나 편하던가 :-) 앞으로도 Scapy 기능에 대해서 가끔씩 소개할 예정이다.

P.S 블로그 내에서의 검색 기능이 완벽하지 않아, 제대로 검색이 잘 안되는 편이다. 검색 기능 페이지도 조만간 곧 따로 제공할 예정이다.

2011년 5월 10일 화요일

유닉스에서 비주얼 하게 네트워크 흐름을 모니터링 해보자

유닉스 기반의 환경에서 그래픽적으로 이쁘게 볼 수 있는 네트워크 모니터링인 EtherApe 를 소개해 볼까 한다. EtherApe 는 와이어샤크와는 용도가 조금 다르다. 와이어샤크와 같이 프로토콜 별로 세부적인 분석을 수행하기 보다는 전체적인 네트워크 흐름을 비주얼하게 볼 수 있는 것으로 생각하면 된다. 예를 들면, 호스트와의 링크 연결이 트래픽 크기만큼 보여준다준지 아래 그림과 같이 한눈에 흐름을 시간에 따라 보여주기도 한다.


설치는  아래 경로에서 바이너리를 다운로드 받거나 또는 소스코드를 받을 수 있다.

http://etherape.sourceforge.net/download.shtml

APT 패키지 사용자라면 " apt-get install etherape" 와 같이 쉽게 설치할 수 있다. 화면 구성은 위 그림과 같이 간단하다. 왼쪽에 탐지된 프로토콜 종류가 나오고 오른쪽에는 비주얼하게 역동적으로 화면이 움직인다. 라이브로 바로 인터페이스의 흐름을 보여주거나 또는 PCAP 파일을 열어서도 볼 수 있다. 각 노드를 선택하면 프로토콜 같은 정보를 볼 수도 있다. 아래 화면은 프로토콜 구성을 살펴본 것이다.


색상별로 프로토콜이 나뉘어져 있어 쉽게 눈에 들어온다. 비주얼 하게 표시해 주는 것이 네트워크 흐름을 읽어 들이면서 비주얼하게 계속 보여주는 것이므로, 어느 시점에 갑자기 트래픽이 크게 증가하는 형태와 같은 것에서는 텍스트 형태로 보는 것보다는 시각적으로 쉽게 파악할 수 있다.  또, 보고서 용도로 화면 일부를 사용해도 좋을것 같다. 아무래도 와이어샤크에서는 EtherApe 보다는 시각적으로 더 좋지는 않기 때문에 유용할 것이다.

사용한 PCAP 파일은 패킷 덤프를 뜨면서 IP 주소는 랜덤하게 생성하고, TCP, UDP 포트는 고정시켰다. 이런 사용방법은 여기서 tcpdpriv 를 찾아보면 사용방법을 찾아볼 수 있다.

오픈소스의 여러 다양한 네트워크 분석도구가 입맛을 딱 맞춰줄 수는 없지만, 한 도두가 아닌 다양한 여러가지 도구를 이용하면 상용분석 도구 이상으로 효과적인 분석이 가능하다는 점만은 잊지 말자.

2011년 5월 5일 목요일

버라이즌에서 발표한 2011년 데이터 침해 보고서

5월5일 어린이날은 어떻게 아이들과 함께 푸욱 쉬었나요? 이런저런 일로 바쁘다 보니 5월에 처음으로 포스팅 하는 글이 되었네요. 오늘은 간단히, 데이터 유출과 관련한 컬럼을 준비하다 보게된 유용한 자료가 있어서 공유해 볼까 한다. 버라이즌에서 공개한 문서자료로, 데이터 유출과 관련한 정보를 얻을 수 있다. 기업에서 보안을 담당하는 담당자라면 한번 읽어보면 좋은것 같다. 주요하게 언급 되는 내용은 아래와 같다 :


- SMB 규모를 대상으로 한 공격 증가
- 대부분의 데이터 유출은 외부 소스에 의해 발생
- ATM 기와 같은 물리적인 형태의 공격 증가
- 해킹과 악성코드가 주요한 공격방법

최근 소니 플레이스테이션 네트워크( PSN )에서 7,700만명이라는 고객정보가 유출되고, 국내에서는 현대카드 및 과거 기타 큰 기업들의 정보유출이 꽤 있었다. 물론, 해외의 큰 기업도 예외는 아니다. 정보 유출을 떠나서 이것이 악의적으로 이용된다는게 큰 문제인데 이런 데이터 유출과 관련해 관심이 있다면 이번 보고서가 도움이 될 것이다. 보고서가 공개된것은 4월 중순경이다.

다운로드는 다음 경로에서 가능하다.

http://www.verizonbusiness.com/resources/reports/rp_data-breach-investigations-report-2011_en_xg.pdf

[참고]
1. 버라이즌 2010년 Data Breach Report
http://www.verizonbusiness.com/resources/reports/rp_2010-data-breach-report_en_xg.pdf