2013년 9월 27일 금요일

마이크로소프트 Message Analyzer 공식 릴리즈

마이크로소프트사의 Message Analyzer 가 그동안 베타로 테스트 되다가 드디어 공식적으로 다운로드센터에 등록되었습니다. 이제는 로그인 필요없이 편하게 바로 다운로드 받아 사용하실 수가 있습니다. Message Analyzer 는 새로운 형태의 메시지 분석기로서 트래픽 뿐만 아니라 시스템 메시지 또한 분석 대상입니다. 로그파일이나 Trace 파일을 분석을 할 수 있다는 의미입니다.

과거 Network Monitor 는 네트워크 트래픽 분석기로서의 역할만을 담당하지만 Message Analyzer 는 트래픽외 통합적으로 이벤트도 분석할수 있다는 부분이 다릅니다. 베타때부터 써보긴 했지만 와이어샤크만큼 사용 방법이 직관적이지는 않은것 같습니다.

그래도 새로운 분석기가 하나 더 생겼다는 것은 좋은일입니다. Message Analyzer 만의 장점이 있을테니 말이죠. 다운로드는 다음의 경로에서 할 수 있습니다.

http://www.microsoft.com/en-us/download/details.aspx?id=40308

앞으로 Message Analyzer 에 대한 기능도 소개해 보도록 하겠습니다.



[참고]
1. MS사의 새로운 네트워크 분석기, Message Analyzer
2. 마이크로소프트 네트워크 모니터의 프로세스별 통신 상태

2013년 9월 25일 수요일

차세대 패킷 포맷, Pcap-NG 를 알고싶다 _ 네번째 이야기

추석명절은 잘 보내셨는지요? 오늘은 드디어 Pcap-NG 포맷 소개의 마지막 글입니다. 여러가지 바쁜일들로 이제서야 마지막 편을 쓰게 되었습니다.

6. PCAP-NG 쉽게 들여다 보기


패킷파일을 쉽게 살펴볼 수 있는 것은 도구를 이용하는 방법입니다. 그 중에 대표적인 패킷 분석도구인 와이어샤크를 통해서 쉽게 차세대 패킷 포맷을 살펴볼 수 있습니다.

6-1. 와이어샤크를 통해 본 PCAP


와이어샤크에서는 Pcap-NG 포맷을 지원하고 있습니다. 아직 완벽하게 해당 포맷을 100% 다 지원하지는 않지만 기본적인 사용에는 큰 문제가 없습니다. 와이어샤크의 제약을 보면

- 일부(SHB, IDB, PB, EPB, SPB) 블럭만 지원하고 있어 다른 블럭은 무시가 됩니다.
- 많은 옵션들이 완벽하게 구현되지 않았습니다.
- 싱글 세션만 지원합니다.
- 많은 파일에 대해서 생성 테스트가 더 되어야 하고 파일을 합치는 기능에서는 약간의 제약이 있습니다.

일단 기본적으로 패킷 정보를 보여주는 형태는 이전의 PCAP 과 같습니다. 다만 GUI 관점에서 추가적인 메뉴가 더 생겼는데, Statistics 에서 Address Resolution 과 Comments Summary 를 더 볼 수 있습니다.

Address Resolution 은 PCAP-NG 에서 제공하는 NRB 블럭에서 기록된 정보와 유사한 정보를 제공해 줍니다. 패킷 내에서 사용된 도메인 정보를 한눈에 쉽게 볼 수 있도록 보여주고 있습니다. 이 것은 NRB 와는 별개로 와이어샤크에서 제공해 주는 기능입니다.


다음은 Comments Summary 로 주석 정보와 캡쳐가 된 운영체제 정보및 이더넷 정보를 추가적으로 확인할 수 있습니다. 아래 그림의 하단을 보면 주석정보를 볼 수가 있는데요, 주석정보는 PCAP-NG 에서 기록되는 정보중에 하나 입니다. 이 정보를 통해 분석가는 단순한 패킷 정보외에 패킷덤프가 이뤄진 곳의 환경정보와 기타 정보를 추가적으로 얻을 수 있어 분석에 참고할 수 있습니다. 또한 주석정보는 여러 분석가가 의견을 교환하고 분석을 계속 이어갈 수 있게 해주는 다리 역할을 해주기도 합니다.


다시말하지만, 분석은 패킷 자체의 정보만으로도 이용될 수 있지만 그렇지 않은 경우도 많습니다. 이럴 경우에는 전반적인 정보를 가지고 문제를 풀어나가야 합니다.


