ニュース

「Google Chrome 90」Windows版にハードウェアによるスタック保護が導入 ~巧妙な攻撃もシャットアウト!

「Windows 10 バージョン 20H1」以降、第11世代「Intel Core」や「AMD Zen 3」で有効

公式ブログ“Google Online Security Blog”

 Windows版「Google Chrome 90」以降には、新たな緩和策「Hardware-enforced Stack Protection」が導入されているという。米Googleは5月4日(現地時間)付けで、公開した公式ブログ「Google Online Security Blog」の記事で、その詳細を解説している。

 「Hardware-enforced Stack Protection」は「Windows 10 バージョン 20H1」以降で利用できる緩和技術で、アプリケーションの脆弱性悪用をより困難にするものだ。第11世代の「Intel Core」や「AMD Zen 3」アーキテクチャーなど、「Control-Flow Enforcement Technology」(CET)を搭載したCPUでのみ利用できる。

 似たような緩和策としては、Windows XP SP2以降から導入されている「データ実行保護」(Data Execution Prevention、DEP)が知られている。これはデータ領域でコードを実行するのを防止する機構で、万が一アプリケーションの脆弱性が悪用され、攻撃コード(シェルコード)の実行に至っても、あらかじめ実行が許可されたコード領域でなければ、それを異常終了させることでシステムを保護する。

 DEPは非常に強力で、データ領域に攻撃コードを置いて実行させる古典的な手法の多くを無効化できたが、一方でこれを回避する方法もいくつか考案されている。その代表がROP(Return Oriented Programming)だ。これはデータ領域ではなくコード領域にある処理であれば実行できることを逆手に取り、命令の実行を管理する「スタック」でプログラミングを行う手法だ。プログラムにすでに存在するコードのなかから、たまたま攻撃に使えそうな命令(ROPガジェット)を見つけて巧妙に制御を移しながら繋げてゆき、最終的に攻撃を成功させる。

 「CET」はこれに対抗するため、通常のスタックとは別に「シャドースタック」と呼ばれるものにリターンアドレス(命令の呼び出し履歴のようなもの)を記録し、不審な処理が行われていないかを照合する。アドレスが一致しない場合はハードウェアが例外が起こし、OSが実行を阻止するわけだ。

 Windows版「Chrome 90」以降では、ビルドの際に「/cetcompat」オプションを有効化することでこのハードウェアによって強制された新しいスタック保護をONにし、セキュリティを大きく高めている。

 ただし、CETは制御フローのうち逆方向はチェックするものの、順方向の拘束はしない。これに関してはコントロールフローガード(CFG)と呼ばれる技術を使って事前に検証を行うことが可能で、「Chrome」でも導入を検討している。スタック保護そのものを回避する手法に関しても、対策を進めていくという。

 一方で、レンダラープロセスではパフォーマンス上の理由からCETが有効化されていない。また、スタック保護は脆弱性そのものをなくしてしまう技術ではなく、あくまでも最悪の事態を防止するための緩和策だ。プログラムそのものの安全性を高めていく努力は今後も必要となるだろう。