Enviar pesquisa
Carregar
Scapyで作る・解析するパケット
•
38 gostaram
•
35,659 visualizações
Takaaki Hoyo
Seguir
第32回「ネットワーク パケットを読む会(仮)」で発表した資料です。 #pakeana https://atnd.org/events/70080
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 37
Baixar agora
Baixar para ler offline
Recomendados
Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
Recomendados
Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
Pcapngを読んでみる
Pcapngを読んでみる
Yagi Shinnosuke
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Scapy presentation
Scapy presentation
ashigirl ZareGoto
Mais conteúdo relacionado
Mais procurados
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
Mais procurados
(20)
プログラムを高速化する話
プログラムを高速化する話
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Interrupt Affinityについて
Interrupt Affinityについて
Ethernetの受信処理
Ethernetの受信処理
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
TLS, HTTP/2演習
TLS, HTTP/2演習
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Pietのエディタを作った話
Pietのエディタを作った話
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
C++ マルチスレッド 入門
C++ マルチスレッド 入門
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Semelhante a 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
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
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
Semelhante a 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
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
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事始め
Mais de 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
Mais de 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
Baixar agora