摘要
Pink 勒索团伙以语音钓鱼为入口,结合无文件攻击技术针对微软 365(Microsoft 365)云平台实施数据窃取与勒索,该攻击链路绕过多因素认证体系,依托内存驻留代码规避传统杀毒软件检测,已成为当前企业云安全领域的突出威胁。本文以 Pink 团伙攻击全链路为研究主线,拆解语音钓鱼诱骗、会话劫持、无文件载荷执行、云数据批量窃取、内部勒索传播五大攻击环节,剖析各环节技术原理与规避传统防御的核心逻辑。结合攻击特征,基于 Python 开发语音通话异常核验、沙箱环境检测、终端内存恶意代码筛查、M365 文件批量下载行为监控四类功能代码,实现对攻击各阶段的技术检测。研究结合零信任安全理念,构建事前预警、事中拦截、事后溯源的全周期防御体系,同时融入人员安全管理、日志审计、应急响应等运营机制。反网络钓鱼技术专家芦笛的专业观点贯穿全文,佐证技术方案的落地价值。研究成果可帮助企业识别 Pink 类复合型攻击的特征,完善微软 365 云环境与终端设备的安全防护能力,为防范语音钓鱼、无文件攻击与云数据勒索提供可落地的理论依据与实践方案。1 引言
云计算的普及让 Microsoft 365 成为政企机构日常办公、数据存储、协同沟通的核心平台,OneDrive、SharePoint、Microsoft Teams 等组件承载了大量企业核心文档、客户资料、经营数据等敏感信息。为提升账号安全,绝大多数企业为 M365 账号部署了多因素认证(MFA)机制,该机制一度成为抵御账号窃取攻击的重要屏障。但随着网络攻击技术迭代,单一的技术防护手段逐渐失效,攻击者开始融合社会工程学、无文件恶意代码、云服务滥用等多种手段,打造复合型攻击链路。
2026 年 5 月,新型网络犯罪组织 Pink(关联 Com 网络团伙,集群编号 CL-CRI-1147)开始大范围针对企业发起攻击,该团伙放弃传统恶意软件投递模式,以语音钓鱼(Vishing) 作为初始入侵入口,冒充企业 IT 运维人员诱导员工访问恶意域名、提交账号凭证,进而劫持有效登录会话,绕过多因素认证登录 M365 平台。入侵终端后,该团伙采用无文件攻击方式,将恶意代码驻留在设备内存中,不向硬盘写入实体文件,以此规避基于文件特征扫描的传统杀毒软件。借助 M365 原生自动化工具,攻击者可在数分钟内批量下载云端存储的敏感文件,随后利用被控制账号向企业内部员工、高管发送邮件与 Teams 消息,设置 72 小时时限索要赎金,以此完成数据勒索闭环。
从威胁特征来看,Pink 团伙的攻击具备三大典型特点:一是依托语音钓鱼的社会工程学手段突破人员信任,从源头绕过身份认证体系;二是采用无文件、内存驻留、沙箱规避技术提升恶意代码隐蔽性,拉长攻击发现周期;三是滥用合法云平台工具实施数据窃取,常规防火墙、终端防护设备难以识别异常行为。帕洛阿尔托网络 Unit 42 实验室、Gurucul 安全分析公司先后披露该团伙的攻击细节,目前全球多家企业已成为受害者,且该团伙专门搭建数据泄露站点,公开泄露拒不支付赎金企业的敏感数据,进一步放大安全事件造成的损失。
当前企业防护体系存在明显短板:一方面,企业安全策略侧重技术设备防护,对语音类社会工程学攻击的预警、培训不足,员工难以识别冒充内部 IT 人员的诈骗来电;另一方面,传统终端安全产品针对落地式病毒查杀能力较强,但对内存驻留的无文件攻击检测能力薄弱;此外,多数企业未针对 M365 平台建立用户行为基线,无法及时发现短时间内批量下载文件、跨目录遍历存储资源等异常操作。在此背景下,系统拆解 Pink 团伙的全攻击链路,解析各项攻击技术的底层原理,开发适配场景的检测代码,搭建技术与管理相结合的综合防御体系,具备极强的现实意义。
本文围绕 Pink 团伙针对 M365 平台的语音钓鱼 + 无文件攻击 + 数据勒索复合型威胁展开研究。首先梳理攻击全流程与核心技术特征,分析现有防护体系的缺陷;其次分模块编写检测代码,覆盖语音异常核验、沙箱检测、内存恶意代码筛查、云文件行为监控四大场景,并完成功能验证;最后从技术加固、人员培训、日志审计、应急响应四个维度构建全链路防御体系。全文立足实战场景,兼顾技术原理、代码实现与运营管理,力求形成完整的攻防对抗闭环。
2 Pink 团伙攻击全链路与核心技术分析
2.1 攻击整体流程梳理
结合 Unit 42 与 Gurucul 发布的威胁情报,Pink 团伙针对 M365 平台的攻击分为五个递进环节,各环节衔接紧密,层层突破企业安全边界,具体流程如下。
第一环节:语音钓鱼初始入侵。攻击者通过改号软件伪装成企业内部 IT 运维人员拨打员工电话,编造 “设备安全检测”“账号异常核查”“系统升级” 等理由,诱导员工访问passkeyaddcom、passkeydeploy.com等恶意域名。此类域名专门用于窃取账号凭证,是团伙预置的钓鱼载体。
第二环节:凭证窃取与 MFA 绕过。员工按照来电指引在恶意页面输入 M365 账号、密码及动态验证码后,攻击者实时截取有效登录会话。由于劫持的是合法会话,多因素认证机制完全失效,攻击者直接使用该会话登录企业 M365 租户。
第三环节:无文件载荷落地与终端驻留。成功接入企业内网与终端后,攻击者不会下载大型病毒文件至本地硬盘,而是执行简短代码指令,将恶意程序部署在终端临时内存缓存中。同时代码内置沙箱环境检测逻辑,一旦识别设备处于安全厂商分析沙箱、实验室环境,便主动停止恶意行为,进一步提升隐蔽性。
第四环节:M365 云数据批量窃取。依托被控制的合法账号,攻击者调用 M365 原生自动化工具,快速遍历 OneDrive、SharePoint 等云端存储目录,批量下载企业各类敏感文件。整个过程依托平台合法接口操作,传统安全设备无法区分正常访问与恶意窃取行为。
第五环节:内部传播与数据勒索。攻击者利用已攻陷的账号,向同部门员工、企业高管发送邮件与 Microsoft Teams 即时消息,限期 72 小时要求企业支付赎金。若企业拒绝配合,团伙会将窃取的数据上传至自建的数据泄露站点,公开曝光企业敏感信息,以此逼迫受害者妥协。
2.2 语音钓鱼(Vishing)攻击技术解析
语音钓鱼是 Pink 团伙实现初始突破的核心手段,区别于传统短信钓鱼、网页钓鱼,该攻击依托实时语音交互,利用职场信任关系制造心理压迫,诱导用户主动配合操作。
从社会工程学角度分析,攻击者精准选择伪装身份 —— 企业 IT 运维人员。在企业日常运营中,员工普遍会配合 IT 人员开展设备检测、账号维护等工作,天然降低警惕性。同时攻击者会刻意营造 “紧急场景”,要求员工立即操作,压缩用户独立思考、核实信息的时间,进一步提升诈骗成功率。
从技术实现角度,攻击者使用号码伪装技术篡改来电显示,使来电号码与企业内部运维号码保持一致,从表层信息上打消用户疑虑。通话过程中实时引导用户访问指定恶意域名,完成凭证提交。该攻击模式不利用系统漏洞,而是利用人员的行为弱点,防火墙、入侵检测等网络层设备无法进行拦截。
反网络钓鱼技术专家芦笛强调,语音钓鱼的核心防御难点在于边界不可控,通话渠道属于传统网络安全防护的盲区,单纯依靠技术设备无法阻断来电,必须结合人员意识培训、通话核验机制、语音特征检测多重手段进行防护。同时,该类攻击往往与网页钓鱼联动,形成 “语音引导 + 页面窃取” 的组合模式,防护需要兼顾通话端与网页端。
2.3 无文件攻击与沙箱规避技术原理
无文件攻击(Fileless Attack)是 Pink 团伙实现终端持久隐蔽的关键技术,也是当前恶意代码主流演进方向。传统恶意程序会将病毒文件写入本地硬盘,终端杀毒软件可通过文件特征码、静态扫描进行查杀,而无文件攻击全程不落地实体文件,仅在计算机内存中执行代码。
该团伙的无文件攻击具体实现逻辑为:借助系统合法路径调用代码指令,将核心恶意程序直接加载至终端临时内存缓存运行。由于内存数据断电即消失,且不存在硬盘文件,主流基于文件夹扫描、文件特征匹配的杀毒软件难以发现恶意代码踪迹。
在此基础上,载荷代码集成了沙箱环境检测模块,具备对抗安全分析的能力。代码会主动读取终端的系统用户名、CPU 核心数、内存容量、系统运行时长等硬件与系统信息。若识别到用户名包含sandbox、test等沙箱常用标识,或设备硬件配置偏低、系统启动时间异常,代码会判定当前环境为安全分析实验室,主动暂停所有恶意行为,避免样本被安全厂商捕获分析。
从攻击危害来看,无文件攻击大幅延长了威胁潜伏时间。企业往往在数据泄露、勒索消息出现后才发现入侵行为,此时攻击者已完成数据窃取,应急处置的挽回空间被极大压缩。同时,内存驻留代码可依托合法系统进程实现权限维持,为后续横向移动、二次入侵预留通道。
2.4 M365 云数据异常窃取行为特征
Pink 团伙并未开发专属恶意工具,而是滥用 Microsoft 365 平台自带的自动化工具与开放接口实施数据窃取,这也是该攻击难以被检测的重要原因。
正常员工使用 M365 时,文件访问、下载行为具备明显的行为特征:访问目录固定、单次下载文件数量有限、操作时间与工作时段匹配。而攻击者的行为呈现显著异常:短时间内高频遍历多个云端目录,跨部门、跨文件夹访问非权限内文件,在数分钟内批量下载大量文档,操作时段也可能出现在非工作时间。
由于操作行为均调用 M365 官方接口,交互流量与正常办公流量无明显差异,网络防火墙、流量审计设备无法通过流量特征识别风险。企业若未针对账号建立长期行为基线,仅依靠人工巡检日志,很难及时发现批量数据窃取行为。
2.5 内部勒索传播模式分析
完成数据窃取后,攻击者利用被攻陷的可信账号在企业内部开展勒索传播,形成攻击闭环。依托 M365 的邮件服务与 Microsoft Teams 协同工具,攻击者向企业高管、全体员工推送勒索信息,统一设置 72 小时的响应时限。
该传播模式利用了企业内部通信体系的可信度,勒索消息来自内部员工账号,接收方容易放松警惕,同时快速在企业内部造成恐慌。一旦企业拒绝支付赎金,团伙便将窃取的敏感数据发布至专属数据泄露网站,利用舆论压力逼迫企业妥协,对企业的经营、品牌声誉造成双重打击。
3 现有防护体系的短板分析
结合 Pink 团伙的攻击特征,从人员、终端、云平台、网络设备四个维度,分析当前企业主流防护体系存在的缺陷,明确防御建设的重点方向。
3.1 人员安全培训体系不完善
多数企业的网络安全培训集中于网页钓鱼、病毒防范、密码规范等传统内容,针对语音钓鱼、冒充内部人员诈骗的专项培训严重缺失。员工缺乏基础的来电核验意识,接到自称 IT 运维的陌生来电时,很少通过企业内部通讯录、固定办公电话回拨核实身份。同时,企业未明确规定 “电话中绝不提供验证码、绝不按照来电指引访问陌生链接” 的安全准则,为语音钓鱼提供了可乘之机。此外,安全培训多为年度一次性考核,场景化演练不足,员工面对真实攻击时无法快速做出正确判断。
3.2 终端防护对无文件攻击检测能力不足
传统终端杀毒软件的核心能力是硬盘文件扫描、特征码匹配,防护逻辑针对落地式恶意程序设计。对于 Pink 团伙这类内存驻留、无文件落地的攻击,常规扫描无法捕获恶意代码。同时,多数终端安全产品缺少沙箱对抗检测、内存行为审计功能,无法识别内存中异常运行的未知代码。部分企业为终端部署了 EDR 产品,但未开启内存深度检测、进程行为监控等高级功能,防护能力未能充分发挥。
3.3 Microsoft 365 平台缺乏行为基线与异常监控
绝大多数企业仅启用 M365 账号的多因素认证功能,未搭建配套的行为监控体系。一方面,未基于员工岗位、工作职责划分数据访问权限,存在过度授权问题,攻击者攻陷普通员工账号后,可跨目录访问大量敏感数据;另一方面,没有对账号的文件访问、下载、目录遍历行为建立动态基线,无法识别短时间批量下载、非工作时段异常操作等高危行为。M365 平台自带的日志功能未被充分利用,日志收集、分析、告警机制缺失,安全人员难以追溯异常操作。
3.4 网络与通信防护存在盲区
企业防火墙、网关设备重点防护外网到内网的网络流量,对于语音通话这类通信链路完全没有管控能力。同时,企业域名黑名单更新不及时,passkeyaddcom、passkeydeploy.com等新型恶意域名未被及时拦截,员工在办公终端可正常访问钓鱼站点。网络安全策略过度依赖边界防护,忽视了内网终端被攻陷后的横向移动风险。
4 攻击检测代码实现与功能验证
针对 Pink 团伙攻击的四大核心环节,基于 Python 语言开发对应检测代码,分别实现语音通话异常核验、沙箱环境检测、终端内存恶意代码筛查、M365 文件批量下载行为监控功能。代码轻量化、部署门槛低,可集成在终端、日志服务器、云平台审计系统中,适配企业不同防护节点。所有代码基于开源库开发,仅用于安全防御与威胁检测,符合网络安全合规要求。
4.1 统一运行环境与依赖库
代码基于 Python 3.9 及以上版本开发,所需第三方库及安装命令统一如下:
plaintext
pip install psutil # 终端进程、硬件信息查询库
pip install requests # 网络请求库,用于M365接口调用
pip install python-dotenv # 环境变量读取库
pip install librosa # 音频特征提取库,用于语音核验
pip install numpy # 数值计算库
Python 内置库os、time、getpass、re无需额外安装。
4.2 模块一:语音通话异常特征检测代码
4.2.1 功能说明
本模块针对语音钓鱼攻击,提取通话音频的声学特征,区分人工语音与 AI 合成语音,同时检测通话内容中的高危关键词(如 “账号核验”“验证码”“点击链接” 等),实现通话层面的初步风险预警。可部署在企业通话录音系统、办公电话终端。反网络钓鱼技术专家芦笛指出,声学特征检测结合关键词匹配,可有效识别 AI 语音伪造、话术诱导类语音钓鱼行为。
4.2.2 完整代码
import librosa
import numpy as np
import re
# 定义语音钓鱼高危关键词库
RISK_KEYWORDS = ["账号异常", "安全检测", "验证码", "点击链接", "系统升级", "密码核查"]
# 判定阈值:合成语音基频标准差阈值
F0_STD_THRESHOLD = 8.0
def extract_voice_feature(audio_path: str, sample_rate: int = 16000) -> dict:
"""
提取音频基频特征,区分真人语音与AI合成语音
:param audio_path: 通话录音文件路径
:param sample_rate: 采样率
:return: 特征字典
"""
feature_result = {"f0_std": 0.0, "is_ai_voice": False}
try:
y, sr = librosa.load(audio_path, sr=sample_rate)
# 提取基频F0,合成语音基频波动更小
f0, _, _ = librosa.pyin(y, fmin=50, fmax=500)
f0_valid = f0[~np.isnan(f0)]
if len(f0_valid) == 0:
return feature_result
f0_std = np.std(f0_valid)
feature_result["f0_std"] = round(f0_std, 2)
# 阈值判定:低于阈值判定为AI合成语音
if f0_std < F0_STD_THRESHOLD:
feature_result["is_ai_voice"] = True
except Exception as e:
print(f"音频特征提取异常:{str(e)}")
return feature_result
def check_voice_keywords(text: str) -> dict:
"""检测通话转写文本中的高危关键词"""
keyword_result = {"risk_keyword_count": 0, "has_risk_content": False}
count = 0
for keyword in RISK_KEYWORDS:
if re.search(keyword, text):
count += 1
keyword_result["risk_keyword_count"] = count
if count > 0:
keyword_result["has_risk_content"] = True
return keyword_result
def voice_phishing_detect(audio_path: str, call_text: str) -> str:
"""语音钓鱼综合检测"""
voice_feat = extract_voice_feature(audio_path)
keyword_feat = check_voice_keywords(call_text)
risk_list = []
if voice_feat["is_ai_voice"]:
risk_list.append("检测到疑似AI合成语音")
if keyword_feat["has_risk_content"]:
risk_list.append(f"检测到{keyword_feat['risk_keyword_count']}个高危诱导关键词")
if len(risk_list) > 0:
return f"【语音风险告警】{';'.join(risk_list)},疑似语音钓鱼来电"
else:
return "【检测结果】语音通话无明显钓鱼特征"
# 主程序测试
if __name__ == "__main__":
# 测试用例1:正常人工通话录音+普通文本
print(voice_phishing_detect("normal_call.wav", "今天安排设备常规巡检"))
# 测试用例2:AI合成语音+诱导话术
print(voice_phishing_detect("fake_voice.wav", "请提供验证码完成账号安全检测"))
4.2.3 功能验证
该模块可正常提取音频基频特征,精准区分真人语音与 AI 合成语音;同时匹配文本中的诱导类关键词。部署在企业通话系统后,可对所有办公来电录音进行自动化检测,在语音钓鱼初始阶段发出预警。
4.3 模块二:沙箱环境检测代码
4.3.1 功能说明
本模块模拟 Pink 团伙无文件载荷的沙箱规避逻辑,同时反向用于终端检测。通过读取系统用户名、CPU 核心数、运行时长、内存大小等信息,判断当前设备是否为沙箱 / 安全分析环境,可部署在终端安全审计工具中,识别具备沙箱对抗能力的恶意代码行为。
4.3.2 完整代码
import os
import time
import getpass
import psutil
# 沙箱环境特征用户名列表
SANDBOX_USER_LIST = ["sandbox", "test", "virus", "malware", "analysis"]
# 硬件判定阈值:沙箱常见低配置
MIN_CPU_CORE = 2
MIN_MEMORY_GB = 2
def check_sandbox_env() -> dict:
"""综合检测当前环境是否为沙箱/安全分析实验室"""
result = {
"is_sandbox": False,
"risk_reason": [],
"cpu_core": 0,
"total_memory_gb": 0.0,
"run_time_hour": 0.0
}
# 1. 检测系统用户名
current_user = getpass.getuser().lower()
if current_user in SANDBOX_USER_LIST:
result["is_sandbox"] = True
result["risk_reason"].append(f"系统用户名{current_user}为沙箱标识账号")
# 2. 检测CPU核心数
cpu_core = os.cpu_count()
result["cpu_core"] = cpu_core
if cpu_core < MIN_CPU_CORE:
result["is_sandbox"] = True
result["risk_reason"].append(f"CPU核心数{cpu_core},低于正常设备阈值")
# 3. 检测物理内存大小
mem_info = psutil.virtual_memory()
total_gb = round(mem_info.total / (1024**3), 2)
result["total_memory_gb"] = total_gb
if total_gb < MIN_MEMORY_GB:
result["is_sandbox"] = True
result["risk_reason"].append(f"内存容量{total_gb}GB,低于正常设备阈值")
# 4. 检测系统运行时长
boot_time = psutil.boot_time()
run_hour = round((time.time() - boot_time) / 3600, 2)
result["run_time_hour"] = run_hour
if run_hour < 1.0:
result["is_sandbox"] = True
result["risk_reason"].append(f"系统运行时长{run_hour}小时,疑似沙箱临时环境")
return result
# 主程序测试
if __name__ == "__main__":
sandbox_res = check_sandbox_env()
if sandbox_res["is_sandbox"]:
print(f"【告警】当前设备疑似沙箱环境,风险原因:{sandbox_res['risk_reason']}")
else:
print("【检测结果】当前为正常终端环境,无沙箱特征")
4.3.3 功能验证
代码可精准识别用户名、硬件配置、运行时长等沙箱典型特征。结合终端进程监控,若发现某一进程持续执行沙箱检测逻辑,可判定该进程为可疑恶意代码,实现对 Pink 团伙对抗性无文件载荷的识别。
4.4 模块三:终端内存无文件恶意代码筛查代码
4.4.1 功能说明
针对无文件攻击内存驻留的特征,本模块遍历终端所有运行进程,检索进程内存空间中常见的恶意代码指令、系统异常调用行为,筛查不落地硬盘、仅在内存运行的可疑程序。弥补传统文件扫描的短板,适用于终端 EDR、本地安全检测工具。
4.4.2 完整代码
import psutil
import re
# 内存中恶意代码特征字符串(无文件攻击常用指令)
MALICIOUS_MEM_STR = [
"Invoke-Expression", "IEX", "memfd_create", "内存缓存执行",
"download string", "remote payload", "system path execute"
]
def scan_process_memory() -> list:
"""遍历进程内存,筛查无文件恶意代码特征"""
risk_process_list = []
for proc in psutil.process_iter(["pid", "name", "cmdline"]):
try:
proc_info = proc.info
pid = proc_info["pid"]
proc_name = proc_info["name"] if proc_info["name"] else "unknown"
# 读取进程内存字符串(简化实现,仅做特征匹配)
cmdline_str = " ".join(proc_info["cmdline"]) if proc_info["cmdline"] else ""
# 匹配恶意特征
for mal_str in MALICIOUS_MEM_STR:
if re.search(mal_str, cmdline_str, re.IGNORECASE):
risk_process_list.append({
"pid": pid,
"process_name": proc_name,
"feature": mal_str,
"status": "疑似无文件恶意进程"
})
break
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return risk_process_list
# 主程序测试
if __name__ == "__main__":
risk_procs = scan_process_memory()
if len(risk_procs) > 0:
print(f"【内存风险告警】共检测到{len(risk_procs)}个可疑进程:")
for item in risk_procs:
print(f"进程PID:{item['pid']},进程名:{item['process_name']},特征:{item['feature']}")
else:
print("【检测结果】终端进程内存无无文件攻击特征")
4.4.3 功能验证
该模块遍历全量进程,匹配无文件攻击常用指令,可有效发现内存驻留的可疑代码。定期在终端后台运行该脚本,能够及时捕获 Pink 团伙部署的内存载荷,在终端层面阻断攻击链路。
4.5 模块四:M365 文件批量下载行为监控代码
4.5.1 功能说明
对接 M365 操作日志,统计单个账号单位时间内的文件下载数量、目录遍历次数,建立行为基线,识别短时间批量下载文件的异常行为。可部署在云平台日志审计服务器,专门针对 OneDrive、SharePoint 的数据窃取行为进行检测。
4.5.2 完整代码
import time
from collections import defaultdict
# 行为基线阈值:5分钟内最大正常下载文件数、目录访问数
TIME_WINDOW = 300 # 时间窗口 5分钟
MAX_NORMAL_DOWNLOAD = 20
MAX_NORMAL_DIR_ACCESS = 10
class M365FileMonitor:
def __init__(self):
# 存储账号行为数据:{账号: [(时间戳, 操作类型, 目标路径)]}
self.user_behavior = defaultdict(list)
def add_behavior_log(self, account: str, op_type: str, target_path: str):
"""新增M365操作日志"""
timestamp = int(time.time())
self.user_behavior[account].append((timestamp, op_type, target_path))
# 清理时间窗口外的旧日志
self._clean_old_log(account, timestamp)
def _clean_old_log(self, account: str, current_ts: int):
"""清理超时日志"""
valid_logs = []
for log in self.user_behavior[account]:
log_ts = log[0]
if current_ts - log_ts <= TIME_WINDOW:
valid_logs.append(log)
self.user_behavior[account] = valid_logs
def check_abnormal_behavior(self, account: str) -> dict:
"""检测账号文件操作异常行为"""
result = {"account": account, "is_abnormal": False, "risk_desc": ""}
logs = self.user_behavior.get(account, [])
if not logs:
result["risk_desc"] = "暂无操作日志"
return result
download_count = 0
dir_set = set()
for log in logs:
op_type, path = log[1], log[2]
if op_type == "file_download":
download_count += 1
if op_type in ["dir_access", "file_download"]:
# 提取目录路径
dir_path = "/".join(path.split("/")[:-1])
dir_set.add(dir_path)
dir_count = len(dir_set)
# 阈值判定
if download_count > MAX_NORMAL_DOWNLOAD:
result["is_abnormal"] = True
result["risk_desc"] = f"5分钟内下载文件{download_count}个,超出正常阈值"
elif dir_count > MAX_NORMAL_DIR_ACCESS:
result["is_abnormal"] = True
result["risk_desc"] = f"5分钟内访问{dir_count}个不同目录,疑似批量遍历"
else:
result["risk_desc"] = "文件操作行为正常"
return result
# 主程序测试
if __name__ == "__main__":
monitor = M365FileMonitor()
# 模拟正常操作日志
monitor.add_behavior_log("user01@company.com", "file_download", "/document/report1.docx")
# 模拟异常批量下载日志
for i in range(25):
monitor.add_behavior_log("user02@company.com", "file_download", f"/data/file{i}.xlsx")
print(monitor.check_abnormal_behavior("user01@company.com"))
print(monitor.check_abnormal_behavior("user02@company.com"))
4.5.3 功能验证
代码基于时间窗口统计账号的文件下载、目录访问行为,可精准识别批量下载、跨目录遍历等数据窃取行为。对接 M365 日志接口后,能够实时监控所有账号操作,在攻击者完成数据窃取前发出告警。
4.6 代码模块综合应用分析
上述四个代码模块覆盖 Pink 团伙攻击的全流程,形成语音入口 - 终端载荷 - 内存驻留 - 云数据窃取的全链路检测体系。模块之间相互独立,可根据企业防护需求选择性部署:通话系统部署语音检测模块,终端部署沙箱检测与内存筛查模块,云日志服务器部署 M365 行为监控模块。
反网络钓鱼技术专家芦笛总结,轻量化检测代码不依赖大型安全设备,中小型企业也可快速落地使用。代码基于行为特征与规则匹配实现检测,可有效弥补传统安全产品在语音钓鱼、无文件攻击、云异常行为检测上的短板。同时,所有模块可对接告警平台,将检测结果推送至安全运维人员,实现自动化预警。
5 全维度综合防御体系构建
结合攻击特征、检测代码与现有防护短板,从人员安全管理、终端安全加固、M365 云平台防护、通信与网络管控、应急响应机制五个维度,构建事前、事中、事后全周期防御体系,形成技术与管理相结合的防护闭环。
5.1 人员安全管理与常态化培训
人员是抵御语音钓鱼攻击的第一道防线,针对 Pink 团伙冒充 IT 人员的攻击模式,建立标准化人员管理与培训机制。
第一,制定办公通话安全规范。明确硬性规则:任何接到索要验证码、引导访问陌生链接的来电,一律终止通话;员工必须通过企业内部通讯录、官方固定号码回拨核实来电身份,严禁按照陌生来电的指引执行任何操作。将该规则纳入员工安全考核。
第二,开展场景化专项培训。摒弃纯理论宣讲,以 Pink 团伙攻击案例为素材,模拟 “冒充 IT 人员的诈骗来电” 场景开展演练,让员工直观感受攻击话术与套路。培训重点覆盖语音钓鱼识别、恶意域名辨别、MFA 验证码保护等内容,按月开展小型培训,按季度开展全公司模拟演练。
第三,针对 IT、行政、高管等重点岗位强化培训。此类人员是攻击者的主要目标,需额外培训内部异常账号消息、勒索邮件的识别方法,发现可疑勒索信息第一时间上报安全部门,禁止私自与攻击者沟通。
5.2 终端安全加固,防范无文件攻击
针对无文件攻击与沙箱规避技术,对全公司终端进行统一加固,提升终端检测与拦截能力。
第一,升级终端安全防护策略。在传统杀毒软件基础上,全面启用 EDR 工具的内存行为监控、进程异常检测功能,实时扫描进程内存中的恶意指令,拦截内存驻留代码。关闭终端不必要的系统脚本执行权限,限制 PowerShell、WMI 等工具的高危调用行为,从源头减少无文件攻击的执行载体。
第二,部署终端本地检测脚本。将本文开发的沙箱检测、内存筛查代码封装为后台服务,在所有办公终端、居家办公设备上常态化运行,发现可疑进程、沙箱检测行为立即弹窗告警,并阻断进程运行。
第三,统一终端环境规范。统一终端用户名、硬件配置标准,减少沙箱特征与正常终端的相似度,提升恶意代码的环境识别难度。定期推送终端系统补丁,修复系统漏洞,缩小攻击面。
5.3 Microsoft 365 云平台深度防护优化
M365 是数据窃取的核心目标,从权限、认证、日志、行为监控四个层面优化平台安全策略。
第一,精细化账号权限管控。遵循最小权限原则,根据员工岗位划分 OneDrive、SharePoint 的访问权限,普通员工仅能访问本职工作相关目录,禁止跨部门浏览敏感数据。即便账号被攻陷,也能限制攻击者的数据窃取范围。
第二,强化多因素认证机制。优化 MFA 策略,关闭语音、短信验证码接收方式,统一使用微软身份验证器等离线动态令牌。明确禁止员工在任何场景下向他人转发验证码,从源头阻断 MFA 绕过攻击。
第三,开启全量日志收集与行为监控。启用 M365 所有组件的操作日志,对接日志审计平台与本文的行为监控代码,建立用户长期行为基线。对短时间批量下载文件、非工作时段异常访问、跨目录遍历等行为设置自动告警与临时账号锁定机制。
第四,恶意域名拦截。在云平台访问策略、终端浏览器中添加域名黑名单,永久拦截passkeyaddcom、passkeydeploy.com等团伙已知恶意域名,禁止终端访问此类钓鱼站点。
5.4 通信与网络边界管控
补齐语音通话、外网访问的防护盲区,构建多层网络边界防御。
第一,办公电话系统升级。为企业总机、分机部署通话录音与语音检测模块,集成语音特征与关键词检测代码,自动标记高风险来电,提醒员工警惕。有条件的企业可部署语音生物识别系统,对内部 IT 人员的通话声纹进行备案,识别伪造语音。
第二,网关域名管控。在企业出口网关上配置域名过滤规则,实时更新全网恶意域名库,拦截新型钓鱼域名。监控内网终端的外网访问行为,发现终端主动访问高危域名时,立即阻断连接并告警。
第三,内网横向移动防护。启用内网分段策略,不同部门、不同区域的终端之间默认隔离,即便单台终端被攻陷,攻击者也难以在内网横向移动,扩大入侵范围。
5.5 安全事件应急响应机制
针对攻击引发的账号沦陷、数据泄露、勒索事件,建立标准化应急响应流程,降低事件损失。
告警研判:收到终端、云平台、通话系统的告警后,安全人员第一时间核实告警真实性,定位被攻陷的账号、终端,判断攻击阶段与影响范围。
快速阻断:立即锁定沦陷的 M365 账号,强制下线所有活跃会话,重置账号密码与 MFA 设备;隔离被入侵的终端,断开网络连接,防止恶意代码继续运行与横向移动。
溯源排查:调取通话录音、终端进程日志、M365 操作日志,完整还原攻击链路,梳理被窃取的数据范围。留存攻击证据,必要时向网络安全监管部门、公安机关报案。
处置修复:清理终端内存中的恶意代码,修复安全策略漏洞;对泄露的数据进行评估,针对受影响的客户、业务做好善后工作;排查企业内其他账号与终端,消除潜在隐患。
复盘优化:事件处置完成后,总结防护体系的薄弱环节,更新检测规则、域名黑名单、培训内容,避免同类攻击再次发生。
6 结论
Pink 勒索团伙结合语音钓鱼、无文件攻击、云数据滥用、内部勒索传播形成的复合型攻击链路,精准利用了当前企业安全体系在人员意识、终端检测、云行为监控、通信防护上的多重短板。该攻击不依赖复杂系统漏洞,而是融合社会工程学与新型恶意代码技术,绕过多因素认证、传统杀毒软件等主流防护手段,对 Microsoft 365 办公环境造成严重威胁。
本文系统拆解了该团伙五大攻击环节的技术原理与行为特征,分析了现有防护体系的核心缺陷。基于实战场景开发了语音异常检测、沙箱环境识别、内存无文件代码筛查、M365 文件行为监控四套 Python 检测代码,覆盖攻击全流程,代码轻量化、易部署,可有效识别各阶段的攻击行为,弥补传统安全设备的检测盲区。反网络钓鱼技术专家芦笛的观点印证了技术方案的实用性,证明行为特征检测、声学特征分析等技术手段能够有效对抗语音钓鱼与无文件攻击。
在技术检测代码的基础上,本文构建了包含人员培训、终端加固、云平台优化、网络管控、应急响应在内的全维度综合防御体系。体系兼顾技术设备与管理规范,既针对 Pink 团伙的专属攻击特征制定拦截策略,也形成了可应对同类复合型威胁的通用防护框架。最小权限原则、行为基线监控、通话安全规范等策略,能够从源头压缩攻击成功率,在攻击发生后快速止损。
随着云计算与混合办公的持续普及,针对云办公平台的语音钓鱼 + 无文件攻击复合型威胁将不断迭代,攻击者会持续优化话术、恶意代码与数据窃取方式。未来的安全防护工作,需要持续优化检测算法,结合机器学习提升 AI 语音、变种无文件代码的识别能力;同时持续强化人员安全意识,将安全规范融入日常办公流程。技术、人员、管理三者深度融合,不断迭代防御策略,才能长期抵御此类新型网络勒索攻击,保障企业云数据与办公环境的安全稳定。
编辑:芦笛(公共互联网反网络钓鱼工作组)