ヒープオーバーフローと別の手法でヒープ破壊を行うUser After Freeと呼ばれる攻撃と、Use After Freeと一緒に使われることが多い、ヒープスプレーについて紹介します
前回は、ヒープオーバーフローを中心とした、ヒープ破壊の脆弱性と、その対策について紹介しました。今回は、ヒープオーバーフローと別の手法でヒープ破壊を行う「User After Free」と呼ばれる攻撃と、Use After Freeと一緒に使われることが多い「ヒープスプレー」について紹介します。
図1に見るように、Use After Freeは、2011年から悪用される割合が増えており、2013年のデータでは、最も悪用された割合が多い脆弱性タイプになっています。
Use After Freeは、前回も紹介をしたヒープオーバーフローと同じくヒープ領域に対する攻撃で、ヒープ管理とヒープ領域のアドレスを記録する変数(ポインター)の不整合を使います。通常はこのような不整合が生じることはないのですが、例えばエラー処理やリトライ処理、マルチスレッドのプログラムで不整合が発生することがあります。
一般的なプログラムで発生する不整合については、コンパイラーレベルでの対処も進んでいるのですが、JavaScriptなどのスクリプト言語(インタープリター)を使い、意図的に不整合が生じやすい状況を作り出す攻撃については、対策が進んでいません。
このため、現在悪用されている User After Freeの攻撃の大半は、JavaScriptのようなスクリプト言語を使ったもので、JavaScriptが実装されたブラウザの他、pdfやflashに対する攻撃も行われています。考えてみれば、スクリプト言語は、ヒープで動いているようなものなので、ヒープを使った攻撃の対象となるのは、ある意味、当然なのかもしれません。
Use After Freeについては、あまり文献が見つからないのですが 「主に言語とシステム開発に関して」というブログで記載されている「Windows XP等の,IE脆弱性の攻撃方法“ヒープスプレー”と“Use After Free”」(文献1)と、このブログで紹介されているリファレンスが、今回の内容をまとめる上で、とても参考になりました。
Windows XP等の,IE脆弱性の攻撃方法「ヒープ・スプレー」と「Use After Free」を,HTMLサンプルコードで理解しよう(ブログ:主に言語とシステム開発に関して)
http://d.hatena.ne.jp/language_and_engineering/20140508/
User After Freeを簡単に表現すると、解放済みのヒープ領域を利用して、任意のコードを走らせる手法です。以下の攻撃のポイントを理解する必要があります。
この点について、文献1で取り上げているStephen Bradshawの「Heap Spray Exploit Tutorial: Internet Explorer Use After Free Aurora Vulnerability」(文献2)のサンプルコード(リスト1)を使って解説していきます。
Heap Spray Exploit Tutorial: Internet Explorer Use After Free Aurora Vulnerability(ブログ:The Grey Corner)
http://www.thegreycorner.com/2010/01/heap-spray-exploit-tutorial-internet.html
リスト1は、以下の手順で Use After Freeを行っています。
上記、1〜2、3、4〜6のメモリマップは図2のようになっているものと考えられます。
多くのヒープに対する攻撃と同様に、このサンプルコードも、ヒープ領域が連続して取得されること、常に一定のアドレスにヒープが割り当てられていることを前提としています。
Copyright © ITmedia, Inc. All Rights Reserved.