2010년 3월 17일 수요일

패킷 대화내용을 정리해서 보자고

와이어샤크에서 패킷의 통신 내용을 이더넷, IP, TCP, UDP 등으로 구분하여 쉽게 살펴볼 수 있다.
그렇다면 어떻게 쉽게 살펴본다는 것인가? 대화형 형태로 내용을 보여준다는 것이다.
한 IP 에서 다른 IP 또는 한 맥주소에서 다른 맥 주소와 같이 A 와 B 지점을 잡고 그 사이의 통신 내용,
즉, 패킷 전송 건수, 전송데이타 양, 통신 시간등을 보여준다.

와이어샤크의 메뉴에서 Statistics -> Conversations 을 클릭하면 아래와 같은 화면을 볼 수 있다.
이더넷탭은 맥 주소를 기반으로 보여줄 거이고, 아래 예제는 IP 주소를 기준으로 보여주고 있다.
각 탭을 클릭하면 내림/올림차순으로 정렬을 할 수 있다. Bytes 기준으로 보니 192.168.0.221 과
211.115.99.247 사이에 343 건의 패킷을 주고 받았다.  

예를 들어 분석하고자 데이터가 많은 경우에는 이렇게 Conversations 을 이용하여 데이터 흐름을 살펴보고
어떤 지점에서 패킷 데이터가 가장 많았었는지 쉽게알아 볼 수 있을 것이다. 만약 전체 네트워크에서
일부 PC 가 악성코드에 감염되어 패킷을 계속 전송한다고 가정하면, 패킷 덤프를 떠서 정렬해서 보면
대략 어떤 PC 가 데이터를 많이 보내고 하였는지 추정이 될 것이다. 물론 상황에 따라 유용한지 여부는
달라지겠지만 말이다.

TCP 탭에서는 포트 번호로도 볼 수 있으니 분석에 도움이 될 것이다. 참고로, Limit to display filter 가
보일 것이다. 이것은 화면 출력 필터를 적용한 상태에서 체크하면 필터가 적용된 상태에서 대화내용이
나오게 되므로, 데이터 내용이 많은 경우에는 적절한 필터를 통해 분석하면 더욱 효과적일 것이다.

2010년 3월 11일 목요일

패킷인사이드 스마트폰 안으로 들어가다

스마트폰인 안드로이드 기반의 폰을 장만했습니다 안드로이드를 통해 패킷 인사이드 블로그를
접속해 보니 아래와 같이 깔끔하게 접속이 잘되네요. 앞으로 차차 모바일 관련한 글도 다뤄보고자 합니다.
모바일과 패킷 , 이 두가지의 주제에서 먼가 재미있는 것이 나오지 않을까요.

손안의 작은 컴퓨터. 이동중에도 모든 네트워크 정보가 감시된다면....
앞으로 기술의 발전으로 인터넷의 접근성은 더욱 좋아지겠지만
이로인해 우리의 정보가 얼마나 노출될지는 알 수 없는 일이죠.

2010년 3월 10일 수요일

패킷 분석에 중요한 것은 MARK 해 두기

패킷 분석 내용이 많을 경우, 이래저래 각 패킷을 왔다갔다 이동하며 보려면 여간 불편한게 아니다.
이때 유용하게 사용할 수 있는 것이 분석 하는 패킷에 마킹을 해 두는 것이다. 분석중,
지속적 확인작업이 필요한 경우 MARK 기능을 이용해 표시를 하는 것이다. Ctrl+M 으로 마크를 해 두고
마크 해 둔 사이의 이동은 Shift+Ctrl+N or B 를 이용해 한다.

아래 이미지의 화살표로 표시된 부분은 MARK 한 부분이다. 패킷간 거리가 클 경우에는 마크를 활용하여
MARK 를 기준으로 빠르게 움직이며 분석이 가능하다.

2010년 3월 9일 화요일

와이어샤크 단축키를 활용해 보자!

