- 2018/08/28
- サイバー攻撃
署名されたOracleのプロセスをDLLハイジャッキングやMimikatzの実行に悪用する攻撃について
Post by : CYBEREASON NOCTURNUS RESEARCH
OSのセキュリティスタックには、アプリケーションのホワイトリスティングの機能が組み込まれるようになりました。これを受けて攻撃者は攻撃の新たな手法を模索せざる得なくなりましたがその手口を見出し、ツールを駆使して検知を逃れ、標的の環境に侵入しています。サイバーリーズンのお客様の環境で見つかったこの事例では、Oracleが署名、検証したプロセスを悪用してDLLハイジャッキングが行われ、これにより、Mimikatzが実行されていました。
Mimikatzの使用を検知
Cybereasonプラットフォームは、認証情報窃取の行動を示すunpack200.exeを検知しました。このケースでは、unpack200.exeはMimikatzコマンドラインを実行しています。
Mimikatzは、認証情報の窃取に用いられるツールとしてよく知られており、プレーンテキストのパスワードやハッシュ、PINコード、Kerberosチケットをメモリから抽出するほか、Pass-the-HashやPass-the-Ticketの実行、ゴールデンチケットの作成も可能です。ほとんどのアンチウイルスツールや、ほかのセキュリティ製品でも、Mimikatzは検知できます。アンチウイルスに検知されるのを防ぐため、攻撃者は通常、難読化やパッキングのテクニックなどを含む、さまざまな種類のカスタムMimikatzペイロードを使用します。
一方、Unpack200.exeは、JARファイルを解凍する際によく使用される一般的なツールです。このプロセスのイメージファイルはOracleによって署名、検証されており、このファイル自体に害はありません。以下の図に示すように、このイメージファイルには、JARファイルはありませんでした。
このコマンドは、セキュリティアカウントマネージャー(SAM)のデータベースやlsass.exeプロセスのメモリから、ユーザーの情報や認証情報をダンプします。ダンプされるものには、ユーザーのパスワードのNTLMのほか、LMハッシュが含まれることもあります。
DLL検索の命令をハイジャッキング
攻撃者は、unpack200.exeの脆弱性を狙ったDLLハイジャッキングの手法を使用しており、この手法では、プログラムにロードするDLLをWindowsが探す仕組みを悪用します。
Windowsは、実行ファイルが必要とするDLLを特定の順序や名前で検索し、DLLの署名は確認しません。実行ファイルがハードコーディングされたパスを通じてDLLを特定しなかった場合は、DLLリダイレクションやマニフェストにより、悪意のあるDLLがサーチオーダーに置かれ、実行ファイルはこれをロードします。システムはロード時に、以下のようにDLLを検索します。
1. アプリケーションがロードを行うディレクトリ
2. システムディレクトリ:GetSystemDirectory()関数を使用して、このディレクトリのパスを取得します
3. 16ビットシステムディレクトリ
4. Windowsディレクトリ:GetWindowsDirectory()関数を使用して、このディレクトリのパスを取得します
5. カレントディレクトリ
6. PATH環境変数にリストされているディレクトリ
攻撃者はこの手法を悪用し、OSのDLLを装ってOSのデフォルトディレクトリ内に常駐し、悪意のあるDLLをマシンの通常のワークフローで相手にロードさせます。
また、この手法で攻撃者は、特権の昇格も手にします。つまり、管理者やSYSTEMのようなきわめて高い権限が実行に必要なプログラムにもDLLをロードできるのです。また、このテクニックでは、高い権限を使って実行されるOSのプロセスに、悪意のあるDLLをOSの通常処理のなかで実行させることが可能です。いくつかのケースでは、このようなタイプの攻撃が、全く相手に気付かれずにずっと続けられます。さらに、悪意のあるDLLは、プロセスの実行フローをオリジナルのDLLにリダイレクトすることもできます。
ビジネスアナリティクスを扱うある企業を標的としてカスタマイズされた今回の攻撃では、Windowsメカニズムの脆弱性を突いて、悪意のあるDLLを正規のプロセスにロードさせています。
以下の画像には、侵害を受けた実行ファイルがOracleによって署名、検証された状態が示されています。
一番はじめに相手にロードさせるモジュールに、攻撃者はVisual C++ランタイムDLLの名前を使用していました。そして、このモジュールを、正規プロセスのJARファイル解凍ツール、「unpack200.exe」が置かれているのと同じディレクトリに仕込んでいます。プロセスはすべて、Visual Studioを通じてCPPでコンパイルされており、このタイプのDLLを検索します。
つまり、このテクニックを使えば、正規のものや署名されているものも含め、すべてのプロセスを簡単に侵害できてしまうのです。
そして、汎用のアンチウイルスエンジンによる検知において、VirusTotalだけが、この悪意のあるDLLにフラグを付けません。
サイバーリーズンのハンティングチームがさらに調査を行ったところ、アンチデバッグテクニックやファイルの不正操作の機能を使用するなど、このDLLはマルウェアのような振舞いをすることがわかりました。そして、環境を複製して攻撃のシミュレーションを行った結果、その正体が明らかになったのです。
悪意のあるこのDLLには、文字列の難読化やバイナリパッキングの機能を備えたMimikatzコードが含まれていました。そして攻撃者は、オリジナルのMimikatzツール実行する場合に使用するのと同じコマンド構文を使っています。
以下に示すように、このDLLを逆アセンブルしたところ、ローディングを試行するプロセスがunpack200.exeのときだけDLLは悪意のあるコンテンツを実行することがわかりました。プロセスは名前での検証を必要とします。検証が行われない場合には、ExitProcess()プロシージャが呼び出されます。
結果として悪意のあるDLLが付与されたunpack200.exeが実行され、これにより、DLL内のコードが解凍され、その難読化が解除されて、Mimikatzインターフェースがロードされます。標準的なアンチウイルスの検知を逃れようとして攻撃者は、カスタムのコンパイルを行ったバージョンのMimikatzを使用しています。このMimikatzは、その文字列にいくつかの修正が加えられています。
振舞い分析による対応
標的の環境に侵入するべく攻撃者は、Oracleが署名、検証したプロセスを攻撃に悪用するなどの手の込んだ手口を探っていますが、このような状況にあっては、攻撃の検知において、振舞いベースの手法が欠かせません。この記事で説明したようなインシデントにシグニチャベースの検知を適用したとしても、問題を検知することはできなかったでしょう。なぜなら攻撃者は、署名、検証されたプロセスを悪用しているからです。
それどころか、攻撃者は、アンチウイルス製品では検知できないカスタマイズバージョンのMimikatzを使って、アンチウイルスの検知を逃れようとしていました。しかし、今回攻撃を受けた企業の場合は、Mimikatzのファイルではなく振舞いを通じて、Mimikatzを検知しています。振舞い検知では、あらゆる手がかりが効果を発揮します。ほんのわずかな情報でも、それが見つかることで、攻撃の全容を明らかにできる可能性があります。
この調査は、Niv Yona、Kohei Fujikawa、Amit Serper、Yuval Chuddy、Oren Ofer、Eran Tamariが担当しました。
ホワイトペーパー「攻撃に対抗する力を取り戻す」
高度標的型攻撃(APT攻撃)の脅威はあらゆる人々に広がってきています。しかしながら、脅威インテリジェンスを活用し、敵を知ることにより、先手を打って脅威ハンティングを行うことで、高度標的型攻撃(APT攻撃)を撲滅し、攻撃に対抗する力を取り戻すことができます。本書を通じて、高度標的型攻撃(APT攻撃)に立ち向かう秘策を知ることができます。
https://www.cybereason.co.jp/product-documents/input/?post_id=618