SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 

Was ist angesagt? (20)

金融×AIで解くべき問題は何か?
金融×AIで解くべき問題は何か?金融×AIで解くべき問題は何か?
金融×AIで解くべき問題は何か?
 
コンセプト概論~出張ヒストリア編~
コンセプト概論~出張ヒストリア編~コンセプト概論~出張ヒストリア編~
コンセプト概論~出張ヒストリア編~
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
TDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTCTDPT + VMCプロトコル on WebRTC
TDPT + VMCプロトコル on WebRTC
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learning
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
PyMC mcmc
PyMC mcmcPyMC mcmc
PyMC mcmc
 
AI技術の現状と課題 〜aiboおよび自然言語処理〜
AI技術の現状と課題 〜aiboおよび自然言語処理〜AI技術の現状と課題 〜aiboおよび自然言語処理〜
AI技術の現状と課題 〜aiboおよび自然言語処理〜
 
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
 
協調フィルタリングを利用した推薦システム構築
協調フィルタリングを利用した推薦システム構築協調フィルタリングを利用した推薦システム構築
協調フィルタリングを利用した推薦システム構築
 
F.E.A.Rにおけるゴール指向プランニング
F.E.A.Rにおけるゴール指向プランニングF.E.A.Rにおけるゴール指向プランニング
F.E.A.Rにおけるゴール指向プランニング
 
画像処理AIを用いた異常検知
画像処理AIを用いた異常検知画像処理AIを用いた異常検知
画像処理AIを用いた異常検知
 
マインドフルネスと人工知能
マインドフルネスと人工知能マインドフルネスと人工知能
マインドフルネスと人工知能
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 

Ähnlich wie Sniffing BitTorrent DHT ~人はBTで何を落とすのか~

Ähnlich wie Sniffing BitTorrent DHT ~人はBTで何を落とすのか~ (20)

Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT  (ver. 2)Try new transport protocol SRT  (ver. 2)
Try new transport protocol SRT (ver. 2)
 
Inside MF
Inside MFInside MF
Inside MF
 
20210510 software design
20210510 software design20210510 software design
20210510 software design
 
Using Xeon D 10GBase-T
Using Xeon D 10GBase-TUsing Xeon D 10GBase-T
Using Xeon D 10GBase-T
 
20140802 Bluetooth を使って Universall App で大連携
20140802 Bluetooth を使って Universall App で大連携20140802 Bluetooth を使って Universall App で大連携
20140802 Bluetooth を使って Universall App で大連携
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)KubeCon EU報告(ランタイム関連,イメージ関連)
KubeCon EU報告(ランタイム関連,イメージ関連)
 
最近こんなのやってるぜ!
最近こんなのやってるぜ!最近こんなのやってるぜ!
最近こんなのやってるぜ!
 
OverlayFS を使って Raspberry Pi を Network Bootする
OverlayFS を使って Raspberry Pi を Network BootするOverlayFS を使って Raspberry Pi を Network Bootする
OverlayFS を使って Raspberry Pi を Network Bootする
 
191030 anna-with-python
191030 anna-with-python191030 anna-with-python
191030 anna-with-python
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
 
LibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみたLibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみた
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
 
Prometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slidePrometheus meetup tokyo#3 slide
Prometheus meetup tokyo#3 slide
 
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
[JPCERT/CC POC Meeting] 研究紹介 + DLLハイジャックの脆弱性
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 

Mehr von inaz2

HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装
inaz2
 
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in LinuxSelf Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
inaz2
 

Mehr von inaz2 (13)

Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?Can We Prevent Use-after-free Attacks?
Can We Prevent Use-after-free Attacks?
 
Why is Security Management So Hard?
Why is Security Management So Hard?Why is Security Management So Hard?
Why is Security Management So Hard?
 
HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装HTTPプロクシライブラリproxy2の設計と実装
HTTPプロクシライブラリproxy2の設計と実装
 
Protecting Passwords
Protecting PasswordsProtecting Passwords
Protecting Passwords
 
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in LinuxSelf Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
Self Introduction & The Story that I Tried to Make Sayonara ROP Chain in Linux
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
Abusing Interrupts for Reliable Windows Kernel Exploitation (en)
 
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
Abusing Interrupts for Reliable Windows Kernel Exploitation (ja)
 
WinDbg Primer
WinDbg PrimerWinDbg Primer
WinDbg Primer
 
proxy2: HTTPS pins and needles
proxy2: HTTPS pins and needlesproxy2: HTTPS pins and needles
proxy2: HTTPS pins and needles
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocks
 
CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!
 
Making a Proxy for Fun and Profit
Making a Proxy for Fun and ProfitMaking a Proxy for Fun and Profit
Making a Proxy for Fun and Profit
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

