1 ポイント 投稿者 GN⁺ 2025-03-15 | 1件のコメント | WhatsAppで共有

> "私たちに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件のコメント

 
GN⁺ 2025-03-15
Hacker Newsの意見
  • このスレッドは主にWebUSBに関するもので、OP自体についてではない。WebUSBは素晴らしいハックだ

    • 一方ではWebUSBを欲しいと思うが、一般の人がWebUSBを使えるようになるのは望まない
    • 同意ポップアップは効果がなく、人々は無意識に何にでも同意してしまう
    • Internet Explorerの権限方式が気に入っている。特定のサイトを「信頼できる」サイトとして指定しなければ機能を使えない
    • WebUSBやWebBluetoothなどの危険なAPIを使うためにサイトを「信頼できる」サイトとして指定しなければならないなら、誤って実行する人は少ないだろう
  • Firefoxは任意のUSBデバイスとの通信をサポートしていない。しかし、U2FセキュリティキーとのUSB通信はサポートしている

    • このプロジェクトでは、マイクロコントローラがU2Fセキュリティキーを装うようにプログラムしている。目的はFirefox経由でUSBを使ってマイクロコントローラと通信することだ
    • Javascript Credentials APIと少しの工夫を使って、マイクロコントローラにデータを送り、応答を受け取る
  • WebUSBを使う人はそれが素晴らしいと言い、使わない人はなぜ必要なのか分からず戸惑う

    • 個人的にはWebUSBは素晴らしかった。たいていのWebUSBユーティリティは専用のインストール型アプリとしても提供されているが、Web版を使う方が簡単だ
    • あらゆるものごとに別々のアプリを持つことにうんざりしている人々に人気が出るだろうと予想していた
  • QMK/Viaファームウェア搭載キーボードをWebUSBでカスタマイズするのは悪夢だ

    • ブラウザがファームウェアとやり取りする前に、/dev/hidrawデバイスを完全に読み取れるようにしておかなければならない
    • 利用体験として非常に不快で、オフラインのカスタマイズツールはどれもElectronベースだ
    • 妥当な解決策は、Webサイト上でテンプレートjsonファイルを使って望みのキーボードレイアウトを構成し、生成されたjsonをダウンロードしてから、sudoレベルのフラッシュツールでキーボードにファームウェアを書き込むことだ
  • USB Serialは優れたツールで、今ではブラウザを使ってデバイスを設定するツール群が存在する

    • ESPHome、Betaflight、ELRS、Flipperなどがある
    • WebKitはAppleが開発しているためサポートが不十分だ。しかしFirefoxはハードウェア「接続」のサポートが足りず、開発者に優しくない
    • ユーザーの同意だけではデバイスへのアクセスに十分ではないという理由でサポートを追加していない。Blinkは安全に実現できることを証明した
  • デバイスを頻繁にフラッシュする人にとっては利点が明確だ。しかし一般ユーザーには重要ではない

    • 別個のツールやブラウザが必要になるかもしれない。Flash Browserは追加ツール付きで提供される可能性がある
  • USBポートはブラウザベースのコードに使われない方がよいのかもしれない

  • PixelスマートフォンにGrapehenOSをフラッシュした体験は、最も快適で高速なOSインストール体験の一つだった

  • 秘密鍵を「マスター」キーとして暗号化し、暗号化された秘密鍵をキーハンドルとして返す

    • 無限の機会を与えることは、結局は逆効果になりそうだ
  • WebUSBに関連する政治的な論争がある

    • その政治的論争が何なのか気になる