CVE-2017-0199 修正
.hta ファイルの既定のハンドラーを変更することで、CVE-2017-0199 によるコード実行を無効化します。OLE2(COM オブジェクト)を介して呼び出されるファイルの既定のハンドラーは、ローカルシステムの既定のアプリケーションとは別にレジストリに保存されており、レジストリ経由でしか変更できません。
基本的なエクスプロイトのロジック
これはこのエクスプロイトの実際の一例であり、私が理解している範囲で説明しています。すべての事例がこのパターンに従うわけではなく、私の評価が誤っている可能性もあります。ただし、次のセクションで示す修正は、私がテストした状況では機能します。
- Web サーバーでホストされている RTF 文書には、悪意のあるハイパーテキストアプリケーション(HTA)ペイロードが末尾に連結(cat)されている。
- ホスティングサーバーは、そのファイルへの GET リクエストに対し、コンテンツが HTA ファイルであることを示すヘッダーで応答する。
- Microsoft Word は OLE2 オブジェクトを実行して、Web サーバーから RTF 文書を取得する。
- Microsoft Word は、拡張子 .rtf が HTA のコンテンツタイプと一致しないため、ファイルタイプの検証を強制される。
- Microsoft Word はファイルの末尾から認識可能なデータ構造をチェックし、HTA データ構造を HTA コンテンツタイプに一致させる。
- Microsoft Word はファイルタイプを自動修正し、HTA ファイル用の COM ハンドラー(mshta.exe)に渡す。
- Mshta.exe はファイルの末尾にある悪意のあるハイパーテキストアプリケーションコードを実行する。
COM ハンドラーは、ファイルタイプ検証プロセスでのエラーを防ぐために、レジストリ内でシステムハンドラーとは別に保存されています。
基本的な修正
- RegEdit.exe で HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\DefaultIcon に移動する
- DefaultIcon の詳細なアクセス許可を開く
- 所有者を Administrators(グループ)に変更する
- 現在のユーザーアカウントをセキュリティプリンシパルの一覧に追加し、「フルコントロール」を割り当てる
- (Default) キーを C:\Windows\System32\notepad.exe,1 に編集する
- DefaultIcon の詳細なアクセス許可で自分のユーザーを削除し、所有者として SYSTEM を再割り当てする
- HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\LocalServer32 について手順 1 から 6 を繰り返し、(Default) キーの値を C:\Windows\System32\notepad.exe に変更する
これにより、OLE2 を介して呼び出される .hta オブジェクトの既定のハンドラーがメモ帳に変更され、CVE-2017-0199 によるコード実行ができなくなります。これは、OLE2 が .hta ファイルを呼び出すすべてのインスタンスに適用されます。メモ帳が開きエラーが発生しますが、コードは実行されません。
元のレジストリキー
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\DefaultIcon\(Default)
C:\Windows\SysWOW64\mshta.exe,1
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\LocalServer32\(Default)
C:\Windows\SysWOW64\mshta.exe
編集後のレジストリキー
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\DefaultIcon\(Default)
C:\Windows\System32\notepad.exe,1
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\LocalServer32\(Default)
C:\Windows\System32\notepad.exe
環境
- 1台のUbuntu 16.04.2 LTSサーバー(LAMPスタックとSSHサーバー搭載)
- 1台のWindows 10クライアント(Office 365 (2016) 搭載)
参考
教訓
- HKCR を直接編集しないこと。関連するキーは HKCU または HKLM のどちらかで編集すること。
- レジストリキーの所有権を取得した後、SYSTEM や他のユーザーに戻すことができる。
- レジストリをいじらないこと。変更を行ったら、元の状態に戻すこと。
- Process Monitor には、ノイズを減らすための強力な右クリックフィルタリングがある。
- Process Monitor の検索機能は、すべてのフィールドで文字列を検索する。
- pscp.exe (Putty) はコマンドラインのSSHファイル転送ツールである。
- Linux はやはり大きな面倒だ。
結びのコメント
この緩和策によって生じたいかなる損害や問題、またメモ帳と多数のエラーによるユーザーの混乱についても、私は一切責任を負いません。これは汚い修正であり、本番環境でより広範な問題を引き起こすかどうかは不明です。いつものように、各自の環境とニーズに合わせて緩和策を評価してください。
後でこの緩和策の前後の効果を示すスクリーンショットを追加する予定です。また、これはスクリプトでも実行できますが、レジストリキーのアクセス許可を変更する際に問題があるため、それは後で対応します。