6-2. Pcap-NG 파일 리더


PcapNG 파일을 간단하게 파싱하여 정보를 출력해 줄 수 있는 코드가 있습니다. ntartest 라는 것으로 다음의 경로에서 다운로드 받을 수 있습니다.

http://wiki.wireshark.org/Development/PcapNg?action=AttachFile&do=view&target=ntartest.c

NTAR(Network Trace Archival and Retrieval)은 Pcap-NG 이전에 사용되어 오던 이름의 형태이며 블럭별로 간단한 정보를 출력해 주므로 해당 포맷을 파싱하려는 개발자 분들에게 초기 접근시 도움을 줄 수 있습니다. 일단 소스코드가 짧으니까요 :-)

실행하면 다음과 같은 결과를 얻을 수 있습니다.

# ./ntartest test.pcapng
+++Working on file: test.pcapng
This machine is little-endian.
This section is little-endian.

00000000: Block #1, Type = Section Header Block (0a0d0d0a)
+++ blockLength % 4 = 0, no pad bytes
00000004: Reported Block Length 96 (00000060), Adjusted Block Length 96 (00000060), next block at offset 00000060
00000008: Remainder of Block Data (00000058) bytes

0000005c: Block #2, Type = Interface Description Block (00000001)
+++ blockLength % 4 = 0, no pad bytes
00000060: Reported Block Length 56 (00000038), Adjusted Block Length 56 (00000038), next block at offset 00000094
00000064: Remainder of Block Data (00000030) bytes

00000094: Block #3, Type = Name Resolution Block (00000004)
+++ blockLength % 4 = 0, no pad bytes
00000098: Reported Block Length 5240 (00001478), Adjusted Block Length 5240 (00001478), next block at offset 0000150c
0000009c: Remainder of Block Data (00001470) bytes
Oops: short read, should have read 5232 bytes, only read 4096.

6-3. Pcap-NG 파일 RAW 로 들여다 보기


패킷 포맷 구조가 달라졌지만 사용자가 느끼는 부분에서는 큰 차이가 없을수도 있습니다. 똑같이 패킷 정보를 보여주기 때문이죠. 다만, 패킷 포맷 자체가 이전보다 유연해 졌고 보다 많은 정보를 저장하고 있다는 점에서는 분명 다릅니다. 포맷 자체 관점에서 들여다 보면 이전과는 큰 차이가 있다는 것을 느낄 수 있습니다.

단언컨대, Pcap-NG 는 패킷파일을 저장하는데 유연하면서도 앞으로 많이 쓰이게 될 패킷 포맷중에 하나입니다 :-)

여기에 소개하기 위하여 테스트로 와이어샤크에서 데이터를 pcap-ng 포맷으로 저장해 보았습니다. 패킷파일 포맷 구조를 살펴보면 다음과 같이 구성되어 있습니다.



제일 처음 SHB 가 시작되고 IDB,NRB 가 이어지고 EPB 에 패킷 데이터가 계속 기록되면서 마지막에 ISB 가 존재합니다. 해당 패킷 로우파일을 직접 들여다 보겠습니다.

다음 그림은 xxd 를 이용해 바이너리 형태를 본 것입니다. 제일 처음 SHB 가 시작되고 6000 0000 이라는 블럭 길이가 보입니다. 기본적으로 각 블럭마다 블럭의 길이가 타입 다음에 위치하고 블럭의 마지막에 다시 나타나게 됩니다. 그러므로 블럭타입을 보고 그 다음 길이를 본 후 해당 값과 매치되는 곳 까지 따라가게 되면 일반적으로 쉽게 블럭을 구분할 수 있습니다. 각 바이너리 값들은 우측에 추가적으로 기술해 놓았습니다.



