アクティブラーニング効果検証の 中間成果報告smizok.net/education/img/aAL_00021_O01.pdfアクティブラーニング効果検証の 中間成果報告 紺田広明(関西大学)
サイボウズ・ラボユース成果報告会
-
Upload
slankdev -
Category
Engineering
-
view
3.495 -
download
1
Transcript of サイボウズ・ラボユース成果報告会
![Page 1: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/1.jpg)
拡張可能なパケット解析ライブラリ開発サイボウズ・ラボユース第5期 成果報告会
@slankdev
3/30/16 サイボウズ・ラボユース成果報告会 1
![Page 2: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/2.jpg)
自己紹介
oTwitter: @slankdevoGitHub: slankdevoサイボウズ・ラボユース第5期生(第6期もお世話になります)
oセキュリティ・キャンプ 2015 修了生
oパケットとかネットワークとか好き
3/30/16 サイボウズ・ラボユース成果報告会 2
![Page 3: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/3.jpg)
サイボウズ・ラボユース 第5期o内容◦ 開発テーマ: C/C++によるソフトウェア開発
◦ メンター: 光成 滋生さん
oLibPGENを開発◦ 読み方: りぶぴーじぇん
◦ パケット解析のライブラリ
◦ https://github.com/slankdev/libpgen
3/30/16 サイボウズ・ラボユース成果報告会 3
![Page 4: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/4.jpg)
注意
oここでの”解析”は少し広義な意味として使います。
3/30/16 サイボウズ・ラボユース成果報告会 4
![Page 5: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/5.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 5
![Page 6: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/6.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 6
![Page 7: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/7.jpg)
LibPGENとは
oC++11で開発しているパケット解析のライブラリ
oLinux, BSDで動作
oパケット解析についてのあらゆる作業をサポート (後述)o拡張がしやすい設計◦ 新たなプロトコルに対しての拡張が容易 (後述)
3/30/16 サイボウズ・ラボユース成果報告会 7
![Page 8: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/8.jpg)
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を使って書かれたモジュール群• めんどくさい作業をまとめてやってくれるクラスや関数群• 説明は省略
![Page 9: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/9.jpg)
LibPGEN: IOo幾つかのインターフェースを触れる◦ ネットワークインターフェース◦ pcapファイル◦ pcapngファイル も完全対応ではない (最新版は知りません)
oストリームクラスとして実装
oOSごとの実装の違いを吸収
3/30/16 サイボウズ・ラボユース成果報告会 9
![Page 10: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/10.jpg)
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
この説明は割愛しますが、面白いので興味があれば懇親会で
![Page 11: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/11.jpg)
3/30/16 サイボウズ・ラボユース成果報告会 11
BSDとLinuxの違いの説明はないので雰囲気で
感じ取ってください
![Page 12: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/12.jpg)
PF_PACKETでのreadの挙動
3/30/16 サイボウズ・ラボユース成果報告会 12
User Land
Kernel Land
Net IF
Packet
Packet
Packet
Packet
copy
![Page 13: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/13.jpg)
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
![Page 14: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/14.jpg)
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
PacketSpecial Thanks, KOZOS Sakai
![Page 15: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/15.jpg)
3/30/16 サイボウズ・ラボユース成果報告会 15
感じ取る時間終わりです
![Page 16: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/16.jpg)
LibPGEN: Coreo現在このライブラリで一番大事なところ
oパケット解析などをサポートするクラス群
oパケットのバイナリ生成、既存のバイナリを解析、既存のバイナリを編集などのことができる
3/30/16 サイボウズ・ラボユース成果報告会 16
![Page 17: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/17.jpg)
LibPGEN: Core
o使用用途◦ ゼロからパケットのバイナリを組み立て
◦ 既存のバイナリを変更
◦ 長さを変えたり途中に追加など柔軟に
oパケットクラスとして実装
3/30/16 サイボウズ・ラボユース成果報告会 17
Packet Class
ffff ffff ffff 703e aceb 27a5 0806 00010800 0604 0001 703e aceb 27a5 0000 00000000 0000 0000 0ad2 7c7e 5b2a 0100 2d1aac19 1bff ffff 0000 0000 0000
aaaa aaaa aaaa 703e aceb 27a5 0806 00010800 0604 0002 703e aceb 27a5 0000 00000000 0000 0000 0ad2 7c7e 5b2a 0100 2d1aac19 1bff ffff 0000 0000 0000 4920 6c6f 7665 2070 6163 6b65 742e
![Page 18: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/18.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 18
![Page 19: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/19.jpg)
簡単に使う
o ARPing の実装
◦ ARPリクエストでpingの動作を実装
◦ 使うクラス、関数など◦ pgen::arpクラス, ARPパケットを実装したクラス
◦ pgen::module::detect関数, パケットの種類をフィルタリング
◦ pgen::net_streamクラス, NETIFへの送受信
◦ Usage: ./arping interface targetIP
◦ LibPGENを使うことが目的
3/30/16 サイボウズ・ラボユース成果報告会 19
![Page 20: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/20.jpg)
ARPing プログラム
oソースコードはこんな感じ
3/30/16 サイボウズ・ラボユース成果報告会 20
![Page 21: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/21.jpg)
ARPing プログラム
oソースコードはこんな感じ
oちゃんと分割して説明します
3/30/16 サイボウズ・ラボユース成果報告会 21
![Page 22: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/22.jpg)
ARPing プログラム
3/30/16 サイボウズ・ラボユース成果報告会 22
ここはどうでもいい
![Page 23: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/23.jpg)
ARPing プログラム
3/30/16 サイボウズ・ラボユース成果報告会 23
ここが重要!
![Page 24: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/24.jpg)
ARPing プログラム
3/30/16 サイボウズ・ラボユース成果報告会 24
少し重要
![Page 25: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/25.jpg)
ARPing プログラム
3/30/16 サイボウズ・ラボユース成果報告会 25
どうでry)
![Page 26: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/26.jpg)
ARPing プログラム
o使ってみるとこんな感じ
3/30/16 サイボウズ・ラボユース成果報告会 26
![Page 27: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/27.jpg)
ARPing プログラム
o使ってみるとこんな感じ
oプロトコルの知識があれば、ネットワークプログラミングの多少複雑なことを知らなくていい
3/30/16 サイボウズ・ラボユース成果報告会 27
![Page 28: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/28.jpg)
ARPing プログラム
o使ってみるとこんな感じ
oプロトコルの知識があれば、ネットワークプログラミングの多少複雑なことを知らなくていい
oこれだけでは他のライブラリとかモジュールでも簡単
3/30/16 サイボウズ・ラボユース成果報告会 28
![Page 29: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/29.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 29
![Page 30: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/30.jpg)
LibPGEN: 拡張性
oライブラリが既知のプロトコルに関する解析は簡単
oライブラリが未知なプロトコルに対してどうするか
oWiresharkとかは簡単にdissectorが追加できる
oじゃあそうしよう
3/30/16 サイボウズ・ラボユース成果報告会 30
![Page 31: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/31.jpg)
拡張性
o新たなプロトコルに関するパケットクラスの実装が簡単
oちょっとだけパケットクラスの構造が分かってればOK
3/30/16 サイボウズ・ラボユース成果報告会 31
![Page 32: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/32.jpg)
拡張性
oパケットクラス◦ プロトコルごとのヘッダのインスタンスを持つ (has-‐a)
oヘッダクラス◦ ヘッダの要素を持つ (UDPヘッダならsrc_portとかdst_portとか)
3/30/16 サイボウズ・ラボユース成果報告会 32
Packet Class
Header Class
Header Class
Header Element
Header Element
Header ElementHeader Class
![Page 33: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/33.jpg)
新プロトコルのパケットクラスの実装
o拡張するユーザは新たなヘッダクラスを実装
oそのヘッダのバイナリ解析のコードのみを追加
3/30/16 サイボウズ・ラボユース成果報告会 33
新 Packet Class
既存のHeader Class
新 Header Class
既存のHeader Class
![Page 34: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/34.jpg)
パケットクラスの継承関係
3/30/16 サイボウズ・ラボユース成果報告会 34
pgen::packet
pgen::ethernet
pgen::ipv6pgen::tcppgen::udp pgen::icmp
pgen::ippgen::arp
![Page 35: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/35.jpg)
パケットクラスの継承関係
3/30/16 サイボウズ・ラボユース成果報告会 35
pgen::packet
pgen::ethernet
pgen::ipv6pgen::tcppgen::udp pgen::icmp
pgen::ippgen::arp
pgen::XXX
![Page 36: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/36.jpg)
パケットクラスのメンバ関数
o基底パケットクラスのメンバ関数 (一部)
◦ uint8_t* raw() 生パケットのバイナリのポインタ
◦ size_t length() パケットの長さを返す
◦ compile() バイナリを生成raw()に反映する
◦ analyze(buffer, bufferlen) バイナリを解析
o拡張する開発者はこれらの実装を意識しなくていい
3/30/16 サイボウズ・ラボユース成果報告会 36
![Page 37: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/37.jpg)
ヘッダクラスの継承関係
3/30/16 サイボウズ・ラボユース成果報告会 37
pgen::header
pgen::ethernet_header
pgen::ipv6_headerpgen::tcp_headerpgen::udp_header pgen::icmp_header
pgen::ip_headerpgen::arp_header
![Page 38: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/38.jpg)
ヘッダクラスの継承関係
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
![Page 39: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/39.jpg)
ヘッダクラスのメンバ関数
oヘッダクラスのメンバ関数 (一部)
◦ virtual write(buffer, bufferlen) = 0 ヘッダのバイナリを書き込む
◦ virtual read(buffer, bufferlen) = 0 ヘッダのバイナリを読み込む
◦ virtual size_t length() = 0 ヘッダの長さを返す
3/30/16 サイボウズ・ラボユース成果報告会 39
![Page 40: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/40.jpg)
ヘッダクラスとパケットクラスの関係
oパケットのバイナリ解析を行う場合
oanalyze()は各ヘッダクラス::read()を上から呼び出して解析
oバイナリ生成も同じ構造
3/30/16 サイボウズ・ラボユース成果報告会 40
Ether
IP
UDP
Trailer
ethヘッダ::read()
ipヘッダ::read()
udpヘッダ::read()
udpパケット::analyze()
![Page 41: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/41.jpg)
ヘッダクラスとパケットクラスの関係
oパケットのバイナリ解析を行う場合
oanalyze()は各ヘッダクラス::read()を上から呼び出して解析
oバイナリ生成も同じ構造
3/30/16 サイボウズ・ラボユース成果報告会 41
Ether
IP
UDP
Trailer
ethヘッダ::read()
ipヘッダ::read()
udpヘッダ::read()
udpパケット::analyze()
![Page 42: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/42.jpg)
新プロトコルでパケットクラスの実装
3/30/16 サイボウズ・ラボユース成果報告会 42
Ether
IP
UDP
Trailer
ethヘッダ::read()
ipヘッダ::read()
udpヘッダ::read()
新プロトコルパケット::analyze()
新
プロトコル
新プロトコル::read()
開発者はヘッダクラスの実装のみを気に掛ければいい
![Page 43: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/43.jpg)
UDPパケットクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 43
![Page 44: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/44.jpg)
UDPパケットクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 44
決まり文句だけの関数で1~4行程度
![Page 45: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/45.jpg)
UDPパケットクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 45
決まり文句だけの関数で1~4行程度
ここのみを新たに実装すればいい
![Page 46: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/46.jpg)
UDPヘッダクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 46
![Page 47: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/47.jpg)
UDPヘッダクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 47
UDPヘッダの要素
ヘッダ長の最大値と最小値
![Page 48: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/48.jpg)
UDPヘッダクラスの構造
3/30/16 サイボウズ・ラボユース成果報告会 48
決まり文句だけの関数で1~4行程度
バイナリ解析などのコードでここだけしっかり実装
UDPはチェックサムがあるので、それ用の関数
![Page 49: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/49.jpg)
まとめると
oパケットクラスの実装はほとんど以下の作業のみ◦ XXX_header::read(const void* buf, size_t buflen);◦ XXX_header::write(void* buf, size_t buflen);
o新たなプロトコルのパケットクラスを実装するときも同じ
oクラス設計である程度開発者を束縛して、必要な仕事のみに専念できるように設計
3/30/16 サイボウズ・ラボユース成果報告会 49
![Page 50: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/50.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 50
![Page 51: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/51.jpg)
少しがっつり使う
o新たなプロトコルのパケット解析
oプロトコルを自己定義
oその通信を解析できるパケットクラスを実装する
3/30/16 サイボウズ・ラボユース成果報告会 51
![Page 52: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/52.jpg)
少しがっつり使う
3/30/16 サイボウズ・ラボユース成果報告会 52
![Page 53: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/53.jpg)
ズンドコプロトコル
oズンドコプロトコル over UDP
o勝手にいろいろ改変してる
oズン、ズン、ズン、ズン、ドコの順に受け取ると”キヨシ“をを返すプロトコル
3/30/16 サイボウズ・ラボユース成果報告会 53
client server
ズン
ズン
ズン
ズン
ドコ
キヨシ
![Page 54: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/54.jpg)
ズンドコプロトコル
oサーバはズンズンズンズンドコの順に通信を受け付けたら最後のドコを送ったホストにキヨシを返信
oそれ以外は受け取ったメッセージをエコーする
oヘッダフィールドは以下とする
3/30/16 サイボウズ・ラボユース成果報告会 54
type (16bit) msglen (16bit)
message (msglen byte)
type 0 : ズン1 : ドコ2 : キヨシ
![Page 55: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/55.jpg)
内容
oデモ用にこのプロトコルで通信するサーバを用意
oサーバ側で別のプロセスで”キヨシ”を当てた端末を表示
3/30/16 サイボウズ・ラボユース成果報告会 55
Client Server
ズン、ドコ、ズン、ドコ
ここで観測
![Page 56: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/56.jpg)
内容
oあらかじめパケットをキャプチャ, pcapngで保存
oそのパケットを解析して、キヨシを当てているホストを羅列する
3/30/16 サイボウズ・ラボユース成果報告会 56
![Page 57: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/57.jpg)
準備
opgen::zundokoパケットクラスの実装◦ 要するにpgen::zundoko_headerクラスの実装
oサーバクライアントの設計実装 (省略)
o解析するスクリプトをLibPGENを使って作成
3/30/16 サイボウズ・ラボユース成果報告会 57
![Page 58: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/58.jpg)
準備
3/30/16 サイボウズ・ラボユース成果報告会 58
KIYOSHIを当てた端末を表示するスクリプト
![Page 59: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/59.jpg)
pgen::zundoko_headerクラス
3/30/16 サイボウズ・ラボユース成果報告会 59
![Page 60: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/60.jpg)
pgen::zundokoパケットクラス
3/30/16 サイボウズ・ラボユース成果報告会 60
![Page 61: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/61.jpg)
pgen::zundoko_header::read()
3/30/16 サイボウズ・ラボユース成果報告会 61
←この辺にバグがありました。ごめんなさい。
![Page 62: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/62.jpg)
pgen::zundoko_header::write()
3/30/16 サイボウズ・ラボユース成果報告会 62
![Page 63: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/63.jpg)
実験中
3/30/16 サイボウズ・ラボユース成果報告会 63
![Page 64: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/64.jpg)
実験中
3/30/16 サイボウズ・ラボユース成果報告会 64
![Page 65: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/65.jpg)
実行結果
o以下の2つの端末がKIYOSHIを当てたらしい。
o本題はここじゃ無い
3/30/16 サイボウズ・ラボユース成果報告会 65
![Page 66: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/66.jpg)
まとめ
o新たなプロトコルの解析が簡単にできる
oくだらない? いや楽しい。
3/30/16 サイボウズ・ラボユース成果報告会 66
![Page 67: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/67.jpg)
AgendaoLibPGEN◦ LibPGENとは、その設計は
◦ 簡単に使う
◦ 拡張性
o少しがっつり使う◦ 新たなプロトコルに関するパケット解析
o今後の展開と総まとめ
3/30/16 サイボウズ・ラボユース成果報告会 67
![Page 68: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/68.jpg)
今後の展開
o他にもパケットで遊ぶために必要な機能を検討中◦ 使う系◦ ARPテーブルの実装
◦ TCPプロトコルスタックの実装 ←◦ ルータの実装 ← 絶対この辺楽しい
◦ 様々なプロトコルのサポート
◦ より拡張しやすい設計
◦ Winでも使えるように
◦ 高速にIOとか
◦ 同期、非同期、なにそれ
3/30/16 サイボウズ・ラボユース成果報告会 68
![Page 69: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/69.jpg)
ラボユースまとめ
oビシバシたくさん指摘してくださるので学ぶことが多い
o鬼軍曹…
3/30/16 サイボウズ・ラボユース成果報告会 69
![Page 70: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/70.jpg)
ラボユースまとめ
o光成さんのコードレビュー、設計の考えが最も大きな収穫
o前にも増して無力さ痛感◦ コードを読む力
◦ 英語力
◦ エディタ力
◦ スマートなコードを書く力
3/30/16 サイボウズ・ラボユース成果報告会 70
![Page 71: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/71.jpg)
ラボユースまとめ
oサイボウズ・ラボ社様のサポートで楽しく春休みを過ごすことができました
o特にメンターとしてご指導をしてくださった光成さん、ありがとうございました。
oセキュリティ・キャンプ講師陣、修了生の方にも意見やアドバイスをいただきました、ありがとうございます。
oGithub: slankdev/libpgen
3/30/16 サイボウズ・ラボユース成果報告会 71
![Page 72: サイボウズ・ラボユース成果報告会](https://reader034.fdocument.pub/reader034/viewer/2022042907/586fb9e41a28abe57d8b8569/html5/thumbnails/72.jpg)
3/30/16 サイボウズ・ラボユース成果報告会 72
aabb ccdd eeff 0011 2233 4455 0800 45002800 0001 0000 4006 b9a2 c0a8 b302 c0a86501 3039 3039 0000 0000 0000 0000 50012000 961c 0000
ありがとうございました