もらったセキュリティキーが悪意のあるデバイスでないことを確認できるか

もらったセキュリティキーは絶対に危険だから使うなという話ではないです。

なんの話か

  • 先日の FIDO セミナー で Yubico のセキュリティキーを配ってたんですが、いざこのキーを使おうとしたときに「本当に信用していいんだっけ」と思った
  • 個人的には「Yubico のブースにいた、Yubico の服をきた人が配っていた」で信じていいんじゃないかと思っている
  • もらったセキュリティキーは検証してから使うべき、という話ではない(信用できる文脈でもらったかどうかのが大事だと思う)(この文章は、それはそうとして本当に検証しきれるのか?という話)
  • もう少し信用が落ちる場合はどうか
  • 大規模カンファレンスで「セキュリティキー・ガイ」を名乗るおじさんが、めちゃくちゃ配りまくってるセキュリティキーだったら?
  • セキュリティキーの文脈じゃなくてもわけわからんやつが配ってる謎の USB デバイスを使うな、という話ではあると思う

Yubikey Verification

YubiKey Verification

というのがあって、あなたが持ってるそれ、本当に YubiKey なの?を検証できる。 具体的にこのサイトが何をしてるかわかってないけど、安直に考えるとアテステーションを使って署名の検証をしている(= YubiKey にしか入っていない秘密鍵を持っていることの検証をしている)と思う。(違ったら教えてほしい)

これは YubiKey でなくても、FIDO certified なセキュリティキーやベンダーが公開鍵を公開していれば検証できる。(カジュアルにできるサイトがあるかどうかはわからん)(アテステーションの検証をしているサービスで使ってみれば良いはず)

本当の YubiKey を改造した悪意のあるセキュリティキーだったらどうか

こういうのを作れるんじゃないか?と思っている。

このハンドラーは、例えばリクエストの origin が「www.yubico.com」の場合リクエストを本物の YubiKey に送信し、レスポンスをそのまま返し、そうではない場合悪意のあるモジュール(秘密鍵を攻撃者が知っている、とか)にリクエストが送信されるようになっている。

そうすると、おそらく Yubikey Verification では Yubikey と判定される、悪意のあるセキュリティキーが存在できてしまうのでは?と思っている。

もうすこし詳しいユーザーはアテステーションを検証しているサービスでこのキーを利用して、本当に信用できるかどうかチェックするかもしれない。

その場合、 attestation=required なリクエストに対してだけ Yubikey のレスポンスが返せば、ユーザーはこのセキュリティキーが危険なものであることに気づけ無いので attestation=required でないサービス(= iOS16 に対応しているサービス)に対してだけ攻撃が成功する。

繰り返し

もらったセキュリティキーは絶対に危険だから使うなという話ではないです。