41
パパパパパパ パパパパパパパパ パパパパ (@slankdev) パパパパパパ パパパパ 2015 パパパ Mar 4 2016 Security Camp Forum 1

Seurity Camp Award 2016

Embed Size (px)

Citation preview

Page 1: Seurity Camp Award 2016

Security Camp Forum 1

パケット解析ライブラリの開発すらんく (@slankdev)セキュリティ・キャンプ 2015 卒業生

Mar 4 2016

Page 2: Seurity Camp Award 2016

Security Camp Forum 2

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 3: Seurity Camp Award 2016

Security Camp Forum 3

はじめにo このライブラリは現在 CybozuLab 株式会社様の「サイボウズ・ラボユース」というプロジェクトで開発を支援していただいています。o セキュリティ・キャンプ関係者の方々の意見なども参考にさせていただいています。o この場を借りてありがとうございます。

Mar 4 2016

Page 4: Seurity Camp Award 2016

Security Camp Forum 4

本当は今日は… .o 去年の 12 月に公開した version1 について発表しようと思っ ていたのですが…oラボユースでの開発中にいろいろなことがありまして

Mar 4 2016

Page 5: Seurity Camp Award 2016

Security Camp Forum 5

サイボウズ ラボユースにて

Mar 4 2016

ここの実装はどうしてこうなんですか ? こうしないとダメじゃないんですか?

ラボユース初期の開発打ち合わせにて

ここは ry)

そもそも C++ のソフトウェアなのにいろいろできていな ry)

あ、そうです。なおします

はい、そこもです。

。。。。

Page 6: Seurity Camp Award 2016

Security Camp Forum 6Mar 4 2016

全部設計しなおして作り直そう

ってことでまだ全て実装しきれてないです

Page 7: Seurity Camp Award 2016

Security Camp Forum 7

注意 !!o 開発中の version2.0 の開発に関しての発表を行います

Mar 4 2016

Page 8: Seurity Camp Award 2016

Security Camp Forum 8

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 9: Seurity Camp Award 2016

Security Camp Forum 9

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 10: Seurity Camp Award 2016

Security Camp Forum 10

パケット解析の定石o Wireshark に頼った解析 ( ダメとは全く言っていない )o ディスプレイフィルタや、豊富な情報処理機能が最高o はっきり言って、解析しているのは人でなく鮫

Mar 4 2016

おう、このパケットどうよ ?

length があってないでシャークおかしいでシャーク

Page 11: Seurity Camp Award 2016

Security Camp Forum 11

このパケット解析だけでは…o 鮫のしらないプロトコルの出現 !! ドウスル…o パケット解析、処理能力の必要性

Mar 4 2016

理想

現実

Page 12: Seurity Camp Award 2016

Security Camp Forum 12

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 13: Seurity Camp Award 2016

Security Camp Forum 13

パケット解析はもっとこうあるべきo 自由にプログラミングしたい。。もっと色々遊びたいo 見るだけじゃ。。。キマらないo パケットを作りたい、変えたい

Mar 4 2016

おう、頼りにしてるけど一人でもある程度出来るぜ

すごいでシャークすごいでシャーク

Page 14: Seurity Camp Award 2016

Security Camp Forum 14

理想o プログラミングしたいo 簡単で自由自在にパケットを弄くり倒したい

Mar 4 2016

パケット解析なんて

Page 15: Seurity Camp Award 2016

Security Camp Forum 15

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 16: Seurity Camp Award 2016

Security Camp Forum 16

LibPGEN: とはo 読み方は「りぶ ぴーじぇん」ですo C++ で利用可能なパケット解析ライブラリoユーザが正しくパケットを作る補助などの機能ありoもちろん好き勝手にいじくれるようにしました

Mar 4 2016

Page 17: Seurity Camp Award 2016

Security Camp Forum 17

LibPGEN: 概要o 簡単なコードでパケットを弄り倒せるo この界隈では Scapy が有名ですが、それの C++ 版みたいなo パケット解析だけでなく、様々な機能を追加予定

Mar 4 2016

Page 18: Seurity Camp Award 2016

Security Camp Forum 18

LibPGEN: 特徴と新規性o 新規性

◦ パケットを扱うライブラリ◦ 既存ライブラリでは目的を重視 ◦ このライブラリでは仮定を重視◦ その方が勉強になるんじゃねo 特徴

◦ 拡張しやすい設計に◦ プロトコルの知識さえあれば弄り倒せる

Mar 4 2016

Page 19: Seurity Camp Award 2016

Security Camp Forum 19

LibPGEN: 特徴と新規性o 有名どころのライブラリは…o 目的重視 → アプリケーション開発などには最適

Mar 4 2016

Page 20: Seurity Camp Award 2016

Security Camp Forum 20

LibPGEN: 特徴と新規性o LibPGEN は…o パケット単位でのプログラミング o 通信に至る過程を重視 → いろんなことを学べるかもね

Mar 4 2016

