Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OSC2016 Tokyo/Spring セミナー資料

3,273 views

Published on

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

Published in: Engineering
  • Be the first to comment

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 命 よ り 重 い ! パ ケ ッ ト は

×