레이블이 wireshark인 게시물을 표시합니다. 모든 게시물 표시
레이블이 wireshark인 게시물을 표시합니다. 모든 게시물 표시

2013년 7월 19일 금요일

차세대 패킷 포맷 PCAP-NG 를 PCAP 으로 쉽게 변환하기

인기있는 패킷분석 도구인 최신 와이어샤크를 사용하면 패킷파일 저장시에 기본적으로 차세대 PCAP 포맷인 PCAPNG 형태로 저장되고 있습니다. 항상 확장자가 cap 또는 pcap 으로 되어 있는 것으로만 익숙해져 있는데 말이죠. 디폴트로 사용되다 보니 과거 보다는 pcapng 포맷이 조금 더 증가한 느낌입니다. pcapng 포맷은 pcap 보다 패킷 파일 저장시 더 많은 정보를 기록하고 있습니다. 더 많은 정보를 주니 분석가 입장에서는 싫을 이유는 없겠죠. 다만, 패킷 파일 사이즈가 더 커지는 문제는 있습니다.

오늘은 PCAP 에 익숙하신 분들을 위하여 PCAP-NG 포맷을 PCAP 으로 쉽게 바꾸는 방법에 대해서 알려드릴께요.

와이어샤크가 설치되어 있다면 editcap 을 통해 쉽게 하실 수가 있습니다. editcap 의 -F 옵션을 보면 캡쳐 타입 리스트를 볼 수 있습니다.

# editcap -F
editcap: The available capture file types for the "-F" flag are:
    5views - Accellent 5Views capture
    btsnoop - Symbian OS btsnoop
    commview - TamoSoft CommView
    dct2000 - Catapult DCT2000 trace (.out format)
    erf - Endace ERF capture
    eyesdn - EyeSDN USB S0/E1 ISDN trace format
    k12text - K12 text file
    lanalyzer - Novell LANalyzer
    libpcap - Wireshark/tcpdump/... - libpcap
    modlibpcap - Modified tcpdump - libpcap
    netmon1 - Microsoft NetMon 1.x
    netmon2 - Microsoft NetMon 2.x
    nettl - HP-UX nettl trace
    ngsniffer - NA Sniffer (DOS)
    ngwsniffer_1_1 - NA Sniffer (Windows) 1.1
    ngwsniffer_2_0 - NA Sniffer (Windows) 2.00x
    niobserver - Network Instruments Observer
    nokialibpcap - Nokia tcpdump - libpcap
    nseclibpcap - Wireshark - nanosecond libpcap
    nstrace10 - NetScaler Trace (Version 1.0)
    nstrace20 - NetScaler Trace (Version 2.0)
    pcapng - Wireshark - pcapng
    rf5 - Tektronix K12xx 32-bit .rf5 format
    rh6_1libpcap - RedHat 6.1 tcpdump - libpcap
    snoop - Sun snoop
    suse6_3libpcap - SuSE 6.3 tcpdump - libpcap
    visual - Visual Networks traffic capture

눈에 익숙한 libpcap 과 pcapng 가 보입니다. 바로 이것을 이용하면 됩니다.

1. PCAPNG 포맷 PCAP 으로 변환하기 


editcap 을 이용해 캡쳐 타입과 -T 를 통해 캡슐화를 정의해 주어야 합니다. 캡슐화라는 용어가 익숙하지 않다면 다음글을 우선 참고해 보세요.

패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?



# editcap -F libpcap -T ether test.pcapng test.pcap

만약 -T 로 encapsulation 을 지정하지 않으면 다음과 같은 에러가 발생합니다.

# editcap -F libpcap test.pcapng test3.pcapeditcap: Can't open or create test3.pcap: Files from that network type can't be saved in that forma

2. PCAP 포맷을 PCAPNG 포맷으로 변경하기 


PCAPNG -> PCAP 변환이 있다면 이 반대 방법도 존재하겠죠. 여기서는 -T 옵션을 사용할 필요가 없습니다.

# editcap -F pcapng test.pcap test.pcapng

또는 tshark 를 이용할 수도 있습니다.

# tshark -F pcapng -r test.pcap -w test.pcapng

만들어진 파일을 살펴보겠습니다.

# ls -l
-rw-r--r-- 1 root    root     3015906 Jul 10 06:25 test.pcap
-rw-r--r-- 1 root    root     3551608 Jul 10 06:28 test.pcapng

원본 test.pcap 이 3메가 정도가 되는데, pcapng 포맷으로 변경하니 3.5 메가 정도로 크기가 증가하였습니다. file 명령어를 이용해 타입을 살펴보겠습니다.

# file test.pcapng
test.pcapng: pcap-ng capture file - version 1.0
# file test.pcap
test.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 1514)

정확히 포맷을 인식하고 있네요. 정상적으로 변환이 잘 된것 같습니다. 이 2개 파일을 비교하면 당연히 완전 다릅니다. 패킷 내용 자체는 같더라도 부가적으로 포함되어 있는 내용과 구조가 다르기 때문입니다.

차세대 패킷 파일 포맷, PCAP-NG 를 다음번 포스팅에서 자세히 소개해 보도록 하겠습니다.

아, 참고로 pcapng.com  에서는 온라인에서 pcap-ng 를  pcap 으로 변환할 수 있습니다.

2013년 3월 6일 수요일

패킷인사이드, 라즈베리파이(Raspberry Pi)군 영입하다.

얼마전에 가지고 놀 장난감을 추가로 또 영입했습니다. 소형 컴퓨터 라즈베리파이 입니다. 이전에도 이래저래 하도 사 놓은게 많아서, 이건 미루고 있었는데 결국 또 구매했네요.

센서도 사 보고 연결해서 다양하게 테스트 해 볼까 하는데, 시간적 여유가 될지는 모르겠네요. 일단 박스는 이렇습니다. 랜케이블 연결되어 있고, HDMI 로 모니터 연결하고 SDCARD 가 연결되어있습니다.

리눅스가 설치되어 있으니 해 보면 다양하게 할건 많을거 같습니다.


물론, 패킷 덤프도 잘 되죠. tcpdump(apt-get install tcpdump) 도 잘 되고요, 와이어샤크도 설치해 보았더니 그림과 같이 잘 동작합니다.
사실 동작 안할 이유는 없죠 :-)


재미난것을 하게되면 다시 공유해 드릴께요 ^^

/Rigel

2012년 8월 18일 토요일

와이어샤크 보안업데이트, 1.8.2 최신버전 릴리즈


와이어샤크 보안 업데이트가 반영된 최신 버전이 8월15일 릴리즈 되었다.
특히 이번 릴리즈에는 많은 보안 업데이트가 이뤄진 만큼, 와이어샤크 사용자는 업데이트를 권고한다. 1.8.2 버전의 경우 다음과 같은 취약점이 해결되었다.