Page 21: Seurity Camp Award 2016

Security Camp Forum 21

LibPGEN: 特徴と新規性o 現在対応のプロトコル (version1 では )

◦ Ethernet, ARP, IP, ICMP, TCP, UDP

o これ以外のプロトコルは拡張が容易な設計に ( 後述 )

Mar 4 2016

Page 22: Seurity Camp Award 2016

Security Camp Forum 22

LibPGEN: 今後の展開o 様々なプロトコルをサポート?

Mar 4 2016

Page 23: Seurity Camp Award 2016

Security Camp Forum 23

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 24: Seurity Camp Award 2016

Security Camp Forum 24

アーキテクチャ

Mar 4 2016

IO Controller

Address Controller

Module

Packet Controller

Page 25: Seurity Camp Award 2016

Security Camp Forum 25

3 つのコンポーネントに分割o IO Controller

◦ データの入出力を担当◦ネットワークインターフェースに送受信◦ PCAP, PCAPNG ファイルに書き込みo Address Controller

◦ アドレス処理などを担当◦文字列からアドレスなどo Packet Controller

◦ 様々なプロトコルのパケットを解析、作成などを担当o Module

◦上の三つを使って書かれたモジュール群Mar 4 2016

Page 26: Seurity Camp Award 2016

Security Camp Forum 26

Packet, Address Controllero パケットやアドレスのバイナリの生成や、解析などを行うo 簡単なインターフェースでパケットのデータを編集などを 可能にしますo 例えば ARP パケットならこんな感じ

Mar 4 2016

Page 27: Seurity Camp Award 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

Page 28: Seurity Camp Award 2016

Security Camp Forum 28

IO Controllero データの入出力を管理するクラス

◦ネットワークインターフェース◦ pcap ファイル◦ pcapNg ファイルo 既存の stream クラスと使い方は全く一緒o 以下以外の方法もあります

Mar 4 2016

Page 29: Seurity Camp Award 2016

Security Camp Forum 29

実装についてo 初めて C++ での開発っぽいものをしたので 僕にはかなりむずかしいです ( もやし )

Mar 4 2016

Page 30: Seurity Camp Award 2016

Security Camp Forum 30

ユーザのミスを知らせるo 標準ではおかしいパケットを作成できないように ユーザをある程度束縛o プロトコルごとで依存しあう要素などがけっこうある

Mar 4 2016

Page 31: Seurity Camp Award 2016

Security Camp Forum 31

ユーザのミスを知らせる

Mar 4 2016

o length に問題がある場合◦ こんな感じに依存しあう値があると…o 実装は…

◦ 高レイヤのフィールドから設定させる(カプセル化の基本 )

◦ パケット通信の基本どうりに作るぜ

ETH

IP

UDP

Data

データ長 UDP length

IP total length

パケット長

Page 32: Seurity Camp Award 2016

Security Camp Forum 32

拡張しやすい設計の可能性o 新規プロトコルへの拡張を簡単に出来るようにしましたo プロトコルの拡張方法

◦ 新たなパケットクラスを実装するだけ

Mar 4 2016

Page 33: Seurity Camp Award 2016

Security Camp Forum 33

新規プロトコルに拡張するにはo パケットに関するクラスのナカミ ( 一部 )o pgen::packet クラスを継承するだけo pgen::packet クラスの仮装関数を実装するだけ

◦ compile() パケットのバイナリを生成◦ analyze() バイナリをパケットとして解析◦ summary() 情報出力

Mar 4 2016

本当のやるだけ

Page 34: Seurity Camp Award 2016

Security Camp Forum 34

Agendao パケット解析の現状

◦ パケット解析の定石◦ パケット解析はもっとこうあるべきo LibPGEN の紹介o LibPGEN の設計o LibPGEN の使用例

Mar 4 2016

Page 35: Seurity Camp Award 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

Page 36: Seurity Camp Award 2016

Security Camp Forum 36

鮫ができない Follow ICMP Streamo 問題

◦ icmp パケットに対して画像データを分割してデータ部に くっつけられたパケットが与えられる◦ そこから元の画像にもどす◦ パケットは以下を使います https://www.cloudshark.org/captures/97e668880ded

Mar 4 2016

Page 37: Seurity Camp Award 2016

Security Camp Forum 37

鮫ができない Follow ICMP Stream

Mar 4 2016

Page 38: Seurity Camp Award 2016

Security Camp Forum 38

鮫ができない Follow ICMP Stream

Mar 4 2016

これじゃ何もわかんないから

Page 39: Seurity Camp Award 2016

Security Camp Forum 39

鮫ができない Follow ICMP Stream

Mar 4 2016

こうして…こうじゃ !!

やったぜ

Page 40: Seurity Camp Award 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

Page 41: Seurity Camp Award 2016

Security Camp Forum 41

最後にo パケットで遊ぼうo Thanks my packet and friends

Mar 4 2016

命より重い!パケットは