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.

Seurity Camp Award 2016

676 views

Published on

セキュリティ・キャンプ アワード2016の最終審査の発表資料です。パケット解析のライブラリについてお話しします。

Published in: Engineering
  • Be the first to comment

Seurity Camp Award 2016

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

×