CVE-2012-4285
CVE-2012-4287
CVE-2012-4288
CVE-2012-4294
CVE-2012-4295
CVE-2012-4289
CVE-2012-4296
CVE-2012-4297
CVE-2012-4291
CVE-2012-4292
CVE-2012-4293
CVE-2012-4290
CVE-2012-4286
CVE-2012-4298

이번 보안 업데이트는 몽고DB,XTP,ERF,AFP,RTSP2, GSM RLC MAC, CIP, STUN 등의 패킷 파서에서 발견된 문제점들이며, 이번 버전에서는 새로운 기능 추가는 없다.

다음 경로에서 최신 버전을 다운로드 받을 수 있다:

2012년 6월 27일 수요일

와이어샤크 1.8.0 버전 릴리즈


와이어샤크 1.8.0 이 6월21일에 공식 릴리즈 되었다. 미처 나온지 모르고 있다가 금일에야 릴리즈 소식을 공유한다.
1.7 개발 버전을 살짝 들여다 보았던게 올해 초 이었고, 안정버전이 1.6 버전이었다. 이번에 바로 1.8 Stable 버전으로 릴리즈 되었는데, 새로운 기능 및 업데이트 내용은 다음과 같다:

- 동시에 여러개의 인터페이스에서 캡쳐를 할 수 있다는 점이 이번 버전의 가장 큰 부분이다. (물론 개발 버전에서 지원되고 있음을 일전에 소개한 적이 있다)
- 패킷파일 저장방식이 기본적으로 pcap-ng 로 변경되었다. 조만간 pcap-ng 에 대해 소개하도록 하겠다.
- 패킷 커멘트를 달 수 있는 기능이 추가되었다. 이 기능은 패킷데이터를 분석하고 누군가와 공유하거나 또는 분석한 내용을 기록해 두기에 유용하다. 커멘트를 추가하면 해당 패킷에 커멘트가 달려있다고 표시된다. 물론, 눈에 띄기 쉽게 색깔로 표시해서 말이다. (아쉽게도 한글은 표시되지 않는다)
- IEEE 802.11, IPSec, ISAKMP 의 해독 키 관리가 더욱 쉬워졌다.
- "Save As" 기능이 좀더 세분화 되었는데, Save As 는 단순히 다른이름으로 저장할 수 있도록 하고, "Export Specified Packets" 를 통해 패킷 저장시 좀더 많은 제어를 할 수 있는 기능이 추가되었다. 예를들어, 패킷 몇번 부터 몇 번까지 저장한다든지 또는 선택된 패킷만 저장하는 기능이다. 기존에 존재하는 기능들이 저장방식에서 기능상 분리가 되었다고 보면 된다.
- Tshark 의 커맨드 라인 옵션의 변화. Undocumented 였던 -P 옵션이 -2 옵션으로 Two-pass 분석을 수행한다고 한다.
- GeoIP IPv6 데이터베이스 지원
- 이외 상당히 많은 프로토콜을 새롭게 지원하거나 업데이트 되었다.

세부적인 내용은 다음 릴리즈 노트를 통해 확인할 수 있다:
http://www.wireshark.org/docs/relnotes/wireshark-1.8.0.html

2012년 3월 28일 수요일

와이어샤크 1.4.12, 1.6.6 버전 업데이트

와이어샤크 최신 버전이 나왔다. 이번 버전에서는 특별한 기능 업데이트 보다는 발견된 몇가지 취약점이 해결되었다. 이외 알려진 버그도 수정되었다.

세부적인 내용은 다음 릴리즈 노트를 참고하기 바란다

http://www.wireshark.org/docs/relnotes/wireshark-1.6.6.html
http://www.wireshark.org/docs/relnotes/wireshark-1.4.12.html

2012년 1월 13일 금요일

와이어샤크 1.7 개발 버전 살짝 들여다 보기

작년 11월 초에 와이어샤크 1.7 개발버전이 공개되었다. 기존에 사용하던 최신 버전이 1.6.X 대 이니 1.7 이라고 하면 과연 어떤 새로운 기능이 있을까 하는 궁금증이 생긴다.

1.7 버전에서 크게 변경되는 것은 패킷파일을 저장하는 기본 포맷 형태가 PCAP-NG 바뀌었다는 것이다. 우리가 흔히 쓰고 있는 PCAP 포맷형태에서 차기 버전 포맷 형태로 바뀌는데 내부 형태의 구조는 많이 달라진다. PCAP 포맷에 대해서는 이미 한번 언급한 적이 있으므로 다음 글을 참고해 보면 된다.

PCAP 파일을 파헤쳐 보자 - 그 첫번째 이야기

PCAP 파일을 파헤쳐 보자 - 그 두번째 이야기


1.7 버전의 주요변경 내역을 정리해 보면 다음과 같다:

- 기본 포맷형태가 PCAP-NG 로 변경
- 동시에 여러개의 인터페이스에서 패킷 캡쳐 가능
- TCP 윈도우 업데이트에서 "Bad TCP" 로 더이상 칼라 표시되지 않는점
- TShark 커맨드 라인 옵션 일부 변경
- GeoIP IPv6 데이터베이스 지원 등이다.

1.7 버전을 실행해 보면 다음과 같은 화면이다. 1.7 개발버전이라는 것이 보이고 Start 부분에서 인터페이스가 여러개 보인다.



캡쳐를 시작할때 나타나는 화면을 보면 다르게 보이는 것이 하나 느껴질 것이다.


바로 상단 부분의 인터페이스로 여러개를 선택할 수 있도록 바뀌었다. 이제는 동시에 여러 인터페이스에서 패킷 캡쳐가 가능해 진 것이다. 그리고 패킷을 저장해 보면 기본 선택이 PCAP-NG 포맷이다. 해당 포맷을 살펴보면 아래 그림과 같은데, 기존 PCAP 포맷과는 달리 헤더 블럭이 더욱 길어졌다. 인터페이스 정보도 포함되어 있고, 좀더 많은 정보를 담고 있는 구조로 조만간 PCAP-NG 포맷에 대해 공유해 볼 까 한다.



2012년 1월 12일 목요일

와이어샤크 1.6.5, 1.4.11 버전 릴리즈

와이어샤크가 버전업 되었다. 최신 버전은 1.6.5 이며, 몇 가지 취약점이 수정되었다.
그리고 알려진 버그들도 해결되었고, 몇 가지를 살펴보면 다음과 같다.

- Export HTTP Objects 에서 모두 저장하기 할때 와이어샤크가 종료되는 문제점
- 최근 파일이 없을 경우 Crash 되는 문제
- 여러 프로토콜 해석기에서 발생된 메모리 누수
- 라우팅 헤더가 존재할 경우 IPv4 UDP/TCP 체크섬이 올바르지 않은 문제점 등이 있다.

