Submit Search
Upload
Scapyで作る・解析するパケット
•
38 likes
•
35,680 views
Takaaki Hoyo
Follow
第32回「ネットワーク パケットを読む会(仮)」で発表した資料です。 #pakeana https://atnd.org/events/70080
Read less
Read more
Engineering
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 37
Download now
Download to read offline
Recommended
Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Recommended
Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
Shohei Okada
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介
morihisa
Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
Kumapone
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
Shuji Yamada
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
ELFの動的リンク
ELFの動的リンク
7shi
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Scapy presentation
Scapy presentation
ashigirl ZareGoto
More Related Content
What's hot
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
Shohei Okada
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介
morihisa
Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
Kumapone
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
Shuji Yamada
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
ELFの動的リンク
ELFの動的リンク
7shi
HTTP/2 入門
HTTP/2 入門
Yahoo!デベロッパーネットワーク
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
What's hot
(20)
Glibc malloc internal
Glibc malloc internal
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介
Protocol Buffers 入門
Protocol Buffers 入門
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
分散システムについて語らせてくれ
分散システムについて語らせてくれ
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Pcapngを読んでみる
Pcapngを読んでみる
ELFの動的リンク
ELFの動的リンク
HTTP/2 入門
HTTP/2 入門
暗号技術の実装と数学
暗号技術の実装と数学
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
TLS, HTTP/2演習
TLS, HTTP/2演習
Similar to Scapyで作る・解析するパケット
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Scapy presentation
Scapy presentation
ashigirl ZareGoto
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
Yuuki Takano
サーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
ashigirl ZareGoto
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
OpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
らくちん Go言語
らくちん Go言語
株式会社YEBIS.XYZ
C-langage
C-langage
Hiramatsu Ryosuke
Trema day 1
Trema day 1
ykuga
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
Pdp11 on-fpga
Pdp11 on-fpga
magoroku Yamamoto
FD.io VPP事始め
FD.io VPP事始め
tetsusat
PostgreSQLとpython
PostgreSQLとpython
Soudai Sone
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
エイシュン コンドウ
about Tcpreplay
about Tcpreplay
@ otsuka752
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
Masaru Oki
VPP事始め
VPP事始め
npsg
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
Koichi Suzuki
Similar to Scapyで作る・解析するパケット
(20)
Subprocess no susume
Subprocess no susume
Scapy presentation
Scapy presentation
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
サーバー実装いろいろ
サーバー実装いろいろ
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
OpenStack + Common Lisp
OpenStack + Common Lisp
らくちん Go言語
らくちん Go言語
C-langage
C-langage
Trema day 1
Trema day 1
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
Pdp11 on-fpga
Pdp11 on-fpga
FD.io VPP事始め
FD.io VPP事始め
PostgreSQLとpython
PostgreSQLとpython
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
about Tcpreplay
about Tcpreplay
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
VPP事始め
VPP事始め
ZFSのソースコードをチラ見してみる
ZFSのソースコードをチラ見してみる
More from Takaaki Hoyo
Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件について
Takaaki Hoyo
低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察
Takaaki Hoyo
CpawCTF 勉強会 Network
CpawCTF 勉強会 Network
Takaaki Hoyo
○○はいいぞ
○○はいいぞ
Takaaki Hoyo
パケットで遊ぼう! #ssmjp 2015/04
パケットで遊ぼう! #ssmjp 2015/04
Takaaki Hoyo
hpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
More from Takaaki Hoyo
(6)
Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件について
低対話型サーバハニーポットの運用結果及び考察
低対話型サーバハニーポットの運用結果及び考察
CpawCTF 勉強会 Network
CpawCTF 勉強会 Network
○○はいいぞ
○○はいいぞ
パケットで遊ぼう! #ssmjp 2015/04
パケットで遊ぼう! #ssmjp 2015/04
hpingで作るパケット
hpingで作るパケット
Scapyで作る・解析するパケット
1.
@takahoyo
2.
§ 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
3.
§ 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
4.
2015/9/30 4
5.
§パケットを作る §パケットを送る §パケットを解析する 2015/9/30 5
6.
2015/9/30
7.
§ まずはこういうパケットを作ってみよう 2015/9/30 Ethernet IP
TCP
8.
§ プロトコルがクラスとして定義されている -‐‑‒ Ex.
Ethernet → Etherクラス § “/”を使うことで、複数のレイヤのパケットを作る -‐‑‒ こういうパケットを作る場合 -‐‑‒ Ether()/IP()/TCP() 2015/9/30 8 Ethernet IP TCP
9.
§ 次は各プロトコルフィールドに値を指定 -‐‑‒ 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
10.
§ 引数を指定して、フィールドを特定の値で初期化 § フィールドに対応してる変数を調べる -‐‑‒
ls(クラス名) -‐‑‒ Ex. Etherクラス → ls(Ether) 2015/9/30 10
11.
§ 前述のパケットを作ると次のようになる -‐‑‒ 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
12.
§ 変数packetにパケットを保存 § 変数packetの中⾝身を表⽰示 §
変数packetの中⾝身をWiresharkで表⽰示 -‐‑‒ wireshark(packet) § 変数packetの中⾝身をexample.pcapに書き込み -‐‑‒ wrpcap(‘example.pcap’,packet) 2015/9/30 12
13.
§ Wiresharkで表⽰示 2015/9/30 13
14.
§ ここまで、”Ether/IP/TCP”のパケットを作った § 他のプロトコルにも対応している -‐‑‒
ls()でどのようなプロトコルが対応しているか表⽰示できる -‐‑‒ L1~L4のプロトコルであればほぼ対応 -‐‑‒ L5~L7は、あまり対応してない雰囲気… 2015/9/30 14
15.
2015/9/30 15
16.
2015/9/30 16 § まずパケットを作る -‐‑‒
“ICMP Echo Request”パケットを作る § そのパケットを送る -‐‑‒ send()で送信することができる -‐‑‒ send()の場合、L2のプロトコルは⾃自動で調整
17.
§ Wiresharkで⾒見見てみる 2015/9/30 17
18.
§ 送るだけでなく、返ってきたパケットも⾒見見る -‐‑‒ sr()を使う -‐‑‒
sr1()を使うと最初に返ってきた⼀一つのパケットだけ⾒見見る 2015/9/30 18
19.
§ 返ってきたパケットを変数に保存する -‐‑‒ sr()やsr1()の戻り値は、返ってきたパケットの情報 2015/9/30
19
20.
§ 他にもいろいろな送信⽅方法 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) 返答をすべて受信(危なそう)
21.
§ パケット送信の応⽤用例例 § Pythonでデータを処理理して送信する -‐‑‒
JPEGファイルをpythonで読み込む -‐‑‒ 読み込んだファイルを分割する -‐‑‒ ICMPのデータ部に分割したデータを⼊入れたパケットを作る -‐‑‒ そのパケットを送信する -‐‑‒ https://www.cloudshark.org/captures/48a2a5e3d98e -‐‑‒ このように変なパケットも作ることが出来る § 応⽤用すればもっと変なパケットを作ることも… 2015/9/30 21
22.
2015/9/30 22
23.
2015/9/30 23
24.
§ pcapファイルを読み込む -‐‑‒ rdpcap()を使う -‐‑‒
変数packetsに、pcapファイル内のパケットが読み込まれる -‐‑‒ packets[n]でn-1番⽬目にあるパケットにアクセスできる 2015/9/30
25.
§ WiresharkとScapyでパケットを⾒見見⽐比べてみる 2015/9/30 25
26.
§ 各フィールドへのアクセス -‐‑‒ 変数packetsにパケットが読み込まれている場合 -‐‑‒
packets[n][‘layername’].fieldname -‐‑‒ 例例1: 1番⽬目のパケットの送信元IPアドレスを表⽰示 -‐‑‒ 例例2: 1番⽬目のパケットのICMPデータを表⽰示 2015/9/30 26
27.
§ 処理理を⼯工夫することで様々な処理理が可能 -‐‑‒ for⽂文を使った複数のパケットの処理理 2015/9/30
27
28.
§ これを出来ると何が嬉しい? -‐‑‒ 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
29.
§ まずWiresharkで⾒見見てみる 2015/9/30 29 28byteのヘッダ 29byte⽬目以降降は HTTPのデータ
30.
§ まずWiresharkで⾒見見てみる 2015/9/30 30 JPEGのヘッダ
31.
§ まずWiresharkで⾒見見てみる(結果) -‐‑‒ ICMPのデータ部分にptunnel使ったデータ -‐‑‒
データの最初の28byteはヘッダ、それ以外はHTTP通信 -‐‑‒ “GET /flag.jpg”からflag.jpgを取得してるパケットと推測 -‐‑‒ 複数のパケットを⾒見見ると、JPEGのデータが確認できる § Scapy使って何をやるか -‐‑‒ ICMPのデータを抽出 -‐‑‒ 28byteのヘッダを取り除いて、それ以外のデータをつなげる -‐‑‒ そのデータからJPEGデータを抽出する -‐‑‒ pythonなので、これをすべて⼀一緒にできる 2015/9/30 31
32.
2015/9/30 32
33.
§ ちなみに… § packets[n].timeでタイムスタンプにアクセスできる 2015/9/30
33
34.
2015/9/30 34
35.
§ 対話型であること -‐‑‒ ⼿手軽に使える、試せる §
Pythonであること -‐‑‒ 他の便便利利なライブラリと⼀一緒に使える -‐‑‒ Python最⾼高 § 他のソフトウェアとの連携 -‐‑‒ Wireshark -‐‑‒ nmap -‐‑‒ p0f § 他のツールよりも柔軟に処理理が出来る 2015/9/30 35
36.
§ インストールがやや⾯面倒くさい § Python使えないとつらい §
開発が⽌止まってる? § L5~L7レイヤに対応してくれたらなあ… § Pythonなのでやや遅い -‐‑‒ その辺りはCで実装されたツールが良良いかも § PcapNgに対応してない -‐‑‒ editcapで変換すれば良良いが… 2015/9/30 36
37.
§ 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
Download now