Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scapyで作る・解析するパケット/ network packets craft and an...
Search
takahoyo
September 30, 2015
Programming
2.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scapyで作る・解析するパケット/ network packets craft and analysis by Scapy
第32回「ネットワーク パケットを読む会(仮)」で発表した資料です。 #pakeana
https://atnd.org/events/70080
takahoyo
September 30, 2015
More Decks by takahoyo
See All by takahoyo
OSEP取るまでにやったこと
takahoyo
3
2.4k
"申" (猿)がつくセキュリティツールを検証してみた
takahoyo
4
1.3k
おうちで出来るセキュリティチャレンジ / cyber security challenge from home
takahoyo
4
1.9k
malspamの情報収集と解析 / malspam information gathering and analysis
takahoyo
0
120
Elastic StackでWebサーバのログ解析を始めた件について / Web server access log analysis using Elastic Stack
takahoyo
0
230
パケットで遊ぼう / let's play using network packet
takahoyo
0
230
hpingで作るパケット / network packet craft by hping
takahoyo
0
440
低対話型サーバハニーポットの運用結果及び考察 / Operation result of low interaction honeypots
takahoyo
0
270
Other Decks in Programming
See All in Programming
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
180
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
460
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
110
数百円から始めるRuby電子工作
tarosay
0
110
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
160
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
270
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
470
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
730
[RVD26] Vibe Architecture en 2040 : Darwin a-t-il (enfin) eu raison des architectes ?
alexandretouret
0
110
関数型プログラミングのメリットって何だろう?
wanko_it
0
200
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
680
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Prompt Engineering for Job Search
mfonobong
0
380
Faster Mobile Websites
deanohume
310
32k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
740
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Testing 201, or: Great Expectations
jmmastey
46
8.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
390
Writing Fast Ruby
sferik
630
63k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
360
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
350
Transcript
@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