새로운 기능 또는 프로토콜은 없으며, 기존 프로토콜 지원이 일부 업데이트 되었다.
1.4.X 의 최신버전은 1.4.11 이며, 다운로드는 다음 주소에서 가능하다.

http://www.wireshark.org/download.html

2011년 11월 4일 금요일

와이어샤크 1.6.3, 1.4.10 버전 릴리즈


와이어샤크가 버전업 되었다. 1.6.3 버전과 1.4.10 두 버전이 릴리즈 되었으며, 이번 버전에는 보안 취약점 패치 및 알려진 버그들이 수정되었다.

CSN.1 을 처리하는 과정에서 초기화 되지 않은 변수에 의해 크래쉬가 발생될 수 있다. 또한 레드햇 보안 팀에서 발견한 Infiniband 의 널 포인터 참조, ERF 파일을 읽을때 존재하는 버퍼오버플로우 취약점등이 있다.
이외 다수의 버그가 픽스되었으며, 새로 추가된 기능 및 프로토콜은 없다.

기능상에는 큰 변화가 없으나, 알려진 버그 및 취약점으로부터 안전하기 위해서는
최신 버전을 사용할 것을 권장한다.

세부적인 릴리즈 내용은 다음 경로에서 확인할 수 있다.

http://www.wireshark.org/docs/relnotes/wireshark-1.6.3.html
http://www.wireshark.org/docs/relnotes/wireshark-1.4.10.html

파일은 다음 URL 에서 할 수 있다.

http://www.wireshark.org/download.html

2011년 8월 30일 화요일

크로스플랫폼 패킷/트래픽 생성기 Ostinato 를 아시나요?

크로스플랫폼 기반의 네트워크 패킷생성 도구인 Ostinato 를 소개한다. 물론 오픈소스이며, 윈도우, 리눅스등 환경에서도 동작한다. 다양한 패킷을 생성할 수 있으며, 전송할 패킷에 대한 전송속도 및 프로토콜을 세부적으로 수정할 수 있다. 사용해보면, 처음에는 어떻게 해야 패킷을 전송할 수 있지 하고 의문을 가졌는데 잠깐만 사용해 보면 금방 익숙해 질 수 있다. 주요 기능은 아래와 같다:

- 윈도우, 리눅스, BSD, 맥 OS X 등에서 동작하는 크로스플랫폼 기반
- 다양한 표준 프로토콜 지원 및 세부적 수정 가능
- 패킷 전송방법 정의 가능
- 패킷 캡쳐 및 캡쳐 내용 뷰어 (단, 캡쳐된 패킷 보기 위해서는 와이어샤크 필요)
- 실시간 패킷 전송 비율 출력등

좀더 세부적인 내용 및 다운로드는 아래 사이트에서 가능하다.
http://code.google.com/p/ostinato/

이 도구를 이용한 패킷생성 도구 제품도 볼 수 있는데, 앞으로 계속 발전이 기대된다. 처음 0.1 버전은 2010년 4월에 공개되었으며, 개발기간은 길지가 않다. (하지만 이에 대한 기획은 2007년 부터 시작되었던것 같다) 일단 다운로드 받아 실행해 보면 크게 레이아웃은 4개 정도로 구분된다.


- 사용할 포트 인터페이스
- 생성할 패킷등을 정의하는 스트림
- 제어 아이콘
- 상태 정보

본인 컴퓨터에서 사용가능한 포트 인터페이스를 지정하고 스트림에서 오른쪽 마우스를 클릭하여 새로운 스트림을 생성한다. 여기서는 'test' 라는 이름으로 생성하였고, 아이콘을 더블 클릭하면 아래와 같은 화면을 볼 수 있다. 처음에는 패킷을 어디서 어떻게 정의해야 할지가 아리송했는데, 바로 이 부분이 정답이었다. 아직은 GUI 화면 구성등에 대한 아쉬움이 있다.



스트림 수정은 4가지 큰 탭으로 나뉘어져 있고, 클릭해 보면 알겠지만 세부적으로 수정이 가능하다.
생성할 패킷 정의가 끝났으면 메인 윈도우에서 Apply 를 하고 Statistics 화면에서 캡쳐를 시작하고, 전송 버튼을 누른다. 그리고, 생성한 패킷이 제대로 되었는지 보고 싶다면 돋보기 모양의 아이콘을 누르면 와이어샤크가 실행된다. 물론, 와이어샤크는 이미 설치되어 있어야 한다.

Ostinato 소개는 여기서 일단 끝내고, 사용방법이 더 궁금하다면 아래 참고 부분을 보기 바란다. 동영상도 있으니 한번 살펴보는 것만으로도 대충 사용방법을 익힐 수 있으리라 생각된다. 

지금까지 패킷인사이드에서 소개한 패킷생성 도구만으로도 여러분들이 하고 싶어하는 기능은 대부분 구현이 되어 있을것으로 생각한다. :-)

[참고]
1. QuickStart Guide

2011년 7월 6일 수요일

와이어샤크 컨퍼런스 2011 발표자료

일전에 한번 소개한 것과 같이 6월13-16 일 와이어샤크 개발자, 사용자 컨퍼런스가 스탠포드 대학에서 열렸다.
한번 참석해 보고 싶은 컨퍼런스 이긴 하나, 미국에서 열리니 참석하는게 쉽지는 않다. 그래도 다행인 것은 이 컨퍼런스 후에, 발표자료등이 공개 되어 참으로 유용하다.

자료는 다음 경로에서 받을 수 있다.

http://sharkfest.wireshark.org/sharkfest.11/index.html

패킷분석이 관심이 있는 사용자라면 관심 주제에 대해서 한번 살펴보면 도움이 될 것이다.
앞으로 내가 여러분들과 함께 공유하고 소개하고 싶은 내용도 많이 있는데,
차차 패킷과 관련한 주제로 여러분들과 함게 하겠다.

2011년 6월 9일 목요일

와이어샤크 1.6.0 버전 공개 - 1.4.X 사용자 분들은 업데이트를 ~

와이어샤크 1.6.0 이 릴리즈 되었다. 그간 보았던 1.5.X 버전은 사라지고, 1.4.X 의 Stable 버전에서 1.6.X Stable 버전이 릴리즈 된 것이다. 이번 버전은 1.6.X 버전대의 첫 번째 릴리즈 이며, 앞으로 Stable 버전인 1.4 버전대를 대체하게 될 것이다.

일단 이번 버전에서는 그간 알려진 버그들이 픽스 되었고, 1.4 와 달리 다음과 같은 새로운 기능 추가 및 변화가 있다.

