SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
パケット解析
ライブラリの開発
セキュリティ・キャンプ卒業生 活動報告
すらんく (@slankdev)
セキュリティ・キャンプ 2015	
  卒業生
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 1
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
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
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
o LibPGENの紹介
o LibPGENの設計
o LibPGENの使用例
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 8
パケット解析の定石
o Wiresharkに頼った解析(ダメとは全く言っていない)
o ディスプレイフィルタや、豊富な情報処理機能が最高
o はっきり言って、解析しているのは人でなく鮫
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 9
おう、このパケットどうよ?
lengthがあってないでシャーク
おかしいでシャーク
このパケット解析だけでは…
o 鮫のしらないプロトコルの出現!!	
  	
  	
  	
  à ドウスル…
o パケット解析、処理能力の必要性
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 10
理想
現実
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
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
パ
ケ
ッ
ト
解
析
な
ん
て
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
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
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
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
◦ 様々なプロトコルのパケットを解析、作成などを担当
o Module
◦ 上の三つを使って書かれたモジュール群
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 25
Packet,	
  Address	
  Controller
o パケットやアドレスのバイナリの生成や、解析などを行う
o 簡単なインターフェースでパケットのデータを編集などを
可能にします
o 例えばARPパケットならこんな感じ
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 26
Packet,	
  Address	
  class
o 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	
  Controller
o データの入出力を管理するクラス
◦ ネットワークインターフェース
◦ 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
E
T
H
I
P
U
D
P
D
a
t
a
データ長
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
Agenda
o パケット解析の現状
◦ パケット解析の定石
◦ パケット解析はもっとこうあるべき
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	
  Stream
o 現実的なメリットとかは気にせず Let’s	
  パケット解析
o WiresharkのFollow	
  TCP	
  Streamは最高にクール
でもFollow	
  ICMP	
  Streamはない (ある必要は別に…)
o パケット解析の遊びです
Feb	
  26	
  2016 OSC	
  2016	
  Tokyo/Spring 40
鮫ができないFollow	
  ICMP	
  Stream
o 問題
◦ 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	
  Stream
o 作成するプログラムはこんな感じ
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
o OSPN	
  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
命
よ
り
重
い
!
パ
ケ
ッ
ト
は

Weitere ähnliche Inhalte

Was ist angesagt?

Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
hiroshi oshiba
 
140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon
Ryo ONODERA
 
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Jun Omae
 

Was ist angesagt? (20)

Kernel vm13lt
Kernel vm13ltKernel vm13lt
Kernel vm13lt
 
OSC2017Hokkaido
OSC2017HokkaidoOSC2017Hokkaido
OSC2017Hokkaido
 
CSRを自動生成する!
CSRを自動生成する!CSRを自動生成する!
CSRを自動生成する!
 
RgGen ご紹介
RgGen ご紹介RgGen ご紹介
RgGen ご紹介
 
20090124shibuya Trac
20090124shibuya Trac20090124shibuya Trac
20090124shibuya Trac
 
最近のrubyのインストール方法
最近のrubyのインストール方法最近のrubyのインストール方法
最近のrubyのインストール方法
 
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
 
Kotlin と Rxjava2
Kotlin と Rxjava2Kotlin と Rxjava2
Kotlin と Rxjava2
 
Turnip
TurnipTurnip
Turnip
 
140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon140607 lib o-mini_con-ryoon
140607 lib o-mini_con-ryoon
 
Linux環境でのTracの導入
Linux環境でのTracの導入Linux環境でのTracの導入
Linux環境でのTracの導入
 
LibreOfficeの品質向上活動について
LibreOfficeの品質向上活動についてLibreOfficeの品質向上活動について
LibreOfficeの品質向上活動について
 
Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-
 
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
Trac 0.12 と今後の動向および Trac への貢献 - tanabata.trac 2010-07-07
 
SECCON2014 crypt200
SECCON2014 crypt200SECCON2014 crypt200
SECCON2014 crypt200
 