Sniffing BitTorrent DHT ~人はBTで何を落とすのか~

  • 2.   @inaz2  Security Engineer & Python Programmer  Girls Idol Freak  http://inaz2.hatenablog.com/ About me 2
  • 4.   Peer-to-Peer File Sharing Protocol  大容量データを高速に転送することに特化  匿名性はない  代表的なBitTorrentクライアント BitTorrent 4 Most popular Popular in Asia Preinstalled in Ubuntu Java
  • 5.   ファイル  ダウンロードされるデータ(群)  .torrent  Webサーバなどを介して配布されるメタファイル  ファイルの名前・サイズやTrackerのIPアドレスなどが書かれてい る  ノード  ネットワークに接続しているBitTorrentクライアント  Peer  直接接続している(隣接している)ノード Terminology (only in this slides) 5
  • 6.  Classic BitTorrent Architecture 6 Tracker Peer (my client) Peer Peer Index server Peer 1. .torrent の ダウンロード 2. ファイルを持っている Peerの取得 3. ファイル断片を送受信 .torrent を配布 ファイルを持っている Peerの管理
  • 7.   As a Tracker (with Index Server)  Index Serverで配布しているファイルを 欲しがっているPeerのIP(+接続時刻)  As a Peer  自分がダウンロードしているファイルを 欲しがっているPeerのIP(+接続時刻)  .torrent ごとにネットワーク (swarm) が作られる  自分が知らないファイルについてはわからない。 What we can get 7
  • 8.   元々のアーキテクチャはTracker中心のHybrid P2P  Trackerに繋がらなくなったら止まる  Trackerなしでも動くようにする  Peer間でPeer情報の交換  Peer間で .torrent のリクエスト & ダウンロード  Peer間でファイルを持っているPeerの探索 Trackerless download 8
  • 9.   ハッシュテーブル  キーと値のペアの組み合わせを集めたテーブル  キー = .torrent のSHA-1ハッシュ値  値 = .torrent が指すファイルを持っているPeerの集合  ハッシュテーブルを複数ノードに分散させる  問い合わせに答えられなければ、自分の周囲のノード に問い合わせ直すように答える Distributed Hash Table (DHT) 9
  • 10.   4種類のクエリ  ping / find_node / get_peer / announce_peer  get_peer  リクエスト: .torrent のSHA-1ハッシュ値 (infohash)  レスポンス: .torrent が指すファイルを持つノード群  自分が知らない場合は、「自分が知らないこと」と自分の周囲 のノード群を答える  リクエスト側は、教えてもらったノード群に問い合わせ直す  ファイルを持っているノードが見つかるまで問い合わせ続ける BitTorrent DHT Protocol 10
  • 12.   infohash はただのSHA-1ハッシュ値  ファイルの内容を知るためには、対応する .torrent を 得る必要がある  BEP 9: Extension for Peers to Send Metadata Files  ファイルを持っているノードから .torrent を送ってもらうためのプロトコル拡張 infohash → .torrent 12
  • 14.   めんどくさい!!  Deluge BitTorrent Client  Python製BitTorrentクライアント  libtorrentライブラリを使用  GUI (GTK+)  クロスプラットフォーム (Linux, Mac OS X & Windows)  簡単に改造できる  http://deluge-torrent.org/ Develop a BitTorrent Client 14
  • 15.  Deluge is a good alternative to Transmission 15
  • 16.   https://github.com/inaz2/deluge-hack  飛んできた infohash を自動でキューに追加  .torrent が得られたらダウンロードをpause  放置するとキューがたまりまくって激重になる Fork & Hack 16
  • 17.   https://github.com/inaz2/btsniff  python-libtorrent を使ってコア部分のみ実装  One-file CLI Hack more 17
  • 18.   Ubuntu Serverのtorrentを使ってネットワークにjoin  観測期間  2013-10-04 02:18 ~ 2013-10-05 00:57 Experiments 18
  • 19.   見つかったファイルの数: 3629  内容の一部  Taylor Swift - Red (2012)  TVアニメ「進撃の巨人」OP1&OP2テーマ  月島きらり starring 久住小春(Koharu Kusumi) - バラ ライカ(Balalaika)  店長推薦作品 BT-98-不能停止的疼痛 美人妻 阪上友香  楽しい!!✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌ Results 19
  • 20.   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
  • 21.   BitTorrentでDHT有効 = 他人に欲しいファイルを 持っている人を知らないか問い合わせる  get_peersクエリを収集することで、他人が欲しがっ ているファイルを知ることができる  Future works  get_peersクエリ以外のトラフィックの利用  ID hoppingの実装 Recap 21
  • 22.   "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