2017年8月18日
株式会社Doctor Web Pacific
待ち望まれていたWindows Vistaは、美しい新しい滑らかなだけのインターフェイスではありません。
最近のインタビューで、マイクロソフトのPlatform Product and Services Groupの共同社長である Jim Allchin 氏は、Windows VistaがWindows XP SP2と比べてどれほど安全であるかが尋ねられました。これに対して、VistaにはWindows XP SP2に追加できない重要なセキュリティ機能が組み込まれる予定だと回答しました。最初のものは、アドレス空間レイアウト無作為化(ASLR)です。ASLRのおかげで、重要なシステムデータは、オペレーティングシステムの起動時に常に異なるメモリ領域に書き込まれます。システムコードは常にランダムな場所に表示されるため、攻撃を仕掛けることは難しくなります。
Allchin氏によると、ASLRはWindows Vistaを実行しているマシンを他のマシンとは若干異なります。そのため、マルウェアプログラムが1台のコンピュータにアクセスし、別のコンピュータを感染させようとしても、成功する可能性は非常に低くなります。
このニュース記事は2006年11月13日付けのもので、11年が経過し、Windows Vistaおよび、後継製品のサポートはその少し前に中止されましたが、マルウェアはまだ存在しています。どうしてでしょうか?
ASLRの仕組みを見てみます。マルウェアがプロセスにコードを挿入することになっている場合、プロセスを危険にさらすためにマルウェアライターは、侵入の瞬間に関連する予測可能なメモリアドレスを使用する必要があります。この技術はWindowsにのみ関連していません。これはLinuxやmacOSでも使われています。
それでは何をすれば見つけられるのでしょうか?その答えは基本的に2つあります。最初のASLRは単独では存在しません。これを機能させるには、保護されたアプリケーションをこのテクノロジをサポートするように構築して、再起動するたびに新しいアドレスを使用してロードできるようにする必要があります。
上のスクリーンショットは同じUSER32.DLLルーチンを表示しますが、異なるメモリアドレス(760Fと75DA)を持っています。これは、USER32.DLLがカーネルライブラリであり、カーネルがASLRをサポートしているために可能です。
そして、これにより、やや軽微な攻撃が発生します。
お使いのオペレーティングシステムがASLRをサポートしていると仮定しましょう。それはおそらく、Windows Vistaで、メディアプレーヤーに欠陥があります。これはMP3.DLLなどのいくつかのライブラリを使用して動作します。
ASLRを回避する有効な戦略の1つに、ASLRをサポートしない既知のライブラリ(プロセス)のハードコードされたアドレスを使用することが含まれます。
彼らは攻撃が成功するまで、プロセスに悪用コードを注入するといった直接的なアプローチをすることができます。
Windows VistaおよびWindows Server 2008では、256の任意の場所にDLLと実行可能コードをロードできます。これは、攻撃者が必要なアドレスを取得するために256のうち1つのチャンスを持っていることを意味します。
また、レベルを1つ下げることもできます。
2016年10月中旬に、カリフォルニア大学リバーサイドとニューヨーク州立大学ビンガムトンの情報セキュリティ研究者が、インテルのCPUの欠陥がASLRを回避し、攻撃を成功させるためにどのように活用できるかを記述した論文を発表しました。研究者は、Haswell CPUの分岐予測器の欠陥を発見しました。これにより、プログラムコードをメモリに格納する場所をアプリケーションが判断できるようになりました。
あなたがハッカーのように感じたいなら、いくつかのASLRの研究をしてください。
SysInternalsユーティリティを使用すると、ASLRの動作を確認できます。www.microsoft.com/technet/sysinternals/utilities/processexplorer.mspxからダウンロードできます。 これを使用するには、Process Explorerを起動し、Show Lower Paneオプションが有効になっていることを確認します。
その後、上部のウィンドウでexplorer.exeを選択し、下部のウィンドウの基本列にntdll.dllアドレスを書き留めます。 ベース列が表示されない場合は、「表示」→「列の選択」に進み、「DLL」タブで「ベース」列を追加します。
ベースアドレスを書き留めるなどした後、システムを再起動してください。Windows XPでは、再起動後もntdll.dllのベースアドレスは変わりません(Windows XPはASLRをサポートしていません)。 Vistaでは、再起動後にベースアドレスが変更されます(Vistaはこのセキュリティ機能をサポートしているため)。
図4では、Process Explorerのインターフェイスとntdll.dllのベースアドレスを確認できます。 表2は 、ntdll.dllとuser32.dllの間に存在するプロセスエクスプローラで、XP SP2とVistaのプロセスエクスプローラを示しています。
Tell us what you think
To ask Doctor Web’s site administration about a news item, enter @admin at the beginning of your comment. If your question is for the author of one of the comments, put @ before their names.
Other comments