WebUSB非対応問題を解決するためのFirefoxハック方法
(github.com/ArcaneNibble)> "私たちにWebUSBは不要です!"
- WebページがWebUSBなしでUSBデバイスにアクセスできる方法がある。また、デバイス側をユーザー同意要件を回避するように設計することもできる。
クイックデモ
- Raspberry Pi Picoにu2f-hax.uf2をロードし、localhostまたは別の安全なコンテキストでindex.htmlを読み込む。
- "On!" と "Off!" ボタンでLEDを切り替え、ピン
GP22の状態がページ上に定期的に更新される。
どうして可能なのか?
- PicoはU2Fドングル(物理的な2段階認証セキュリティキー)をエミュレートするようにプログラムされている。
- セキュリティ機能の代わりに、任意のデータが
U2F_AUTHENTICATEメッセージの「キーハンドル」と署名の中に隠される。 - キーハンドルが0xfeedfaceで始まる場合、Picoはただちにユーザー存在を「確認」し、データを返す。
なぜ可能なのか?
- U2Fキーハンドルは、セキュリティドングルが「所有」する不透明なデータ塊として設計されている。
- 低コストのドングルが多くのWebサイトと関連付けられるよう設計されている。
- ドングルは内部に固有の「マスター」暗号鍵を保持し、登録時に新しい公開鍵/秘密鍵ペアを生成して返す。
- キーハンドルは不透明に扱われるため、任意のデータを隠せる。
データを返す方法
- ECDSA署名の中にデータを隠す。
- 署名は2つの数値 (r, s) で構成され、それぞれの数値は特定範囲内で計算される。
- Chromeは署名の数値が範囲内かどうかを確認するが、Firefoxは確認しない。
- Chromeの基本的な妥当性検証を回避するため、各数値の先頭バイトを0x7fに設定する。
セキュリティ脆弱性なのか?
- いいえ。任意のUSBデバイスにアクセスできるわけではない。
- 意図的にルールを破るデバイスでのみ動作する。
- USBデバイスのセキュリティモデルは、ほとんどのプラットフォームで疑わしい。
- 任意の未知のデバイスをコンピュータに接続すべきではない。
1件のコメント
Hacker Newsの意見
このスレッドは主にWebUSBに関するもので、OP自体についてではない。WebUSBは素晴らしいハックだ
Firefoxは任意のUSBデバイスとの通信をサポートしていない。しかし、U2FセキュリティキーとのUSB通信はサポートしている
WebUSBを使う人はそれが素晴らしいと言い、使わない人はなぜ必要なのか分からず戸惑う
QMK/Viaファームウェア搭載キーボードをWebUSBでカスタマイズするのは悪夢だ
/dev/hidrawデバイスを完全に読み取れるようにしておかなければならないjsonファイルを使って望みのキーボードレイアウトを構成し、生成されたjsonをダウンロードしてから、sudoレベルのフラッシュツールでキーボードにファームウェアを書き込むことだUSB Serialは優れたツールで、今ではブラウザを使ってデバイスを設定するツール群が存在する
デバイスを頻繁にフラッシュする人にとっては利点が明確だ。しかし一般ユーザーには重要ではない
USBポートはブラウザベースのコードに使われない方がよいのかもしれない
PixelスマートフォンにGrapehenOSをフラッシュした体験は、最も快適で高速なOSインストール体験の一つだった
秘密鍵を「マスター」キーとして暗号化し、暗号化された秘密鍵をキーハンドルとして返す
WebUSBに関連する政治的な論争がある