引言
本文介绍了我们对已识别的主要 Windows 恶意软件盗取工具家族的分析,揭示了它们的运作机制、近期更新和配置。通过了解每个家族的操作模式,我们可以更好地理解其影响的严重程度,并相应地加强防御措施。此外,我们将审查我们独特的遥测数据,以提供有关这些普遍存在的恶意软件盗取工具家族当前相关数量的见解。
缓解此类隐蔽威胁需要采取多方面的方法,与纵深防御原则保持一致。我们还将描述各种检测技术,包括使用 ES|QL 狩猎查询和 Yara 规则,这些规则使组织能够主动抵御这些威胁。
遥测概述
本文中展示的遥测数据涵盖了从内部和外部来源收集的见解,全面了解了威胁活动。
值得注意的是,在 2022 年至 2023 年期间,REDLINE 成为野外最普遍的恶意软件,紧随其后的是 AGENT TESLA、VIDAR,然后是 STEALC。值得强调的是,这一时期标志着 STEALC 在野外的首次亮相,表明威胁环境正在发生变化。
在随后的时间段(2023 年至 2024 年),AGENT TESLA 活动出现了显着激增,其次是 REDLINE、STEALC 和 VIDAR,反映了恶意软件流行和传播趋势的变化。
Elastic 遥测数据 2023 年 5 月 - 2024 年 5 月
尽管总体恶意软件流行率存在波动,但 AGENT TESLA 一直保持着其作为主要威胁的地位。这种持续的主导地位可归因于几个因素,包括其相对较低的价格和诱人的功能,这些功能吸引了广泛的威胁参与者,尤其是那些资源或专业知识有限的参与者。
一个值得注意的观察结果是,由于 METASTEALER 基于 REDLINE,因此某些 METASTEALER 样本可能会无意中被归类为 REDLINE。
主要盗取工具概述
REDLINE (REDLINE STEALER)
REDLINE 于 2020 年首次出现在威胁环境中,利用电子邮件作为其最初的传播方式;它采用恶意软件即服务 (MaaS) 模型运行,使其可供广泛的威胁参与者使用。其经济性和在地下论坛中的可用性使其在网络犯罪分子中广受欢迎。
REDLINE 的最新操作涉及多种感染媒介,包括电子邮件网络钓鱼、托管看似合法应用程序的恶意网站和社会工程策略。我们的研究人员分析了一个最近的样本 由 vx-underground 报告,表明一项针对自由职业平台 Fiverr 上工程师的活动。这种策略存在重大风险,可能导致公司通过毫不知情的自由职业者受到损害。
REDLINE 基于 .NET 框架构建,这使其具有可移植性和易于实现的特性。它具有各种功能,旨在收集重要的系统信息并提取敏感数据
- 系统信息获取
- 收集基本系统详细信息,例如用户名、语言和时区
- 检索硬件规格,包括处理器和显卡信息
- 监控正在运行的进程并识别已安装的浏览器
- 数据提取
- 将浏览器数据存储库作为目标,提取保存的密码、信用卡详细信息、cookie 和自动填充条目
- 获取 VPN 登录凭据以进行未经授权的访问
- 记录用户的凭据和来自 Discord 和 Telegram 等平台的聊天记录
- 识别和窃取加密货币钱包,可能危及宝贵的数字资产
REDLINE 使用字符串混淆技术来阻碍分析并逃避基于字符串(如 yara)的检测,方法是在运行时从字符数组动态构建字符串
其配置结构位于一个静态类中,包含四个公共字段:IP
、ID
、Message
和一个 XOR 密钥。 IP
和 ID
字段内容使用 XOR 加密,然后以 base64 编码,如下所示
METASTEALER
METASTEALER 诞生于 2022 年,最初被宣传为 REDLINE 的衍生产品,并具有其他功能;我们的恶意软件分析师最近在一个伪装成 Roblox 的活动中遇到了一个 METASTEALER 样本,此前 由波兰 CERT 报告为 Orange Polska。
METASTEALER 主要使用 .NET 框架开发,使其与 Windows 环境兼容并易于实现。某些版本使用混淆方法,包括模糊恶意软件的控制流,使其更难以检测或分析。
此 METASTEALER 样本使用 AGILE.NET 混淆器,特别是其代理调用混淆方法。此技术用于通过引入额外的抽象层来隐藏对原始函数的直接调用。AGILE.NET 不会直接调用函数,而是生成一个代理方法,然后调用原始函数。这种额外的复杂性使得代码分析师更难以辨别操作顺序。
查看上面的代码,我们可以看到方法 Delegate11.smethod_0
调用了一个 Delegate11.delegate11_0
,该方法未初始化,在静态分析期间引入了歧义,因为分析师无法确定实际上将执行哪个方法。
在运行时,恶意软件将通过在 Delegate11
类的构造函数中调用方法 Class4.smethod_13
来初始化委托。此方法构建了一个令牌值字典,其中每个键表示委托的令牌值(例如,0x040002DE
),其对应值表示要执行的原始方法的令牌。此字典由存储在二进制文件中的字节序列构建,从而能够在运行时动态解析方法调用。
接下来,它将为委托生成一个动态方法,并使用 smethod_0
函数执行它。
配置中的所有重要字符串(如 C2 IP 地址和端口)都已加密。恶意软件有一个名为 Strings
的类,在执行开始时调用该类以一次解密所有字符串,该过程涉及 Base64 编码、XOR 解密和 AES CBC 解密的组合。
最初,AES 参数(例如 AES KEY
和 AES IV
)将进行解密。在提供的示例中,AES KEY
和 AES IV
首先进行 base64 解码。随后,它们使用预定的 XOR 密钥进行 XOR 解密,然后进行两次连续的 base64 解码步骤。
Strings 类保存字节数组,这些数组在反转后使用 AES CBC 解密,然后附加到 Strings.Array 列表中。稍后,当恶意软件需要特定字符串时,它将通过索引此列表来访问它们。例如 String.get(6)。
STEALC
2023年2月,Sekoia发现了一个名为STEALC的恶意软件家族,它是窃取器领域中一个新兴的主要参与者。STEALC首次出现在2023年1月的一个地下论坛中,开发者提到了它对现有家族(如VIDAR、RACOON和REDLINE)的重大依赖。从那时起,我们的团队每天都观察到新的STEALC样本,表明它正在网络犯罪分子中流行和被采用。
STEALC是用C语言编写的,包含动态导入、字符串混淆以及在激活其数据窃取功能之前进行各种反分析检查等功能。为了保护二进制文件及其核心功能,STEALC使用Base64 + RC4结合硬编码密钥对字符串进行加密,每个样本都嵌入了一个硬编码密钥。
STEALC中有6个独立的功能用于反分析/反沙箱检查。根据处理器的数量,如果活动处理器数量小于2,STEALC将终止自身。
STEALC使用一个较为模糊的Windows API(VirtualAllocExNuma
)来分配大量内存,从而进行沙箱/模拟测试。如果未实现此API,则进程将终止。
该恶意软件通过读取GlobalMemoryStatusEx
中的值执行另一个沙箱检查。对收集到的物理内存属性进行字节移位后,如果值小于0x457
,则样本将终止。
如果语言标识符与以下LangID之一匹配,则恶意软件将停止执行。
- 俄语(俄罗斯)(
0x419
) - 乌克兰语(乌克兰)(
0x422
) - 白俄罗斯语(白俄罗斯)(
0x423
) - 哈萨克语(哈萨克斯坦)(
0x43f
) - 乌兹别克语(拉丁文,乌兹别克斯坦)(
0x443
)
STEALC还包含Microsoft Defender模拟检查,我们在许多窃取器中都观察到这一点,例如LOBSHOT。如果以下硬编码值与Microsoft Defender的模拟层中的值匹配,用户名为JohnDoe
,计算机名为HAL9TH
,则STEALC将终止。
STEALC附带的一个更具影响力的反分析检查是过期日期。此唯一值被放置到恶意软件的配置中,以确保窃取器在构建者设置的特定日期之后不会执行。这允许恶意软件通过在活动中使用更短的周转时间并在沙箱环境中限制执行来保持较低的活动状态。
STEALC - 执行流程
STEALC初始执行后,将发送机器的初始硬件ID,并从C2服务器接收配置。
f960cc969e79d7b100652712b439978f789705156b5a554db3acca13cb298050efa268fb|done|tested.file|1|1|1|1|1|1|1|1|
此请求之后,它将发送多个请求以接收目标浏览器和目标浏览器扩展程序的更新列表。下面是浏览器配置的示例,其中包含存储敏感数据的目标目录路径。
Google Chrome|\Google\Chrome\User Data|chrome|chrome.exe|Google Chrome Canary|\Google\Chrome SxS\User Data|chrome|chrome.exe|Chromium|\Chromium\User Data|chrome|chrome.exe|Amigo|\Amigo\User Data|chrome|0|Torch|\Torch\User Data|chrome|0|Vivaldi|\Vivaldi\User Data|chrome|vivaldi.exe|Comodo Dragon|\Comodo\Dragon\User Data|chrome|0|EpicPrivacyBrowser|\Epic Privacy Browser\User Data|chrome|0|CocCoc|\CocCoc\Browser\User Data|chrome|0|Brave|\BraveSoftware\Brave-Browser\User Data|chrome|brave.exe|Cent Browser|\CentBrowser\User Data|chrome|0|7Star|\7Star\7Star\User Data|chrome|0|Chedot Browser|\Chedot\User Data|chrome|0|Microsoft Edge|\Microsoft\Edge\User Data|chrome|msedge.exe|360 Browser|\360Browser\Browser\User Data|chrome|0|QQBrowser|\Tencent\QQBrowser\User Data|chrome|0|CryptoTab|\CryptoTab Browser\User Data|chrome|browser.exe|Opera Stable|\Opera Software|opera|opera.exe|Opera GX Stable|\Opera Software|opera|opera.exe|Mozilla Firefox|\Mozilla\Firefox\Profiles|firefox|0|Pale Moon|\Moonchild Productions\Pale Moon\Profiles|firefox|0|Opera Crypto Stable|\Opera Software|opera|opera.exe|Thunderbird|\Thunderbird\Profiles|firefox|0|
此时,STEALC将收集广泛的受害者信息。这些信息将被格式化、Base64编码,然后通过使用表单数据字段的POST请求发送到C2服务器。
- 硬件ID
- Windows操作系统产品信息
- 处理器/内存信息
- 用户名/计算机名
- 受害者的本地系统时间/时区/区域设置
- 键盘布局
- 电池检查(用于确定是否为笔记本电脑)
- 桌面分辨率,显示信息
- 已安装的程序,正在运行的进程
对于窃取组件,STEALC利用接收到的配置来收集各种有价值的信息,包括:
- 浏览器Cookie
- 登录数据
- 网页数据
- 历史记录
- 加密货币钱包
STEALC还提供其他各种配置选项,包括:
- Telegram数据
- Discord
- Tox
- Pidgin
- Steam
- Outlook电子邮件
RedLine Stealer | Meta Stealer | Stealc | |
---|---|---|---|
首次在野外发现 | 2020 | 2022 | 2023 |
源语言 | C# | C# | C |
平均大小(解压后) | 253 KB | 278 KB | 107 KB |
字符串混淆?算法? | 是 | 是 | 是(自定义RC4 + base64) |
检测
要充分利用Elastic Security中列出的针对这些威胁的检测功能,必须集成Elastic Defend和Windows。
- 未签名的二进制文件连接到WebService
- 已签名的二进制文件代理连接到WebService
- 挂载的虚拟磁盘发出可疑DNS查询
- 可疑访问Web浏览器凭据存储
- 未签名的进程通过Web浏览器凭据访问
- 从可疑内存访问浏览器凭据
- Web浏览器文件访问尝试失败
- 异常进程通过Web浏览器凭据访问
ES|QL查询
以下列表中的狩猎和检测查询可用于检测窃取器的活动。
-
识别进行DNS请求到Telegram或Discord域名的不可信或未签名的可执行文件,这可能表明命令和控制通信尝试。
from logs-endpoint* | where (process.code_signature.trusted == false or process.code_signature.exists == false) | where dns.question.name in ("api.telegram.com", "cdn.discordapp.com", "discordapp.com", "discord.com","discord.gg","cdn.discordapp.com") | stats executable_count = count(*) by process.executable, process.name, dns.question.name | sort executable_count desc
-
检测针对Windows系统上存储的加密货币钱包文件和配置的可疑活动。
from logs-endpoint.events.file-* | where @timestamp > now() - 14 days | where host.os.type == "windows" and event.category == "file" and event.action == "open" and ( file.path rlike """C:\\Users\\.+\\AppData\\Roaming\\.+\\(Bitcoin|Ethereum|Electrum|Zcash|Monero|Wallet|Litecoin|Dogecoin|Coinbase|Exodus|Jaxx|MyEtherWallet|MetaMask)\\.*""" or file.path rlike """C:\\ProgramData\\.+\\(Bitcoin|Ethereum|Electrum|Zcash|Monero|Wallet|Litecoin|Dogecoin|Coinbase|Exodus|Jaxx|MyEtherWallet|MetaMask)\\.*""" ) | keep process.executable, process.name, host.id, file.path, file.name | stats number_hosts = count_distinct(host.id), unique_files = count_distinct(file.name) by process.executable | where number_hosts == 1 and unique_files >= 3 | sort number_hosts desc
-
监控对敏感浏览器数据的访问,例如Cookie、登录数据和浏览历史记录,这可能表明信息窃取恶意软件活动。
from logs-endpoint.events.file-*, logs-windows.sysmon_operational-default-* | where @timestamp > now() - 14 days | where host.os.type == "windows" and event.category == "file" and event.action in ("open", "modification") and ( file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Local\\\\(Google\\\\Chrome\\\\User Data\\\\.*|Google\\\\Chrome SxS\\\\User Data\\\\.*|Chromium\\\\User Data\\\\.*|Amigo\\\\User Data\\\\.*|Torch\\\\User Data\\\\.*|Vivaldi\\\\User Data\\\\.*|Comodo\\\\Dragon\\\\User Data\\\\.*|Epic Privacy Browser\\\\User Data\\\\.*|CocCoc\\\\Browser\\\\User Data\\\\.*|BraveSoftware\\\\Brave-Browser\\\\User Data\\\\.*|CentBrowser\\\\User Data\\\\.*|7Star\\\\7Star\\\\User Data\\\\.*|Chedot\\\\User Data\\\\.*|Microsoft\\\\Edge\\\\User Data\\\\.*|360Browser\\\\Browser\\\\User Data\\\\.*|Tencent\\\\QQBrowser\\\\User Data\\\\.*|CryptoTab Browser\\\\User Data\\\\.*|Opera Software\\\\Opera Stable\\\\.*|Opera Software\\\\Opera GX Stable\\\\.*)\\\\(Default|Profile \\\\d+)\\\\(Cookies|Login Data|Web Data|History|Bookmarks|Preferences|Visited Links|Network Action Predictor|Top Sites|Favicons|Shortcuts)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Mozilla\\\\Firefox\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|places.sqlite|key4.db|cert9.db)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Moonchild Productions\\\\Pale Moon\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|places.sqlite|key3.db|cert8.db)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Thunderbird\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|key4.db|cert9.db)" ) | keep process.executable, process.name, event.action, host.id, host.name, file.path, file.name | eval process_path = replace(process.executable, "([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}|ns[a-z][A-Z0-9]{3,4}\\.tmp|DX[A-Z0-9]{3,4}\\.tmp|7z[A-Z0-9]{3,5}\\.tmp|[0-9\\.\\-_]{3,})", "") | eval process_path = replace(process_path, "[cC]:\\\\[uU][sS][eE][rR][sS]\\\\[a-zA-Z0-9\\.\\-_\\$~ ]+\\\\", "C:\\\\users\\\\user\\\\") | eval normalized_file_path = replace(file.path, "[cC]:\\\\[uU][sS][eE][rR][sS]\\\\[a-zA-Z0-9\\.\\-_\\$~ ]+\\\\", "C:\\\\users\\\\user\\\\") | stats number_hosts = count_distinct(host.id) by process.executable, process.name, event.action, normalized_file_path, file.name, host.name | where number_hosts == 1 | sort number_hosts desc
Yara规则
结论
总之,必须认识到这些恶意软件威胁对公司和个人都构成了重大风险。它们的经济适用性使得不仅复杂的网络犯罪分子,而且小型罪犯和脚本小子都可以访问它们。这种可访问性突显了网络犯罪的民主化,即使是技术专业知识有限的个人也可以部署恶意软件。
Elastic的安全功能套件为组织和个人提供了有效防御恶意软件攻击所需的工具。从高级威胁检测到实时监控和响应功能。