- 큰 파일(2기가 이상) 지원 기능이 향상
- text2pcap 과 같이 와이어샤크와 Tshark 에서 텍스트 덤프파일 Import
- SSL 세션 키 Export
- 패킷 리스트에서 컬럼 숨기기
- SMB 오브젝트 Export
- dftest, randpkt 맨 페이지 추가 (randpkt 는 패킷 인사이드에 소개되었던 적이 있다)
- 패킷 길이 표시가 기본 컬럼으로 설정
- 그래프 기본 저장 포맷이 PNG 방식으로 변경
- 이외 기타 등등

프로토콜도 새롭게 몇가지 추가 지원하고 있다.

[윈도우 32비트]
http://wiresharkdownloads.riverbed.com/wireshark/win32/wireshark-win32-1.6.0.exe
[윈도우 64 비트]
http://wiresharkdownloads.riverbed.com/wireshark/win64/wireshark-win64-1.6.0.exe

릴리즈 된 세부 정보는 다음 문서를 참고한다.

http://www.wireshark.org/docs/relnotes/wireshark-1.6.0.html

현재 개발버전은 1.6.0rc2 버전이다.

앞으로 패킷인사이드에서도 와이어샤크 기능은 1.6.X 버전에 맞춰서 소개될 것이다. 지금 이 포스팅을 보고 있는 사용자라면, 지금 1.6.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년 4월 21일 목요일

와이어샤크에서 제공하는 랜덤 패킷 생성기 - randpkt

와이어샤크에 포함된 유틸리티 도구중 랜덤 패킷 생성기에 대해서 소개해 볼까 한다. 말 그대로 랜덤한 패킷을 생성하여 테스트해 볼 수 있도록 도와주는 것이다. 패킷 생성기에 대해서는 과거에도 여러개 언급한 적이 있는데, 다음 링크를 참고해 보면 과거 포스팅 글을 볼 수 있다.

http://www.packetinside.com/search/label/패킷생성

일단, 와이어샤크에서 제공하는 패킷생성기의 이름은 randpkt 이다. 과거에 와이어샤크 위키 페이지에서 네트워크 퍼징 테스팅 형태로 소개된 적이 있는데, 보니까 이번 1.5.X 에는 포함되었다. 사용방법은 아주 간단한데, 몇 개 옵션만 설정하면 된다. 일단 실행해 보면 다음과 같은 도움말 화면을 볼 수가 있다.

$ ./randpkt
Usage: randpkt [-b maxbytes] [-c count] [-t type] filename
Default max bytes (per packet) is 5000
Default count is 1000.

Types:
arp Address Resolution Protocol
bgp Border Gateway Protocol
bvlc BACnet Virtual Link Control
dns Domain Name Service
eth Ethernet
fddi Fiber Distributed Data Interface
giop General Inter-ORB Protocol
icmp Internet Control Message Protocol
ip Internet Protocol
llc Logical Link Control
m2m WiMAX M2M Encapsulation Protocol
megaco MEGACO
nbns NetBIOS-over-TCP Name Service
ncp2222 NetWare Core Protocol
sctp Stream Control Transmission Protocol
syslog Syslog message
tds TDS NetLib
tcp Transmission Control Protocol
tr Token-Ring
udp User Datagram Protocol
usb Universal Serial Bus
usb-linux Universal Serial Bus with Linux specific header

아래와 같은 옵션이 가능하다.

-b : 패킷당 최대 바이트 설정
-c : 생성할 패킷 개수
-t : 위에서 보여지는 타입 중에 한개를 지정

기본 패킷당 최대 사이즈는 5000 바이트 이며, 1000개를 생성한다. 아래는 -c 옵션을 통해 2000 개의 패킷을 생성하고 -t 로 UDP 패킷을 생성하겠다고 지정하였다.

$ ./randpkt -c 2000 -t udp testudp_pkt.pcap

testudp_pkt.pcap 의 파일 타입을 보니 패킷파일이 맞다!

$ file testudp_pkt.pcap
testudp_pkt.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 5000)

그리고 아래와 같이 tcpdump 로 읽어 보았더니, 랜덤한 UDP 데이터 이다.

$ tcpdump -n -r testudp_pkt.pcap | more
reading from file testudp_pkt.pcap, link-type EN10MB (Ethernet)
09:00:00.000000 IP 208.21.2.184.21753 > 10.1.1.99.32054: UDP, length 38786
09:00:01.000000 IP 208.21.2.184.26443 > 10.1.1.99.57468: UDP, length 2509
09:00:02.000000 IP 208.21.2.184.9457 > 10.1.1.99.46725: UDP, length 6990
09:00:03.000000 IP 208.21.2.184.34198 > 10.1.1.99.8866: UDP, length 37046
09:00:04.000000 IP 208.21.2.184.1266 > 10.1.1.99.8929: UDP, length 30654
09:00:05.000000 IP 208.21.2.184.344 > 10.1.1.99.52255: UDP, length 6177
09:00:06.000000 IP 208.21.2.184.31183 > 10.1.1.99.31788: UDP, length 45533
09:00:07.000000 IP 208.21.2.184.10209 > 10.1.1.99.12047: UDP, length 22577
09:00:08.000000 IP 208.21.2.184.20021 > 10.1.1.99.22743: UDP, length 40433
09:00:09.000000 IP 208.21.2.184.6049 > 10.1.1.99.51616: UDP, length 30311
09:00:10.000000 IP 208.21.2.184.36432 > 10.1.1.99.18243: UDP, length 52538
09:00:11.000000 IP 208.21.2.184.13544 > 10.1.1.99.60867: UDP, length 57417
09:00:12.000000 IP 208.21.2.184.17578 > 10.1.1.99.17505: UDP, length 14594
09:00:13.000000 IP 208.21.2.184.9524 > 10.1.1.99.55107: UDP, length 46128
09:00:14.000000 IP 208.21.2.184.37164 > 10.1.1.99.28460: UDP, length 49273
09:00:15.000000 IP 208.21.2.184.39487 > 10.1.1.99.24324: UDP, length 25347

건수도 확인해 보니, 옵션에서 지정한 것과 같이 2000 개이다.

$ tcpdump -n -r testudp_pkt.pcap | wc -l
reading from file testudp_pkt.pcap, link-type EN10MB (Ethernet)
2000

사이즈를 보니, 약 5.1 메가 정도가 된다.

$ ls -l testudp_pkt.pcap
-rw-r--r-- 1 rigel rigel 5101896 2011-04-21 21:58 testudp_pkt.pcap

한번 데이터를 살펴보면 Length 가 37046 으로 나온다.

09:00:03.000000 IP 208.21.2.184.34198 > 10.1.1.99.8866: UDP, length 37046
 0x0000:  ffff ffff ffff 0101 0101 0101 0800 4500  ..............E.
 0x0010:  003c c59e 4000 ff11 d7e0 d015 02b8 0a01  .<..@...........
 0x0020:  0163 8596 22a2 90be 05e7 0fad 7889 b8f5  .c..".......x...

