osc2016 tokyo/spring セミナー資料

50
パケット解析 ライブラリの開発 セキュリティ・キャンプ卒業生 活動報告 すらんく (@slankdev) セキュリティ・キャンプ 2015 卒業生 Feb 26 2016 OSC 2016 Tokyo/Spring 1

Upload: slankdev

Post on 21-Apr-2017

2.846 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: OSC2016 Tokyo/Spring セミナー資料

パケット解析ライブラリの開発セキュリティ・キャンプ卒業生 活動報告

すらんく (@slankdev)

セキュリティ・キャンプ 2015  卒業生

Feb  26  2016 OSC  2016  Tokyo/Spring 1

Page 2: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 2

Page 3: OSC2016 Tokyo/Spring セミナー資料

はじめに

oこのライブラリは現在CybozuLab株式会社様の「サイボウズ・ラボユース」というプロジェクトで開発を支援していただいています。

o他にもセキュリティ・キャンプ関係者の方々をはじめたくさんの方の意見なども参考にさせていただいています。

oこの場を借りてありがとうございます。

Feb  26  2016 OSC  2016  Tokyo/Spring 3

Page 4: OSC2016 Tokyo/Spring セミナー資料

本当は今日は….o去年の12月に公開したversion1について発表しようと思っていたのですが…

oラボユースでの開発中にいろいろなことがありまして

o今回のと関係ありませんが、ラボユースとてもたのしい

Feb  26  2016 OSC  2016  Tokyo/Spring 4

Page 5: OSC2016 Tokyo/Spring セミナー資料

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

Feb  26  2016 OSC  2016  Tokyo/Spring 5

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

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

ここはry)

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

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

はい、そこもです。

。。。。

。。。。

Page 6: OSC2016 Tokyo/Spring セミナー資料

Feb  26  2016 OSC  2016  Tokyo/Spring 6

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

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

Page 7: OSC2016 Tokyo/Spring セミナー資料

注意!!o開発中のversion2.0の開発に関しての発表を行いますoここでの意見や見解は個人的なものです。

oあんまり気にしすぎないでください

Feb  26  2016 OSC  2016  Tokyo/Spring 7

Page 8: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 8

Page 9: OSC2016 Tokyo/Spring セミナー資料

パケット解析の定石

oWiresharkに頼った解析(ダメとは全く言っていない)oディスプレイフィルタや、豊富な情報処理機能が最高

oはっきり言って、解析しているのは人でなく鮫

Feb  26  2016 OSC  2016  Tokyo/Spring 9

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

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

Page 10: OSC2016 Tokyo/Spring セミナー資料

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

Feb  26  2016 OSC  2016  Tokyo/Spring 10

理想

現実

Page 11: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 11

Page 12: OSC2016 Tokyo/Spring セミナー資料

パケット解析はもっとこうあるべき

o自由にプログラミングしたい。。もっと色々遊びたい

o見るだけじゃ。。。キマらない

oパケットを作りたい、変えたい

Feb  26  2016 OSC  2016  Tokyo/Spring 12

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

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

Page 13: OSC2016 Tokyo/Spring セミナー資料

理想

oプログラミングしたい

o簡単で自由自在にパケットを弄くり倒したい

Feb  26  2016 OSC  2016  Tokyo/Spring 13

パケット解析なんて

Page 14: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 14

Page 15: OSC2016 Tokyo/Spring セミナー資料

LibPGEN:  とはo読み方は「りぶぴーじぇん」です

o C++で利用可能なパケット解析ライブラリ

oユーザが正しくパケットを作る補助などの機能あり

oもちろん好き勝手にいじくれるようにしました

Feb  26  2016 OSC  2016  Tokyo/Spring 15

Page 16: OSC2016 Tokyo/Spring セミナー資料

LibPGEN:  概要o簡単なコードでパケットを弄り倒せる

oパケット解析だけでなく、様々な機能を追加予定

Feb  26  2016 OSC  2016  Tokyo/Spring 16

Page 17: OSC2016 Tokyo/Spring セミナー資料

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

