摘要
近期,高级持续性钓鱼活动呈现出显著利用合法云协作平台作为初始跳板的趋势。据CyberPress披露,攻击者通过已被攻陷的Microsoft 365账户创建真实的OneDrive或SharePoint文件共享链接,并在邮件中嵌入“文档已安全加密,请登录查看”等诱导性文案,大幅提升用户点击意愿。此类链接初期指向微软官方域名(如1drv.ms、sharepoint.com),通过SPF/DKIM验证,有效绕过传统邮件安全网关的外部域名过滤策略;随后,页面内嵌按钮或评论区中的二次跳转链接将用户导向仿冒登录门户——或为静态克隆页面,或为具备实时会话劫持能力的中间人代理(Adversary-in-the-Middle, AiTM)。攻击成功后,自动化脚本立即遍历受害者邮箱,提取联系人与历史邮件线程,用于生成高上下文相关性的横向钓鱼内容。本文系统分析该攻击链的技术实现细节,指出其对现有基于发件人信誉与链接域名黑白名单机制的根本性挑战,并提出以“会话行为连续性”为核心的检测范式。研究建议组织部署基于设备合规性与地理位置的条件访问策略、启用云访问安全代理(CASB)监控异常共享行为、强化对页面内嵌外链的深度解析,并加速向无密码认证迁移。文章提供可落地的代码示例,涵盖共享活动日志分析、二次跳转检测及条件访问策略配置逻辑,旨在为防御此类高隐蔽性云钓鱼提供工程化参考。
关键词:OneDrive钓鱼;云跳板攻击;中间人代理;条件访问;CASB;会话连续性;无密码认证

1 引言
在企业全面拥抱云协作的时代,Microsoft 365生态中的OneDrive与SharePoint已成为日常办公不可或缺的组件。其内置的文件共享功能支持通过短链接(如1drv.ms)快速分发文档,并自动继承组织的邮件安全策略(如SPF、DKIM签名),使得来自内部账户的共享通知天然具备高可信度。然而,这一信任机制正被攻击者系统性滥用。2025年披露的新型钓鱼活动表明,攻击者不再直接发送含恶意域名的邮件,而是先控制一个合法Microsoft 365账户,利用其创建真实的共享链接,再通过页面内嵌元素引导用户至仿冒登录界面。该手法巧妙规避了传统邮件安全网关对“外部发件人”或“可疑URL”的检测规则,导致防御体系出现结构性盲区。
此类攻击的核心在于“信任传递”:第一跳使用微软官方域名,确保邮件顺利投递;第二跳则隐藏于用户交互之后,逃避静态URL扫描。更危险的是,部分变种采用AiTM代理技术,在用户完成MFA验证后同步窃取会话Cookie,使攻击效果与真实登录无异。一旦得手,攻击者可立即利用Graph API遍历收件箱,提取包含财务、合同、人事等关键词的邮件线程,自动生成极具欺骗性的横向钓鱼内容,形成指数级扩散。
面对此类攻击,仅依赖邮件层防护已显不足。组织需重新审视身份验证与会话管理的安全边界,从“单点链接信誉”转向“端到端会话行为连续性”检测。本文旨在深入剖析该攻击的技术路径,评估现有防御机制的失效原因,并提出融合策略控制、行为分析与认证演进的综合缓解框架。

2 攻击链技术实现分析
2.1 初始阶段:利用合法账户创建可信共享
攻击者首先通过先前窃取的凭证(可能来自撞库、OAuth钓鱼或旧泄露数据)登录一个真实的Microsoft 365账户。随后,上传一个无害文档(如PDF或DOCX),并通过OneDrive Web界面生成“任何人可查看”或“特定组织成员可编辑”的共享链接。该操作完全合法,产生的链接形如:
https://1drv.ms/u/s!Aq1B2C3D4E5F6G7H8I9J0K
或
https://contoso.sharepoint.com/:u:/g/EQABCDefGHIJKLMNOPQRSTUVWXYZ...
由于链接源自微软官方域名,且邮件由合法账户发出,SPF/DKIM/DMARC均验证通过,传统邮件安全网关通常将其标记为低风险甚至白名单流量。

2.2 诱导阶段:高上下文欺骗邮件
攻击邮件主题常为“【重要】您有一份加密文档待查看”或“请审阅:Q3财务报告(受限访问)”,正文包含如下内容:
您好,
我已将敏感文档上传至OneDrive并启用端到端加密。为保护数据安全,您需重新登录Microsoft账户以解密查看。
[立即查看文档]
其中,“[立即查看文档]”按钮实际指向上述合法共享链接。用户点击后,浏览器加载真实的OneDrive预览页面,进一步增强可信度。

