导言
本文介绍了我们对已识别的顶级 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
最近,Sekoia 在 2023 年 2 月发现了一个窃密恶意软件领域的主要参与者,即 STEALC 家族。这种恶意软件最早于 2023 年 1 月在地下论坛上被宣传,开发者提到它主要依赖于现有的 VIDAR、RACOON 和 REDLINE 等家族。自那时起,我们的团队每天都观察到新的 STEALC 样本,这表明它在网络犯罪分子中越来越受欢迎并被广泛采用。
STEALC 使用 C 语言编写,包括动态导入、字符串混淆以及在激活其数据窃取功能之前进行的各种反分析检查等功能。为了保护二进制文件及其核心功能,STEALC 使用 Base64 + RC4 的组合来加密其字符串,每个样本中都嵌入了硬编码的密钥。
STEALC 中有 6 个独立的函数用于反分析/反沙箱检查。根据处理器数量,如果活动处理器数量少于 2 个,STEALC 将自行终止。
STEALC 使用一种较为隐蔽的 Windows API (VirtualAllocExNuma
) 来分配大量内存,从而执行沙箱/模拟测试。如果未实现此 API,则进程将终止。
该恶意软件通过从 GlobalMemoryStatusEx
读取值来执行另一次沙箱检查。在对收集到的物理内存属性进行字节移位后,如果该值小于 0x457
,则样本将终止。
如果语言标识符与以下任何一个 LangID 匹配,则恶意软件将停止执行
- Russian_Russia (
0x419
) - Ukrainian_Ukraine (
0x422
) - Belarusian_Belarus (
0x423
) - Kazakh_Kazakhstan (
0x43f
) - Uzbek_Latin__Uzbekistan (
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 操作系统产品信息
- 处理器/RAM 信息
- 用户名/计算机名
- 本地系统时间/时区/受害者的区域设置
- 键盘布局
- 电池检查(用于确定是否为笔记本电脑)
- 桌面分辨率、显示信息
- 已安装的程序、正在运行的进程
对于窃取组件,STEALC 利用接收到的配置来收集各种有价值的信息,包括
- 浏览器 Cookie
- 登录数据
- Web 数据
- 历史记录
- 加密货币钱包
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 查询
以下狩猎和检测查询列表可用于检测窃密软件的活动
-
识别向 Telegram 或 Discord 域发出 DNS 请求的不受信任或未签名的可执行文件,这可能表明存在命令和控制通信尝试。
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 的全面安全功能套件为组织和个人提供了有效防御恶意软件攻击所需的工具。从高级威胁检测到实时监控和响应功能。