Upload
slankdev
View
473
Download
0
Embed Size (px)
Citation preview
Security Camp Forum 1
パケット解析ライブラリの開発すらんく (@slankdev)セキュリティ・キャンプ 2015 卒業生
Mar 4 2016
Security Camp Forum 2
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 3
はじめにo このライブラリは現在 CybozuLab 株式会社様の「サイボウズ・ラボユース」というプロジェクトで開発を支援していただいています。o セキュリティ・キャンプ関係者の方々の意見なども参考にさせていただいています。o この場を借りてありがとうございます。
Mar 4 2016
Security Camp Forum 4
本当は今日は… .o 去年の 12 月に公開した version1 について発表しようと思っ ていたのですが…oラボユースでの開発中にいろいろなことがありまして
Mar 4 2016
Security Camp Forum 5
サイボウズ ラボユースにて
Mar 4 2016
ここの実装はどうしてこうなんですか ? こうしないとダメじゃないんですか?
ラボユース初期の開発打ち合わせにて
ここは ry)
そもそも C++ のソフトウェアなのにいろいろできていな ry)
あ、そうです。なおします
はい、そこもです。
。。。。
Security Camp Forum 6Mar 4 2016
全部設計しなおして作り直そう
ってことでまだ全て実装しきれてないです
Security Camp Forum 7
注意 !!o 開発中の version2.0 の開発に関しての発表を行います
Mar 4 2016
Security Camp Forum 8
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 9
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 10
パケット解析の定石o Wireshark に頼った解析 ( ダメとは全く言っていない )o ディスプレイフィルタや、豊富な情報処理機能が最高o はっきり言って、解析しているのは人でなく鮫
Mar 4 2016
おう、このパケットどうよ ?
length があってないでシャークおかしいでシャーク
Security Camp Forum 11
このパケット解析だけでは…o 鮫のしらないプロトコルの出現 !! ドウスル…o パケット解析、処理能力の必要性
Mar 4 2016
理想
現実
Security Camp Forum 12
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 13
パケット解析はもっとこうあるべきo 自由にプログラミングしたい。。もっと色々遊びたいo 見るだけじゃ。。。キマらないo パケットを作りたい、変えたい
Mar 4 2016
おう、頼りにしてるけど一人でもある程度出来るぜ
すごいでシャークすごいでシャーク
Security Camp Forum 14
理想o プログラミングしたいo 簡単で自由自在にパケットを弄くり倒したい
Mar 4 2016
パケット解析なんて
Security Camp Forum 15
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 16
LibPGEN: とはo 読み方は「りぶ ぴーじぇん」ですo C++ で利用可能なパケット解析ライブラリoユーザが正しくパケットを作る補助などの機能ありoもちろん好き勝手にいじくれるようにしました
Mar 4 2016
Security Camp Forum 17
LibPGEN: 概要o 簡単なコードでパケットを弄り倒せるo この界隈では Scapy が有名ですが、それの C++ 版みたいなo パケット解析だけでなく、様々な機能を追加予定
Mar 4 2016
Security Camp Forum 18
LibPGEN: 特徴と新規性o 新規性
◦ パケットを扱うライブラリ◦ 既存ライブラリでは目的を重視 ◦ このライブラリでは仮定を重視◦ その方が勉強になるんじゃねo 特徴
◦ 拡張しやすい設計に◦ プロトコルの知識さえあれば弄り倒せる
Mar 4 2016
Security Camp Forum 19
LibPGEN: 特徴と新規性o 有名どころのライブラリは…o 目的重視 → アプリケーション開発などには最適
Mar 4 2016
Security Camp Forum 20
LibPGEN: 特徴と新規性o LibPGEN は…o パケット単位でのプログラミング o 通信に至る過程を重視 → いろんなことを学べるかもね
Mar 4 2016
Security Camp Forum 21
LibPGEN: 特徴と新規性o 現在対応のプロトコル (version1 では )
◦ Ethernet, ARP, IP, ICMP, TCP, UDP
o これ以外のプロトコルは拡張が容易な設計に ( 後述 )
Mar 4 2016
Security Camp Forum 22
LibPGEN: 今後の展開o 様々なプロトコルをサポート?
Mar 4 2016
Security Camp Forum 23
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 24
アーキテクチャ
Mar 4 2016
IO Controller
Address Controller
Module
Packet Controller
Security Camp Forum 25
3 つのコンポーネントに分割o IO Controller
◦ データの入出力を担当◦ネットワークインターフェースに送受信◦ PCAP, PCAPNG ファイルに書き込みo Address Controller
◦ アドレス処理などを担当◦文字列からアドレスなどo Packet Controller
◦ 様々なプロトコルのパケットを解析、作成などを担当o Module
◦上の三つを使って書かれたモジュール群Mar 4 2016
Security Camp Forum 26
Packet, Address Controllero パケットやアドレスのバイナリの生成や、解析などを行うo 簡単なインターフェースでパケットのデータを編集などを 可能にしますo 例えば ARP パケットならこんな感じ
Mar 4 2016
Security Camp Forum 27
Packet, Address classo Packet class
◦各プロトコルに対応したパケットクラスがある◦ TCP パケットなら pgen::tcp クラス◦ ( まだないけど ) HTTP パケットなら pgen::http クラスo Address class
◦ MAC アドレスと IP アドレスがある◦ pgen::macaddress クラス◦ pgen::ipaddress クラス
Mar 4 2016
Security Camp Forum 28
IO Controllero データの入出力を管理するクラス
◦ネットワークインターフェース◦ pcap ファイル◦ pcapNg ファイルo 既存の stream クラスと使い方は全く一緒o 以下以外の方法もあります
Mar 4 2016
Security Camp Forum 29
実装についてo 初めて C++ での開発っぽいものをしたので 僕にはかなりむずかしいです ( もやし )
Mar 4 2016
Security Camp Forum 30
ユーザのミスを知らせるo 標準ではおかしいパケットを作成できないように ユーザをある程度束縛o プロトコルごとで依存しあう要素などがけっこうある
Mar 4 2016
Security Camp Forum 31
ユーザのミスを知らせる
Mar 4 2016
o length に問題がある場合◦ こんな感じに依存しあう値があると…o 実装は…
◦ 高レイヤのフィールドから設定させる(カプセル化の基本 )
◦ パケット通信の基本どうりに作るぜ
ETH
IP
UDP
Data
データ長 UDP length
IP total length
パケット長
Security Camp Forum 32
拡張しやすい設計の可能性o 新規プロトコルへの拡張を簡単に出来るようにしましたo プロトコルの拡張方法
◦ 新たなパケットクラスを実装するだけ
Mar 4 2016
Security Camp Forum 33
新規プロトコルに拡張するにはo パケットに関するクラスのナカミ ( 一部 )o pgen::packet クラスを継承するだけo pgen::packet クラスの仮装関数を実装するだけ
◦ compile() パケットのバイナリを生成◦ analyze() バイナリをパケットとして解析◦ summary() 情報出力
Mar 4 2016
本当のやるだけ
Security Camp Forum 34
Agendao パケット解析の現状
◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例
Mar 4 2016
Security Camp Forum 35
鮫ができない Follow ICMP Streamo 現実的なメリットとかは気にせず Let’s パケット解析o Wireshark の Follow TCP Stream は最高にクール でも Follow ICMP Stream はない ( ある必要は別に… )
o パケット解析の遊びですo Special Thanks: イケメンパケリスト
Mar 4 2016
Security Camp Forum 36
鮫ができない Follow ICMP Streamo 問題
◦ icmp パケットに対して画像データを分割してデータ部に くっつけられたパケットが与えられる◦ そこから元の画像にもどす◦ パケットは以下を使います https://www.cloudshark.org/captures/97e668880ded
Mar 4 2016
Security Camp Forum 37
鮫ができない Follow ICMP Stream
Mar 4 2016
Security Camp Forum 38
鮫ができない Follow ICMP Stream
Mar 4 2016
これじゃ何もわかんないから
Security Camp Forum 39
鮫ができない Follow ICMP Stream
Mar 4 2016
こうして…こうじゃ !!
やったぜ
Security Camp Forum 40
More Information
oライブラリの紹介サイト http://libpgen.org
o OSPN Press に掲載していただきました。 (version1 が ) http://www.ospn.jp/press/20160209no44-useit-oss.html
o僕のブログでも情報公開します http://blog.slankdev.net
Mar 4 2016
Security Camp Forum 41
最後にo パケットで遊ぼうo Thanks my packet and friends
Mar 4 2016
命より重い!パケットは