blackdog詳解
自分なりに整理してみた。
外観
まず外観から。
タバコより一回りくらい小さい。iPod miniを縦に小さくした感じ。
真ん中にあるのが指紋認証。指紋認証しなくてもログインできるので意味無い。
トゲトゲなのは付属品の首輪モジュール。意味は全く無い。
インターフェースはUSB。小さいポートがあるので、ケーブルでPCにつなぐと利用できる。
利用方法
- USBでPCに挿す
- PCでblackdogがCD-ROMとして認識される
- PCでCD-ROM(に見えるもの)の中にあるXServerや中のネットワークのプロキシ(後述)が起動。
- PCからCD-ROMが抜けたように見える。
- (多分この間にblackdog側のカーネルがブートしてる)
- PCでblackdogがlinksysのethernet adapterとして認識される
- Xで指紋認証アプリが起動
- 指紋認証(又は指紋認証スキップ)でランチャが立ち上がる
後はランチャからターミナルを開くなり、好き勝手できる。
ちなみに、厳密にはBlackdogはUSBハブ+USB-CD-ROM+USB-Ethernet Adapterに見える。
ネットワーク構成
XのやりとりはPCから認識されているEthernet Adapter経由でやればいいんだけど、blackdog内で動くアプリの通信がどうやってPCのネットワークを利用するかが、実際見るまでよくわかんなかった。
多分下図のような構成になってる(左側がPC、右側がblackdog)。
kernelとuserの構成は多分これで正しい。
physicalレイヤだけはあんまり調べてないからよくわかんない。PCからはUsb-ethernetとして見えるけど、linux側は別にmacがあんのか単純にlinksysっぽい動きをしてんのか、とか色々やり方ありそうだけどわかんない。とりあえずIP/USBとだけ書いたけど。
実際の流れとしては、以下のような感じ。
例:http://google.comにアクセス
- 一般アプリがgoogle.comにconnect()
- ルーティングテーブルではtap0がdefaultルートなため、パケットがtap0から送出される。
- tap0に書き込まれたパケットは/dev/net/tunからイーサフレーム以上の部分が読み込み可能。vtunがtap0から読み込む
- vtunはtap0から読み込んだパケットをudpでカプセル化して、PC側で動作するRealm-networking.exeに送る
- Realm-networking.exeはカプセル化されているパケットを読み出し、適切な動作を行う
pingをblackdogからgoogleなどに送ると、ICMPではなく、代わりにgoogleのecho(UDP)ポート宛てのパケットが送出される。この動作からして、Realm-networking.exeはraw socketなどを使って単純にパケットを右から左へ流すだけではなく、ペイロードの内容をパースして、synだったらconnect()呼び出したり、rst/finだったらclose()呼んだりと、大分面倒臭いuser-mode IP Masquerade的な動作をしていることが想像できる。まじ地獄。
じゃあなんでraw socket使わないの?っつーと、多分権限の問題だと思うけど。っつーか、CD-ROMとかネットワークアダプタって非adminで使えるのか?今度漫画喫茶で試してみよう。