狠狠撸
Submit Search
LibPGEN 1st Step Guide
?
0 likes
?
738 views
slankdev
Follow
libpgen version 1.0 の簡単な使用方法を紹介しています。
Read less
Read more
1 of 41
Download now
Download to read offline
More Related Content
LibPGEN 1st Step Guide
1.
LibPGEN ?version ?1.0 1st
ステップガイド Slank ? ?[@slankdev, ?http://slankdev.net] libpgen.org 1
2.
Who ?is ?Slank
?? oパケットが好きな大学生 oLibPGEN開発者 oIPA ?Security ?Camp ?2015 ?卒業生 o学生の間はパケット屋さんになりたいです。 libpgen.org 2
3.
What ?Is ?LibPGEN
?? ?http://libpgen.org ?パケット解析を簡単に行うためのライブラリ ?C++で開発している ?Linux, ?BSDで動作します(もちろんOSXも) ?ネットワークインターフェースを使わないなら windowsでも動くはず。。(まだ試していない) ?プロトコル対応数はまだ少ない ?その代わりに拡張しやすい設計を libpgen.org 3
4.
Agenda 1. LibPGENの使用例 2. 設計について 3.
LibPGENの機能紹介 libpgen.org 4
5.
libpgen.org 5
6.
Sample ?Codes ?with
?LibPGEN ?詳細な使用方法を説明する前に簡単なサンプ ルコードで感じ取ってください。。。 libpgen.org 6
7.
Easy ?Packet ?Capture ?簡単なパケットキャプチャプログラム ?ネットワークインターフェースから受信したパケッ トを簡単にLibPGENで解析します ?プログラムの流れ 1.
パケットを受信待機 2. 受信したら情報表示 libpgen.org 7
8.
Sample ?Code libpgen.org 8
9.
Execution ?Result libpgen.org 9
10.
ARP ?Scan ?Program ?ARPパケットを送ってIPアドレスからMACアドレス を調べるプログラム ?プログラムの流れ 1.
ARPパケット作成、送信 2. パケット受信待機 3. 送信先からのARPパケットならそのパケットを表示 libpgen.org 10
11.
Sample ?Code libpgen.org 11
12.
Execution ?Result libpgen.org 12
13.
Could ?You ?Feel
?? ?なんとなくわかってもらえればとても幸せです。 ?ここからは詳しくLibPGENの構造と使いかたを説 明していきます。 libpgen.org 13
14.
libpgen.org 14
15.
LibPGENのアーキテクチャ libpgen.org 15
16.
3 ?Big ?Components ?LibPGENは大きく3つに分けられる。 ?
PGEN-?‐IO ? 入出力関数群 ? PGEN-?‐Core アドレスやパケットのバイナリを解析 ? PGEN-?‐Module PGEN-?‐IO,PGEN-?‐Coreを使ったモジュール群 libpgen.org 16
17.
PGEN-?‐IO ?バイナリの入出力用の関数群 ?入出力先はネットワークインターフェース、pcap ファイルに対応しています。(NGは現在実装中) ?ライブラリのコアの開発に参加しない場合はほと んど意識しなくて構わないので、詳しい説明は公 式ドキュメントを参考にしてください ?http://libpgen.org/documentation/pgen-?‐io ?よく使う関数だけ紹介します libpgen.org 17
18.
pgen_open() ?in ?PGEN-?‐IO ?pgen_t*
?pgen_open(const ?char* ?if, ?void* ?nouse) ?ネットワークインターフェースを指定してパケット の送受信用のディスクリプタを確保 ?第二引数は予約用でまだ使わない ?成功すると、ディスクリプタのポインタ、失敗する とNULLを返す libpgen.org 18
19.
pgen_open_offline() ?in ?PGEN-?‐IO ?pgen_t*
?pgen_open_offline( const ?char* ?f, ?int mode) ?pgen_open()のpcapファイル版。 ?pcapファイルの読み書き用のディスクリプタを確 保 ?第一引数にファイル名、第二引数にモードを指 定する。 ?成功すればディスクリプタのポインタ、失敗すれ はNULLを返す libpgen.org 19
20.
pgen_close() ?in ?PGEN-?‐IO ?void
?pgen_close(pgen_t* ?handle) ?確保したディスクリプタを開放する。 ?マナーとして libpgen.org 20
21.
pgen_perror() ?in ?PGEN-?‐IO ?void
?pgen_perror(const ?char* ?msg) ?標準ライブラリ関数のperror関数のLibPGEN版 ?内部でエラー番号を持っているので、それを利 用して情報出力する。 libpgen.org 21
22.
That’s ?a ?PGEN-?‐IO ?こんな感じの基本関数から、細かいとこまで手を 伸ばす関数までいろいろあります。 ?さらに詳しい情報は公式ドキュメント ?http://libpgen.org/documentation/pgen-?‐io/ libpgen.org
22
23.
PGEN-?‐Core ?最も重要で機能豊富なコンポーネント ?パケット解析を担当 ?PGEN-?‐PacketとPGEN-?‐Addressの二つを子に持つ コンポーネント ?さらに詳しい情報は公式ドキュメントを参照 ?http://libpgen.org/documentation/pgen-?‐core/ libpgen.org 23
24.
PGEN-?‐Address ?in ?PGEN-?‐Core ?アドレス操作を簡単に行えるようにするクラス群 ?以降のPGEN-?‐Packetでさんざん出てくるので、こ こでの説明は省略します ?簡単に説明すると、アドレス操作をNULLポインタ 文字列で操作できるようにしました。 libpgen.org
24
25.
PGEN-?‐Packet ?in ?PGEN-?‐Core ?パケット解析を行うLibPGENの核 ?プロトコルごとに様々なクラスがたくさんある ?標準でサポートしているのは Ethernet,
?ARP, ?IP, ?ICMP, ?TCP, ?UDP (2015/12/07現在) libpgen.org 25
26.
PGEN-?‐Packet ?in ?PEGN-?‐Core libpgen.org
26 ?クラスの継承関係は以下のようになっている。
27.
PGEN-?‐Packet ?in ?PGEN-?‐Core ?それぞれのクラスは親クラスのメンバも保持する ?ex)
?pgen_ipクラスは pgen_packet, ?pgen_ethのメンバも保持する libpgen.org 27
28.
PGEN-?‐Packet ?in ?PGEN-?‐Core ?よく使うメンバ関数 ?
send(pgen_t* ?handle) ?, send_dev(const ?char* ?if) パケット送信 ? cast(const ?void* ?buf, ?int buflen) バイナリ解析 ? hex(), ?info(), ?summary(), ?help() 情報出力 ? clear() 要素値リセット ?たまに使うメンバ関数 ? byte() ? ? ? ? パケット先頭ポインタ ? length() パケット長 libpgen.org 28
29.
send(), ?send_dev() ?in
?PGEN-?‐Packet ?void ?send(pgen_t* ?handle) ? PGENディスクリプタを指定してパケットを送信 ? 引数のディスクリプタはpgen_open()やpgen_open_offline()などで 確保したものを指定する。 ?void ?send(const ?char* ?if) ? ネットワークインターフェースを指定してパケットを送信 ? 引数にはインターフェース名を指定(ex. ?“wlan0”など) libpgen.org 29
30.
cast() ?in ?PGEN-?‐Packet ?void
?cast(const ?void* ?buf, ?int buflen) ? バイナリを解析してメンバ変数に格納する ? buf, ?buflenにはバイナリの先頭ポインタ、バイナリ長を指定する。 libpgen.org 30
31.
hex(), ?info(), ?summary(),
?help() in ?PGEN-?‐Packet ?情報出力用関数 ?void ?hex() ? パケットのhexdumpを出力 ?void ?info() ? 詳細情報を出力 ?void ?summary() ? 簡易情報を一行で出力 ?void ?help() ? メンバ変数の使い方を出力 libpgen.org 31
32.
Protocols ?of ?PGEN-?‐Packet ?PGEN-?‐Packetは標準でEthernet,
?ARP, ?IP, ?ICMP, ? TCP, ?UDPをサポート ?プロトコルごとのクラスの簡単な使い方は後述 libpgen.org 32
33.
PGEN-?‐Module ?PGEN-?‐IO, ?PGEN-?‐Coreを使って作られたモジュー ル群 ?現在安定版なのはsniff()のみ ?sniff()はパケット受信で使用 libpgen.org 33
34.
sniff() ?in ?PGEN-?‐Module ?void
?sniff(pgen_t* ?handle, ? bool ?(*callback)(const ?u_char* ?buf, ?int buflen)) ?handleで指定されたインターフェースからパケッ トを一つ受信し、そのパケットを第二引数の callback()に渡す。 ?callback()がtrueを返す間パケットを受信し続ける libpgen.org 34
35.
libpgen.org 35
36.
For ?Analyze ?Protocols ?先ほど飛ばした
PGEN-?‐Packetの派生クラスにつ いて説明します ?作者お気に入りのプロトコルのクラスをいくつか 紹介します libpgen.org 36
37.
pgen_arp class ?お気に入りプロトコル ?メンバ変数 ? ETH.src ?
ETH.dst ? ETH.type ? ARP.operation ? ARP.hwsrc ? ARP.psrc ? ARP.hwdst ? ARP.pdst libpgen.org 37
38.
pgen_tcp class ? メンバ変数 ?
ETH…(省略) ? IP.hlen ? IP.tos ? IP.tot_len ? IP.id ? IP.frag_off ? IP.ttl ? IP.protocol ? IP.src ? IP.dst libpgen.org 38 ? TCP.src ? TCP.dst ? TCP.seq ? TCP.ack ? TCP.doff ? TCP.flags.fin ? TCP.flags.syn ? TCP.flags.rst ? TCP.flags.psh ? TCP.fgags.ack ? TCP.flags.urg ? TCP.window
39.
That’s ?a ?PGEN-?‐Packet ?このようにして、プロトコルごとのパケットを詳しく 簡単に解析します。 ?他のプロトコルに関する情報は公式ドキュメント を参照してください。 ?http://libpgen.org/pgen-?‐core/packet-?‐class libpgen.org
39
40.
How ?Do ?You
?Think ?? ?これで基本的な使用方法は説明しました。 ?LibPGENの構造、使い方の基本は以上です ?ぜひ使って文句をたくさん ?これで楽しくパケット解析をするだけ…… libpgen.org 40
41.
What ?is ?Next… ?今回はLibPGENの簡単な使い方を紹介しました。 ?次回はLibPGENの「拡張しやすい設計」 について紹介します ?ライブラリの詳しい情報は http://libpgen.orgを参照してください libpgen.org
41
Download