SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
@takahoyo
§ 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
§ 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
2015/9/30 4
§パケットを作る
§パケットを送る
§パケットを解析する
2015/9/30 5
2015/9/30
§ まずはこういうパケットを作ってみよう
2015/9/30
Ethernet IP TCP
§ プロトコルがクラスとして定義されている
-‐‑‒ Ex. Ethernet → Etherクラス
§ “/”を使うことで、複数のレイヤのパケットを作る
-‐‑‒ こういうパケットを作る場合
-‐‑‒ Ether()/IP()/TCP()
2015/9/30 8
Ethernet IP TCP
§ 次は各プロトコルフィールドに値を指定
-‐‑‒ 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
§ 引数を指定して、フィールドを特定の値で初期化
§ フィールドに対応してる変数を調べる
-‐‑‒ ls(クラス名)
-‐‑‒ Ex. Etherクラス → ls(Ether)
2015/9/30 10
§ 前述のパケットを作ると次のようになる
-‐‑‒ Ether(src="11:11:11:11:11:11",
dst="00:00:00:00:00:00”)/IP(src="192.168.1.1",
dst="192.168.1.2")/TCP(sport=1234, dport=4321, flags="S")
2015/9/30 11
§ 変数packetにパケットを保存
§ 変数packetの中⾝身を表⽰示
§ 変数packetの中⾝身をWiresharkで表⽰示
-‐‑‒ wireshark(packet)
§ 変数packetの中⾝身をexample.pcapに書き込み
-‐‑‒ wrpcap(‘example.pcap’,packet)
2015/9/30 12
§ Wiresharkで表⽰示
2015/9/30 13
§ ここまで、”Ether/IP/TCP”のパケットを作った
§ 他のプロトコルにも対応している
-‐‑‒ ls()でどのようなプロトコルが対応しているか表⽰示できる
-‐‑‒ L1~L4のプロトコルであればほぼ対応
-‐‑‒ L5~L7は、あまり対応してない雰囲気…
2015/9/30 14
2015/9/30 15
2015/9/30 16
§ まずパケットを作る
-‐‑‒ “ICMP Echo Request”パケットを作る
§ そのパケットを送る
-‐‑‒ send()で送信することができる
-‐‑‒ send()の場合、L2のプロトコルは⾃自動で調整
§ Wiresharkで⾒見見てみる
2015/9/30 17
§ 送るだけでなく、返ってきたパケットも⾒見見る
-‐‑‒ sr()を使う
-‐‑‒ sr1()を使うと最初に返ってきた⼀一つのパケットだけ⾒見見る
2015/9/30 18
§ 返ってきたパケットを変数に保存する
-‐‑‒ sr()やsr1()の戻り値は、返ってきたパケットの情報
2015/9/30 19
§ 他にもいろいろな送信⽅方法
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)
返答をすべて受信(危なそう)
§ パケット送信の応⽤用例例
§ Pythonでデータを処理理して送信する
-‐‑‒ JPEGファイルをpythonで読み込む
-‐‑‒ 読み込んだファイルを分割する
-‐‑‒ ICMPのデータ部に分割したデータを⼊入れたパケットを作る
-‐‑‒ そのパケットを送信する
-‐‑‒ https://www.cloudshark.org/captures/48a2a5e3d98e
-‐‑‒ このように変なパケットも作ることが出来る
§ 応⽤用すればもっと変なパケットを作ることも…
2015/9/30 21
2015/9/30 22
2015/9/30 23
§ pcapファイルを読み込む
-‐‑‒ rdpcap()を使う
-‐‑‒ 変数packetsに、pcapファイル内のパケットが読み込まれる
-‐‑‒ packets[n]でn-1番⽬目にあるパケットにアクセスできる
2015/9/30
§ WiresharkとScapyでパケットを⾒見見⽐比べてみる
2015/9/30 25
§ 各フィールドへのアクセス
-‐‑‒ 変数packetsにパケットが読み込まれている場合
-‐‑‒ packets[n][‘layername’].fieldname
-‐‑‒ 例例1: 1番⽬目のパケットの送信元IPアドレスを表⽰示
-‐‑‒ 例例2: 1番⽬目のパケットのICMPデータを表⽰示
2015/9/30 26
§ 処理理を⼯工夫することで様々な処理理が可能
-‐‑‒ for⽂文を使った複数のパケットの処理理
2015/9/30 27
§ これを出来ると何が嬉しい?
-‐‑‒ 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
§ まずWiresharkで⾒見見てみる
2015/9/30 29
28byteのヘッダ
29byte⽬目以降降は
HTTPのデータ
§ まずWiresharkで⾒見見てみる
2015/9/30 30
JPEGのヘッダ
§ まずWiresharkで⾒見見てみる(結果)
-‐‑‒ ICMPのデータ部分にptunnel使ったデータ
-‐‑‒ データの最初の28byteはヘッダ、それ以外はHTTP通信
-‐‑‒ “GET /flag.jpg”からflag.jpgを取得してるパケットと推測
-‐‑‒ 複数のパケットを⾒見見ると、JPEGのデータが確認できる
§ Scapy使って何をやるか
-‐‑‒ ICMPのデータを抽出
-‐‑‒ 28byteのヘッダを取り除いて、それ以外のデータをつなげる
-‐‑‒ そのデータからJPEGデータを抽出する
-‐‑‒ pythonなので、これをすべて⼀一緒にできる
2015/9/30 31
2015/9/30 32
§ ちなみに…
§ packets[n].timeでタイムスタンプにアクセスできる
2015/9/30 33
2015/9/30 34
§ 対話型であること
-‐‑‒ ⼿手軽に使える、試せる
§ Pythonであること
-‐‑‒ 他の便便利利なライブラリと⼀一緒に使える
-‐‑‒ Python最⾼高
§ 他のソフトウェアとの連携
-‐‑‒ Wireshark
-‐‑‒ nmap
-‐‑‒ p0f
§ 他のツールよりも柔軟に処理理が出来る
2015/9/30 35
§ インストールがやや⾯面倒くさい
§ Python使えないとつらい
§ 開発が⽌止まってる?
§ L5~L7レイヤに対応してくれたらなあ…
§ Pythonなのでやや遅い
-‐‑‒ その辺りはCで実装されたツールが良良いかも
§ PcapNgに対応してない
-‐‑‒ editcapで変換すれば良良いが…
2015/9/30 36
§ 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

Contenu connexe

Tendances

tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化
彰 村地
 

Tendances (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
実践イカパケット解析α
実践イカパケット解析α実践イカパケット解析α
実践イカパケット解析α
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
 
パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Marp入門
Marp入門Marp入門
Marp入門
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化Excel でパケット分析 - グラフ化
Excel でパケット分析 - グラフ化
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 

Similaire à Scapyで作る・解析するパケット

サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
エイシュン コンドウ
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
Koichi Suzuki
 

Similaire à Scapyで作る・解析するパケット (20)

Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Scapy presentation
Scapy presentationScapy presentation
Scapy presentation
 
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
C-langage
C-langageC-langage
C-langage
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpython
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみるZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
 

Plus de Takaaki Hoyo (6)

Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件についてElastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件について
 
低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
○○はいいぞ
○○はいいぞ○○はいいぞ
○○はいいぞ
 
パケットで遊ぼう! #ssmjp 2015/04
パケットで遊ぼう! #ssmjp 2015/04 パケットで遊ぼう! #ssmjp 2015/04
パケットで遊ぼう! #ssmjp 2015/04
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 

Scapyで作る・解析するパケット