Feb  26  2016 OSC  2016  Tokyo/Spring 17

Page 18: OSC2016 Tokyo/Spring セミナー資料

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

Feb  26  2016 OSC  2016  Tokyo/Spring 18

Page 19: OSC2016 Tokyo/Spring セミナー資料

LibPGEN:  特徴と新規性o LibPGENは…oパケット単位でのプログラミング

o通信に至る過程を重視→いろんなことを学べるかもね

Feb  26  2016 OSC  2016  Tokyo/Spring 19

Page 20: OSC2016 Tokyo/Spring セミナー資料

LibPGEN:  特徴と新規性o特徴◦拡張しやすい設計に◦プロトコルの知識さえあれば弄り倒せる

Feb  26  2016 OSC  2016  Tokyo/Spring 20

Page 21: OSC2016 Tokyo/Spring セミナー資料

LibPGEN:  特徴と新規性o現在対応のプロトコル (version1では)◦ Ethernet,  ARP,  IP,  ICMP,  TCP,  UDP  

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

Feb  26  2016 OSC  2016  Tokyo/Spring 21

Page 22: OSC2016 Tokyo/Spring セミナー資料

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

Feb  26  2016 OSC  2016  Tokyo/Spring 22

Page 23: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 23

Page 24: OSC2016 Tokyo/Spring セミナー資料

アーキテクチャ

Feb  26  2016 OSC  2016  Tokyo/Spring 24

IO  Controller

Address  Controller

Module

Packet  Controller

Page 25: OSC2016 Tokyo/Spring セミナー資料

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

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

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

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

Feb  26  2016 OSC  2016  Tokyo/Spring 25

Page 26: OSC2016 Tokyo/Spring セミナー資料

Packet,  Address  Controlleroパケットやアドレスのバイナリの生成や、解析などを行う

o簡単なインターフェースでパケットのデータを編集などを可能にします

o例えばARPパケットならこんな感じ

Feb  26  2016 OSC  2016  Tokyo/Spring 26

Page 27: OSC2016 Tokyo/Spring セミナー資料

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

Page 28: OSC2016 Tokyo/Spring セミナー資料

IO  Controlleroデータの入出力を管理するクラス◦ネットワークインターフェース◦ pcapファイル◦ pcapNgファイル

o既存のstreamクラスと使い方は全く一緒o以下以外の方法もあります

Feb  26  2016 OSC  2016  Tokyo/Spring 28

Page 29: OSC2016 Tokyo/Spring セミナー資料

実装について

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

Feb  26  2016 OSC  2016  Tokyo/Spring 29

Page 30: OSC2016 Tokyo/Spring セミナー資料

ユーザのミスを知らせる

o標準ではおかしいパケットを作成できないようにユーザをある程度束縛

oプロトコルごとで依存しあう要素などがけっこうある

Feb  26  2016 OSC  2016  Tokyo/Spring 30

Page 31: OSC2016 Tokyo/Spring セミナー資料

ユーザのミスを知らせる

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

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

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

Feb  26  2016 OSC  2016  Tokyo/Spring 31

ETH

IP

UDP

Data

データ長 UDP  length

IP  total  length

パケット長

Page 32: OSC2016 Tokyo/Spring セミナー資料

拡張しやすい設計の可能性

o新規プロトコルへの拡張を簡単に出来るようにしました

oプロトコルの拡張方法◦新たなパケットクラスを実装するだけ

Feb  26  2016 OSC  2016  Tokyo/Spring 32

Page 33: OSC2016 Tokyo/Spring セミナー資料

新規プロトコルに拡張するには

oパケットに関するクラスのナカミ (一部)o pgen::packetクラスを継承するだけo pgen::packetクラスの仮装関数を実装するだけ◦ compile()    パケットのバイナリを生成◦ analyze() バイナリをパケットとして解析◦ summary()  情報出力

Feb  26  2016 OSC  2016  Tokyo/Spring 33

本当のやるだけ

Page 34: OSC2016 Tokyo/Spring セミナー資料