아니, 어찌 패킷 사이즈가 이리 큰가? 아까 생성할 때 기본적으로 생성되는 패킷 사이즈 최대는 5000 바이트 인것을 기억할 것이다. 이걸 와이어샤크에서 열어서 살펴보면 UDP 헤더가 bogus header 로 나온다. 그리고 페이로드는 32 바이트이고, 그리하여 UDP 헤더 8 바이트와 페이로드 32바이트를 합치면 40 바이트이다. 하지만, 실제 데이터는 훨씬 크다. 제대로 표현을 못 해 준것 뿐이다.

그런데 몇번 생성하다 보면 출발지와 목적지 IP 가 동일하게 나온다. 왜 그럴까? 이것은 IP 주소등을 랜덤하게 생성하는 기능을 포함하고 있지 않다. randpkt.c 소스 파일을 살펴보면 아래와 같은 부분을 볼 수 있다.

/* Ethernet+IP, indicating UDP */
guint8 pkt_udp[] = {
    0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0x01, 0x01,
    0x01, 0x01, 0x01, 0x01,
    0x08, 0x00,

    0x45, 0x00, 0x00, 0x3c,
    0xc5, 0x9e, 0x40, 0x00,
    0xff, 0x11, 0xd7, 0xe0,
    0xd0, 0x15, 0x02, 0xb8,
    0x0a, 0x01, 0x01, 0x63
};

즉, 위와 같이 UDP 패킷에 대해서 헤더 부분이 하드코딩 되어 있는 것이다. 목적지 IP 인 10.1.1.99 는 0x0a, 0x01, 0x01, 0x63 이 되고, 208.21.2.184 는 0xd0, 0x15, 0x02, 0xb8 이 되는 것이다.

[참고]
1. randpkt - Random Packet Generator
http://www.wireshark.org/docs/man-pages/randpkt.html

2011년 4월 18일 월요일

와이어샤크 1.4.5, 1.5.1 버전 릴리즈

와이어샤크 1.4.X, 개발버전 1.5.X 그리고 1.2.X 버전까지 업그레이드가 되었다. 릴리즈 된지는 몇일 되었는데, 다른 일로 바쁘다 보니 지금에야 공유하게 되었다. 일단 보안 취약점이 보고되어 Fix 가 되었다. 이번 취약점은 DECT, NFS 그리고 X.509 의 프로토콜 파서에서 발생한 것으로 DECT 는 버퍼오버플로우가 가능하여 원격에서 공격코드 실행까지 가능하다. 보안취약점외 알려진 몇 가지 기능들이 수정되었다. 1.4.X 에서는 새로운 기능은 없으며, HTTP, LDAP, MySQL, NFS, sFlow, SSL, TCP 프로토콜이 업데이트 되었다.

1.5.X 는 1.4.X 보다 많은 기능이 업데이트 되었는데, TShark 에서 text2pcap 과 유사하게 텍스트 덤프파일을 Import 할 수 있으며, SMB 오브젝트 Export 등이 가능하다. 더불어, 프로토콜도 많이 업데이트 되었다.

윈도우 32 비트 버전은 다음 링크를 통해서 다운로드가 가능하다.

와이어샤크 1.4.5
와이어샤크 1.2.16
와이어샤크 1.5.1

항상 발전하는 와이어샤크 고마워요~

2011년 4월 4일 월요일

와이어샤크로 USB 디바이스를 모니터링 할 수 있다는 사실!

컴퓨터와 USB 사이의 통신 내용도 패킷을 캡쳐하는 것과 같이 볼 수 없을까? 이에 대한 대답은 '있다' 이다. 그것도 우리가 블로그에서 많이 언급하고 친근한 프로그램 중에 하나인 와이어샤크로 할 수 있다.

자, 그럼 어떻게 USB 트래픽 정보를 볼 수 있을까? 우선 운영체제에서 볼 수 있도록 지원해 주어야 하는데, USB 로우 트래픽 데이터를 패킷 형태로 변환하여 일반적인 네트워크 인터페이스와 같이 인식되어 볼 수 있다. 여기서는 리눅스를 기반으로 하여 설명을 할 것이다. 우선 커널 상에서 DEBUG 파일 시스템이라든지, USB 모니터링 모듈등을 지원해 주어야 한다. 그러므로, 다음과 같은 옵션이 설정되어 커널이 컴파일 되어 있어야 한다.

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_FS=y
CONFIG_USB_MON=y

USBMON 모듈은 커널 2.6.11 이후에 포함되어 있으며, 최근의 배포판 리눅스에서는 크게 다른 설정 없이 아래의 명령어를 사용할 수 있을 것이다. 일단, lsmod 명령어를 통해 usb 관련한 모듈은 무엇이 올라가 있는지 살펴보았다.

# lsmod | grep usb
rt2800usb              28691  0
rt2x00usb               6829  1 rt2800usb
rt2x00lib              21810  2 rt2800usb,rt2x00usb
mac80211              137340  2 rt2x00usb,rt2x00lib
crc_ccitt               1323  2 rt2870sta,rt2800usb
usb_storage            39625  1
scsi_mod              122149  5 usb_storage,sg,sr_mod,sd_mod,libata
usbcore               122034  6 rt2870sta,rt2800usb,rt2x00usb,usb_storage,ehci_hcd
nls_base                6377  11 isofs,udf,hfsplus,hfs,ntfs,jfs,nls_utf8,nls_cp437,vfat,fat,usbcore

usbmon 은 보이지 않는다. usbmon 모듈은 modprobe 를 통해서 쉽게 모듈을 로드할 수 있다.

# modprobe usbmon

모듈을 올린 후 살펴보니 usbmon 모듈이 올라가 있는 것이 보인다.

# lsmod | grep usb
usbmon                 15322  0
rt2800usb              28691  0
rt2x00usb               6829  1 rt2800usb
rt2x00lib              21810  2 rt2800usb,rt2x00usb
mac80211              137340  2 rt2x00usb,rt2x00lib
crc_ccitt               1323  2 rt2870sta,rt2800usb
usb_storage            39625  1
scsi_mod              122149  5 usb_storage,sg,sr_mod,sd_mod,libata
usbcore               122034  7 usbmon,rt2870sta,rt2800usb,rt2x00usb,usb_storage,ehci_hcd
nls_base                6377  11 isofs,udf,hfsplus,hfs,ntfs,jfs,nls_utf8,nls_cp437,vfat,fat,usbcore

그 다음 DebugFS 파일시스템 타입으로 아래와 같이 마운트 해 주면 된다.