각 포맷은 앞서 소개해 드린 포맷 구조에 맞춰서 보시면 쉽게 이해하실수가 있습니다. SHB 가 시작되고 IDB 가 이어지고 NRB 가 다시 나타납니다. NRB 는 블럭크기가 꽤 큽니다. 그래서 많은 내용이 반복되고 아래 그림과 같이 NRB 종료지점을 볼 수 있습니다. 종료지점은 쉽게 찾을 수 있겠죠? 새로 시작되는 블럭의 앞에 앞서 NRB 의 블럭길이인 7814 0000 을 찾으면 쉽게 찾을 수 있습니다. EPB 는 PCAP 구조와 같이 패킷 데이터를 저장하는 블럭입니다. 가장 많은 블럭의 분포를 보이게 되겠죠? EPB 의 블럭타입은 0600 0000 입니다. 그리고 크기는 6c00 0000 입니다. 다시 끝나는 위치는 6c00 0000 의 다음을 보면 0600 0000 으로 다시 EPB 가 시작이 됩니다. 그럼 첫 EPB 의 데이터는 무엇일까요? 잘 살펴보면 이더넷 타입을 가르키는 0800 과 IPv4 와 IP 헤더길이인 20 바이트를 뜻하는 4500 을 볼 수 있습니다. 직접 각 내용을 하나하나 뜯어보면 DNS 프로토콜임을 알 수가 있답니다. 계속 이어지는 것은 여러분의 몫으로 맡기겠습니다. 


다음 화면은 패킷파일의 제일 끝 부분입니다. EPB 가 시작된 이후로는 패킷데이터인 EPB 블럭이 계속 이어지다가 마지막에 인터페이스 상태정보인 ISB 가 나오게 됩니다. 블럭타입의 시작은 0500 0000 이 보이실 것이고요 6c00 0000 의 블럭크기값이 보입니다. 이후 옵션 헤더에 0100 으로 주석임을 알려주고 옵션길이인 1c00 만큼 (28 바이트) 의 주석 정보가 나오게 됩니다. dumpcap 에 의해서 카운트 정보가 제공되었다는 것입니다. 옵션 헤더는 추가적으로 다양하게 나타날 수 있습니다.


패킷 포맷을 직접 들여다 보면 어렵지는 않습니다. 이해가 쉽도록 보이는 내용 HEX 값 그대로를 표시해 놓았으니 비교해 보시고 블럭 포맷을 이해하시면 됩니다.

7. 마지막


4회에 걸쳐서 Pcap-NG 포맷을 소개해 드렸습니다. 아직은 해당 포맷이 완벽하게 정립되지는 않았고 실험적으로 사용하는 블럭도 존재합니다. 하지만 와이어샤크에서는 이제 기본 패킷파일 저장 포맷으로 Pcap-NG 를 사용하고 있기 때문에 앞으로 이 포맷형태로 파일을 받아보는 경우가 많아질 것입니다.

실제 직접 패킷 포맷을 살펴볼 일은 많지 않습니다. 일일이 살펴보는 것도 쉽지 않고, 전문 분석도구들이 알아서 보기쉽게 표현해 주기 때문입니다. 하지만, 포맷 구조는 이렇게 만들어져 있다는 정도는 가볍게 봐 두시면 좋겠습니다. 아주 가끔은 패킷파일을 직접 복원해야 하는 경우가 생길수도 있고, 빠른 분석을 위해 여러분들이 직접 패킷파일을 분석하는 프로그램을 만들어야 하는 경우가 있을지도 모르거든요.

다음번에 여유가 된다면 PCAP 과 PCAP-NG 를 더 보기 쉽게 문서로도 만들어 보도록 하겠습니다. 아~ 그럴 날이 오겠죠 ? ^^

[참고]
1. 와이어샤크 PcapNg 개발현황
http://wiki.wireshark.org/Development/PcapNg

2013년 9월 3일 화요일

차세대 패킷 포맷, Pcap-NG 를 알고싶다 _ 세번째 이야기

두번째 이야기에서 다루지 못한 2개의 블럭에 대한 설명입니다. Pcap-NG 를 설명하는데 생각보다 많은 시간이 필요하다 보니 먼저 작성한 내용을 공개하면서 어느덧 세번째 이야기 까지 왔습니다. 앞으로 네번째 이야기까지 다루면 Pcap-NG 소개는 끝입니다. :-)

5-5. NRB(Name Resolution Block)