pgen::packetクラスのヘッダ

Feb  26  2016 OSC  2016  Tokyo/Spring 34

Page 35: OSC2016 Tokyo/Spring セミナー資料

Agendao パケット解析の現状◦パケット解析の定石◦パケット解析はもっとこうあるべき

o LibPGENの紹介o LibPGENの設計o LibPGENの使用例

Feb  26  2016 OSC  2016  Tokyo/Spring 35

Page 36: OSC2016 Tokyo/Spring セミナー資料

使用例の紹介

o時間に応じて変更します

1. Pingプログラム2. 鮫ができないFollow  ICMP  Stream

Feb  26  2016 OSC  2016  Tokyo/Spring 36

Page 37: OSC2016 Tokyo/Spring セミナー資料

Pingコマンドの作成oとてもシンプルなpingコマンドの作成o ICMPパケットを送って受け取り次第表示して、次にすすむだけ

oEthernetヘッダとかの設定は詳しくはしない。

Feb  26  2016 OSC  2016  Tokyo/Spring 37

Page 38: OSC2016 Tokyo/Spring セミナー資料

Pingコマンドの作成

Feb  26  2016 OSC  2016  Tokyo/Spring 38

Page 39: OSC2016 Tokyo/Spring セミナー資料

Pingコマンドの作成

Feb  26  2016 OSC  2016  Tokyo/Spring 39

Page 40: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Streamo現実的なメリットとかは気にせず Let’s  パケット解析

oWiresharkのFollow  TCP  Streamは最高にクールでもFollow  ICMP  Streamはない (ある必要は別に…)

oパケット解析の遊びです

Feb  26  2016 OSC  2016  Tokyo/Spring 40

Page 41: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Streamo問題◦ icmpパケットに対して画像データを分割してデータ部にくっつけられたパケットが与えられる

◦そこから元の画像にもどす◦パケットは以下を使いますhttps://www.cloudshark.org/captures/97e668880ded

Feb  26  2016 OSC  2016  Tokyo/Spring 41

Page 42: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Stream

oこのような通信のパケットを解析して、元の画像を整形

o実用性。。。ないです。

o解析の遊びとしてはおもしろい

Feb  26  2016 OSC  2016  Tokyo/Spring 42

ETH IP ICMP 分割された画像データ

Page 43: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Streamo作成するプログラムはこんな感じ1. パケットを受信2. 受信したパケットがICMP  Echo  Requestならそのデータ部分をファイルに出力

o これだけ、だけど何もないところからやると少しだけ大変

Feb  26  2016 OSC  2016  Tokyo/Spring 43

Page 44: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Stream

Feb  26  2016 OSC  2016  Tokyo/Spring 44

Page 45: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Stream

Feb  26  2016 OSC  2016  Tokyo/Spring 45

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

Page 46: OSC2016 Tokyo/Spring セミナー資料

鮫ができないFollow  ICMP  Stream

Feb  26  2016 OSC  2016  Tokyo/Spring 46

こうして…こうじゃ!!

やったぜ

Page 47: OSC2016 Tokyo/Spring セミナー資料

もしLibPGENを使わないとoまずデータの入出力のインターフェースを用意しないといけない。

oパケット一つ一つをその場で解析するスクリプトをいちいち作成するのに時間がかかる。

oアイディアが浮かんでからすぐに実装できない

Feb  26  2016 OSC  2016  Tokyo/Spring 47

Page 48: OSC2016 Tokyo/Spring セミナー資料

こんな人におすすめ

oパケットをつかって遊びたい人(僕)oネットワークの勉強中の人

o既知の攻撃方法などのテストやファジングなど

Feb  26  2016 OSC  2016  Tokyo/Spring 48

Page 49: OSC2016 Tokyo/Spring セミナー資料

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

Page 50: OSC2016 Tokyo/Spring セミナー資料

最後に

oパケットで遊ぼう

o Thanks  my  packet  and  friends

Feb  26  2016 OSC  2016  Tokyo/Spring 50

命より重い!

パケットは