Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
slankdev
6,160 views
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会の発表資料です。 拡張可能なパケット解析ライブラリの開発、と言うテーマでLibPGENについて発表しました。
Engineering
◦
Read more
2
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 72
2
/ 72
3
/ 72
4
/ 72
5
/ 72
6
/ 72
7
/ 72
8
/ 72
9
/ 72
10
/ 72
11
/ 72
12
/ 72
13
/ 72
14
/ 72
15
/ 72
16
/ 72
17
/ 72
18
/ 72
19
/ 72
20
/ 72
21
/ 72
22
/ 72
23
/ 72
24
/ 72
25
/ 72
26
/ 72
27
/ 72
28
/ 72
29
/ 72
30
/ 72
31
/ 72
32
/ 72
33
/ 72
34
/ 72
35
/ 72
36
/ 72
37
/ 72
38
/ 72
39
/ 72
40
/ 72
41
/ 72
42
/ 72
43
/ 72
44
/ 72
45
/ 72
46
/ 72
47
/ 72
48
/ 72
49
/ 72
50
/ 72
51
/ 72
52
/ 72
53
/ 72
54
/ 72
55
/ 72
56
/ 72
57
/ 72
58
/ 72
59
/ 72
60
/ 72
61
/ 72
62
/ 72
63
/ 72
64
/ 72
65
/ 72
66
/ 72
67
/ 72
68
/ 72
69
/ 72
70
/ 72
71
/ 72
72
/ 72
More Related Content
PPTX
Seurity Camp Award 2016
by
slankdev
PDF
OSC2016 Tokyo/Spring セミナー資料
by
slankdev
PDF
LibPGEN 1st Step Guide
by
slankdev
PDF
OSC 2016 Hokkaido セミナー資料
by
slankdev
PDF
OSC2016 Tokyo/Spring LT
by
slankdev
PPTX
サイボウズ・ラボユース中間報告会
by
slankdev
PDF
Seccamp 2016 チューター成果報告
by
slankdev
PDF
libpgenでパケット操作
by
slankdev
Seurity Camp Award 2016
by
slankdev
OSC2016 Tokyo/Spring セミナー資料
by
slankdev
LibPGEN 1st Step Guide
by
slankdev
OSC 2016 Hokkaido セミナー資料
by
slankdev
OSC2016 Tokyo/Spring LT
by
slankdev
サイボウズ・ラボユース中間報告会
by
slankdev
Seccamp 2016 チューター成果報告
by
slankdev
libpgenでパケット操作
by
slankdev
What's hot
PDF
OSC2017Hokkaido
by
slankdev
PDF
Ryu+Lagopusで OpenFlowの動きを見てみよう
by
Masaru Oki
PDF
Kernel vm13lt
by
slankdev
PPT
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
by
hiroshi oshiba
PDF
CSRを自動生成する!
by
Taichi Ishitani
PDF
Lagopus performance
by
Masaru Oki
PDF
Open stack+lagopus できるかな
by
Masaru Oki
PDF
Lagopus どれだけ速いのか
by
Masaru Oki
PDF
Open flow tunnel extension on lagopus vswitch
by
Masaru Oki
PPT
20090124shibuya Trac
by
Kazuya Hirobe
PDF
Nltk for biginer
by
Atsushi Hayakawa
PPTX
RgGen ご紹介
by
Taichi Ishitani
PDF
LagopusでPPPoEを使えるか考えてみた件
by
Masaru Oki
ODP
圧縮・伸張・アーカイブサポートの現状と課題
by
Hiroshi Miura
PDF
Trend Micro CTF Asia Pacific & Japan -defensive100-
by
boropon
PPTX
SECCON2014 crypt200
by
boropon
PDF
Pcapngを読んでみる
by
Yagi Shinnosuke
PDF
hpingで作るパケット
by
Takaaki Hoyo
PPTX
Nmap 9つの真実
by
abend_cve_9999_0001
PDF
今さら聞けない Linux コマンドラインツールテクニック その1 rev. 2
by
Fuminobu Takeyama
OSC2017Hokkaido
by
slankdev
Ryu+Lagopusで OpenFlowの動きを見てみよう
by
Masaru Oki
Kernel vm13lt
by
slankdev
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
by
hiroshi oshiba
CSRを自動生成する!
by
Taichi Ishitani
Lagopus performance
by
Masaru Oki
Open stack+lagopus できるかな
by
Masaru Oki
Lagopus どれだけ速いのか
by
Masaru Oki
Open flow tunnel extension on lagopus vswitch
by
Masaru Oki
20090124shibuya Trac
by
Kazuya Hirobe
Nltk for biginer
by
Atsushi Hayakawa
RgGen ご紹介
by
Taichi Ishitani
LagopusでPPPoEを使えるか考えてみた件
by
Masaru Oki
圧縮・伸張・アーカイブサポートの現状と課題
by
Hiroshi Miura
Trend Micro CTF Asia Pacific & Japan -defensive100-
by
boropon
SECCON2014 crypt200
by
boropon
Pcapngを読んでみる
by
Yagi Shinnosuke
hpingで作るパケット
by
Takaaki Hoyo
Nmap 9つの真実
by
abend_cve_9999_0001
今さら聞けない Linux コマンドラインツールテクニック その1 rev. 2
by
Fuminobu Takeyama
Viewers also liked
PPTX
サイボウズ・ラボ成果発表会
by
Komei Kamiya
PDF
いでよ、電卓!
by
Masato Kinugawa
PDF
サイボウズ・ラボユース成果発表会資料
by
masahiro13
PDF
Kubernetes in 30 minutes (2017/03/10)
by
lestrrat
PDF
High Performance Networking with DPDK & Multi/Many Core
by
slankdev
PPTX
中間成果報告会 発表資料
by
sn_monochr
PDF
ラボユース最終成果報告会(Web公開版)
by
Shinichi Awamoto
PDF
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
by
kotaro_hirayama
PDF
世界最速の正規表現JITエンジンの実装
by
Ryoma Sin'ya
PPTX
kintoneフロントエンド開発 モダン化への道
by
Yusuke Amano
PDF
DPDKを用いたネットワークスタック,高性能通信基盤開発
by
slankdev
PDF
Jenkins 再入門
by
Jumpei Miyata
KEY
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
by
sn_monochr
PDF
Sdnj2013
by
Koichi Ise
PDF
Tcj2013用
by
Koichi Ise
PDF
Info talk2013
by
Koichi Ise
PDF
2進数フレンズ
by
shugo manabe
PDF
IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )
by
Akira Kanaoka
PDF
DAVIX - Data Analysis and Visualization Linux
by
Raffael Marty
PDF
Mki2014公開用
by
Koichi Ise
サイボウズ・ラボ成果発表会
by
Komei Kamiya
いでよ、電卓!
by
Masato Kinugawa
サイボウズ・ラボユース成果発表会資料
by
masahiro13
Kubernetes in 30 minutes (2017/03/10)
by
lestrrat
High Performance Networking with DPDK & Multi/Many Core
by
slankdev
中間成果報告会 発表資料
by
sn_monochr
ラボユース最終成果報告会(Web公開版)
by
Shinichi Awamoto
『健全なフロントエンド開発をしよう 〜Railsに乗っかるという選択編〜』 アップ用
by
kotaro_hirayama
世界最速の正規表現JITエンジンの実装
by
Ryoma Sin'ya
kintoneフロントエンド開発 モダン化への道
by
Yusuke Amano
DPDKを用いたネットワークスタック,高性能通信基盤開発
by
slankdev
Jenkins 再入門
by
Jumpei Miyata
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
by
sn_monochr
Sdnj2013
by
Koichi Ise
Tcj2013用
by
Koichi Ise
Info talk2013
by
Koichi Ise
2進数フレンズ
by
shugo manabe
IDベース暗号の概観と今後の展望(次世代セキュア情報基盤ワークショップ )
by
Akira Kanaoka
DAVIX - Data Analysis and Visualization Linux
by
Raffael Marty
Mki2014公開用
by
Koichi Ise
Similar to サイボウズ・ラボユース成果報告会
PPTX
Wiresharkの解析プラグインを作る ssmjp 201409
by
稔 小林
PDF
Trema day 1
by
ykuga
PDF
[Basic 6] DNS / ソケット通信 / その他
by
Yuto Takei
PDF
GoBGP活用によるSD-WANプラクティス
by
Toshiki Tsuboi
PPTX
Ia 2016-12-15
by
Ruo Ando
PPT
IPv6アドレスでお絵かき
by
Yasuyuki Nakamura
PPTX
545人のインフラを支えたNOCチーム!
by
Masayuki Kobayashi
PDF
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
PDF
Scapy presentation Remake(訂正)
by
ashigirl ZareGoto
PPT
20060520.tcp
by
Ken SASAKI
PDF
#dnstudy 01 Unboundの紹介
by
Takashi Takizawa
PDF
60分でわかるソケットプログラミング
by
Masahiko Kimoto
PPTX
Mmo game networking_1
by
Katsutoshi Makino
PDF
第7回勉強会 ネットワークの基礎
by
hakoika-itwg
PDF
13apr2013 kernelvm8-main
by
Shotaro Uchida
PDF
Riak Source Code Reading #2: Erlang Client
by
nobu_k
PDF
Scapyで作る・解析するパケット
by
Takaaki Hoyo
PDF
Scapy presentation
by
ashigirl ZareGoto
PDF
20apr2012 kernelvm7-main
by
Shotaro Uchida
PDF
Windowsのパケットモニタ作成
by
Shinichi Hirauchi
Wiresharkの解析プラグインを作る ssmjp 201409
by
稔 小林
Trema day 1
by
ykuga
[Basic 6] DNS / ソケット通信 / その他
by
Yuto Takei
GoBGP活用によるSD-WANプラクティス
by
Toshiki Tsuboi
Ia 2016-12-15
by
Ruo Ando
IPv6アドレスでお絵かき
by
Yasuyuki Nakamura
545人のインフラを支えたNOCチーム!
by
Masayuki Kobayashi
CTF for ビギナーズ ネットワーク講習資料
by
SECCON Beginners
Scapy presentation Remake(訂正)
by
ashigirl ZareGoto
20060520.tcp
by
Ken SASAKI
#dnstudy 01 Unboundの紹介
by
Takashi Takizawa
60分でわかるソケットプログラミング
by
Masahiko Kimoto
Mmo game networking_1
by
Katsutoshi Makino
第7回勉強会 ネットワークの基礎
by
hakoika-itwg
13apr2013 kernelvm8-main
by
Shotaro Uchida
Riak Source Code Reading #2: Erlang Client
by
nobu_k
Scapyで作る・解析するパケット
by
Takaaki Hoyo
Scapy presentation
by
ashigirl ZareGoto
20apr2012 kernelvm7-main
by
Shotaro Uchida
Windowsのパケットモニタ作成
by
Shinichi Hirauchi
Recently uploaded
PDF
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
PPTX
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
PDF
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
PDF
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
PDF
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
PDF
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
サイボウズ・ラボユース成果報告会
1.
拡張可能な パケット解析ライブラリ開発 サイボウズ・ラボユース第5期 成果報告会 @slankdev 3/30/16
サイボウズ・ラボユース成果報告会 1
2.
自己紹介 oTwitter: @slankdev oGitHub:
slankdev oサイボウズ・ラボユース第5期生 (第6期もお世話になります) oセキュリティ・キャンプ 2015 修了生 oパケットとかネットワークとか好き 3/30/16 サイボウズ・ラボユース成果報告会 2
3.
サイボウズ・ラボユース 第5期 o内容 ◦ 開発テーマ:
C/C++によるソフトウェア開発 ◦ メンター: 光成 滋生さん oLibPGENを開発 ◦ 読み方: りぶぴーじぇん ◦ パケット解析のライブラリ ◦ https://github.com/slankdev/libpgen 3/30/16 サイボウズ・ラボユース成果報告会 3
4.
注意 oここでの”解析”は少し広義な意味として使います。 3/30/16 サイボウズ・ラボユース成果報告会 4
5.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 5
6.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 6
7.
LibPGENとは oC++11で開発しているパケット解析のライブラリ oLinux, BSDで動作 oパケット解析についてのあらゆる作業をサポート (後述) o拡張がしやすい設計 ◦
新たなプロトコルに対しての拡張が容易 (後述) 3/30/16 サイボウズ・ラボユース成果報告会 7
8.
LibPGENの設計 o 大きく分けて三つのコンポーネントに分かれてます 3/30/16 サイボウズ・ラボユース成果報告会
8 • IO • データをネットワークインターフェースやpcap, pcapngファイルに 入出力するクラス群 • pgen::net_stream, pgen::pcap_stream …etc • Core • パケットやアドレスのバイナリを解析したり、変更したりする部分 • pgen::ethernet, pgen::ip, …etc • Module • Core, IOを使って書かれたモジュール群 • めんどくさい作業をまとめてやってくれるクラスや関数群 • 説明は省略
9.
LibPGEN: IO o幾つかのインターフェースを触れる ◦ ネットワークインターフェース ◦
pcapファイル ◦ pcapngファイル も完全対応ではない (最新版は知りません) oストリームクラスとして実装 oOSごとの実装の違いを吸収 3/30/16 サイボウズ・ラボユース成果報告会 9
10.
OSのごとの実装の違いを吸収 oread(2)の挙動がBSDとLinuxで違う ◦ Linux:
1回のreadでパケット1つ読む ◦ BSD : 1回のreadでバッファに溜まっている全てのパケットを読む oそもそもファイルディスクリプタの開き方が全然ちがう ◦ Linux: PF_PACKETアドレスファミリでsocket(2) ◦ BSD : BPF(/dev/bpfN)を直接open(2) oまだ理解仕切れていない。。。 3/30/16 サイボウズ・ラボユース成果報告会 10 この説明は割愛しますが、 面白いので興味があれば懇親会で
11.
3/30/16 サイボウズ・ラボユース成果報告会 11 BSDとLinuxの違いの 説明はないので雰囲気で 感じ取ってください
12.
PF_PACKETでのreadの挙動 3/30/16 サイボウズ・ラボユース成果報告会 12 User
Land Kernel Land Net IF Packet Packet Packet Packet copy
13.
BPFでのreadの挙動 3/30/16 サイボウズ・ラボユース成果報告会 13 User
Land Kernel Land Net IF PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr copy PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr
14.
LibPGENでの実装 (BSD用) 3/30/16 サイボウズ・ラボユース成果報告会
14 User Land Sub User Land Kernel Land Net IF PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr PacketBPF Hdr copy copy Packet Special Thanks, KOZOS Sakai
15.
3/30/16 サイボウズ・ラボユース成果報告会 15 感じ取る時間終わりです
16.
LibPGEN: Core o現在このライブラリで一番大事なところ oパケット解析などをサポートするクラス群 oパケットのバイナリ生成、既存のバイナリを解析、 既存のバイナリを編集などのことができる 3/30/16 サイボウズ・ラボユース成果報告会
16
17.
LibPGEN: Core o使用用途 ◦ ゼロからパケットのバイナリを 組み立て ◦
既存のバイナリを変更 ◦ 長さを変えたり途中に追加な ど柔軟に oパケットクラスとして実装 3/30/16 サイボウズ・ラボユース成果報告会 17 Packet Class ffff ffff ffff 703e aceb 27a5 0806 0001 0800 0604 0001 703e aceb 27a5 0000 0000 0000 0000 0000 0ad2 7c7e 5b2a 0100 2d1a ac19 1bff ffff 0000 0000 0000 aaaa aaaa aaaa 703e aceb 27a5 0806 0001 0800 0604 0002 703e aceb 27a5 0000 0000 0000 0000 0000 0ad2 7c7e 5b2a 0100 2d1a ac19 1bff ffff 0000 0000 0000 4920 6c6f 7665 2070 6163 6b65 742e
18.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 18
19.
簡単に使う o ARPing の実装 ◦
ARPリクエストでpingの動作を実装 ◦ 使うクラス、関数など ◦ pgen::arpクラス, ARPパケットを実装したクラス ◦ pgen::module::detect関数, パケットの種類をフィルタリング ◦ pgen::net_streamクラス, NETIFへの送受信 ◦ Usage: ./arping interface targetIP ◦ LibPGENを使うことが目的 3/30/16 サイボウズ・ラボユース成果報告会 19
20.
ARPing プログラム oソースコードはこんな感じ 3/30/16 サイボウズ・ラボユース成果報告会
20
21.
ARPing プログラム oソースコードはこんな感じ oちゃんと分割して説明します 3/30/16 サイボウズ・ラボユース成果報告会
21
22.
ARPing プログラム 3/30/16 サイボウズ・ラボユース成果報告会
22 ここはどうでもいい
23.
ARPing プログラム 3/30/16 サイボウズ・ラボユース成果報告会
23 ここが重要!
24.
ARPing プログラム 3/30/16 サイボウズ・ラボユース成果報告会
24 少し重要
25.
ARPing プログラム 3/30/16 サイボウズ・ラボユース成果報告会
25 どうでry)
26.
ARPing プログラム o使ってみるとこんな感じ 3/30/16 サイボウズ・ラボユース成果報告会
26
27.
ARPing プログラム o使ってみるとこんな感じ oプロトコルの知識があれば、ネットワークプログラミングの 多少複雑なことを知らなくていい 3/30/16 サイボウズ・ラボユース成果報告会
27
28.
ARPing プログラム o使ってみるとこんな感じ oプロトコルの知識があれば、ネットワークプログラミングの 多少複雑なことを知らなくていい oこれだけでは他のライブラリとかモジュールでも簡単 3/30/16 サイボウズ・ラボユース成果報告会
28
29.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 29
30.
LibPGEN: 拡張性 oライブラリが既知のプロトコルに関する解析は簡単 oライブラリが未知なプロトコルに対してどうするか oWiresharkとかは簡単にdissectorが追加できる oじゃあそうしよう 3/30/16 サイボウズ・ラボユース成果報告会
30
31.
拡張性 o新たなプロトコルに関するパケットクラスの実装が簡単 oちょっとだけパケットクラスの構造が分かってればOK 3/30/16 サイボウズ・ラボユース成果報告会 31
32.
拡張性 oパケットクラス ◦ プロトコルごとのヘッダのインスタンスを持つ (has-‐a) oヘッダクラス ◦
ヘッダの要素を持つ (UDPヘッダならsrc_portとかdst_portとか) 3/30/16 サイボウズ・ラボユース成果報告会 32 Packet Class Header Class Header Class Header Element Header Element Header Element Header Class
33.
新プロトコルのパケットクラスの実装 o拡張するユーザは新たな ヘッダクラスを実装 oそのヘッダのバイナリ解析 のコードのみを追加 3/30/16 サイボウズ・ラボユース成果報告会 33 新
Packet Class 既存のHeader Class 新 Header Class 既存のHeader Class
34.
パケットクラスの継承関係 3/30/16 サイボウズ・ラボユース成果報告会 34 pgen::packet pgen::ethernet pgen::ipv6pgen::tcppgen::udp
pgen::icmp pgen::ippgen::arp
35.
パケットクラスの継承関係 3/30/16 サイボウズ・ラボユース成果報告会 35 pgen::packet pgen::ethernet pgen::ipv6pgen::tcppgen::udp
pgen::icmp pgen::ippgen::arp pgen::XXX
36.
パケットクラスのメンバ関数 o基底パケットクラスのメンバ関数 (一部) ◦ uint8_t*
raw() 生パケットのバイナリのポインタ ◦ size_t length() パケットの長さを返す ◦ compile() バイナリを生成raw()に反映する ◦ analyze(buffer, bufferlen) バイナリを解析 o拡張する開発者はこれらの実装を意識しなくていい 3/30/16 サイボウズ・ラボユース成果報告会 36
37.
ヘッダクラスの継承関係 3/30/16 サイボウズ・ラボユース成果報告会 37 pgen::header pgen::ethernet _header pgen::ipv6_headerpgen::tcp_headerpgen::udp_header
pgen::icmp_header pgen::ip_headerpgen::arp_header
38.
ヘッダクラスの継承関係 3/30/16 サイボウズ・ラボユース成果報告会 38 pgen::header pgen::ethernet _header pgen::ipv6_headerpgen::tcp_headerpgen::udp_header
pgen::icmp_header pgen::ip_headerpgen::arp_header pgen::XXX_header
39.
ヘッダクラスのメンバ関数 oヘッダクラスのメンバ関数 (一部) ◦ virtual
write(buffer, bufferlen) = 0 ヘッダのバイナリを書き込む ◦ virtual read(buffer, bufferlen) = 0 ヘッダのバイナリを読み込む ◦ virtual size_t length() = 0 ヘッダの長さを返す 3/30/16 サイボウズ・ラボユース成果報告会 39
40.
ヘッダクラスとパケットクラスの関係 oパケットの バイナリ解析を行う場合 oanalyze()は 各ヘッダクラス::read()を 上から呼び出して解析 oバイナリ生成も同じ構造 3/30/16 サイボウズ・ラボユース成果報告会 40 Ether IP UDP Trailer ethヘッダ::read() ipヘッダ::read() udpヘッダ::read() udpパケット ::analyze()
41.
ヘッダクラスとパケットクラスの関係 oパケットの バイナリ解析を行う場合 oanalyze()は 各ヘッダクラス::read()を 上から呼び出して解析 oバイナリ生成も同じ構造 3/30/16 サイボウズ・ラボユース成果報告会 41 Ether IP UDP Trailer ethヘッダ::read() ipヘッダ::read() udpヘッダ::read() udpパケット ::analyze()
42.
新プロトコルでパケットクラスの実装 3/30/16 サイボウズ・ラボユース成果報告会 42 Ether IP UDP Trailer ethヘッダ::read() ipヘッダ::read() udpヘッダ::read() 新プロトコル パケット ::analyze() 新 プロト コル 新プロトコル ::read() 開発者はヘッダクラスの 実装のみを気に掛ければいい
43.
UDPパケットクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 43
44.
UDPパケットクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 44 決まり文句だけの 関数で1~4行程度
45.
UDPパケットクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 45 決まり文句だけの 関数で1~4行程度 ここのみを新たに 実装すればいい
46.
UDPヘッダクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 46
47.
UDPヘッダクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 47 UDPヘッダの要素 ヘッダ長の 最大値と最小値
48.
UDPヘッダクラスの構造 3/30/16 サイボウズ・ラボユース成果報告会 48 決まり文句だけの 関数で1~4行程度 バイナリ解析など のコードでここだけ しっかり実装 UDPはチェックサム があるので、それ用の関数
49.
まとめると oパケットクラスの実装はほとんど以下の作業のみ ◦ XXX_header::read(const void*
buf, size_t buflen); ◦ XXX_header::write(void* buf, size_t buflen); o新たなプロトコルのパケットクラスを実装するときも同じ oクラス設計である程度開発者を束縛して、 必要な仕事のみに専念できるように設計 3/30/16 サイボウズ・ラボユース成果報告会 49
50.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 50
51.
少しがっつり使う o新たなプロトコルのパケット解析 oプロトコルを自己定義 oその通信を解析できるパケットクラスを実装する 3/30/16 サイボウズ・ラボユース成果報告会 51
52.
少しがっつり使う 3/30/16 サイボウズ・ラボユース成果報告会 52
53.
ズンドコプロトコル oズンドコプロトコル over UDP o勝手にいろいろ改変してる oズン、ズン、ズン、ズン、ドコ の順に受け取ると”キヨシ“を を返すプロトコル 3/30/16
サイボウズ・ラボユース成果報告会 53 client server ズン ズン ズン ズン ドコ キヨシ
54.
ズンドコプロトコル oサーバは ズンズンズンズンドコの順に通信を受け付けたら 最後のドコを送ったホストにキヨシを返信 oそれ以外は受け取ったメッセージをエコーする oヘッダフィールドは以下とする 3/30/16 サイボウズ・ラボユース成果報告会 54 type
(16bit) msglen (16bit) message (msglen byte) type 0 : ズン 1 : ドコ 2 : キヨシ
55.
内容 oデモ用にこのプロトコルで通信するサーバを用意 oサーバ側で別のプロセスで”キヨシ”を当てた端末を表示 3/30/16 サイボウズ・ラボユース成果報告会 55 Client
Server ズン、ドコ、ズン、ドコ ここで観測
56.
内容 oあらかじめパケットをキャプチャ, pcapngで保存 oそのパケットを解析して、 キヨシを当てているホストを羅列する 3/30/16 サイボウズ・ラボユース成果報告会
56
57.
準備 opgen::zundokoパケットクラスの実装 ◦ 要するにpgen::zundoko_headerクラスの実装 oサーバクライアントの設計実装 (省略) o解析するスクリプトをLibPGENを使って作成 3/30/16
サイボウズ・ラボユース成果報告会 57
58.
準備 3/30/16 サイボウズ・ラボユース成果報告会 58 KIYOSHIを当てた端末を 表示するスクリプト
59.
pgen::zundoko_headerクラス 3/30/16 サイボウズ・ラボユース成果報告会 59
60.
pgen::zundokoパケットクラス 3/30/16 サイボウズ・ラボユース成果報告会 60
61.
pgen::zundoko_header::read() 3/30/16 サイボウズ・ラボユース成果報告会 61 ←この辺にバグがありました。 ごめんなさい。
62.
pgen::zundoko_header::write() 3/30/16 サイボウズ・ラボユース成果報告会 62
63.
実験中 3/30/16 サイボウズ・ラボユース成果報告会 63
64.
実験中 3/30/16 サイボウズ・ラボユース成果報告会 64
65.
実行結果 o以下の2つの端末がKIYOSHIを当てたらしい。 o本題はここじゃ無い 3/30/16 サイボウズ・ラボユース成果報告会 65
66.
まとめ o新たなプロトコルの解析が簡単にできる oくだらない? いや楽しい。 3/30/16 サイボウズ・ラボユース成果報告会
66
67.
Agenda oLibPGEN ◦ LibPGENとは、その設計は ◦ 簡単に使う ◦
拡張性 o少しがっつり使う ◦ 新たなプロトコルに関するパケット解析 o今後の展開と総まとめ 3/30/16 サイボウズ・ラボユース成果報告会 67
68.
今後の展開 o他にもパケットで遊ぶために必要な機能を検討中 ◦ 使う系 ◦ ARPテーブルの実装 ◦
TCPプロトコルスタックの実装 ← ◦ ルータの実装 ← 絶対この辺楽しい ◦ 様々なプロトコルのサポート ◦ より拡張しやすい設計 ◦ Winでも使えるように ◦ 高速にIOとか ◦ 同期、非同期、なにそれ 3/30/16 サイボウズ・ラボユース成果報告会 68
69.
ラボユースまとめ oビシバシたくさん指摘し てくださるので学ぶこと が多い o鬼軍曹… 3/30/16 サイボウズ・ラボユース成果報告会 69
70.
ラボユースまとめ o光成さんのコードレビュー、設計の考えが最も大きな収穫 o前にも増して無力さ痛感 ◦ コードを読む力 ◦ 英語力 ◦
エディタ力 ◦ スマートなコードを書く力 3/30/16 サイボウズ・ラボユース成果報告会 70
71.
ラボユースまとめ oサイボウズ・ラボ社様のサポートで楽しく春休みを過ごすこ とができました o特にメンターとしてご指導をしてくださった光成さん、 ありがとうございました。 oセキュリティ・キャンプ講師陣、修了生の方にも意見やアド バイスをいただきました、ありがとうございます。 oGithub: slankdev/libpgen 3/30/16 サイボウズ・ラボユース成果報告会
71
72.
3/30/16 サイボウズ・ラボユース成果報告会 72 aabb
ccdd eeff 0011 2233 4455 0800 4500 2800 0001 0000 4006 b9a2 c0a8 b302 c0a8 6501 3039 3039 0000 0000 0000 0000 5001 2000 961c 0000 ありがとうございました
Editor's Notes
#3
本名、城倉弘樹と言います。法政大学理工学部の新三年生です。 twitterとかgithubはslankdevというアカウントでやっているので、良かったらフォローしてください。 パケットとかネットワーク関連のことが大好きです。
#4
ラボユースでは光成さんにご指導をいただきながら、 C++のソフトウェア開発でLibPGENっていう パケット解析のライブラリを開発しています。 ソースとか見たり文句とかアドバイスを見てくれると嬉しいです。
#5
注意なのですが、ここ使う解析という言葉はかなり広義な意味で使用します。ご理解お願いします。
#6
発表はこのような流れで進めていきます。 まず開発したライブラリにかんして少し紹介して、 実際に少し使うときの話をしていこうと思います。
#7
ではまず、LibPGENについて概要を説明します。
#8
LibPGENとは、C++11で開発しているパケット解析のライブラリです。 LinuxとBSDで動作します。 パケットを作ったり変えたりパケット操作全般を簡単にC++からいじれるようにしています。 あと、ネットワークインターフェースやpcapファイルなどにデータを送受信する機能とかもあります。 LibPGENは拡張しやすいライブラリに使用ということで設計していて、それについては後述します。
#9
設計は大きく分けて3つのコンポーネントに分けることができて、下から データの入出力をまとめたIOと、パケット解析をまとめたCoreと それらを使ったModuleとして分けています。 Moduleは今回は説明を割愛します。
#10
まず、IOから。 現在は3つのインターフェースにデータを読み書きできるようにしています。 pcapngを扱えるツールは現在はあまりなく wiresharkもpcapngフォーマットのすべての解析をできるわけではないので、 いいと思います。 あとここでOSごとの実装の違いをある程度吸収しています。
#11
ここではreadの説明はしない。 read実装が違うとだけ、説明
#18
使用用途は ゼロからパケットのバイナリを組み立てる 既存のバイナリを解析、変更する 長さを変えたり、途中にデータを挿入したり、 ということもサポートしまいた。
#19
次はといあえず簡単に 使ってみようと思います。
#20
Usage: ユーセェジ
#37
この辺はさらっと説明する。一つ一つは説明しない。
#71
光成さんのコードレビューと設計についてのアドバイスが最も大きな収穫でした。 他にもまだまだたくさんの能力が足りていないことを痛感したので、 これからも頑張りたいです。
#73
スクリプト言語で使えよ
Download