2022年の夏、サイバーセキュリティの専門家であるDavid Schutz氏は、外出先での長い1日を終え、自宅に戻るところでした。彼のGoogle Pixel 6スマートフォンはバッテリーが切れかけており、帰宅したときには残量が1%になっていました。間の悪いことに、メッセージを入力している最中にスマートフォンの電源は落ちてしまいました。彼は充電器を見つけて、スマートフォンの電源を入れ直しましたが、すぐにメッセージの続きを入力することはできませんでした。SIMのPINコードの入力を求められたのです。外出で疲れ切っていたSchutz氏は、PINの入力を3回間違えました。すると、別のシークレットコード、PUKの入力が求められました。PUKを入力すると、指紋認証でスマートフォンのロックを解除するように促されました。ところが、指紋が認識された後、スマートフォンの動作が停止してしまいました。
他の人なら、このようなおかしな動作があっても、ソフトウェアの不具合のせいだろうと考えて、スマホを再起動し、次の作業に移っていくでしょう。しかし、研究者であるSchutz氏は、ソフトウェアやデバイスのおかしな動作に気が付きました。このスマホで、再起動後にロック解除コードが求められなくなった原因を突き止めようと考えました。彼は何度か失敗を繰り返して、このケースでは再起動は不要であることに気付きました。ロックされたスマートフォンで、SIMカードを取り外し、再度挿入して、間違ったPINコードを3回入力し、PUKコードを入力すると…なんと、スマートフォンのロック画面を回避してスマートフォンを使用できるようになることがわかりました。Schutz氏はこの発見についてブログで詳しく説明しています。Googleは予想に反して、この問題をすぐには修正しませんでした。この大きなセキュリティホールは、膨大な数のAndroidのバージョン11~13を約半年間(6月から11月まで)もの間、危険に晒していました。
どういうことか
根本的に、この脆弱性により、シークレットコードを知らなくても、ロック画面を回避して、スマートフォン上のすべてのデータにアクセスできるようになります。高度な攻撃手法などはまったく必要ありません。スマートフォンに何らかの外部機器を接続する必要も、ソフトウェアの新しい脆弱性を見つける必要もありません。ただ、SIMカードを取り出して挿入し直し(攻撃者は自分のカードを使うこともできます)、間違ったPINを3回入力し、PUKコードを入力して、PINを変更すれば、スマートフォンにアクセスできるようになります。条件は、スマートフォンの電源が入っていること、そして、所有者が少なくとも一度ロックを解除していることだけです。
Androidのソースコードは公開されており、この脆弱性のあるソフトウェアもそこに含まれています。つまり、だれでもそのソースコードを読むことができます。そこで、このようにかなり単純なバグがなぜ存在しているのかを確かめることができます。実のところ、Androidスマートフォンには複数のロック画面があります。シークレットコードを入力する画面、指紋の読み取りを促す画面、SIMのPINコードを入力する画面などです。1つの確認がうまくいけば、本来は次のロック画面のいずれかが表示されます。このシステム自体は正常に機能しますが、PUKコードのロック画面は例外です。PUKを入力すると、ロック画面を解除する関数が2回呼び出されていました。指紋認証の画面が表示されずに、スマートフォンのロックが解除されます。この問題は、Androidのコードのかなり大規模な修正によって解消されており、それぞれのロック画面の制御が独立して行われるようになっています。
お役所仕事とセキュリティ
このような深刻な脆弱性の解消に6か月近くもかかったのはなぜでしょうか。Schutz氏はGoogleのバグ報奨金制度を利用して、脆弱性の詳細情報を送りました。この制度の規則によれば、複数の(あるいはすべての)デバイスでロック画面が回避される脆弱性の発見によって、最大100,000米ドルの報酬が支払われる可能性があります。しかし、Schutz氏が受け取ったのは現金ではなく、数週間にわたる沈黙でした。しかも、彼の情報は重複であるとして、却下されました。だれか別の人が既にこの脆弱性についてGoogleに報告していたのです。
Schutz氏は受け取れるはずだった報酬を諦めざるを得ませんでした。そうこうしているうちに9月になり(彼の報告から3か月が経とうとしていました)、次のパッチでこの脆弱性は修正されるだろうと思われました。ところが、そうではありませんでした。9月のアップデートをインストールしても、SIMカードの手法を使うと、ロック画面を回避できる状態が続いていました。その9月には偶然にも、セキュリティ研究者を対象としたGoogleのイベントがありました。そこでSchutz氏は、Googleの開発者の前で直接、バグを再現して見せました。そこでついに開発者たちに事の重大性が伝わり、Androidの11月のアップデートでこの脆弱性が修正されることになりました。
Schutz氏より前にもバグの報告があったにもかかわらず、Googleはまったく対応していなかったのです。2022年6月のSchutz氏のメッセージに対しても何の反応もありませんでした。開発者たちと対面で話をしてやっと、この脆弱性の問題が解決されたのです。最終的に、Schutz氏はその貢献に対して70,000米ドルの報酬を受け取っています。
セキュリティの対価
スマートフォンの利用者としては、少なくとも重大なバグは開発者が優先的に対応し、速やかに問題が解消されることを期待します。しかし、必ずしもそうではないことを、このAndroidスマートフォンのロック画面回避の事例が物語っています。話の始まりは問題ありませんでした。脆弱性が見つかりましたが、幸い、見つけたのは善意の研究者だったので、不正な目的に使用されかねないダークネットでその情報を売り飛ばしたりせず、開発した企業に情報が提供されました。Googleは速やかにこのセキュリティホールをふさぐ必要がありましたが、ここで問題が生じました。これは、バグ報奨金制度により外部のセキュリティ専門家の力を借りている組織が考えるべき課題を提示しています。バグを適時修正できる十分なリソースが社内で確保されているかを問い直す必要があるでしょう。