鹿児島Linux勉強会2016.04
鹿児島Linux勉強会2016.04鹿児島Linux勉強会2016.04
鹿児島Linux勉強会2016.04
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
自分的pkgsrcの課題
自分的pkgsrcの課題自分的pkgsrcの課題
自分的pkgsrcの課題
 
俺のRails開発環境
俺のRails開発環境俺のRails開発環境
俺のRails開発環境
 
Mishimasyk 3 20140705
Mishimasyk 3 20140705Mishimasyk 3 20140705
Mishimasyk 3 20140705
 

Andere mochten auch (6)

SimpleとEasyの選択
SimpleとEasyの選択SimpleとEasyの選択
SimpleとEasyの選択
 
どうしてコードはレガシーになるのか
どうしてコードはレガシーになるのかどうしてコードはレガシーになるのか
どうしてコードはレガシーになるのか
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務(旧版) オープンソースライセンスの基礎と実務
(旧版) オープンソースライセンスの基礎と実務
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 

Ähnlich wie OSC2016 Tokyo/Spring セミナー資料

Ähnlich wie OSC2016 Tokyo/Spring セミナー資料 (20)

LibreOfficeとモバイルデバイス
LibreOfficeとモバイルデバイスLibreOfficeとモバイルデバイス
LibreOfficeとモバイルデバイス
 
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
 
OSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUG
 
告知 ー OSnuC Kawagoe 2018
告知 ー OSnuC Kawagoe 2018告知 ー OSnuC Kawagoe 2018
告知 ー OSnuC Kawagoe 2018
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528
 
OpenStack Now!
OpenStack Now!OpenStack Now!
OpenStack Now!
 
OpenStack Summit Report
OpenStack Summit ReportOpenStack Summit Report
OpenStack Summit Report
 
ここが違う! OSC Tokyo と台湾の COSCUP
ここが違う! OSC Tokyo と台湾の COSCUPここが違う! OSC Tokyo と台湾の COSCUP
ここが違う! OSC Tokyo と台湾の COSCUP
 
オープンソースとロボット
オープンソースとロボットオープンソースとロボット
オープンソースとロボット
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
Osc京都 160730
Osc京都 160730Osc京都 160730
Osc京都 160730
 
Agile Japan 2016 札幌サテライト 本当に必要な問題解決に集中しよう!~CCPMを活用した現場改善のケーススタディ~
Agile Japan 2016 札幌サテライト 本当に必要な問題解決に集中しよう!~CCPMを活用した現場改善のケーススタディ~Agile Japan 2016 札幌サテライト 本当に必要な問題解決に集中しよう!~CCPMを活用した現場改善のケーススタディ~
Agile Japan 2016 札幌サテライト 本当に必要な問題解決に集中しよう!~CCPMを活用した現場改善のケーススタディ~
 
20150227 オープンソースカンファレンス Tokyo 2015 Spring
20150227 オープンソースカンファレンス Tokyo 2015 Spring20150227 オープンソースカンファレンス Tokyo 2015 Spring
20150227 オープンソースカンファレンス Tokyo 2015 Spring
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
AIの力で障害検知・解析をサポート!Loom(ログ解析ソリューション)のご紹介 - OpenStack最新情報セミナー 2017年7月
AIの力で障害検知・解析をサポート!Loom(ログ解析ソリューション)のご紹介 - OpenStack最新情報セミナー 2017年7月AIの力で障害検知・解析をサポート!Loom(ログ解析ソリューション)のご紹介 - OpenStack最新情報セミナー 2017年7月
AIの力で障害検知・解析をサポート!Loom(ログ解析ソリューション)のご紹介 - OpenStack最新情報セミナー 2017年7月
 
ネタ募集箱を支える技術 開発環境編
ネタ募集箱を支える技術 開発環境編ネタ募集箱を支える技術 開発環境編
ネタ募集箱を支える技術 開発環境編
 
Recent Information about LibreOffice
Recent Information about LibreOfficeRecent Information about LibreOffice
Recent Information about LibreOffice
 

OSC2016 Tokyo/Spring セミナー資料