全2486文字
PR

 米Intel(インテル)がおよそ15年ぶりに、マルウエアの実行を防止する機能をプロセッサーに追加する。2020年内に出荷する予定の「Tiger Lake」(開発コード名)から追加する、Intel Control-Flow Enforcement Technology(Intel CET)と呼ぶ仕組みだ。従来のメモリー保護機能を回避した新しい攻撃手法を防ぐ。

 マルウエアによる最も一般的な攻撃手法はWindows OSなどに存在するバッファオーバーフローの脆弱性を悪用して、任意のプログラムをコンピューター上で実行しようとするバッファオーバーフロー攻撃だ。そこで米Microsoft(マイクロソフト)は2004年に公開したWindows XP SP2(Service Pack 2)において、プロセッサーが備える「NXビット(実行不許可ビット)」という仕組みを利用してバッファオーバーフロー攻撃を防止する「データ実行防止(DEP)」というマルウエア対策機能を追加した。NXビットの機能は米AMD(Advanced Micro Devices)が2003年に、インテルも2004年にパソコン用プロセッサーに搭載した。

ROPやJOP/COPの台頭で、バッファオーバーフロー攻撃は継続

 しかし近年、Windowsが備えるDEPなどのマルウエア対策機能を回避する「リターン指向プログラミング(Return-Oriented Programming、ROP)」や「ジャンプ/コール指向プログラミング(Jump/Call-Oriented Programming、JOP/COP)」と呼ばれる攻撃手法が台頭していた。こうした新しい手法を使うマルウエアを防ぐ目的でインテルはIntel CETを追加した。既にマイクロソフトがIntel CETを使った新しいマルウエア対策機能「Hardware-enforced Stack Protection」をWindows 10向けに開発中で、インサイダープレビューには機能を実装済みとしている。

 Intel CETがどのようにマルウエアの実行を阻止するのか、詳しく見ていこう。

 マルウエアが仕掛けるバッファオーバーフロー攻撃とは、プログラムに割り当てられたバッファより大きなサイズのデータを送りつけることでプログラムを誤動作させ、送りつけたデータ中に仕込んだ不正なプログラムを実行させるものだ。プログラムがサブルーチンから戻ってくるときの戻りアドレス(リターンアドレス)を書き換えることで、不正なプログラムを実行するのが一般的だ。

 そこでWindows XP SP2以降に搭載されたDEPは、メモリー領域を「プログラムを実行できる領域」と「プログラムを実行できないデータ用の領域」に区別し、マルウエアがデータ用の領域に送り込んだ不正なプログラムを実行できないようにしていた。プロセッサーはNXビットを使って、プログラムを実行できないデータ用の領域を示していた。

ROPは実行可能領域にある「コードの断片」を悪用

 しかし最近は、このDEPの仕組みをかいくぐって不正なプログラムを実行しようとする攻撃手法が台頭していた。その1つがリターン指向プログラミング(ROP)だ。ROPは不正なプログラムをデータ用のメモリー領域に送りつけて実行するのではなく、プログラムが実行できるメモリー領域に存在するコードの断片(ガジェット)を複数組み合わせて不正なプログラムとして動作させていた。通常のバッファオーバーフロー攻撃と同じようにプログラムの戻りアドレスを書き換えることで、複数のコードの断片を数珠つなぎに実行するところがポイントだ。

 ROPにおいてはコードの断片自体はプログラムが実行できるメモリー領域に存在するため、DEPではその実行を阻止できない。そのためDEPの仕組みをかいくぐれてしまうわけだ。