2.3 跳转阶段:二次重定向至仿冒门户
关键攻击载荷隐藏在页面内部。攻击者利用OneDrive的“评论”功能或文档内嵌按钮(通过Office Online的“插入链接”功能)添加如下内容:
评论:“点击此处完成身份验证以解锁完整内容”;
文档页脚:“若无法加载,请手动验证:verify.contoso-security[.]com”。
这些二次链接指向攻击者控制的仿冒登录页面。根据攻击复杂度,可分为两类:
(1)静态克隆页面:完全复制Microsoft登录页HTML/CSS,提交后将凭证发送至攻击者服务器。适用于未启用MFA的账户。
(2)AiTM反向代理:如前文所述,动态代理真实登录流程,同步截获MFA后的会话Cookie。适用于已启用MFA的高价值目标。
以下为检测页面内嵌外链的简化脚本(模拟CASB行为):
import requests
from bs4 import BeautifulSoup
import re
def extract_embedded_links(one_drive_url):
"""从OneDrive共享页面提取所有内嵌链接"""
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
resp = requests.get(one_drive_url, headers=headers)
if resp.status_code != 200:
return []
soup = BeautifulSoup(resp.text, 'html.parser')
links = set()
# 提取评论区链接(OneDrive评论通常在特定div中)
comment_divs = soup.find_all('div', class_=re.compile(r'comment|note', re.I))
for div in comment_divs:
for a in div.find_all('a', href=True):
links.add(a['href'])
# 提取文档内嵌链接(需解析Office Online iframe,此处简化)
for a in soup.find_all('a', href=True):
if 'verify' in a.text.lower() or 'authenticate' in a.text.lower():
links.add(a['href'])
return list(links)
# 示例使用
shared_link = "https://1drv.ms/u/s!Aq1B2C3D4E5F6G7H8I9J0K"
embedded = extract_embedded_links(shared_link)
for link in embedded:
if not link.startswith(('https://login.microsoftonline.com', 'https://account.live.com')):
print(f"[ALERT] Suspicious embedded link: {link}")

