拡張頭蓋 | Extended Cranium

もしかすると誰かの役に立つかもしれないことを書き留めておく

2018-02-21 セキュリティニュースまとめ: [2 月のセキュリティ更新で修正済]Windows 10 に「セキュリティソフトウェアによるコードのスキャンがヌル文字以降バイパスされてしまう問題」が見つかる

一次ソース

standa-note.blogspot.jp

元記事

www.techrepublic.com

概要

  • Windows 10 にセキュリティ機能を提供する API であるところの「アンチ マルウェア スキャン インタフェース (AMSI)」に、「対象コードにヌル文字が含まれているとその文字以降のコードが AMSI からセキュリティソフトウェアに渡されずスキャンがバイパスされる問題」が確認された
  • Microsoft は当該問題を修正し、2 月のセキュリティ更新で配布したが、パッチを適用していない環境を狙って今後の攻撃に悪用されるだろう

AMSI とは

  • 「アンチ マルウェア スキャン インタフェース (AMSI) 」は Windows 10 で提供されているセキュリティ メカニズム
  • AMSI はシステム上の特定イベントを検出し、検出結果をマルウェアのスキャンを行うセキュリティソフトウェアに通知する
  • 通知されたセキュリティソフトウェアは、受け取ったイベントの内容に応じ、コンテンツをスキャンしてブロックするなどの処理を行う
  • 中でも利用頻度の高いイベントは PowerShell (System.Management.Automation.dll) や Windows Script Host (例えば jscript.dll) などのスクリプト実行前に当該スクリプトの内容をセキュリティソフトウェアに渡してスキャンさせる機能

AMSI に確認された問題

  • PowerShell コードにはヌル文字 (\0) を含めることができるが、AMSI がこの点を考慮していない
  • System.Management.Automation.dll が AmsiScanString API を呼び出すと、AMSI (amsi.dll) の AmsiScanString API は渡された内容を LPCWSTR 型として受け取ってしまう(下記コードの string がそれ)
  • このさい、コンテンツにヌル文字が含まれていると、最初のヌル文字がコンテンツの終端とみなされる
  • したがってヌル文字以降のコンテンツがセキュリティソフトウェアに渡されず、スキャンされない
  • これを悪用し、ヌル文字以降に悪意のあるコードを格納しておけば、AMSI 経由でのイベント検出を回避できる
HRESULT WINAPI AmsiScanString(
  _In_     HAMSICONTEXT amsiContext,
  _In_     LPCWSTR      string,   // ★最初のヌル文字で終端される
  _In_     LPCWSTR      contentName,
  _In_opt_ HAMSISESSION session,
  _Out_    AMSI_RESULT  *result
);

Microsoft による修正

  • System.Management.Automation.dll は AmsiScanString API のかわりに AmsiScanBuffer API を呼び出ように修正
  • AmsiScanBuffer API はコンテンツを LPCWSTR 型ではなく PVOID 型のバイトシーケンスとして受け取り、コンテンツにヌル文字が含まれていても終端とみなさない
  • これにより AMSI からセキュリティソフトウェアにコンテンツの内容が正しく渡されるようになる
HRESULT WINAPI AmsiScanBuffer(
  _In_     HAMSICONTEXT amsiContext,
  _In_     PVOID        buffer,  // ★ヌル文字があっても終端とみなさない
  _In_     ULONG        length,
  _In_     LPCWSTR      contentName,
  _In_opt_ HAMSISESSION session,
  _Out_    AMSI_RESULT  *result
  );
  • Windows Script Host の場合 PowerShell と異なり最初にヌル文字が出てきたところでインタプリタの実行が停止するため、この問題による影響は受けない

Windows 10 の一般ユーザー、セキュリティソフトウェアのベンダー、リサーチャーがとるべき対策

Windows 10 の一般ユーザー

  • 2 月のセキュリティ更新をただちに適用する

セキュリティソフトウェアのベンダー

  • PowerShell からコンテンツを ASMI 経由で受け取ってスキャンしている製品は、ヌル文字が含まれている場合に正常に動作するかどうか確認する

セキュリティソフトウェアの利用者

  • 使用中の製品のベンダに本事象による影響の有無を確認する

セキュリティセキュリティリサーチャー

  • 利用中の AMSI を利用するセキュリティソフトウェアがヌル文字を含むコンテンツをスキャンしたさい、問題なく動作するかどうか確認する