Apple のゼロデイを 3 月に発見しながら報告しなかった MS リサーチャー

先日、Sophos は、Apple がリリースした謎めいたゼロデイパッチについての記事を発表しました。

ほとんどすべての Apple のセキュリティ修正プログラムと同様に、このアップデートは何の予告もなく配信されましたが、Apple の他のアップデートとは異なり、「修正リスト」には 1 つのバグしか記載されておらず、Apple が通常、迅速かつ効率的に公開しているバグリストの内容と比較するとこのバグについて公開された情報はわずかでした。

今回のアップデートは、サポート対象となる最新の iOS 、iPadOS 、macOS ( メジャーリリース番号:iOS/iPadOS 14、macOS 11 ) に対してのみ発行されました。

サポート対象であっても、古いバージョンの iOS や macOS ( iOS 12、macOS 10.15 Catalinaおよび10.14 Mojave ) 、watchOS および tvOS については、まったく触れられていません。

これらのバージョンに対してパッチが発行されなかったのは、脆弱性の修正が困難であることからなのか、脆弱性を修正する予定がないのか、あるいは実際にはバグのあるコードがまったく含まれていないからなのかは、まだ不明です。

このバグは、CVE-2021-30807 という名前でしか知られておらず、「ある匿名の研究者」が発見したとされます。

更新情報: この修正を watchOS プラットフォームに拡張するための追加パッチ、watchOS 7.6.1 が公開されました。[2021-07-30T12:58Z]

バグの正体

新しいバグは、Apple に報告される前にリークされた新しいジェイルブレイクに関する重要な機密情報だったのでしょうか?または、実際に攻撃に使用されなかったサイバー犯罪用に作られたエクスプロイトなのでしょうか?もしくは法執行機関によるスマートフォンのクラッキングツールキットの一部が流出したものだったのでしょうか?

確かなことはわかりません。

わかっているのは、Apple が「この問題が積極的に悪用された可能性があるという報告を認識している」と述べたことだけです。

「悪用された」ではなく、「悪用された可能性がある」としたり、「報告を受けた」のではなく、「報告を受けたことを認識している」と表現したりするなど、遠回しな表現が使われています。

もちろん、Apple はこの脆弱性が危険なものであること (カーネルの権限でコードが実行される可能性が高い) を明らかにし、修正パッチをリリースしたので、そのこと自体に問題はありません。

対象となる iPhone ユーザーの多くは、すでにアップデートを自動的に受け取っていると思いますが、まだ受け取っていないユーザーは、「設定」→「一般」→「ソフトウェア・アップデート」で簡単に入手できます。

新たな謎

Apple の発表があった直後、セキュリティ研究者の Saar Amar 氏のツイートが、新たな謎を呼びました。

MSRC (Microsoft Security Response Center) に所属し、「リバース、エクスプロイト、Windows インターナル、仮想化、影響の軽減策」を専門とする Saar Amar 氏は、2021 年 3 月にこの脆弱性を発見したものの、適切に検証する時間がなかったために、Apple には報告していなかったとツイートしています。

パッチが予告なしに届いたとき、Amar 氏は、他の誰かが同様の研究を独自に行ったのだと気づきました。

つまり、ツイートによれば彼は 2021 年 3 月に脆弱性を発見したものの、その時には公表しなかったということです。

代わりに 3 月に彼がツイートしたのは、description_and_poc.txt という彼が作成したファイルの SHA-512 ハッシュ値でした (下図参照)。

https://platform.twitter.com/widgets.js

ハッシュの開示

暗号ハッシュをツイートすることは、ある時点で何かを知っていることを、後になるまで直接明かすことなく証明する簡単な方法です。

他人が自分のファイルと偶然同じハッシュを持つファイルを作ることは、たとえその問題に何十年も費やしたとしても不可能 (少なくとも計算上は) です。

言い換えれば、ある時に発表したのと同じハッシュを持つファイルを後から作ることができれば、少なくともその時からそのファイルを確かに所持していたということの証明になります。

ハッシュを公表した後にファイルを一から作ることはできないので、そのファイルはハッシュよりも前から存在していたはずです。

「発見の優位性」を確立するための同様の手法は、何世紀にもわたって用いられてきました。例えば、オックスフォード大学の物理学者ロバート・フックは、1660 年に現在のフックの法則を発見したことを事前に告知 するために、次のような予告を書きました。「弾性またはばねの真の法則は… ceiiinosssttuu」。末尾の文字を並べ替えると、ut tensio, sic uis となり、ラテン語で「伸びは力に比例する」という意味になります。最終的にフックは、この結果を 1678 年に発表しました。 (フックの法則とは、例えば 2 kgの質量をバネの先にぶら下げると、1 kgの質量をぶら下げた場合の 2 倍伸びるというものです。皆さんも学校で習ったかもしれませんし、輪ゴムや鉄の重りを使って実験した方もいるかもしれません。)

Ut tensio, sic uis

Apple が CVE-2021-30807 の修正プログラムを公開したのと同じ日に Saar Amar 氏が Github に公開した文書には、まさにその SHA-512 ハッシュが含まれているのを確認することができます。

この文書には、Apple が最新の速報で指摘したのとまったく同じカーネル関数で、ローカルでの特権昇格を実行するための概念実証コードが含まれています。

これで、謎のバグの正体は明らかになりました。

しかし、なぜ Saar Amar 氏はすぐ公開しなかったのでしょう?

同氏によると、3 月にこの基本的な脆弱性を一旦放置したのは、8 月に再びこの問題に取り組み、自分のコードを完全なエクスプロイト (ジェイルブレイクが可能になる理論を証明するだけでなく、実際にジェイルブレイクができる概念実証) を完成させてから、「確かな品質のレポート」として Apple に開示するつもりだったからだそうです。

実は、このようにバグを一旦放置することは珍しいことではありません。

  • バグ報奨金で生活している組織に所属していない研究者であれば、完成度の高い (そして、率直に言えば、より劇的で危険な) エクスプロイトの方が、一般的には多くの金額、場合によっては大金を稼ぐことができるからです。もちろん、他の研究者がバグを見つけて先に報告してしまったら、そのバグには何の価値もなくなってしまうので、あまり長く待ちすぎることにも彼らにとってリスクがあります。
  • 完全なエクスプロイトは、詳細なプログラム上のトリックの連鎖を伴うことが多くあるため、ベンダー側で多くの修正作業が必要となり、包括的なパッチを提供する必要が出てきます。これにより、最初に発見されたセキュリティホールにパッチを当てるだけの場合よりも、セキュリティが大幅に向上する可能性があります。

今回のケースでは、Saar Amar 氏がハッシュ化した文書の中で「非常に単純な脆弱性」と報告しており、その後も「この脆弱性は限りなく些細で単純なものである」と書いています。

このことを念頭に置くと、3 月から 8 月までの 5 ヶ月間の放置期間に他のバグハンターたちがこのバグを発見してしまう可能性があり、また、彼らが研究目的ではなく、ゼロデイとして使用するかもしれないというリスクがあったことがわかるでしょう。

(実際のところ、ゼロデイとして使用されてしまったようです)

対策

もしあなたが 3 月の時点でこのバグを知っていたとしたら、完成度が高くないと思いつつもパッチが適用されることを期待して、直接 Apple に PoC を開示したでしょうか?

それとも、ロバート・フックをはじめとする多くの啓蒙主義的な科学者たちのように、パッチの利権を確実に狙って、時間をかけて完全な研究論文を書き上げたでしょうか?

以下のコメント欄でご意見をお聞かせください (匿名でのご意見もお待ちしています)。