단축키의 사용은 사용하는 프로그램을 좀더 효과적으로 사용할 수 있게 해준다.
와이어샤크만 보아도, 다양한 단축키들이 존재한다. 본인이 자주 사용하거나,기본적인 것은 미리 외워두면
업무의 효율도 가져오고 더불어 더욱 프로로 보이게 만들어 줄 것이다 :-)

나의 경우는 다음의 단축키를 주로 많이 사용한다.

Ctrl + K : 패킷 시작 옵션을 보여주고, 인터페이를 선택하여 패킷 시작시 이용한다.
Ctrl + F : 패킷의 내용을 찾을때 이용한다
Ctrl + N , Ctrl + B : 찾은 패킷내용의 다음과 이전으로 이동할 때 사용한다.
Ctrl + G : 원하는 패킷 번지로 이동한다.
Ctrl + 방향키 -> : 패킷 세부 정보에서 모든 화면을 펼쳐 보인다.
Ctrl + P : 패킷 정보를 프린트한다.
Ctrl + O : 패킷 파일을 오픈한다.


이외 여러분들에게 맞는 단축키를 찾아 나서보자. 분명 패킷 분석 속도를 높여주는 역할을 담당하게 될 것이다.

2010년 3월 8일 월요일

패킷인사이드가 바코드 안으로 ...

아이폰 출시로 국내 스마트폰 열풍이 거세지고 있다. 이에 따라 바코드의 인기도 되살아 나고 있다.
스마트폰의 카메라를 이용하여 바코드를 읽어들이고 URL 및 기타 정보를 얻을 수 가 있어,
타이핑이 불편한 작은 디바이스에는 나름 유용한 기능이다.

패킷 인사이드도 QR 코드를 만들어 보았다. 메인 로고 옆에 바로 만들었으니,
카메라만 들이대면 언제든지 아래와 같이 패킷인사이드로 , Go~Go~


자! 아래의 바코드를 찰칵 찍어보자~. 그리고 필요한 곳에서는 아래의 바코드를 퍼가세요.
/ 주인장 @Rigel

2010년 3월 3일 수요일

패킷파일 저장창고를 활용해보자

패킷 파일 저장창고를 하나 소개하고자 한다. Xtractr 이라 불리는 서비스로, 클라우드 기반의
패킷 저장소라고 한다. 세계에서 가장 큰 패킷 저장소라고 하는데, 실제 방문하여 어떤지 경험해
보기를 바란다. 입맞에 딱 맞는 패킷을 못 찾을지도 모르지만, 나름 패킷 저장창고 치고는
구성이 잘 되어 있다. 다음 그림은 rpc 로 검색을 해 본것인데, 취약점 관련한 패킷 정보도 얻을 수 있고
패킷을 배우고자 하는 사람들에겐 유용한 서비스가 될 것이다.


자 한번 그럼 http://pcapr.net 을 한번 방문해 보시라.

2010년 2월 25일 목요일

