Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scapyで作る・解析するパケット/ network packets craft and analysis by Scapy

takahoyo
September 30, 2015

Scapyで作る・解析するパケット/ network packets craft and analysis by Scapy

第32回「ネットワーク パケットを読む会(仮)」で発表した資料です。 #pakeana
https://atnd.org/events/70080

takahoyo

September 30, 2015
Tweet

More Decks by takahoyo

Other Decks in Programming

Transcript

  1. § Pythonで書かれた対話型のパケット操作プログラム -‐‑‒ Pythonのライブラリとしてimportして使うことも -‐‑‒ ドキュメント(英語)が充実している § http://www.secdev.org/projects/scapy/ § http://www.secdev.org/projects/scapy/doc/index.html

    § 何ができる? -‐‑‒ パケットの⽣生成 -‐‑‒ パケットの送受信 -‐‑‒ pcapファイルの読み込み、書き込み -‐‑‒ など § 読み⽅方は、「すけいぴー」「すきゃっぴー」? -‐‑‒ http://yomikata.org/word/scapy 2015/9/30 2
  2. § Python 2系がインストールされてる環境で試した -‐‑‒ 3系は⾮非公式で対応してるらしい § Linux -‐‑‒ Kali Linuxならデフォルトでインストール

    -‐‑‒ Ubuntu : sudo apt-get install python-scapy § Mac -‐‑‒ brew : brew install libdnet scapy § 他のインストール⽅方法について -‐‑‒ 公式のドキュメントを参照(情報が少し古い -‐‑‒ http://www.secdev.org/projects/scapy/doc/installation.html 2015/9/30 3
  3. § 次は各プロトコルフィールドに値を指定 -‐‑‒ Ethernet § Src MAC Addr: 00:00:00:00:00:00 §

    Dst MAC Addr: 11:11:11:11:11:11 -‐‑‒ IP § Src IP Addr: 192.168.1.1 § Dst IP Addr: 192.168.1.2 -‐‑‒ TCP § Src port: 1234 § Dst port: 4321 § Flag: SYN 2015/9/30 9
  4. 2015/9/30 16 § まずパケットを作る -‐‑‒ “ICMP Echo Request”パケットを作る § そのパケットを送る

    -‐‑‒ send()で送信することができる -‐‑‒ send()の場合、L2のプロトコルは⾃自動で調整
  5. § 他にもいろいろな送信⽅方法 2015/9/30 20 function (引数は初期値,  N:None) 説明 send(pkt, count=1,inter=1,iface=N)

    L3レベルでのパケット送信 sendp(pkt, count=1, inter=1, iface=N) L2レベルでのパケット送信 sendfast(pkt, pps=N, mbps=N, iface=N) tcpreplayを使って送るらしい sr(pkt, filter=N, iface=N) : L3 srp(pkt, filter=N,iface=N) : L2 パケット送信 返答をすべて受信 sr1(pkt, filter=N, iface=N) : L3 srp1(pkt, filter=N, iface=N) : L2 パケット送信 返答を1つだけ受信 srflood(pkt, filter=N, iface=N) : L3 srpflood(pkt, filter=N, iface=N): L2 パケットを⼤大量量に送信(Flood) 返答をすべて受信(危なそう)
  6. § パケット送信の応⽤用例例 § Pythonでデータを処理理して送信する -‐‑‒ JPEGファイルをpythonで読み込む -‐‑‒ 読み込んだファイルを分割する -‐‑‒ ICMPのデータ部に分割したデータを⼊入れたパケットを作る

    -‐‑‒ そのパケットを送信する -‐‑‒ https://www.cloudshark.org/captures/48a2a5e3d98e -‐‑‒ このように変なパケットも作ることが出来る § 応⽤用すればもっと変なパケットを作ることも… 2015/9/30 21
  7. § これを出来ると何が嬉しい? -‐‑‒ Wiresharkで⼿手が届かない処理理が出来る § 例例. -‐‑‒ https://www.cloudshark.org/captures/20532c9a3305 -‐‑‒ ptunnelのパケット

    § 参考 : http://mrt-k.hateblo.jp/entry/2014/02/02/205332 -‐‑‒ TCPなら、Wiresharkで”Follow TCP Stream”を使える -‐‑‒ ICMPの場合、それに該当する機能がWiresharkにない -‐‑‒ ScapyならICMPのデータ部分を繋げることが出来る -‐‑‒ さらにそのデータを処理理出来る 2015/9/30 28
  8. § まずWiresharkで⾒見見てみる(結果) -‐‑‒ ICMPのデータ部分にptunnel使ったデータ -‐‑‒ データの最初の28byteはヘッダ、それ以外はHTTP通信 -‐‑‒ “GET /flag.jpg”からflag.jpgを取得してるパケットと推測 -‐‑‒

    複数のパケットを⾒見見ると、JPEGのデータが確認できる § Scapy使って何をやるか -‐‑‒ ICMPのデータを抽出 -‐‑‒ 28byteのヘッダを取り除いて、それ以外のデータをつなげる -‐‑‒ そのデータからJPEGデータを抽出する -‐‑‒ pythonなので、これをすべて⼀一緒にできる 2015/9/30 31
  9. § 対話型であること -‐‑‒ ⼿手軽に使える、試せる § Pythonであること -‐‑‒ 他の便便利利なライブラリと⼀一緒に使える -‐‑‒ Python最⾼高

    § 他のソフトウェアとの連携 -‐‑‒ Wireshark -‐‑‒ nmap -‐‑‒ p0f § 他のツールよりも柔軟に処理理が出来る 2015/9/30 35
  10. § インストールがやや⾯面倒くさい § Python使えないとつらい § 開発が⽌止まってる? § L5~L7レイヤに対応してくれたらなあ… § Pythonなのでやや遅い

    -‐‑‒ その辺りはCで実装されたツールが良良いかも § PcapNgに対応してない -‐‑‒ editcapで変換すれば良良いが… 2015/9/30 36
  11. § Scapyの公式ドキュメント -‐‑‒ http://www.secdev.org/projects/scapy/doc/index.html § Scapy Cheat Sheet -‐‑‒ http://packetlife.net/media/library/36/scapy.pdf

    § scapy でソケット通信 -‐‑‒ http://nigaky.hatenablog.com/entry/20110716/1310813250 § Scapyでのパケットの扱い⽅方 -‐‑‒ http://mrt- k.github.io/scapy,nw/2015/02/16/Scapy%E3%81%A7%E3%81 %AE%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3 %81%AE%E6%89%B1%E3%81%84%E6%96%B9/ § Scapy presentation -‐‑‒ http://www.slideshare.net/reonnishimura5/scapy-presentation 2015/9/30 37