OSC2016 Tokyo/Spring セミナー資料

2,771 views

Published on

Open Source conference 2016Tokyo Springでの
セキュリティ・キャンプ活動報告の発表資料です

Published in: Engineering
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,771
On SlideShare
0
From Embeds
0
Number of Embeds
1,546
Actions
Shares
0
Downloads
5
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

OSC2016 Tokyo/Spring セミナー資料

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

×