Submit Search
Upload
libpgenでパケット操作
•
8 likes
•
5,410 views
slankdev
Follow
libpgenというパケット操作のライブラリを作成した時の話です。 http://libpgen.org で情報発信しています。
Read less
Read more
Software
Report
Share
Report
Share
1 of 56
Download now
Download to read offline
Recommended
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
junk_coken
Recommended
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
junk_coken
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
ryuz88
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
業務で使うIRC
業務で使うIRC
onozaty
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
abend_cve_9999_0001
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
SIEMやログ監査で重要な事
SIEMやログ監査で重要な事
hogehuga
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
Ayako_Hasegawa
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
Transformer メタサーベイ
Transformer メタサーベイ
cvpaper. challenge
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説
LINE Corporation
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
Yuya Rin
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
直久 住川
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
オントロジーとは?
オントロジーとは?
Kouji Kozaki
Hello, Node.js
Hello, Node.js
Shin Sekaryo
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
More Related Content
What's hot
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
ryuz88
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
super_a1ice
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
業務で使うIRC
業務で使うIRC
onozaty
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
abend_cve_9999_0001
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
SIEMやログ監査で重要な事
SIEMやログ監査で重要な事
hogehuga
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
Ayako_Hasegawa
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada
Transformer メタサーベイ
Transformer メタサーベイ
cvpaper. challenge
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説
LINE Corporation
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
Yuya Rin
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
直久 住川
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
オントロジーとは?
オントロジーとは?
Kouji Kozaki
What's hot
(20)
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
Metasploitでペネトレーションテスト
Metasploitでペネトレーションテスト
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
業務で使うIRC
業務で使うIRC
Glibc malloc internal
Glibc malloc internal
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
フリーでできるセキュリティチェック OpenVAS CLI編
フリーでできるセキュリティチェック OpenVAS CLI編
中3女子でもわかる constexpr
中3女子でもわかる constexpr
SIEMやログ監査で重要な事
SIEMやログ監査で重要な事
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Transformer メタサーベイ
Transformer メタサーベイ
LLVM最適化のこつ
LLVM最適化のこつ
LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説
ネットワークエンジニアはどこでウデマエをみがくのか?
ネットワークエンジニアはどこでウデマエをみがくのか?
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
ウェーブレット木の世界
ウェーブレット木の世界
オントロジーとは?
オントロジーとは?
Viewers also liked
Hello, Node.js
Hello, Node.js
Shin Sekaryo
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
Java script初心者のためのnode.jsで学ぶドローン制御プログラミング
Java script初心者のためのnode.jsで学ぶドローン制御プログラミング
健一 茂木
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
Node.js Hands-On
Node.js Hands-On
Akinari Tsugo
JUNOS: OSPF and BGP
JUNOS: OSPF and BGP
Zenith Networks
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
Node.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
Nodeについて
Nodeについて
Natsuki Yamanaka
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
Nobuhiro Nakashima
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
Node.js入門
Node.js入門
俊夫 森
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
Isamu Suzuki
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
Tomocha Potter
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
bash0C7
ENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbot
treby
「PUSH 大阪」の紹介
「PUSH 大阪」の紹介
Kouji Kozaki
東方紅魔郷AI
東方紅魔郷AI
aki33524
過換気症候群
過換気症候群
Keiichi Kimura
Viewers also liked
(20)
Hello, Node.js
Hello, Node.js
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
Java script初心者のためのnode.jsで学ぶドローン制御プログラミング
Java script初心者のためのnode.jsで学ぶドローン制御プログラミング
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
Node.js Hands-On
Node.js Hands-On
JUNOS: OSPF and BGP
JUNOS: OSPF and BGP
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Node.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Nodeについて
Nodeについて
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
Node.js入門
Node.js入門
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
俺の仕事がこんなに楽しいわけが無い・公開版(初出:2010/12/20 株式会社ECナビ会社説明会@IAMAS)
ENJOY H@RMONY!!とボーダーbot
ENJOY H@RMONY!!とボーダーbot
「PUSH 大阪」の紹介
「PUSH 大阪」の紹介
東方紅魔郷AI
東方紅魔郷AI
過換気症候群
過換気症候群
Similar to libpgenでパケット操作
LibPGEN 1st Step Guide
LibPGEN 1st Step Guide
slankdev
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Naoto Koshikawa
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Satoshi imai
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
Naruto TAKAHASHI
Make
Make
lnial
コミュニティのある風景
コミュニティのある風景
Ryunosuke SATO
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
Masataka Tsukamoto
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
Takesxi Sximada
とある Perl Monger の働き方
とある Perl Monger の働き方
Yusuke Wada
Osoljp201204
Osoljp201204
Masataka Tsukamoto
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
Minio on Raspberry Pi
Minio on Raspberry Pi
Masafumi Ohta
Hannari python#27
Hannari python#27
hiroya akita
⑮jQueryをおぼえよう!その1
⑮jQueryをおぼえよう!その1
Nishida Kansuke
ゆるかわPhp
ゆるかわPhp
Ryota Mochizuki
Cmsdou oosaka
Cmsdou oosaka
onagatani
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Kazuko Shikiya
Raspberry Pi 最新情報 at OSC Tokyo 2014 秋
Raspberry Pi 最新情報 at OSC Tokyo 2014 秋
Masafumi Ohta
Mishimasyk6 iwatobipen
Mishimasyk6 iwatobipen
Takayuki Serizawa
Similar to libpgenでパケット操作
(20)
LibPGEN 1st Step Guide
LibPGEN 1st Step Guide
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
せっかくだから俺はこの NPAPI の話をするぜ
せっかくだから俺はこの NPAPI の話をするぜ
Make
Make
コミュニティのある風景
コミュニティのある風景
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
とある Perl Monger の働き方
とある Perl Monger の働き方
Osoljp201204
Osoljp201204
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Minio on Raspberry Pi
Minio on Raspberry Pi
Hannari python#27
Hannari python#27
⑮jQueryをおぼえよう!その1
⑮jQueryをおぼえよう!その1
ゆるかわPhp
ゆるかわPhp
Cmsdou oosaka
Cmsdou oosaka
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry PiにUSBカメラを付けて撮影した写真をTwitterにアップする
Raspberry Pi 最新情報 at OSC Tokyo 2014 秋
Raspberry Pi 最新情報 at OSC Tokyo 2014 秋
Mishimasyk6 iwatobipen
Mishimasyk6 iwatobipen
More from slankdev
動的なVNFの性能調節フレームワーク開発と それを用いたNFV基盤の開発
動的なVNFの性能調節フレームワーク開発と それを用いたNFV基盤の開発
slankdev
Kernel vm13lt
Kernel vm13lt
slankdev
OSC2017Hokkaido
OSC2017Hokkaido
slankdev
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
slankdev
Offloading BPF Implementation to FPGA-NIC したいねって話
Offloading BPF Implementation to FPGA-NIC したいねって話
slankdev
Seccamp 2016 チューター成果報告
Seccamp 2016 チューター成果報告
slankdev
サイボウズ・ラボユース中間報告会
サイボウズ・ラボユース中間報告会
slankdev
OSC 2016 Hokkaido セミナー資料
OSC 2016 Hokkaido セミナー資料
slankdev
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会
slankdev
Seurity Camp Award 2016
Seurity Camp Award 2016
slankdev
OSC2016 Tokyo/Spring LT
OSC2016 Tokyo/Spring LT
slankdev
OSC2016 Tokyo/Spring セミナー資料
OSC2016 Tokyo/Spring セミナー資料
slankdev
ARPSpoofing攻撃によるMITM攻撃
ARPSpoofing攻撃によるMITM攻撃
slankdev
More from slankdev
(14)
動的なVNFの性能調節フレームワーク開発と それを用いたNFV基盤の開発
動的なVNFの性能調節フレームワーク開発と それを用いたNFV基盤の開発
Kernel vm13lt
Kernel vm13lt
OSC2017Hokkaido
OSC2017Hokkaido
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
Offloading BPF Implementation to FPGA-NIC したいねって話
Offloading BPF Implementation to FPGA-NIC したいねって話
Seccamp 2016 チューター成果報告
Seccamp 2016 チューター成果報告
サイボウズ・ラボユース中間報告会
サイボウズ・ラボユース中間報告会
OSC 2016 Hokkaido セミナー資料
OSC 2016 Hokkaido セミナー資料
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会
Seurity Camp Award 2016
Seurity Camp Award 2016
OSC2016 Tokyo/Spring LT
OSC2016 Tokyo/Spring LT
OSC2016 Tokyo/Spring セミナー資料
OSC2016 Tokyo/Spring セミナー資料
ARPSpoofing攻撃によるMITM攻撃
ARPSpoofing攻撃によるMITM攻撃
libpgenでパケット操作
1.
パケット操作の ライブラリを作った話 すらんく @slankdev
2.
自己紹介 すらんく (@slankdev) • http://slankdev.net •
城倉 弘樹(しろくら ひろき) • 2015 IPA セキュリティ・キャンプ全国大会卒業生 • 法政大学 理工学部 B2 takahoyoさんの後輩です • ネットワーク関係が趣味(初心者) CTF (NW問だけ) • 宗派は Vim Arch C/C++
3.
今日話すこと • 趣味でパケット操作のライブラリをC++で書いたん で その話をすることと、普及活動 • まさかり大歓迎です そもそもこのライブラリはまさかりで生きているよ うなものです
4.
パケットを見たこと、ありますか?
5.
パケットを作ったりいじったこと、ありますか?
6.
パケットをつくる • ネットワークでパケットを理解する上でパケットを 見るだけではだめ • 作って試していろいろしたい •
自己環境ならなにやったって大丈夫
7.
パケットを作ろう • パケットジェネレータとして一番優秀なのは多分 scapy(pythonのモジュール) イケメンパケリストが説明してくれるのでなにも説 明しません。 • python
便利だしよさそうだけどそれで作っても scapyあるし 誰も使ってくれない。。 • 普段C使うしCで書くかぁ
8.
libpcap • http://tcpdump.org • tcpdump
の開発者が開発しているマルチOSサポート の パケットキャプチャのライブラリ • Linux をはじめ様々なOSで簡単にパケットキャプ チャが作れるから 簡単だし入門にはいいかも • tcpdump のを開発しやすくするためにlibpcapを作っ た
9.
tcpdumpの機能追加で作成
10.
超カッケーじゃんそういうの • 今回のライブラリはそんな厨二心で始まりました • 情報関係のとっかかりは厨二心でいいと考えていま す •
このライブラリも一応簡単なプログラムの機能追加 のために作成 って建前で作り始めました
11.
libpgen ってのを開発しました • http://libpgen.org •
ソースコードはGitHubで管理しています • 現在はEthernet, ARP, IP, ICMP, TCP, UDP, DNS, DHCP, ar_droneに対応 • 開発は現在進行中です (協力してくれるひと募集して ます) • scapyに負けたくない
12.
自分でパケットを作って送る感動
13.
Wiresharkとかで準備して
14.
こんな感じに作って送って
15.
見れた時の感動
16.
想像を絶する感動 !!!
17.
巣立っていった我が子が帰ってくるような特別な気持ち
18.
巣立っていった我が子が帰ってくるような特別な気持ち 別に子供とかまだいません
19.
設計段階 その⓪ • 自由にパケットを作ることだけできればいい (ユーザはプロトコルの知識以外なにもなくてもで きれば最高) •
エンディアンとか気にしないでパケット作れるよう にしたい • ソケット開いてオプションとか設定したりとか考え たくない • アドレスとかもいつも同じ作業だしめんどくさい • とりあえずARP好きだからEthernetとARPだけ実装 しよっと この辺は全然実用段階でないので説明をはしょります
20.
完成したもの その⓪ • ARP送れる。わー。。。終わり •
まったく使えない。。機能すくなすぎ。 • まあこれでも初心者なので僕自身は勉強になりまし た • SocketのPF_PACKETでソケットを開いて実装 (Linuxのみ対応)
21.
設計段階① • いろんなプロトコルに対応させたいけどどうしたら 効率良いか 下位のプロトコルの操作をどうすればいいか ちょっとだけオブジェクトしこーにするか • 将来的に他のOSでもうごかしたい。。 OSごとに違う実装になるところだけ完全に切り離す •
パケット編集のインターフェースを直感的にしたい
22.
アーキテクチャ図 • こんな感じ設計しました • パケットクラス パケット操作を担当 •
アドレスクラス IP,MACアドレス操作を担当 • Netutils OSごとの違いを吸収 OS Netutils パケットクラス アドレスクラス
23.
アドレスクラス • IPアドレスとMACアドレスの操作を簡単にできるよ うにする • ネットワーク内をスキャンとかする時はIPアドレス の大小表現とかも必要だからそういう演算子も定義 しといた
24.
パケットクラス • 直感的なインターフェースからパケットのバイナリ を生成 パケットインスタンス名.プロトコル.要素名 でパケットの各要素にアクセスできるようにした。 • 以下はARPの例
(これも普通じゃないパケットの状 態ですが。。。) 後ほどこのクラスの説明を少し
25.
Netutils • ネットワークプログラミング関連の作業はすべてこ いつに任せよう。ネットワーク関連の処理以外はほ とんど高度(低レベル)なことしないのでこの部分だけ 完全にきりはなしました • 表面的には今のとこと出てこないので、ここの説明 は省略。 •
詳しくは http://libpgen.org/documentation/components/netut ils/ を参照 • もはや現在はネットワークユーティリティーな状態 でないので、近々名前変えよう
26.
完成したもの① • 機能を綺麗に分担できています。 • アドレスクラス、パケットクラス、Netutilsを 別々にインストールとかできたらいいかも
27.
パケット送信はとりあえずできたし あとはたくさんのプロトコルに対応させていけばいい
28.
パケット送信はとりあえずできたし あとはたくさんのプロトコルに対応させていけばいい それだけじゃ大して面白くないしつまらない よく考えたらscapyに勝る機能が何もない
29.
設計段階② • 既存のパケットのバイナリを読み込ませてパケット クラスにパース できるようにしよう • ならパケットの受信機能も簡単に実装するか •
pcapファイル読み込みたい TDUCTFに参加させてもらった時に発案 pcapファイル読み込んで送ったり、受信した特定の パケットだけpcapファイルに保存したりとできたら かっちょいいかも • 送受信を行う上でやはりディスクリタみたいなのが あると便利
30.
パケットをキャストする機能を 追加 • 以前までは パケットクラス-->バイナリ の一方向のみの変換だった • パケットクラスにcastメンバ 関数を追加して バイナリをパースして、パ ケットクラスの形に変換して、 解析を簡単にできるようにし た aabb
ccdd eeff 0011 2233 4455 0806 0001 0800 0604 0001 0011 2233 4455 c0a8 0004 aabb ccdd eeff c0a8 0001 パケットクラス
31.
cast関数の問題点 • 例えばARPパケットのバイナリをDHCPとしてcast しようとすると危険 → あらかじめパケットの種類を簡単に調べときたい •
ついでにIPアドレスとかMACアドレスとかポート番 号とかで簡単に調べられる機能とかもあるといい
32.
unknownパケット • unknown型のパケットって思ってください • isUDP
とか isICMP とか L4までの基本情報をまとめて解析してくれる特別な パケットクラス • ポート番号とかでいろいろ絞り込めるようにしまし た。
33.
unknownパケット • こんな感じにパケットがだいたいどんな感じのパケットか、 とか送信元とかが簡単に調べられる • ポート番号が53か?
とかで調べたい時は bool res = インスタンス名.portis(53); とかで調べられる。
34.
簡易的なパケット受信機能 • sniff関数をNetutilsに追加 • void
sniff(pgen_t*, (bool)(const u_char*, int)); • パケットを受信待機して受信し たら、コールバック関数を呼ぶ。 • まあこれはなにも工夫もないし デバッグしやすくするために追 加しただけ sniff 関数 recv packet!! コールバック関数 aabb ccdd eeff 0011 2233 4455 0806 0001 0800 0604 0001 0011 2233 4455 c0a8 0004 aabb ccdd eeff c0a8 0001 length is 42 bytes こっちでパケット解析とかをする
35.
pcapファイルも読み込みたい • せっかくバイナリのパース機能 追加したならpcapファイルを読 み込んでそこからパケットを受 信したいってのが漢意気っても んよ • みんな大好きpcapファイル読め たらウケいいかも •
pcapngにも今度対応させます ngに対応してるパケット解析 ツール 結構少ないから案外いいかも なんてことになるかもしれない….
36.
pcapファイルも読み込みたい • ファイルポインタで基本どうり にファイル開いてパケットを書 き込む時はパケットの先頭に pcapパケットヘッダを追加する だけ • この機能が一番簡単に実装でき たからL2で送信する機能より先 に取りかかっとけば簡単だし作 業加速したかも magic
number major version minor version time zorne sigfigs snaplen link type pcap file header timestamp caplen len pcap packet header
37.
pgenディスクリプタ使いたい • 今までのパケット送信部分はユーザがソケットを意識しなく てもいいようにうんこきもい実装になってた。 • 送受信を両方行うプログラムを書くならやっぱりを意識しな いといけない •
pcapファイルに書き込んだり、ネットワークインター フェースから送信したりいろいろあるからまとめて管理でき るようにした
38.
pgenディスクリプタ使いたい pgen ディスクリプタ pgen_open 関数 or pgen_open_offline関数 開きたい インタフェースや ファイル名など ディスクリプタの種類によって入出力先を指定できる 上の例ではtest.pcapへの書き込み専用モードで パケットはtest.pcapに書き込まれる
39.
完成したもの② • バイナリを解析して、パケットクラスで読み取れる ようになった • 受信したパケットを改変して別のインターフェース から送信することもできる •
pcapファイルにパケットを書き込んだり、pcapファ イルひとつづつパケットを読み込んでcast関数で解 析できるようになった。 • pgen_tって感じでディスクリプタを使えるようにし た • この時点で簡単なルータとかブリッジなら即席で作 れます
40.
libpgenで中間者攻撃 のツール作成 • せっかくある程度使える状態にしたので、取りあえ ず好きなARPで実験的なのしました。 • 超適当にはしょって作ったARPスプーフィングで MITMアタックするプログラムです •
http://slankdev.net/blog/2015/08/30/libpgen-arp- mitm/ http://wp.me/p5YcBp-7N (短縮URL)
41.
設計段階④ 現在 • 他のOSに対応させたい •
拡張しやすくしたい • 全体が正しいい動作をするのか自動でチェックする 機能追加 • パケット解析ツールだしネットワーク以外のパケッ トも見たくね? 某鮫ツールはいろいろ読めるし
42.
他のOSに対応させたい • とりあえず一番の愛機がMBPなので、OSXに対応さ せました。 友達がMac使ってる人結構いるし、対応させたら 使ってもらえるし • OSXはBSD系なのでBSDに対応させるコードを追加 すればいいだけ •
BSDはBPFってのでリンクレイヤープログラミング をすればいい • LinuxのPF_PACKETよりなんか分かりやすいから こっちの方が好きだったり
43.
他のOSに対応させたい • OS依存している関数のみを#ifdef __linuxとかで囲むだ け •
あとはエンディアンに気をつけているかを全体的に チェックするだけ • 一番ひっかったのはインストール場所。(まだ調べて ない)OSXは/usr/local/includeとか/usr/includeにイン クルードパス張ってなくて(怒) xcode.appの中にあるヘッダとかからインクルードして る変態 • 知ってる人誰か教えて下さい ( > < )
44.
拡張しやすくしたい • 現在開発中です • ユーザが簡単にプロトコルの追加とかできるように したかった。 一人でこんな作業いつまでもやってらんない •
プロトコル解析のコードはコアな部分から独立させ よう • チーム開発しやすいようにしたい
45.
全体が正しい動作をしてるか確 かめる • 対応させてるプロトコルが増えるとその分テストが大変に なるので、自動化したい • これも今実装中なんですけど、これがうまくいけばいろい ろ楽になる。 アドレスクラスは低機能だし、少ないからいいとして、 パケットクラスの動作チェックを自動化したい •
機能追加したり、リファクタリングしたりしたあと全体が うまく動くか 確かめていたけど、毎回やってたらきりがない。。 • どうやってうまく動いているか確認しよう。。 • 各コンポーネントごとにチェックしていった方が良さそう
46.
全体が正しい動作をしてるか確 かめる • パケットクラスでチェック が必要なのはバイナリ解析 部分と生成部分 • サンプルパケットを幾つか 読ませて、そこから再度バ イナリを生成して元のパ ケットとdiffをとる. •
この処理はプロトコルごと に実装しなくていいので、 名案かな aabb ccdd eeff 0011 2233 4455 0806 0001 0800 0604 0001 0011 2233 4455 c0a8 0004 aabb ccdd eeff c0a8 0001 パケットクラス aabb ccdd eeff 0011 2233 4455 0806 0001 0800 0604 0001 0011 2533 4455 c0a8 0004 aabb ccdd eeff c0a8 0001 キャスト 再度バイナリ生成 ここが同じか 確かめる
47.
ネットワーク以外のパケット • 開発初期と比べていろいろ拡張しやすくなってきた し、ネットワーク以外のパケットも操作できたらい いかも。 • USBとか、HDMIとかCTFの作問もできるかも •
あくまで、いろいろな勉強のためにそういうことし てる段階なので、社会貢献できていない。 • USB機器とかのファジングツールとか将来的にでき たらタノシイカモネ
48.
完成したもの ④ (まだ途中で す) •
一応BSD用のコードを追加できた、うまく動いてい る? • 拡張しやすくする構造はwiresharkを参考にしました • まだ現在製作中です
49.
まとめ、感想 ① • ソースを読経する力がすこーしだけついたかなって 感じです。 •
始めた時は/usr/include ? ナニソレオイシイノ だっ たので • デバッグ力も少し • プロトコルの知識もつきました • OSのプロトコル実装の手抜きとかも見れるのが楽し い BSDのARPとか、LinuxのICMPとか…
50.
まとめ、感想 ② • だいたい日本一の学生でパケットに詳しい鮫アイコ ンの人がscapyの普及活動を行っている時点でこのま までは到底敵わないではないか! •
scapyにない機能とかいろいろ追加したりいろいろ やっていつかscapyと比べられるくらいのパケット解 析ツールにしていきたいです • 開発に時間がかかりすぎてる。 • http://libpgen.org にドキュメントとかも書いておい ているので、一度見て文句などを言ってくれると元 気がでます。
51.
まとめ、感想 ③ • チーム開発とかやったことないから友達見つけて ちょっとずつ協力してもらいたいと感じました •
社会貢献してない
52.
libpgenについて • http://libpgen.org で詳細を説明してます。 各プロトコルのパケットクラスの資料がまだ完成し ていないのでもう少し待ってください。。
53.
最後に一言 • このライブラリは現在、一人で開発しているのです が、 セキュリティキャンプ講師の方、 2015年度全国大会 卒業生の方
をはじめ、 たくさんの方にアイディアや助言をいただいており ます。 本当にありがとうございます。 今後とも宜しくお願 いします。
54.
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
55.
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 ヒント
56.
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 TCP FIN パケットです. ありがとうございました
Editor's Notes
ディスクリプタとは。。。この説明ちゃんとするべきか
Download now