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