# mount -t debugfs / /sys/kernel/debug
# mount
[생략]
/dev/sdb1 on /media/usb0 type vfat (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/ on /sys/kernel/debug type debugfs (rw)

앞서 설명한 것과 같이 네트워크 인터페이스로 인식을 시켜준다고 하였다. 그럼, tshark 의 -D 옵션을 통해 사용가능한 인터페이스 리스트를 확인할 수 있다.

# tshark -D
1. eth0
2. usbmon1 (USB bus number 1)
3. usbmon2 (USB bus number 2)
4. any (Pseudo-device that captures on all interfaces)
5. lo

기존에는 보이지 않던 usbmon1 과 usbmon2 이 보인다. 그렇다 그럼 이제 이 인터페이스로만 지정해서 패킷 덤프를 해 보면 USB 트래픽을 볼 수 있다는 것이된다. 그런데, 2번과 3번중 어떤것이 올바른 인터페이스일까? 그냥 쉽게는 2번,3번 한번씩 패킷덤프도 해 볼 수 있지만, lsusb 명령어로 usb 정보를 들여다 보자.

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 026: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub

위 화면은 USB 를 연결하기 전이고 다음은 USB 를 연결한 후의 화면이다. 보는 것과 같이 Bus 002 에 새로운 디바이스가 잡혀있는것을 볼 수 있다.

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 026: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 028: ID 090c:1000 Feiya Technology Corp. Flash Drive

그러면, USB 버스 2번이니 위에서 살펴본 인터페이스중 3번인 usbmon2 를 관찰하면 되겠다는 것을 알 수 있다. lsusb 외 usb-devices 명령어를 이용해서도 확인할 수 있다.

# usb-devices
T:  Bus=02 Lev=03 Prnt=26 Port=02 Cnt=01 Dev#= 28 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=090c ProdID=1000 Rev=11.00
S:  Manufacturer=LG Electronics
S:  Product=XTICK
S:  SerialNumber=AA04012700015188
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

tshark 를 통해서 USB 패킷 데이터를 덤프해 보자. -i 옵션을 통해 인터페이스 번호를 지정해 주었다. 와, USB 트래픽 정보가 잡힌다. 참고로, 와이어샤크 1.2.X 버전 이상을 사용하여야 한다.

# tshark -i 3
Running as user "root" and group "root". This could be dangerous.
Capturing on USB bus number 2
  0.000000         host -> 28.0         USB GET DESCRIPTOR Request DEVICE
  0.000407         28.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000422         host -> 26.0         USB GET DESCRIPTOR Request DEVICE
  0.000575         26.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000615         host -> 2.0          USB GET DESCRIPTOR Request DEVICE
  0.000658          2.0 -> host         USB GET DESCRIPTOR Response DEVICE
  0.000677         host -> 1.0          USB GET DESCRIPTOR Request DEVICE
  0.000677          1.0 -> host         USB GET DESCRIPTOR Response DEVICE

GUI 버전의 와이어샤크에서는 어떻게 나올까? 다음 그림과 같이 GUI 화면에서도 문제없이 깔끔하게 트래픽 정보가 출력된다.  데이터 영역부분도 보인다.



그러면, 여기서 살짝 의문이 생긴다. 와이어샤크로만 데이터를 덤프할 수 있는 것인가 ? 그렇지는 않다. 네트워크 인터페이스로 잡힌 것이기 때문에 tcpdump 프로그램을 통해서도 볼 수 있다. USB 트래픽 데이터를 파싱해서 보여줄 수 있는 것이면 된다.

# tcpdump -i 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on usbmon2, link-type USB_LINUX_MMAPPED (USB with padded Linux header), capture size 65535 bytes
09:11:09.835197 CONTROL SUBMIT to 2:28:0
09:11:09.835623 CONTROL COMPLETE from 2:28:0
09:11:09.835647 CONTROL SUBMIT to 2:26:0
09:11:09.835720 CONTROL COMPLETE from 2:26:0
09:11:09.835740 CONTROL SUBMIT to 2:2:0
09:11:09.835845 CONTROL COMPLETE from 2:2:0
09:11:09.835859 CONTROL SUBMIT to 2:1:0
09:11:09.835859 CONTROL COMPLETE from 2:1:0
09:11:12.002810 BULK SUBMIT to 2:28:2
09:11:12.002955 BULK COMPLETE from 2:28:2
09:11:12.002963 BULK SUBMIT to 2:28:1

이 외에도 더 로우 방법으로 확인할 수 있는 방법이 있는데, 직접 디버그파일 시스템을 cat 를 통해 볼 수도 있다. 아래와 같이 말이다.

# cat /sys/kernel/debug/usb/usbmon/2u
ffff88021d618540 1982035431 S Bo:2:028:2 -115 31 = 55534243 a8010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1982035468 C Bo:2:028:2 0 31 >
ffff88021d618540 1982035549 S Bi:2:028:1 -115 13 <
ffff88021d618540 1982035856 C Bi:2:028:1 0 13 = 55534253 a8010000 00000000 00
ffff88021d618540 1982035895 S Bo:2:028:2 -115 31 = 55534243 a9010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1982035963 C Bo:2:028:2 0 31 >
ffff88021d618540 1982035969 S Bi:2:028:1 -115 13 <
ffff88021d618540 1982036213 C Bi:2:028:1 0 13 = 55534253 a9010000 00000000 00
ffff88021d618540 1984037715 S Bo:2:028:2 -115 31 = 55534243 aa010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1984037787 C Bo:2:028:2 0 31 >
ffff88021d618540 1984037793 S Bi:2:028:1 -115 13 <
ffff88021d618540 1984038035 C Bi:2:028:1 0 13 = 55534253 aa010000 00000000 00
ffff88021d618540 1984038056 S Bo:2:028:2 -115 31 = 55534243 ab010000 00000000 00000600 00000000 00000000 00000000 000000
ffff88021d618540 1984038192 C Bo:2:028:2 0 31 >
ffff88021d618540 1984038195 S Bi:2:028:1 -115 13 <
ffff88021d618540 1984038410 C Bi:2:028:1 0 13 = 55534253 ab010000 00000000 00

USB 트래픽을 관찰할 일이 있다면, 와이어샤크를 통한 이 방법이 좋은 방법중에 하나가 될 것이다.  윈도우에서는 와이어샤크를 통해 바로 USB  트래픽을 관찰할 수 없다. 리눅스의 가상 머신에 윈도우를 올려서 사용될 수 있는 방법이 아래 [참고] 를 보면 소개되어 있긴 하다.

추후 시간적 여유가 된다면 윈도우 기반에서도 테스트 해 본 후 결과를 공유하도록 하겠다.

[참고]
1. 와이어샤크 USB 캡쳐
http://wiki.wireshark.org/CaptureSetup/USB

2011년 4월 1일 금요일

와이어샤크의 또 다른 유틸리티, Rawshark 의 사용을 알아보자

와이어샤크를 설치하면 같이 배포되는 프로그램으로 Rawshark 가 있다. 주로 GUI 기반에서 사용한다면, wireshark 만을 실행해서 사용하기 때문 다른 유틸리티는 그냥 지나치는 경우가 많다.
Rawshark 이름만으로 추정해 보면, 로우 데이터를 본다는 의미로 추정된다. 이름과 같이 그 의미가 맞다. 로우 libpcap 데이터를 덤프 및 간단한 분석을 수행할 수 있는 기능을 가지고 있다.

우선, Rawshark 의 도움말을 살펴보면 아래와 같은 옵션 사용이 가능하다:

# rawshark -h
Rawshark 1.2.11
Dump and analyze network traffic.
See http://www.wireshark.org for more information.

Copyright 1998-2010 Gerald Combs <gerald@wireshark.org> and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Usage: rawshark [options] ...

Input file:
  -r <infile>              set the pipe or file name to read from

Processing:
  -R <read filter>         packet filter in Wireshark display filter syntax
  -F <field>               field to display
  -s                       skip PCAP header on input
  -n                       disable all name resolution (def: all enabled)
  -N <name resolve flags>  enable specific name resolution(s): "mntC"
  -d <encap:dlt>|<proto:protoname>
                           packet encapsulation or protocol
Output:
  -S                       format string for fields (%D - name, %S - stringval, %N numval)
  -t ad|a|r|d|dd|e         output format of time stamps (def: r: rel. to first)
  -l                       flush output after each packet

Miscellaneous:
  -h                       display this help and exit
  -v                       display version info and exit
  -o <name>:<value> ...    override preference setting

Rawshark 는 Tshark 와 달리 입력되는 데이터에 대한 정의가 필요하다. 그래서 무작정 실행해 보면 아래와 같은 로그를 보게된다.

# cat test.pcap | rawshark

rawshark: No valid payload dissector specified.


일반적인 형태의 사용과 약간 다르다 보니 혼돈이 오기도 하는데, 정상적으로 실행하기 위해서는 -d 와 -r 옵션을 사용해서 지정해 주어야 한다. 그리고 출력을 원하는 데이터가 있다면 -F 옵션으로 지정해 주어야 한다. Rawshark 는 기본적으로 다음과 같은 입력 레코드가 들어오는 것으로 판단한다. 많이 보던 레코드 형태일텐데, libpcap 에서 사용하는 pcap_pkthdr 구조와 데이터이다.

    struct rawshark_rec_s {
        uint32_t ts_sec;      /* Time stamp (seconds) */
        uint32_t ts_usec;     /* Time stamp (microseconds) */
        uint32_t caplen;      /* Length of the packet buffer */
        uint32_t len;         /* "On the wire" length of the packet */
        uint8_t data[caplen]; /* Packet data */
    };

libpcap 구조 관련해서는 다음 글을 읽어 보면 도움이 된다.

1) PCAP 파일을 파헤쳐 보자 - 그 첫번째 이야기
2) PCAP 파일을 파헤쳐 보자 - 그 두번째 이야기


