全球分布的盗窃者

本文介绍了我们对顶级恶意软件窃取程序家族的分析,揭示了它们的操作方法、最新更新和配置。 通过了解每个家庭的作案手法,我们可以更好地理解其影响的程度,并可以相应地加强我们的防御。

阅读时间:13分钟恶意软件分析威胁情报
窃取者遍布全球

简介

本文介绍了我们对已发现的顶级 Windows 恶意软件窃取程序家族的分析,揭示了它们的运行方法、最新更新和配置。通过了解每个家族的作案手法,我们可以更好地理解它们的影响程度,并相应地加强我们的防御。此外,我们还将检查我们独特的遥测技术,以深入了解与这些流行的恶意软件盗窃者家族相关的当前数量。

要减轻这种隐蔽威胁,就必须采取符合纵深防御原则的多层面方法。我们还将介绍各种检测技术,包括使用 ES|QL 猎杀查询和 Yara 规则,使企业能够主动防御它们。

遥测概述

本文中展示的遥测数据包括从内部和外部来源收集的见解,可提供对威胁活动的全面了解。

值得注意的是,在 2022 至 2023 年间,REDLINE 成为了最流行的恶意软件,紧随其后的是 AGENT TESLA、VIDAR 和 STEALC。值得强调的是,这一时期标志着 STEALC 首次出现在野外,表明威胁环境在不断变化。

在随后的 2023 至 2024 年期间,AGENT TESLA 的活动明显激增,随后是 REDLINE、STEALC 和 VIDAR,反映了恶意软件流行和分布的变化趋势。

弹性遥测数据 2023 - 2024 年 5 月

尽管一般恶意软件的流行率有所波动,但 AGENT TESLA 一直保持着突出威胁的地位。这种持久的主导地位可归因于几个因素,包括其相对低廉的价格和诱人的功能,这对各种威胁行为体,特别是那些资源或专业知识有限的行为体具有吸引力。

值得注意的是,由于 METASTEALER 以 REDLINE 为基础,某些 METASTEALER 样品可能无意中归入 REDLINE 类别。

顶级窃贼概览

红线

REDLINE于 2020 年首次出现在威胁环境中,利用电子邮件作为其最初的传播方式;它以恶意软件即服务(MaaS)的模式运行,使各种威胁行为者都能访问它。由于其价格低廉,又可在地下论坛找到,因此很受网络犯罪分子的欢迎。

REDLINE 的最新行动涉及多种感染载体,包括电子邮件钓鱼、托管看似合法应用程序的恶意网站以及社交工程策略。我们的研究人员对 vx-underground 最近 报告的 一个样本进行了分析,该样本显示,自由职业平台 Fiverr 上出现了针对工程师的营销活动。这种策略存在巨大风险,有可能导致公司被毫无戒心的自由职业者所控制。

REDLINE 基于.NET 框架构建,具有可移植性,易于实施。它具有多种功能,旨在收集重要的系统信息和提取敏感数据:

  • 系统信息采集:
  • 收集用户名、语言和时区等基本系统信息
  • 检索硬件详细信息,包括处理器和图形卡信息
  • 监控运行进程并识别已安装的浏览器
  • 数据提取:
  • 以浏览器数据存储库为目标,提取已保存的密码、信用卡详细信息、cookie 和自动填充条目
  • 为未经授权的访问获取 VPN 登录凭证
  • 记录 Discord 和 Telegram 等平台的用户凭证和聊天记录
  • 识别并窃取加密货币钱包,可能危及宝贵的数字资产:

REDLINE 采用字符串混淆技术,通过在运行时用字符数组动态构建字符串,从而阻碍分析并躲避基于 yara 等字符串的检测:

其配置结构属于静态类,包含四个公共字段:IP,ID,Message, 和一个 XOR 密钥。IPID 字段内容使用 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 KEYAES IV )会被解密。在所提供的示例中,首先对AES KEYAES IV 进行 base64 解码。随后,使用预先确定的 XOR 密钥对它们进行 XOR 解密,再进行两个连续的 base64 解码步骤。

字符串类保存字节数组,这些数组在反转后使用 AES CBC 解密,然后追加到Strings.Array列表中。之后,当恶意软件需要特定字符串时,它会通过索引该列表来访问这些字符串。例如String.get(6)

偷窃

最近,Sekoia 在 2 月 2023 发现的偷窃器领域的一个主要参与者是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)
  • 白俄罗斯语_白俄罗斯 (0x423)
  • 哈萨克_哈萨克斯坦 (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 操作系统产品信息
  • 处理器/内存信息
  • 用户名/计算机名
  • 当地系统时间/时区/受害者所在地
  • 键盘布局
  • 电池检查(用于确定是否为笔记本电脑)
  • 桌面分辨率、显示信息
  • 已安装的程序、正在运行的进程

对于窃取组件,STEALC 利用接收到的配置来收集各种有价值的信息,包括

  • Browser cookies
  • 登录数据
  • 网络数据
  • 历史记录
  • 加密货币钱包

STEALC 还提供其他各种配置选项,包括

  • 电报数据
  • 纪和声
  • 毒素
  • 皮钦语
  • 蒸汽
  • Outlook 电子邮件
RedLineStealer元窃取器Stealc
首次在野外看到202020222023
源语言C#C#C
平均尺寸(无包装)253 KB278 KB107 KB
字符串混淆?Algo?是(自定义 RC4 + base64)

检测

要充分利用 Elastic Security 对这些威胁的检测功能,必须集成Elastic DefendWindows

ES|QL queries

以下猎杀和检测查询列表可用于检测偷窃者的活动:

  • 识别向 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 的综合安全功能套件为组织和个人提供了有效抵御恶意软件攻击所需的工具。从高级威胁检测到实时监控和响应能力。

分享这篇文章