[Packet Contest #1] 문제 정답풀이 - 문자열의 패킷 HEX 값 변환하여 암호알아내기

아쉽게도 첫번째 콘테스트에 정답을 제출해 주신 분들은 없었다. 일단, 풀이과정을
설명해 보도록 하겠다. 문제였던 다음의 HEX 코드 값을 패킷 파일로 변경하면
문제의 반은 해결한 것이다. 일단, 다음 패킷내용을 challenge.txt 로 저장해 보자.

00 05 b5 02 02 02 01 01 01 01 01 01 08 00 45 00
00 79 12 34 00 00 ff 06 a3 45 01 01 01 01 c0 a8
03 02 04 d2 16 2e 00 00 00 00 00 00 00 00 50 00
20 00 65 53 00 00 55 47 46 6a 61 32 56 30 53 57
35 7a 61 57 52 6c 4c 6d 4e 76 62 53 41 78 63 33
51 67 55 47 46 6a 61 32 56 30 49 45 4e 6f 59 57
78 73 5a 57 35 6e 5a 53 42 54 62 32 78 32 5a 57
51 73 49 45 4e 76 62 6d 64 79 59 58 52 31 62 47
46 30 61 57 39 75 0a

일전에 text2pcap 을 통해 변환하는 방법에 대해서 설명하였지만, OD 의 특정 포맷에
맞춰서 해야 하다 보니 약간 귀챦은 부분이 있다. 하지만, 생각을 좀더 달리하면 한
라인으로 해당 HEX 값을 나열하는 방법도 있다. 이럴때 쉽게 사용해 볼 수 있는 방법이
tr 을 통해 \n 을 제거해 주고, sed 를 이용해 제일 처음에 00000 를 넣어 주어서 text2pcap
이 인지할 수 있는 포맷형태로 만든다.

$ cat challenge.txt | tr '\n' ' ' | sed 's/^/00000 /' | text2pcap - result.pcap
Input from: Standard input
Output to: result.pcap
Wrote packet of 175 bytes at 0
Read 1 potential packet, wrote 1 packet

위 명령을 통해 result.pcap 으로 쉽게 패킷 파일이 만들어졌다. 위 팁은 가끔 HEX 형태의
아스키 형태만 가지고 분석을 해야 하는 경우 유용하게 사용할 수 있을 것이다.

result.pcap 을 tcpdump 를 통해 읽어 보자.  출발지 IP 1.1.1.1 에서 목적지 IP
192.168.3.2 로 TCP/5678 번에 데이터를 전송하였다.

# tcpdump -XX -r result.pcap
reading from file result.pcap, link-type EN10MB (Ethernet)
10:22:41.000000 IP 1.1.1.1.1234 > 192.168.3.2.5678: . 0:81(81) win 8192
        0x0000:  0005 b502 0202 0101 0101 0101 0800 4500  ..............E.
        0x0010:  0079 1234 0000 ff06 a345 0101 0101 c0a8  .y.4.....E......
        0x0020:  0302 04d2 162e 0000 0000 0000 0000 5000  ..............P.
        0x0030:  2000 6553 0000 5547 466a 6132 5630 5357  ..eS..UGFja2V0SW
        0x0040:  357a 6157 526c 4c6d 4e76 6253 4178 6333  5zaWRlLmNvbSAxc3
        0x0050:  5167 5547 466a 6132 5630 4945 4e6f 5957  QgUGFja2V0IENoYW
        0x0060:  7873 5a57 356e 5a53 4254 6232 7832 5a57  xsZW5nZSBTb2x2ZW
        0x0070:  5173 4945 4e76 626d 6479 5958 5231 6247  QsIENvbmdyYXR1bG
        0x0080:  4630 6157 3975 0a                        F0aW9u.

tshark 를 통해서도 한번 형태를 자세히 들여다 보자

# tshark -V -r result.pcap
Frame 1 (135 bytes on wire, 135 bytes captured)
    Arrival Time: Feb  8, 2010 10:22:41.000000000
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 135 bytes
    Capture Length: 135 bytes
    [Frame is marked: False]
    [Protocols in frame: eth:ip:tcp:data]
Ethernet II, Src: Private_01:01:01 (01:01:01:01:01:01), Dst: Broadcom_02:02:02 (00:05:b5:02:02:02)
    Destination: Broadcom_02:02:02 (00:05:b5:02:02:02)
        Address: Broadcom_02:02:02 (00:05:b5:02:02:02)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Source: Private_01:01:01 (01:01:01:01:01:01)
        Address: Private_01:01:01 (01:01:01:01:01:01)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Type: IP (0x0800)
Internet Protocol, Src: 1.1.1.1 (1.1.1.1), Dst: 192.168.3.2 (192.168.3.2)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 121
    Identification: 0x1234 (4660)
    Flags: 0x00
        0... = Reserved bit: Not set
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: TCP (0x06)
    Header checksum: 0xa345 [incorrect, should be 0xe39e]
        [Good: False]
        [Bad : True]
    Source: 1.1.1.1 (1.1.1.1)
    Destination: 192.168.3.2 (192.168.3.2)
Transmission Control Protocol, Src Port: search-agent (1234), Dst Port: rrac (5678), Seq: 1, Len: 81
    Source port: search-agent (1234)
    Destination port: rrac (5678)
    Sequence number: 1    (relative sequence number)
    [Next sequence number: 82    (relative sequence number)]
    Header length: 20 bytes
    Flags: 0x00 ()
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set
        ...0 .... = Acknowledgment: Not set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..0. = Syn: Not set
        .... ...0 = Fin: Not set
    Window size: 8192
    Checksum: 0x6553 [correct]
        [Good Checksum: True]
        [Bad Checksum: False]
Data (81 bytes)

0000  55 47 46 6a 61 32 56 30 53 57 35 7a 61 57 52 6c   UGFja2V0SW5zaWRl
0010  4c 6d 4e 76 62 53 41 78 63 33 51 67 55 47 46 6a   LmNvbSAxc3QgUGFj
0020  61 32 56 30 49 45 4e 6f 59 57 78 73 5a 57 35 6e   a2V0IENoYWxsZW5n
0030  5a 53 42 54 62 32 78 32 5a 57 51 73 49 45 4e 76   ZSBTb2x2ZWQsIENv
0040  62 6d 64 79 59 58 52 31 62 47 46 30 61 57 39 75   bmdyYXR1bGF0aW9u
0050  0a                                                .
    Data: 5547466A613256305357357A6157526C4C6D4E7662534178...

추가적인 정보를 더 볼 수 있는데, 들여다 보니 출발지와 목적지의 맥주소가 어딘가 이상하다.

Private_01:01:01 (01:01:01:01:01:01), Dst: Broadcom_02:02:02 (00:05:b5:02:02:02)

조작된 것임을 쉽게 추정해 볼 수 있다. 목적지의 맥주소는 제조회사가 Broadcom
으로 보이는데 출발지와 목적지를 맥을 봤을때, 목적지의 Broadcom 부분도 의도적으로
고쳐진 것으로 보인다. (실제 필자가 고치기도 하였지만 ㅋㅋ )
또 IP 헤더의 체크썸을 보면 값이 잘못 되어 있다.

Header checksum: 0xa345 [incorrect, should be 0xe39e]

원래는 0xe39e 의 값을 갖고 있어야 하지만 0xa345 로, 조작될 가능성이 높은 부분임을
알 수 있다. 자, 그리고 데이터를 보면 81 바이트로 암호같은 문자열이 연속으로 놓여있다.
많이 접해 보신분들은 쉽게 눈치를 챌 수 있겠지만, BASE64 로 인코딩된 데이터이다.
BASE64 는 이메일에서 인코딩 방법으로 많이 쓰인다.  자, 그럼 BASE64 데이터임을
추정하였으니 아래와 같이 해독해 보자.

$ perl -MMIME::Base64 -e 'print decode_base64("UGFja2V0SW5zaWRlLmNvbSAxc3QgUGFja2V0IENoYWxsZW5nZSBTb2x2ZWQsIENvbmdyYXR1bGF0aW9u")'
PacketInside.com 1st Packet Challenge Solved, Congratulation

펄의 MIME:Base64 모듈을 이용해 위 데이터를 디코딩하면 위와 같은 결과를 얻을 수 있다.
바로, 이번 문제의 정답이다.

이번 문제는 앞서 배운 text2pcap 의 사용방법과 효과적으로 쓸수 있는 방법을 통해
패킷파일로 만들어보고 그 안에서 문제의 정답과정을 찾고 패킷의 잘못된 부분을
추정해 볼 수 있다.