일단 실행해보면 다음과 같은 형태로 출력이 가능하다.

# cat test.pcap | rawshark -d encap:EN10MB -r- -s -F ip.dst -F http.host
0 FT_IPv4 BASE_NONE - 1 FT_STRING BASE_NONE -
1 1="[FF02::C" -
2 -
3 -
4 0="168.126.63.1" -
5 0="192.168.0.240" -
6 0="168.126.63.1" -
7 0="192.168.0.240" -
8 0="72.14.213.99" -
9 0="192.168.0.240" -
10 0="72.14.213.99" -
11 1="www.goog" 0="72.14.213.99" -
12 0="192.168.0.240" -

일반적인 tcpdump 나 tshark 와 달리 실행방법이 약간은 복잡해 보인다. rawshark 는 입력을 스트림으로 받아 들이기 때문에 앞에서, cat 을 이용했다. 즉, test.pcap 의 내용이 cat 을 통해 읽어 들이고 이 출력을 rawshark 로 넘긴 것이다. 그러므로 -r 옵션으로 - 를 사용하였다. 앞서 rawshark 를 제대로 사용하기 위해서는 -d 와 -r 을 옵션을 사용한다고 하였는데, -d 를 통해 이 데이터가 어떤 것인지 지정해 주었다.  앞에 encap 이라고 되어 있는것은 캡슐화를 뜻하는 것으로 뒤에 EN10MB 는 이더넷 데이터를 뜻한다. 즉, 이 패킷 데이터는 우리가 흔히 사용하는 이더넷 데이터 이라는 것을 지정해 준 것이다. 이런 데이터로는 PPP, FDDI, IEEE802_11 등이 있다. 데이터 타입은 아래 참고의 URL 을 살펴보기 바란다.

여기서 캡슐화라는 것이 나왔는데, 이 캡슐화에 대한 설명은 이미 앞서 포스팅을 해 놓았으므로 읽어보길 바란다.

[링크] 패킷을 보다 자주 접하는 캡슐화(Encapsulation)는 무엇이지?

그리고 -s 는 입력으로 표준 pcap 파일임을 뜻하고, -F 옵션으로 출력할 내용을 지정할 수 있는데, 와이어샤크에서 사용하던 필터를 그대로 사용하면 되므로 어렵지 않게 쓸수 있다. 출력 되어 나오는 것을 보면 아주 심플하다. 다양한 분석기능이 갖춰진 wireshark 와는 다르게 말이다. 말 그대로 로우 데이터를 덤프해서 분석하기 위한 용도이므로 이점은 기억해 두자.  맨앞에 숫자는 패킷의 넘버를 뜻하는 것이고, 그 뒤로 숫자 1 또는 0 이 보인다. 출력 필터로 지정한 것에 대한 필드의 매치 여부를 나타내는 것으로 1이면 매치가 되었다는 것이다. 11번을 보면 HTTP 호스트 정보가 매칭되어서 1 로 표시된것을 볼 수 있다.

마지막으로 앞서 cat 을 통해 출력 시켰는데, 이외에도 tcpdump 를 통해서도 할 수 있고, wireshark 를 통해서도 할 수 있다. 출력을 rawshark 로 넘겨줄수만 있으면 된다.

# tcpdump -r test.pcap -n -w - | rawshark -d encap:EN10MB -r- -s -F ip.dst -F http.host

다음은 eth1 인터페이스를 실시간으로 rawshark 로 넘기는 것이다. 이때 rawshark 옵션으로 -l 옵션을 추가로 사용하였다. 바로바로 실시간으로 데이터가 넘어오기 때문에 바로 Flush 시키도록 한 것이다.

# tcpdump -i eth1 -s 1514 -w - | rawshark -d encap:EN10MB -l -r- -s -F ip.dst -F http.host

