Preview版(前編)みなさん、こんにちは。Preview版を公開しました。OS用アドオンツールです。今回公開されたバージョンはテクノロジー・プレビュー版ということですので、あくまでも評価目的での公開になりますが、このバージョンではROPという攻撃手法に対抗する以下の5つの技術が導入されています。Programming)とは、WindowsのDEP(データ実行防止)のようにメモリ中のデータ領域での不正コード実行を防止する機能を、回避するための攻撃手法の一つです。スタック・バッファオーバーフローの脆弱性を利用してシェルコードを実行させるケースを考えてみましょう。通常、攻撃者はプロセス・メモリのスタック領域にシェルコードを送り込み、そこへプロセスの制御を移すことによりシェルコードを実行させようとします。WindowsのDEP(正確にはハードウェアDEP)はスタック中でのプログラムコードの実行を防止しますので、DEPが有効の場合は攻撃が成功しません。そこで攻撃者はDEPを回避するためにROPの手法を使用します。ROP攻撃のポイントは、プロセス・メモリ内のコード領域に点在する「return命令を伴ったプログラムコードの断片」を連続的に実行するところにあります。下の図はROPのイメージを表しています。0xdeadbeefがコピーreturn命令が実行されると、スタックの先頭に積まれているアドレスのプログラムコードへと制御が移ります。図のように、あらかじめスタック上にジャンプ先のアドレスやパラメータを積んでおき、直後にreturn命令があるようなインストラクションへ次々とジャンプさせることで、攻撃者の意図したさまざまなコード実行が可能になります。この場合、コードの実行は通常のコード領域で行われますのでDEPによる防御は働きません。ret」といったコードを実行することで、スタックポインタがヒープ領域を指すように仕向けます。スタックの位置を強制的にヒープ領域へと変更させるわけですね。このような行為はスタック・ピボットと呼ばれます。ROPの手法を使用することでDEPを回避した柔軟なコード実行が実現できますが、ROPのみで大量の複雑な処理を行うことは困難です。そのため実際の攻撃では、例えばROPを利用してVirtualProtect関数を呼び出し、データ領域に送り込んだシェルコードを動的に実行可能に変更した後、そのシェルコードを実行させるといったことが行われます。ROP攻撃の考え方については以下の資料がわかりやすいので、興味のある方はご参照ください。それぞれ各社・各団体の商標または登録商標です。