「Evil」RJ45ドングルの調査
(lcamtuf.substack.com)- 中国で購入した Ethernet-to-USBアダプターにマルウェアが内蔵されているという主張が広まったが、確認された手がかりは古いRJ45-to-USBチップのドライバー配布方式に近いものだった
- CrowdStrike Falconスキャンの「ロシア語要素」は、Igor Pavlovによる 7-Zip自己解凍EXE の特徴と一致し、ファイル内容もCoreChips ShenzhenのSR9900向け公開ドライバーと一致しているように見えた
- SR9900は情報がほとんどないチップだが、Realtek RTL8152B の直接的なクローンと見られ、USB 2.0・100BASE-TXデバイスが自前のストレージからドライバーを提供していたWindows 7前後の文脈と合っている
- PCB上の25x40型 512 kB SPIフラッシュ はパケット窃取用ストレージではなく、製造ツールがISO 9660イメージとWindowsドライバーをそのまま書き込み、仮想CD-ROMのように使う構成であることが確認された
- SR9900内部のUSB・Ethernetマイクロコントローラーのコードは未確認の領域として残るが、今回の事例だけで「怪しいハードウェア」を即座に悪性と断定する根拠は乏しい
サプライチェーン悪性ハードウェア疑惑の出発点
- 情報セキュリティ分野では 大規模なサプライチェーン・サボタージュ の主張がよく登場するが、実際にはその多くが誤りであるという前提から出発する
- こうした攻撃が不可能だからではなく、実行が複雑で時間がかかり、リスクも高いからである
- 現実的には、認証情報を盗む、あるいは悪性ファイルをダウンロードさせる手法のほうが単純である
- ある若い創業者が、中国で購入した Ethernet-to-USBアダプター にマルウェアが事前搭載されていたとソーシャルメディアで主張し、議論が拡大した
- その主張には、仮想マシン回避、キー入力のキャプチャ、ロシア語要素の使用といった表現が含まれていた
- 関連投稿は数百万回閲覧されたが、具体的な技術情報は不明確だった
公開スキャンとドライバーファイルの確認
- 投稿者が共有した CrowdStrike Falconスキャンレポート は曖昧で、決定的な証拠というより 混乱を招く手がかり に近かった
- 解析対象のバイナリは、Igor Pavlovが作成したオープンソース圧縮プログラム 7-Zip ベースの自己解凍EXEだった
- ロシア語要素は、作者の国籍に由来する痕跡と見ることができる
- ドライバーをインストールする自己解凍アーカイブであるという点が、疑わしく見えた動作の大半を説明している
- アーカイブの内容は、CoreChips Shenzhenが作成したRJ45-to-USBチップ向けの 署名済み公開ドライバー 2.0.7.0 と一致しているように見えた
- 同梱の
.infファイルでは、同社はCorechip Semiconductorという名称も使用している
- 同梱の
SR9900チップと旧式設計の文脈
- ドライバーは SR9900 というチップを参照している
- チップとメーカーに関する公開情報はほとんどない
- 調査の結果、SR9900は Realtek RTL8152B の直接的なクローンと見られた
- 英語の製品紹介には「SR」が「Supereal」を意味することを示唆する記述があり、Superealというブランド名は、過去に業界で問題を起こした 偽FTDI FT232RLチップ の文脈でも登場している
- この系譜が重要なのは、元になったRealtekの設計が 2013年のデータシート に基づく古い設計だからである
- デバイスは100BASE-TXとUSB 2.0をサポートする
- Windows 7時代の周辺機器の慣行とつながっている
- 当時はCD-ROMドライブが姿を消しつつあった一方で、すべてのコンピューターが常時オンラインだと仮定するのも難しかった
- 一部の周辺機器が、自前のドライバーを格納した 大容量記憶装置 として自らを露出する方式は、当時の文脈では自然だった
- セキュリティの観点でも、ドライバーファイルを渡す他の一時的な方法と比べて、特別に良いとも悪いとも言いにくい
SPIフラッシュの実際の用途
- 分解写真には、SR9900の隣に25x40型 シリアルフラッシュIC が実装された単純なPCBが写っていた
- 512 kBフラッシュがファームウェア用なのか、窃取したパケットの保存場所なのかが核心的な疑問だった
- SR9900とRTL8152Bの文書は、付随するフラッシュICの目的を十分に説明しておらず、回路図画像検索でも元のRealtekチップのシリアルピンに何かが接続された設計は見つからなかった
- SPIバス自体は単純である
- ホストが任意の速度でクロック信号を提供する
- 各クロックの立ち上がりエッジで、周辺デバイスは「serial in」の1ビットを読み、ホストは「serial out」の1ビットを読む
- ハンドシェイク、ヘッダー、パリティビット、フロー制御はない
- 一般的なシリアルフラッシュの読み出しは、READコマンド 0x03 と3バイトのアドレスを送った後、データを連続して受け取る構造である
- そのため、実際のドングルを購入してメモリ内容をダンプする方法も可能だった
- CoreChipsのWebサイトで中国語原文を見つけて検索した末に、「SR9900 series chip Windows system mass production tool」に関する古い中国語フォーラム投稿と、パスワード付き・有料ダウンロードのアーカイブを見つけた
- 「SR9900(A)設計資料1018.rar」を2.99ドルで入手して確認した
- アーカイブには、レトロなUIの SR9900Efuse 製造ツールが含まれていた
- 同梱されていた168 kBの ISO 9660ファイルシステムイメージ には、自己解凍形式のWindowsドライバーが入っていた
- 製造ツールは
.isoファイルをSPIフラッシュにそのまま書き込む - チップは物理CD-ROMを置き換える「ソフトウェア定義」CD-ROMのように動作する
- ディスクイメージは こちら から入手でき、パスワードは
rj45である
- 製造ツールは
- CD-ROMイメージは「ULTRAISO V9.3 CD & DVD CREATOR, (C) EZB SYSTEMS」で作成されていた
- UltraISOはWindows XP時代を思わせるツールとして紹介されている
- 実行条件としてIntel Pentium 166MHz以上が必要である
任意の仮想CD-ROM機能と残る限界
- メインアーカイブには「SR9900(A)設計前必読.docx」という文書も含まれていた
- 自動翻訳された文言によると、SR9900をUSBネットワークカードとして使用する際、Windowsドライバーのインストール用 仮想光学ドライブ としてSPIを使える
- SPIフラッシュには、Windows向けSR9900ドライバーをあらかじめ焼き込むことができる
- フラッシュチップの使用は任意であると明記されていた
- 今回の事例で奇妙に見えた点は、悪性動作ではなく 旧式周辺機器のドライバー配布方式 に由来するものとして整理できる
- ハードウェア研究室がなくても、公開資料の検索と根気だけで核心的な疑問を解消できた
- 完全には確認していない領域は、SR9900 IC内部の2つの小さなマイクロコントローラーコアである
- 内部にはUSBとEthernetのコアがあり、それぞれ内部コードを実行する
- チップメーカーが関与していると仮定するなら、内部を覗くことは可能かもしれない
- RealtekはRTL8152向けの オープンソースLinuxドライバー を提供しており、このドライバーはメモリ上のファームウェアにパッチを当てる
- 見た限りでは、暗号化や署名が適用されているようには見えなかった
- 悪性USBドングルの可能性を完全に排除することはできない
- イランの核開発プログラムの科学者なら心配すべきだという表現が出ている
- 戦略的に重要な民間企業のCISOであれば、一定の注意が必要である
- 家庭用ネットワーク用途では、今回の事例だけで差し迫った脅威と見る根拠は乏しい
1件のコメント
Hacker News の意見
この表現は誤解を招く。問題だったのは偽チップそのものというより、偽物を検出すると FTDI 公式ドライバが動作中だったハードウェアの PID を 0000 に変更し、以後認識されないようにしてしまったことだった: http://www.rei-labs.net/changing-ftdi-pid/
「Intel Pentium 166MHz 以上が必要」という文言で笑った。記事も面白いし、「頭のいい人が退屈して、常識的には明白な結論を最後まで掘り下げるのだが、それを証明するには意外な 創造性と根気が必要になる」ジャンルが本当に好きだ
メモリチップの内容をダンプしようと Dark Web(amazon.com) に行ってドングルを1つ買う準備ができていたという部分も外せない自分は被害者で、陰謀を暴いたのだと言うほうが、これが単にエンジニアリングでよくある 継ぎはぎ的な成果物だったと受け入れるより楽でもある。筆者に拍手を送りたい
中国のスパイウェアが問題ではないという意味ではない。だが、それを見分ける基本的な技術力がないなら「中国! 中国! 中国!」と騒ぎ回るべきではない。政治家がフェイクニュースを拾い上げ、愚かな政策の口実にするやり方であり、社会に有害だ
この「悪性」ドングルのツイートを見た瞬間、以前自分が扱ったものとまったく同じだと分かった。悪性というより、ただ面倒な代物だ
https://blog.brixit.nl/making-a-usb-ethernet-adapter-work-sr...
自分の場合は CD ドライブとして見えないようにするため SPI フラッシュモジュールを無効化したが、この記事の筆者は SPI がオプションだという資料まで見つけていた。面白いことに、この記事はいまやリフラッシュして本物の 悪性 RJ45 ドングルを作るためのツールまで提供することになっている
3ピン SOT23 パッケージ用のダイオードフットプリントを入れておいて、特殊部品の在庫がなかったため SOD323 ダイオードを2本のピンの間に30度ほど傾けて取り付けたように見える
意図しない結果だとすれば、そもそもせいぜい 隠蔽によるセキュリティでしかなく、人々がそれに依存しないよう明らかにされるべきだ
autorun.infを追加できるのだろうか?USB 機器がストレージのように偽装して自前のドライバを提供する方式はかなり好きだ。最近の「正しい」やり方は Microsoft のサーバにあれこれ置いておき、挿されたら必要なものをダウンロードさせることなのだろうが、手動でドライバをインストールしなければならないものを十分に経験してきたので、それが見た目ほど簡単ではないことは分かっている。例えば私は ベンダー別 ADB ドライバをダウンロードしなければならないことが非常に多い
いずれにせよ、周辺機器が初期設定を助けてくれるのは賢いやり方で、ドライバが機器の中に入っていれば、正規のダウンロード元を探し回るより少し楽になる
ただし複数の動作モードは、4G/LTE USB ドングルのような機器の設定を難しくした。USB ストレージとして見えたり、何らかの種類のシリアルデバイスとして見えたり、CDC-ACM モデムデバイスのようなものとして見えたりし、正しいモードに切り替えるにはツールとベンダー別の AT コマンドを組み合わせる必要がある。挿すだけですぐ本来の役割を果たす単純な機器に戻ってほしい
現在の最先端がどうなっているかは知らないが、長い間、USB 周辺機器 IC に小さなフラッシュを付けて VID/PID やその他の USB 設定情報を保存することは一般的だった。そうすれば挿したときにデバイスが正しく列挙され、適切なドライバに関連付けられるからだ。設計時点によっては、サプライチェーンで簡単に手に入る最小容量が 512kB だった可能性もあり、数十バイトを保存するためにそういうチップを使うのも不思議ではなかった
ISO 部分は少し奇妙だが、正直に言えば、大容量 USB ストレージを制限する企業 IT セキュリティポリシーを回避する創造的な方法だ。光学ドライブは別のデバイスクラスを使うため、ほとんどの制限を回避できる可能性があり、光学ドライブとネットワークアダプタが結合した複合デバイスとして列挙されれば、「USB ドライブ」がロックされたコンピュータでも自前のドライバをインストールできそうだ
奇妙なのは、フラッシュは追加してコストをかけているのに 磁気絶縁部品は省いている点だ。直列コンデンサだけがあり、ジャックも小さいので統合磁気部品が入っているようには見えず、直列コンデンサを一緒に入れるのも筋が通らない
自分が買った USB Ethernet ドングルに磁気絶縁部品がないと知ったら、本当に腹が立つと思う
「悪意ある」USB Ethernet ドングルがあるのかと言えば、当然ある。ただし、この品物はそれではない
https://hak5.org/products/lan-turtle
RJ45 厳格派の立場では、これは 8P8C と呼ぶべき。では失礼
たとえば、多くのネットワーク機器のコンソールポート用に、USB を RS232 シリアルへ変換する「RJ45 ドングル」も見たことがある
USB-1000BASE-T、最近では 2.5GBaseT ドングル全般で性能を気にする人なら、USB デバイスであることと PCI Express デバイスであることの違いを知っておくとよい
最新の Linux カーネルを使うノートPCにホットプラグしたあと、
sudo lsusb -vとsudo lspci -vのどちらに表示されるかを見ればよいネイティブ PCIe デバイスははるかに高い性能を出し、2.5GBASE-T のワイヤースピードまで可能で、USB 上の Thunderbolt 実装を通じてホストと通信する。USB 専用デバイスもそれなりに動作はするが、安いのには理由がある。もちろん低価格ノートPCには Thunderbolt 実装自体がない場合もあるので、それも考慮すべき
それでも基本的にはドングルで、Mac で iperf3 を使うと 9.4Gbit/s が出る。当然 PCIe デバイスとして表示される
[1] https://www.amazon.com/gp/product/B0DHSWSSBY
USB ポートしかなく性能を気にするなら、より大きな違いは USB Ethernet デバイスが CDC-NCM を実装しているか、それとも CDC-ECM だけを実装しているかだろう。CDC-ECM はフレームを1つずつドライバーへ送り、ドライバーが1つずつ確認・処理しなければならないため CPU 作業が多く発生する一方、より新しい CDC-NCM はフレームをまとめて送る
私のノートPCでは 1Gbit ECM ドングルでもギガビット速度は出るが CPU コア1つを100%使い、1Gbit NCM ドングルでは CPU 使用率がほとんどない
Ethernet ポートで有害な接続を作るのは極めて難しいが、USB ポートで有害な接続を作るのは非常に簡単だ。ありのままに呼ぶべき。これは Ethernet ソケットも付いた 悪意ある USB ドングルである