[참고]
1. Libpcap 데이터 링크레이어 타입
http://www.tcpdump.org/pcap3_man.html
2. Rawshark 공식 메뉴얼
http://www.wireshark.org/docs/man-pages/rawshark.html
3. 패킷인사이드 libpcap 관련 태그 보기
http://www.packetinside.com/search/label/libpcap

2011년 3월 18일 금요일

HTTP 패킷 정보에서 호스트별 통계정보를 쉽게 뽑아보기

전달받은 패킷 파일을 열어보았더니, 대부분이 HTTP 트래픽이다. 그런데, 이 데이터는 특정 사이트 몇 군데를 대상으로 한 DDoS 트래픽으로 추정된다.  자 , 이렇게 가정해 보고 각 사이트별로 트래픽이 얼마나 발생되었는지 데이터를 추출해 본다면 어떻게 해야 할까?

지금 여러분들의 머리속에 딱 떠오르는 방법은 무엇인가? HTTP 프로토콜의 호스트 필드 헤더가 있으니 이걸로 필터를 걸어 일일이 다 추출해야 하나? 아니면 프로그램을 간단히 작성해야 하는가. 방법은 여러가지가 있을 것 같은데 막상 하려니 정리가 잘 되지 않는다면 와이어샤크에서 제공하는 통계 정보를 이용해 쉽게 얻을 수 있다.

앞서 여러 포스팅에서도 와이어샤크의 Statistics 의 몇 가지 기능에 대해서 소개한 적이 있다. 이럴때 가장 쉽고 빠르게 통계 데이터를 알아낼 수 있는 방법은 Statistics -> HTTP -> Requests... 메뉴를 이용하면 된다.  선택하게 되면 필터를 걸수 있는 화면이 나오는데, 전체를 대상으로 할 것이므로 그냥 'Create Stat' 를 바로 누르면 아래와 같은 정보를 볼 수 있다.


HTTP 호스트별로 구분하여 전체 Count 가 얼마이며, 전체 패킷중 몇 % 를 차지하고 있는지도 보여준다. 급하게 필요하여 사용하려고 하면 떠오르지도 않고, 빨리 호스트별로 트래픽 정보를 산출하고자 할때는 이만한게 없다. 

기본기능만 잘 알아두어도 패킷분석의 반은 끝난다. 더불어, 패킷인사이드 내용만 머리속에 잘 기억해 두어도 나중에 언젠가는 유용하게 사용될 것이다.   :-)

From Rigel

2011년 3월 15일 화요일

와이어샤크 개발자/사용자 컨퍼런스 - SharkFest '11

패킷인사이드에서는 소개한 적이 없는것 같은데, 와이어샤크 개발자, 사용자 컨퍼런스가 있다. 이름하여 SharkFest 이다. 이번 2011 년에도 어김없이 열리며, 장소는 미국의 스탠포드 대학으로 2011년 6월13-16 일 까지 열린다. 미처 소개한다는 것이 계속 미루다 보니 3월15일이 사전등록 마감이다. 지금이 한국시간으로 3월15일이니, 등록하실 분들은 빨리 서둘러 주시길.

3일동안의 컨퍼런스 비용은 $695 이며, 사전등록하면 $595 이다.

컨퍼런스 등록과 관련한 자세한 내용은 다음 사이트를 참고하면 된다 :

http://sharkfest.wireshark.org/

패킷분석과 와이어샤크에 관한 많은 내용을 얻을 수 있는 컨퍼런스로 생각되며,
개인적으로도 기회가 주어지면 한번 가보고 싶다. 과거 컨퍼런스 자료도 살펴볼 수 있는데,
패킷 분석과 관련한 좋은 내용이 참 많다. 혹시 참석해 보셨거나, 참석할 예정이라면 패킷인사이드에 살짝 공유 부탁드려요 ~

2011년 3월 2일 수요일

와이어샤크 1.4.4 , 1.2.15 버전 릴리즈

와이어샤크 최신버전인 1.4.4 와 1.2.15 가 릴리즈 되었다.

1.4.4 와 1.2.15 에서 몇가지 보고된 취약점이 Fix 되었다.  조작된 pcap-ng 파일을 읽는
과정에서 발생되는 문제점과 pcap-ng 의 큰 패킷 길이등에 의한 취약점이다.
이외 몇 가지 메모리 관련 버그 및 기타 사항등이 업데이트 되었으며,
세부적인 내용은 다음 릴리즈 노트를 참고하면 된다.

[와이어샤크 1.4.4 릴리즈 노트]
http://www.wireshark.org/docs/relnotes/wireshark-1.4.4.html
[와이어샤크 1.2.15 릴리즈 노트]
http://www.wireshark.org/docs/relnotes/wireshark-1.2.15.html

다운로드는 아래 경로에서 할 수 있다.

http://www.wireshark.org/download.html

2011년 1월 27일 목요일

와이어샤크 1.5.0 개발버전 공개


와이어샤크 1.5.0 개발 버전이 공개되었다. 1.4 에 비해 새로운 기능은 다음과 같다 :

- text2pcap 과 비슷한 텍스트 덤프파일을 Import 할 수 있음
- 패킷리스트에서 컬럼을 숨길 수 있음
- SMB 오브젝트를 익스포트 할 수 있음
- TShark 에서 iSCSI 응답 시간을 출력할 수 있음
- 캡쳐 옵션화면에서 컴파일된 BPF 코드 캡쳐 필터를 출력
- TCP 와 UDP 세션을 Ctrl+, Ctrl+. 로 뒤 앞으로 이동할 수 있음
- 패킷 길이가 기본 컬럼으로 포함됨
- DCE/RPC, SMB 와 같은 다양한 파서에서 적합한 UTF-16 문자열을 표시할 수 있음
- 그래프 화면에서 PNG 이미지로 저장할 수 있음

화면을 보면, 메뉴중에 Internals 라는 새로운 것이 보인다. Dissector tables 라는 메뉴를 클릭해 보면, Dissector 에 대해서 정보를 확인해 볼 수 있다.

이외 새롭게 지원하는 프로토콜은 아래와 같다

ADwin, ADwin-Config, Apache Etch, Aruba PAPI, Constrained Application Protocol (COAP), Digium TDMoE, Ether-S-I/O, FastCGI, Fibre Channel over InfiniBand (FCoIB), Gopher, Gigamon GMHDR, IDMP, Infiniband Socket Direct Protocol (SDP), JSON, LISP Data, MikroTik MAC-Telnet, Mongo Wire Protocol, Network Monitor 802.11 radio header, OPC UA ExtensionObjects, PPI-GEOLOCATION-GPS, ReLOAD, ReLOAD Framing, SAMETIME, SCoP, SGSAP, Tektronix Teklink, WAI authentication, Wi-Fi P2P (Wi-Fi Direct)