이 블럭은 패킷 캡쳐를 하는 순간의 IP 주소와 연관된 도메인 이름을 지원해주는 역할을 합니다. 패킷캡쳐 파일안에 DNS Resolving 과 관련한 데이터들이 파일의 시작부분쯤에 위치하고 하고 있으며, Resolving 이 많은 경우 해당 블럭의 크기도 커지게 됩니다. 이 블럭의 장점은 Resolving 을 하면서 발생될 수 있는 Delay 를 줄여주며 캡쳐한 시점의 Resolving 정보를 가지고 있다는 것입니다. 예를들어, 캡쳐할 당시의 aaa.com 의 주소가 1.1.1.1 이었는데 분석할 당시에는 2.2.2.2 가 되어 있을수도 있습니다. 이런점에서 보면 유용하게 사용될 수 있는 부분이 있고, DNS 요청이 패킷파일에 많이 담겨있는 경우 Resolving 을 피할수도 있어 네트워크가 연결되어 있지 않더라도 정보를 얻을 수 있게됩니다.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------------------------------------------------------+
 0 |                    Block Type = 0x00000004                    |
   +---------------------------------------------------------------+
 4 |                      Block Total Length                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 8 |      Record Type              |         Record Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 /                       Record Value                            /
   /          /* variable length, aligned to 32 bits */            /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                                                               .
   .                  . . . other records . . .                    .
   .                                                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Record Type == end_of_recs   |  Record Length == 00          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                                                               /
   /                      Options (variable)                       /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Block Total Length                       |
   +---------------------------------------------------------------+


블럭은 위와 같은 포맷으로 구성되어 있으며 블럭타입은 0x00000004 로 정의되어 있습니다. 블럭 타입 다음에 블럭에 대한 전체 길이가 나오고 각 레코드 정보가 나오게 되는데 레코드 타입은 아래와 같습니다.

레코드 타입 이름코드번호설명
nres_endofrecord0Name Resolution Record 가 끝남을 알려준다.
nres_ip4record1IPv4 주소에 해당하는 DNS 레코드 정보
nres_ip6record2IPv6 주소에 해당하는 DNS 레코드 정보

각 레코드 값은 32비트로 구성되어 있으며 레코드 길이에 해당 도메인 이름의 실제 길이가 들어가게 됩니다. 마지막으로 옵션이 추가적으로 올 수 있는데, 옵션은 다음과 같습니다.

옵션 이름코드번호설명
ns_dnsname2이름 변환에 사용된 DNS 서버 이름 (UTF-8문자열)
ns_dnsIP4addr3DNS 서버의 IPv4 주소
ns_dnsIP6addr4DNS 서버의 IPv6 주소


5-6. ISB(Interface Statistics Block)


캡쳐에 사용된 인터페이스의 통계정보를 가지고 있습니다. 통계정보라 함은 인터페이스를 통해 받은 패킷 개수, 유실된 패킷개수등이 있습니다. 해당 블록에 정의된 Interface ID 값에 해당하는 인터페이스 정보를 기록하고, 통계정보를 담아야 하기에 보통 파일의 끝부분에 위치하게 되는 블럭입니다. 하지만, 같은 인터페이스에 여러번 반복되어 해당 블럭이 나타날수는 있습니다.

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +---------------------------------------------------------------+
 0 |                   Block Type = 0x00000005                     |
   +---------------------------------------------------------------+
 4 |                      Block Total Length                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 8 |                         Interface ID                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 |                        Timestamp (High)                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 |                        Timestamp (Low)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20 /                                                               /
   /                      Options (variable)                       /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Block Total Length                       |
   +---------------------------------------------------------------+


블럭타입은 0x00000005 를 사용하고 있고, 바로 다음 블럭의 전체길이가 나타납니다.그리고 통계정보를 담을 인터페이스 ID 번호가 위치합니다. 이 ID 는 IDB(Interface Description Block)에서 정의된 인터페이스중에 하나가 됩니다. 그 다음으로 EPB(Enhanced Packet Block)와 같은 타임스탬프가 정보가 나오며, 옵션에는 아래와 같은 정보가 들어가게 됩니다.


옵션 이름코드번호설명
isb_starttime2캡쳐가 시작된 시간으로, 4바이트 2개 블럭으로 시간이 저장된다.
isb_endtime3캡쳐가 끝난 시간으로, 4바이트 2개 블럭으로 시간이 저장된다.
isb_ifrecv4패킷 캡쳐가 시작된 이후로 물리적 인터페이스에서 받은 패킷 개수
isb_ifdrop5패킷 캡쳐가 시작된 이후로 컴퓨터 자원의 부족으로 유실된 패킷 개수
isb_filteraccept6패킷 캡쳐가 시작된 이후로 필터에 의해서 받은 패킷 개수
isb_osdrop7패킷 캡쳐가 시작된 이후로 운영체제에 의해서 유실된 패킷 개수
isb_usrdeliv8패킷 캡쳐가 시작된 이후로 사용자에게 전달된 패킷 개수