Intelが、リターン指向プログラミング(ROP)を利用してメモリの脆弱性を突く攻撃をチップレベルで阻止する技術を考案した。
Intelはこれらの新しい対策の概要が記載されたプレビュー仕様書を公開した。この文書では、「Control-flow Enforcement Technology」(CET)と、それによってROPおよびジャンプ指向プログラミング(JOP)を使用するエクスプロイトを防止する方法が説明されている。
CETの狙いは、これら2種類の攻撃に対する防御能力の欠点を補って、アプリケーションとOSカーネルを保護することだ。
攻撃者はROPとJOPを使って悪意のあるコードを実行することで、非実行メモリやコード署名といったOSのセキュリティ対策を迂回できる。
例えば、これまではROP攻撃により、データ実行防止(DEP)やアドレス空間配置のランダム化(ASLR)といった現行のメモリエクスプロイト緩和策を迂回して、マルウェアをインストールすることが可能だった。
Intelのソフトウェア&サービスグループ(SSG)でプラットフォームセキュリティアーキテクチャおよび戦略チームのディレクターを務めるBaidu Patel氏は、「ROP攻撃やJOP攻撃は検知や予防が特に困難である。なぜなら、攻撃者は実行可能メモリから実行される既存のコードを創造的な方法で利用して、プログラムの挙動を改変するからだ」と説明した。
「ROPおよびJOPの検知や予防が困難なのは、攻撃者が実行可能メモリから実行される既存のコードを利用するからだ。多くのソフトウェアベースの検知および予防技術が開発され、導入されてきたが、それほど成果は上がっていない」(Patel氏)
ROP攻撃に対処するため、CETは制御転送オペレーションだけに使用されるシャドースタックを導入する。これらのシャドースタックはデータスタックから隔離され、不正な改変から保護される。
CETはCALL命令とRETURN命令だけに集中し、データに格納されたリターンアドレスをシャドースタックと比較する。それらのアドレスが一致しない場合、例外フラグが立てられる。
Intelは同文書で、「シャドースタックが有効化されると、CALL命令はリターンアドレスをデータスタックとシャドースタックの両方にプッシュする。RET命令はそのリターンアドレスを両方のスタックからポップし、比較する。2つのスタックからポップしたアドレスが一致しない場合、プロセッサは制御保護例外(control protection exception:#CP)を信号で知らせる」と説明している。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。