2.4 横向扩散阶段:自动化邮箱遍历
一旦获取有效会话,攻击者立即调用Microsoft Graph API遍历收件箱:
import requests
ACCESS_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs..." # 从AiTM获取
headers = {'Authorization': f'Bearer {ACCESS_TOKEN}'}
# 获取最近50封邮件
mail_resp = requests.get(
'https://graph.microsoft.com/v1.0/me/messages?$top=50&$select=subject,from,toRecipients,body',
headers=headers
)
if mail_resp.status_code == 200:
messages = mail_resp.json().get('value', [])
for msg in messages:
# 提取含“发票”“合同”“付款”等关键词的邮件
if any(kw in msg['subject'].lower() for kw in ['invoice', 'contract', 'payment']):
sender = msg['from']['emailAddress']['address']
recipients = [r['emailAddress']['address'] for r in msg['toRecipients']]
body_snippet = msg['body']['content'][:200]
# 构造高上下文钓鱼邮件模板
phishing_template = f"""
Hi team,
Following up on the attached document regarding {msg['subject']}.
Please review and confirm by EOD.
Best,
{sender}
"""
# 此处可调用sendMail API发起横向钓鱼
该过程可在数分钟内完成,实现从单点突破到组织内网扩散。
3 现有防御机制的失效分析
3.1 基于域名的邮件过滤策略失效
传统邮件安全网关依赖URL信誉数据库与域名黑白名单。由于初始链接为1drv.ms或sharepoint.com,属于微软官方域名,必然通过检查。而二次跳转发生在用户交互之后,无法被邮件层扫描捕获。
3.2 发件人信誉模型被绕过
邮件来自合法内部账户,DKIM签名有效,发件人信誉评分高。即使该账户近期行为异常(如大量创建共享),若未与UEBA(用户与实体行为分析)系统联动,仍会被视为正常操作。
3.3 MFA无法阻止AiTM会话劫持
如前所述,AiTM攻击在用户完成MFA后窃取会话,MFA本身未被绕过,但其保护作用被“继承”而非“阻断”。
4 防御体系构建
4.1 启用基于上下文的条件访问策略
Azure AD条件访问可限制高风险会话的令牌颁发。建议策略包括:
设备合规性要求:仅允许混合Azure AD加入或Intune标记为合规的设备访问敏感应用;
地理位置限制:阻止来自高风险国家/地区的登录;
匿名IP阻断:自动拒绝Tor或已知代理IP的请求。
以下为通过Microsoft Graph API创建条件访问策略的示例:
policy = {
"displayName": "Block risky logins to SharePoint",
"state": "enabled",
"conditions": {
"applications": {
"includeApplications": ["00000003-0000-0ff1-ce00-000000000000"] # SharePoint Online
},
"users": {"includeUsers": ["All"]},
"clientAppTypes": ["browser", "mobileAppsAndDesktopClients"],
"locations": {
"includeLocations": ["All"],
"excludeLocations": ["AllTrusted"] # 除可信位置外全部评估
}
},
"grantControls": {
"operator": "OR",
"builtInControls": ["compliantDevice", "domainJoinedDevice"]
}
}
resp = requests.post(
'https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies',
headers={'Authorization': f'Bearer {admin_token}', 'Content-Type': 'application/json'},
json=policy
)
4.2 部署云访问安全代理(CASB)监控共享行为
CASB可集成Microsoft 365审计日志,检测异常共享模式,例如:
单账户在1小时内创建超过50个“任何人可访问”链接;
共享对象为非工作相关文件类型(如.exe、.scr);
共享后立即删除本地副本。
以下为基于Microsoft Purview审计日志的异常共享检测逻辑:
import pandas as pd
# 假设audit_logs为从Microsoft 365获取的共享事件列表
df = pd.DataFrame(audit_logs)
df['timestamp'] = pd.to_datetime(df['CreationTime'])
# 按用户统计每小时共享次数
hourly_shares = df.groupby([
'UserId',
pd.Grouper(key='timestamp', freq='1H')
]).size().reset_index(name='count')
anomalies = hourly_shares[hourly_shares['count'] > 50]
for _, row in anomalies.iterrows():
print(f"[ALERT] User {row['UserId']} created {row['count']} shares in one hour")
4.3 强化页面内嵌外链检测
邮件安全网关应升级为支持“深度页面解析”模式:当检测到OneDrive/SharePoint链接时,自动渲染页面并提取所有内嵌链接,进行二次信誉评估。对包含“verify”、“authenticate”、“unlock”等关键词的按钮或评论链接,应标记为高风险。
4.4 推动无密码认证降低凭证价值
FIDO2安全密钥或Windows Hello等无密码方案基于公钥加密,私钥不出设备,且绑定RP ID(如login.microsoftonline.com)。即使用户被诱导至仿冒页面,浏览器不会提示签名,攻击者无法获取有效凭证。更重要的是,无密码认证不产生可被代理复用的会话Cookie,从根本上消除AiTM的攻击面。
4.5 用户教育:识别“二次登录”陷阱
应培训用户注意以下信号:
OneDrive共享页面突然要求“重新登录”;
共享描述模糊(如“重要文档”而非具体文件名);
评论区出现非协作相关的链接;
移动端与桌面端页面结构明显不一致。
5 安全检测范式的演进:从链接信誉到会话连续性
传统安全指标聚焦于“是否点击了恶意链接”,但在云跳板攻击中,初始链接完全合法。因此,检测重心必须前移至“会话建立后的连续性”:
用户从OneDrive共享页面跳转至登录页的行为是否符合常规路径?
登录后首次访问的应用是否为Outlook而非原共享文档?
会话的User-Agent、IP、地理位置是否与共享创建者一致?
通过构建会话图谱(Session Graph),将文件访问、登录、API调用等事件关联,可有效识别异常跳转链。例如,若某会话在访问1drv.ms后5秒内出现在非微软域名的登录页,则极可能为钓鱼。
6 结语
利用OneDrive等可信云服务作为钓鱼跳板的攻击手法,标志着网络钓鱼已进入“信任滥用”新阶段。攻击者不再试图伪造整个通信链路,而是巧妙嵌入合法流程的缝隙之中,利用用户对协作平台的固有信任达成渗透。此类攻击对依赖静态规则与单点检测的传统防御体系构成严峻挑战。
应对之道,在于将安全控制从网络边界延伸至身份与会话层面。通过条件访问策略约束高风险会话的创建,借助CASB监控异常共享行为,强化对页面内嵌元素的动态分析,并最终推动认证方式向无密码演进,方能系统性压缩攻击者的操作空间。同时,安全度量指标需从“链接是否恶意”转向“会话是否连贯”,以更精准地反映现代云环境下的真实威胁态势。唯有如此,组织才能在协作效率与安全防护之间取得可持续的平衡。
编辑:芦笛(公共互联网反网络钓鱼工作组)

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



