連載
» 2014年10月15日 18時00分 公開

DEPの仕組みとその回避手法Beyond Zero-day Attacks(5)(3/3 ページ)

[高橋 正和(日本マイクロソフトチーフセキュリティアドバイザー),@IT]
前のページへ 1|2|3       

DEPを回避する――Return Oriented Program(ROP)

 「Return Oriented Program(ROP)」はReturn to Libcと同様の攻撃手法ですが、APIではなく、プログラム中に(偶然)存在する、自分が実行したい短いマシン語を見つけて、これに制御を移す手法です。

 この手法はいま最もホットなエリアで、2013年に開催されたBlueHat Prizeコンテストで表彰された上位3手法の全てがROP対策でした。

関連リンク

Microsoft BlueHat Prize Contest(Microsoft)

http://www.microsoft.com/security/bluehatprize/


 ROPは、メモリ上に展開された実行イメージ中で、自分が意図したマシン語に相当するバイナリデータを使います。図5では、本来は“move eax, 0xc3084189”となっているプログラムを、意図的に1バイトずらすことにより、“move [ecx+8], eax; ret”というプログラムとして利用します。

 Return to Libcで解説した例でも、“jmp esp”の命令は、ROPを利用することができます。

図7 Return Oriented Program(ROP)

DEP回避策の対策

 ここで紹介をした攻撃に対して、Windowsではいくつかの対策が用意されています。その一つは「ブートフラグでDEPをAlwaysOn(表1を参照)にする」ことで、DEPの無効化を回避する方法です。ただし、この対策は、VirtualProtectを使った攻撃の対策にはならない点に注意が必要です。

 大きな実行イメージの中から、意図したコードに相当するバイト列を見つけることは、必ずしも難しいことではないようで、ROPの対策が大きな課題となっています。先にご紹介したBlueHat Prizeで表彰されたROP対策の一部は、EMET(Enhanced Mitigation Experience Toolkit)4.1以降から逐次取り込まれています。

結びに

 DEPの回避策に利用されるReturn to Libcや、ShellcodeからAPIを呼び出すためには、APIの絶対アドレスを事前に攻撃者が知る必要があります。このため、APIをはじめとしたさまざまなアドレスが事前に特定ができない場合、攻撃を成功させることが極めて難しくなります。これは「ASLR(Address Space Layout Randomization)」と呼ばれる技術で、WindowsではVistaから導入されています。

 次回は、このASLRについてご紹介をしていきます。

著者プロフィール

高橋 正和(たかはし まさかず)

日本マイクロソフト株式会社

チーフ セキュリティ アドバイザー

1980年代初頭からミニコン、PC-98、8085、4ビットマイコンなどを使った制御システムの開発などを経験。

1980年代中頃から、日本デジタル研究所株式会社で標準ライブラリの開発保守、開発環境の開発保守、独自OSからWindows NT/Windows XPへの移植、品質管理、新入社員向けのC言語の新人教育などを担当した。

標準ライブラリでは、ファイルシステムやSocketライブラリの開発・実装・保守、開発環境では、68K系のCPUにWhite Sims’s Cによるリロケータブルな実行ファイル形式という特性を使って、オーバーレイリンカー・ローダー等も開発した。

1999年にISS(現在はIBM)セキュリティに関わり、2006年から現職(日本マイクロソフト株式会社 チーフセキュリティアドバイザー)を務める。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。