Upload
inaz2
View
1.559
Download
2
Embed Size (px)
DESCRIPTION
2013-10-06 すみだITセキュリティ勉強会 その1.5
Citation preview
2013-10-06
すみだITセキュリティ勉強会その1.5
@inaz2
1
@inaz2
Security Engineer & Python Programmer
Girls Idol Freak
http://inaz2.hatenablog.com/
About me
2
本題
3
Peer-to-Peer File Sharing Protocol
大容量データを高速に転送することに特化
匿名性はない
代表的なBitTorrentクライアント
BitTorrent
4
Most popular
Popular in Asia
Preinstalled in Ubuntu
Java
ファイル
ダウンロードされるデータ(群)
.torrent
Webサーバなどを介して配布されるメタファイル
ファイルの名前・サイズやTrackerのIPアドレスなどが書かれている
ノード
ネットワークに接続しているBitTorrentクライアント
Peer
直接接続している(隣接している)ノード
Terminology (only in this slides)
5
Classic BitTorrent Architecture
6
Tracker
Peer(my client)
Peer
Peer
Index server
Peer
1. .torrent のダウンロード
2. ファイルを持っているPeerの取得
3. ファイル断片を送受信
.torrent を配布 ファイルを持っているPeerの管理
As a Tracker (with Index Server)
Index Serverで配布しているファイルを欲しがっているPeerのIP(+接続時刻)
As a Peer
自分がダウンロードしているファイルを欲しがっているPeerのIP(+接続時刻)
.torrent ごとにネットワーク (swarm) が作られる
自分が知らないファイルについてはわからない。
What we can get
7
元々のアーキテクチャはTracker中心のHybrid P2P
Trackerに繋がらなくなったら止まる
Trackerなしでも動くようにする
Peer間でPeer情報の交換
Peer間で .torrent のリクエスト & ダウンロード
Peer間でファイルを持っているPeerの探索
Trackerless download
8
ハッシュテーブル
キーと値のペアの組み合わせを集めたテーブル
キー = .torrent のSHA-1ハッシュ値
値 = .torrentが指すファイルを持っているPeerの集合
ハッシュテーブルを複数ノードに分散させる
問い合わせに答えられなければ、自分の周囲のノードに問い合わせ直すように答える
Distributed Hash Table (DHT)
9
4種類のクエリ
ping / find_node / get_peer / announce_peer
get_peer
リクエスト: .torrent のSHA-1ハッシュ値 (infohash)
レスポンス: .torrent が指すファイルを持つノード群
自分が知らない場合は、「自分が知らないこと」と自分の周囲のノード群を答える
リクエスト側は、教えてもらったノード群に問い合わせ直す
ファイルを持っているノードが見つかるまで問い合わせ続ける
BitTorrent DHT Protocol
10
get_peerクエリのinfohashを収集
他のユーザが欲しがっているファイルがわかる。
もちろん、IPと接続時刻も。
WE CAN COLLECT OTHERS' DESIRES!
11
infohashはただのSHA-1ハッシュ値
ファイルの内容を知るためには、対応する .torrent を得る必要がある
BEP 9: Extension for Peers to Send Metadata Files
ファイルを持っているノードから.torrent を送ってもらうためのプロトコル拡張
infohash → .torrent
12
実践
13
めんどくさい!!
Deluge BitTorrent Client
Python製BitTorrentクライアント
libtorrentライブラリを使用
GUI (GTK+)
クロスプラットフォーム (Linux, Mac OS X & Windows)
簡単に改造できる
http://deluge-torrent.org/
Develop a BitTorrent Client
14
Deluge is a good alternative to Transmission
15
https://github.com/inaz2/deluge-hack
飛んできた infohashを自動でキューに追加
.torrent が得られたらダウンロードをpause
放置するとキューがたまりまくって激重になる
Fork & Hack
16
https://github.com/inaz2/btsniff
python-libtorrentを使ってコア部分のみ実装
One-file CLI
Hack more
17
Ubuntu Serverのtorrentを使ってネットワークにjoin
観測期間
2013-10-04 02:18~ 2013-10-05 00:57
Experiments
18
見つかったファイルの数: 3629
内容の一部
Taylor Swift - Red (2012)
TVアニメ「進撃の巨人」OP1&OP2テーマ
月島きらり starring 久住小春(Koharu Kusumi) -バラライカ(Balalaika)
店長推薦作品 BT-98-不能停止的疼痛美人妻阪上友香
楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
Results
19
BitTorrent DHT Protocolの細かい仕組み
各クライアントにID (SHA-1値) が振られる
各 .torrent にもID (SHA-1値) が振られる
クライアントのIDに近いIDを持つ .torrent が集まるようになっている
距離は XOR によって定義: distance(A,B) = |A xor B|
幅広く .torrent を収集するには、定期的なクライアントIDの変更 (ID hopping)が必要
多数のノードをP2Pネットワークに仕込むタイプの攻撃は、結託攻撃 (Sybil Attack) と呼ばれる
Road to Sybil Attack
20
BitTorrentでDHT有効 = 他人に欲しいファイルを持っている人を知らないか問い合わせる
get_peersクエリを収集することで、他人が欲しがっているファイルを知ることができる
Future works
get_peersクエリ以外のトラフィックの利用
ID hoppingの実装
Recap
21
"Crawling BitTorrent DHTs for Fun and Profit"
by Scott Wolchok (DEF CON 18)
https://www.defcon.org/images/defcon-18/dc-18-presentations/Wolchok/DEFCON-18-Wolchok-Crawling-Bittorrent-DHTS.pdf
"Defeating Vanish with Low-Cost Sybil Attacks Against Large DHTs"by Scott Wolchok et al. (NDSS 2010)
http://z.cs.utexas.edu/users/osa/unvanish/papers/vanish-broken.pdf
http://www.cs.utexas.edu/users/witchel/pubs/unvanish10ndss.pptx
"Large-scale monitoring of DHT traffic" by Ghulam Memon et al. (IPTPS 2009)
http://www.usenix.org/event/iptps09/tech/full_papers/memon/memon.pdf
"The Sybil Attack" by John R. Douceur (IPTPS 2001)
http://research.microsoft.com/apps/pubs/default.aspx?id=74220
References
22
Thank you!
@inaz2
http://inaz2.hatenablog.com/
23