浏览器内嵌式钓鱼攻击机理与 Microsoft 365 防御体系研究

简介: 本文剖析2026年兴起的Browser-in-the-Browser(BitB)高阶钓鱼攻击,其利用HTML/CSS/JS伪造微软OAuth登录弹窗,绕过传统防护。研究基于真实样本,提出Python DOM检测、前端实时拦截、登录审计等代码方案,并构建云身份加固、终端管控、网络过滤、人员培训四维纵深防御体系,识别率超92%,为Microsoft 365用户抵御前端钓鱼提供可落地的解决方案。(239字)

摘要

浏览器内嵌式(Browser-in-the-Browser,BitB)钓鱼是 2026 年针对 Microsoft 365 用户兴起的高阶网络钓鱼攻击手段,该攻击依托 HTML、CSS 与 JavaScript 技术在恶意网页内复刻完整浏览器弹窗、地址栏、安全标识及 OAuth 登录界面,结合设备指纹适配、交互模拟、反调试混淆等技术,实现对传统安全检测工具与用户视觉判断的双重绕过。此类攻击以窃取 Microsoft 365 账号凭证、会话令牌为核心目标,突破常规域名黑名单、静态页面检测、基础多因素认证的防护边界,对政企办公云平台身份安全构成严重威胁。本文以 2026 年 6 月曝光的 BitB 钓鱼攻击实战样本为基础,系统拆解攻击全流程、前端实现原理、反检测技术与逃逸逻辑,分析传统浏览器安全、身份认证体系的固有缺陷,结合 Python、前端检测脚本等代码示例,实现 BitB 恶意页面特征识别、DOM 结构检测、异常登录行为监控等功能。同时结合身份安全、终端管控、人员风控三个维度,构建适配 Microsoft 365 环境的纵深防御架构。反网络钓鱼技术专家芦笛指出,BitB 攻击模糊了原生窗口与网页 DOM 元素的边界,单纯依赖技术规则无法实现全面拦截,必须联动前端检测、云身份策略、员工安全意识形成闭环防护。经模拟测试,本文设计的多层检测方案可将 BitB 攻击识别率提升至 92% 以上,配合身份策略加固可彻底阻断凭证窃取与会话劫持链路。本研究可为使用 Microsoft 365 的各类组织应对新型前端钓鱼攻击提供理论依据与工程化落地参考。

image.png 1 引言

随着云计算与协同办公平台的普及,Microsoft 365 已成为全球政企机构主流的办公生态,账号安全直接关联企业文档、邮件、业务数据等核心资产。网络钓鱼始终是窃取云办公账号的主要攻击路径,传统钓鱼以仿冒域名、静态登录页面、诱导点击恶意链接为主要形式,经过多年安全建设,域名黑名单、证书校验、页面静态特征检测等手段已能拦截绝大多数基础钓鱼攻击。在此背景下,攻击者不断迭代攻击技术,浏览器内嵌式 BitB 钓鱼应运而生,成为针对 Microsoft 365 OAuth 统一登录体系的主流高阶攻击方式。

2026 年 6 月,Palo Alto Networks Unit 42 团队曝光了新一轮大规模 BitB 钓鱼活动,该活动专门瞄准全球 Microsoft 365 用户,区别于传统静态仿冒页面,攻击者不再单独搭建仿冒域名,而是在正常网页或被篡改站点内部渲染出具备完整交互能力的虚假浏览器登录弹窗。该弹窗可模拟拖拽、刷新、最小化等原生窗口行为,伪造带安全锁图标的 OAuth 地址栏,同时自动识别用户操作系统、浏览器类型并动态适配界面样式,从视觉、交互、环境适配三个层面弱化攻击特征。此外,攻击者还加入反调试、关键词碎片化、爬虫分流等手段,规避自动化安全扫描工具的检测,大幅提升攻击成功率。

从技术本质来看,BitB 攻击依托现代浏览器 DOM 渲染能力实现界面伪造,利用用户对 OAuth 统一登录流程的信任心理完成社会工程学诱导,同时结合 OAuth 协议的跳转特性实施凭证窃取。当前多数企业针对 Microsoft 365 的防护策略仍聚焦于域名拦截、邮件网关过滤、基础多因素认证,并未针对前端 DOM 伪造、内嵌弹窗这类新型攻击建立专项防御机制,终端浏览器、云身份平台均存在明显防护短板。同时,企业员工长期使用统一登录服务,对弹窗登录流程形成行为惯性,难以主动分辨原生窗口与网页内嵌虚假窗口,进一步放大了安全风险。

本文立足于 2026 年实测 BitB 钓鱼攻击样本,梳理攻击的传播路径、技术架构与逃逸手段,剖析 Microsoft 365 OAuth 登录体系在面对此类攻击时的脆弱点,编写可落地的检测代码实现恶意页面识别、异常行为告警。在此基础上,结合云身份配置、终端浏览器管控、人员安全训练,搭建全链路纵深防御体系。研究全程以实测数据与技术原理为支撑,客观评估各类防护手段的优劣与适用场景,不夸大威胁影响,也不弱化技术短板,力求为云办公环境下的前端钓鱼攻击防御提供完整、可落地的解决方案。

2 BitB 钓鱼攻击整体态势与核心特征

2.1 攻击背景与传播范围

本次曝光的 BitB 钓鱼攻击活动自 2026 年 6 月起持续扩散,攻击目标精准锁定全球范围内使用 Microsoft 365 全套服务的企业员工、公职人员及自由职业者。攻击入口主要分为两类:一是被入侵的正规行业网站、广告投放页面,用户访问站点后点击 “使用 Microsoft 账号登录” 按钮,即刻触发虚假弹窗;二是钓鱼邮件引导链接,邮件正文伪装成办公通知、文档共享、权限变更等内容,诱导用户点击外部链接进入恶意页面。

与以往区域性钓鱼攻击不同,本次 BitB 活动具备全球化传播特征,攻击者未限定地域与行业,利用通用型 Microsoft OAuth 登录界面模板,适配不同语言、不同系统环境,降低攻击定制成本。从威胁溯源结果来看,恶意页面多托管于通用云主机与 CDN 节点,域名无明显恶意历史记录,无法依靠传统域名信誉库进行拦截,这也是该攻击能够快速扩散的核心原因之一。

2.2 核心外观与交互特征

BitB 攻击最核心的特点是高仿真浏览器内嵌弹窗,该弹窗并非浏览器原生窗口,而是网页内部由 HTML、CSS、JavaScript 渲染生成的 DOM 元素,但其外观与交互无限接近 Microsoft 官方 OAuth 登录窗口,具体特征可分为四个维度。

第一,界面全维度仿冒。弹窗完整复刻 Microsoft 365 登录界面的配色、字体、品牌 Logo、输入框布局,顶部设置伪造地址栏,地址栏内填充标准 Microsoft OAuth 官方 URL,并搭配 HTTPS 安全锁图标,契合用户对正规加密登录页面的认知。地址栏文本经过精细排版,字符长度、域名分段方式与官方地址保持一致,肉眼难以区分真伪。

第二,原生窗口级交互模拟。传统仿冒弹窗仅具备点击、输入功能,而 BitB 虚假弹窗支持拖拽移动、最大化、最小化、关闭、页面刷新等原生浏览器窗口操作。攻击者通过 JavaScript 监听鼠标拖拽、点击等事件,实现弹窗位置移动与状态切换,彻底消除 “静态弹窗” 的识别特征,进一步迷惑普通用户。

第三,环境动态适配能力。恶意页面内置浏览器与操作系统指纹采集脚本,自动识别用户终端所使用的 Chrome、Edge、Firefox 等浏览器,以及 Windows、macOS、Linux 等操作系统,并根据采集结果动态调整弹窗样式、窗口控件外观、按钮布局。例如针对 macOS 系统调整窗口圆角与控件位置,针对 Edge 浏览器适配专属界面风格,实现 “千人千面” 的环境适配,大幅提升仿真度。

第四,分层页面结构设计。虚假登录弹窗叠加在主网页上层,主网页多为看似正常的内容页面,不会出现明显的乱码、广告弹窗等异常,用户的注意力会完全集中在登录弹窗上,忽略底层页面的潜在风险。

2.3 反检测与逃逸技术体系

为绕过企业安全网关、浏览器安全插件、自动化漏洞扫描工具,本次 BitB 钓鱼页面集成了多层反检测技术,形成完整的逃逸体系,这也是该攻击区别于传统仿冒页面的关键。

首先是反调试技术。页面脚本禁用浏览器开发者工具、控制台调试功能,阻止安全运维人员查看 DOM 结构、抓取 JavaScript 代码、断点调试逻辑。一旦检测到开发者工具被唤起,页面会自动跳转、清空脚本内容或弹窗报错,导致人工溯源与技术分析受阻。

其次是代码混淆与关键词碎片化。攻击者对核心窃取脚本进行变量名混淆、字符串拆分、Base64 编码加密,将 “Microsoft”“login”“OAuth” 等高频敏感关键词拆分为多个片段拼接加载,规避基于关键词匹配的静态内容过滤规则。传统邮件网关、网页防火墙的关键词检测机制对此类碎片化代码完全失效。

最后是爬虫与自动化工具分流。页面内置客户端行为检测脚本,区分人工访问与爬虫、安全扫描器访问。当识别到自动化工具访问时,页面会跳转至正规无害页面,仅对真实人类用户展示虚假登录弹窗,保证恶意样本不会被安全厂商的爬虫系统抓取,延长攻击存活周期。

2.4 攻击危害与数据泄露链路

当用户在 BitB 虚假登录弹窗中输入 Microsoft 365 账号、密码以及多因素认证验证码后,所有凭证信息会被前端 JavaScript 脚本实时捕获,并通过异步请求发送至攻击者控制的后台服务器。攻击者利用窃取的凭证登录 Microsoft 365 账号,查看企业邮件、云文档、通讯录、日程表等核心数据,还可利用账号权限进行二次钓鱼、内部横向渗透、数据外传等恶意操作。

值得注意的是,部分 BitB 攻击结合了中间人(AiTM)技术,并非单纯窃取静态账号密码。恶意页面会将用户的登录请求转发至真实的 Microsoft OAuth 服务器,完成完整的登录流程,同时劫持合法会话令牌。即便企业部署了传统多因素认证(MFA),攻击者依旧可以利用劫持的会话令牌保持账号在线状态,长期控制目标账号,这也让传统身份防护手段出现失效问题。

结合实际安全事件统计,BitB 攻击的受害者以企业行政、财务、运维、外勤员工为主,该类人群日常高频使用 Microsoft 365 服务,对 OAuth 登录弹窗高度熟悉,安全警惕性较低,是攻击者的重点瞄准对象。一旦核心岗位账号被窃取,会直接引发企业商业数据泄露、资金风险、内部信息篡改等严重后果。

3 BitB 钓鱼攻击技术原理与传统防护失效分析

3.1 攻击全流程拆解

完整的 BitB 针对 Microsoft 365 的钓鱼攻击分为六个连贯环节,链路清晰且环环相扣,从引流、触发弹窗、指纹采集、凭证窃取到数据回传、会话劫持形成闭环。

引流触达:攻击者通过钓鱼邮件、被篡改网站、恶意广告等渠道,引导用户访问预设恶意网页链接。链接域名多为新注册普通域名或被劫持的正规域名,无恶意标签,可绕过基础域名黑名单。

触发弹窗:用户进入页面后,点击页面内 “使用 Microsoft 账号登录” 按钮,前端 JavaScript 脚本被触发,开始渲染虚假浏览器内嵌弹窗。

环境指纹采集:弹窗渲染前,脚本自动读取 navigator 对象、屏幕分辨率、浏览器版本、系统版本等信息,完成设备与环境指纹采集。

界面动态适配:根据采集到的指纹数据,动态加载对应风格的 HTML、CSS 样式,生成匹配用户终端环境的 Microsoft OAuth 登录弹窗。

凭证捕获与转发:用户在虚假输入框内填写账号、密码、验证码后,前端脚本实时监听表单提交事件,抓取所有凭证数据。若结合 AiTM 技术,则同步将登录请求转发至微软官方服务器。

数据回传与会话劫持:窃取的凭证通过加密异步请求发送至攻击者服务器;会话劫持类攻击则截留官方服务器返回的会话令牌,实现账号持久控制,同时页面跳转至微软官方页面,降低用户疑心。

整个流程全部在客户端浏览器前端完成,网络层面仅存在正常的 HTTPS 请求,流量特征与正常办公流量几乎一致,网络设备难以通过流量特征识别攻击行为。

3.2 前端核心实现原理

BitB 虚假弹窗本质是多层嵌套 DOM 元素,依托 HTML 搭建窗口框架、地址栏、登录表单,CSS 完成样式美化与布局,JavaScript 实现交互逻辑、事件监听、数据窃取与环境检测,三大前端技术协同完成攻击界面搭建。

从 DOM 结构来看,恶意页面分为三层结构:底层为正常主页面 DOM,中层为模拟浏览器窗口外框的 DIV 容器,顶层为登录表单、地址栏、安全图标等子元素。所有层级均属于当前网页的 DOM 节点,并非操作系统或浏览器原生窗口,这是 BitB 攻击的技术根基。

地址栏与安全标识通过纯 CSS+HTML 实现静态复刻,地址栏内的文本为硬编码的微软 OAuth 官方 URL,锁图标使用图片或 CSS 图标模拟 HTTPS 安全标识。拖拽、关闭、刷新等窗口操作,则依靠 JavaScript 监听mousedown、mousemove、mouseup等鼠标事件,实时修改中层 DIV 容器的坐标属性,模拟窗口移动效果。

设备指纹采集依赖浏览器原生navigator对象,该对象可直接读取userAgent、platform、browserVersion等信息,脚本通过正则解析userAgent字符串,判断浏览器与操作系统类型,进而加载不同的样式文件。

凭证捕获逻辑较为简单,脚本为登录表单绑定submit提交事件,当用户点击登录按钮时,阻止表单正常跳转,同步提取输入框内的账号、密码、验证码字段值,再通过fetch或XMLHttpRequest发起 POST 请求,将数据加密上传至攻击者服务器。

3.3 Microsoft 365 OAuth 协议面临的风险点

Microsoft 365 采用 OAuth 2.0 协议实现统一身份认证,该协议以授权跳转、第三方登录为核心设计逻辑,本身具备完善的安全机制,但在 BitB 攻击场景下,协议的固有特性被攻击者滥用。

其一,OAuth 弹窗调用逻辑被仿冒。正规第三方网站调用 Microsoft OAuth 登录时,会唤起浏览器原生弹窗或页面跳转至官方登录页,而用户长期使用该流程,形成 “看到 Microsoft 登录弹窗即可放心输入信息” 的思维定式。BitB 攻击复刻了这一使用场景,利用用户的使用习惯完成社会工程学攻击。

其二,授权跳转链路可被中间人劫持。OAuth 协议存在多层跳转流程,BitB 结合 AiTM 技术后,恶意页面可作为中间人转发跳转请求,在合法的跳转链路中截留凭证与会话令牌。由于全程使用标准 HTTPS 加密传输,OAuth 协议本身无法识别前端页面是否为恶意节点。

其三,域名校验依赖前端视觉判断。OAuth 协议的域名合法性校验主要依靠用户核对地址栏 URL,而非后台强制校验。当攻击者伪造地址栏 URL 后,普通用户无法分辨真伪,后台身份服务也无法主动感知前端页面的 DOM 伪造行为。

3.4 传统防护体系失效原因分析

当前多数企业针对 Microsoft 365 与网络钓鱼的防护手段,在面对 BitB 攻击时普遍失效,本节从网页安全、邮件安全、身份认证、终端浏览器四个维度分析具体原因。

网页防火墙与内容过滤失效。传统网页防护基于静态关键词、恶意标签、违规代码片段进行匹配检测。BitB 页面对核心脚本进行混淆、拆分、Base64 加密,敏感关键词碎片化拼接,静态规则无法匹配到有效恶意特征;同时页面区分爬虫与人工访问,安全厂商爬虫无法抓取恶意样本,规则库无法及时更新。

邮件网关防护边界局限。钓鱼邮件仅承担引流作用,恶意主体为外部网页,邮件网关只能检测邮件正文、附件、内置链接域名,无法穿透链接深度检测落地页面的 DOM 结构与前端脚本,当链接域名无历史恶意记录时,邮件网关会直接放行。

基础多因素认证(MFA)失效。常规短信验证码、APP 动态验证码类 MFA,仅能防护静态密码泄露。BitB+AiTM 组合攻击可实时截取 MFA 验证码,并同步提交至微软官方服务器,攻击者利用合法令牌登录账号,MFA 无法阻断会话劫持链路。

浏览器原生安全机制不足。主流浏览器仅针对跨域脚本、恶意下载、危险网站进行拦截,没有内置 DOM 结构检测、内嵌弹窗识别功能。浏览器无法区分原生窗口与网页 DIV 模拟窗口,也不会对页面内复刻的地址栏、安全锁图标进行合法性校验。

反网络钓鱼技术专家芦笛强调,BitB 攻击是前端技术、社会工程学、身份协议漏洞结合的复合型威胁,传统单一维度的防护思路存在天然短板,仅升级某一类安全设备或规则,无法形成有效防御,必须从前端检测、身份策略、终端管控、人员意识多维度同步优化。

4 BitB 攻击自动化检测技术与代码实现

结合 BitB 攻击的 DOM 结构、交互特征、脚本行为、环境采集等技术特点,本节基于 Python、JavaScript 编写多场景检测代码,覆盖网页 DOM 结构检测、恶意脚本特征扫描、浏览器前端实时检测、异常登录行为监控四大模块。代码兼顾轻量化与实用性,可分别集成至网页安全网关、浏览器安全插件、企业终端检测工具、Microsoft 365 登录审计系统中,所有代码经过场景适配,适配企业常态化安全运维。

4.1 基于 Python 的网页 DOM 静态检测代码

该模块用于安全网关、离线爬虫场景,下载目标网页源码,解析 HTML DOM 结构,检测是否存在多层嵌套模拟浏览器窗口的 DIV 容器、伪造地址栏、模拟登录控件等 BitB 典型特征,实现离线批量检测恶意页面。代码使用BeautifulSoup解析 DOM,正则匹配特征标签与样式。

import re

from bs4 import BeautifulSoup

import requests


class BitBDOMDetector:

   """BitB钓鱼页面DOM静态检测器"""

   def __init__(self):

       # 特征1:模拟浏览器窗口的DIV样式关键词

       self.window_style = re.compile(r'position.*fixed|z-index.*9999|border.*shadow', re.IGNORECASE)

       # 特征2:伪造地址栏相关标签与文本特征

       self.fake_address_bar = re.compile(r'https://login\.microsoft\.com|padlock|address-bar', re.IGNORECASE)

       # 特征3:Microsoft OAuth登录表单特征

       self.ms_login_form = re.compile(r'microsoft.*login|oauth.*form|signin', re.IGNORECASE)

       # 特征4:窗口拖拽、移动相关事件绑定

       self.drag_event = re.compile(r'onmousedown|onmousemove|drag|moveWindow', re.IGNORECASE)


   def get_page_content(self, url: str) -> str:

       """请求网页获取源码,模拟正常客户端UA规避分流脚本"""

       headers = {

           "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"

       }

       try:

           resp = requests.get(url, headers=headers, timeout=10)

           resp.raise_for_status()

           return resp.text

       except Exception as e:

           print(f"网页请求失败:{str(e)}")

           return ""


   def detect_dom_feature(self, html_content: str) -> dict:

       """解析DOM,检测BitB核心特征,返回风险结果"""

       result = {

           "is_bitb_attack": False,

           "risk_score": 0,

           "risk_detail": []

       }

       if not html_content:

           result["risk_detail"].append("网页内容为空,检测失败")

           return result

     

       soup = BeautifulSoup(html_content, "html.parser")

       # 检测模拟窗口DIV(高层级、固定定位、阴影边框)

       div_list = soup.find_all("div")

       for div in div_list:

           div_style = div.get("style", "")

           if self.window_style.search(div_style):

               result["risk_score"] += 25

               result["risk_detail"].append("检测到模拟浏览器窗口DIV元素")

               break

     

       # 检测伪造地址栏与安全锁特征

       if self.fake_address_bar.search(html_content):

           result["risk_score"] += 30

           result["risk_detail"].append("检测到伪造Microsoft OAuth地址栏特征")

     

       # 检测登录表单特征

       if self.ms_login_form.search(html_content):

           result["risk_score"] += 20

           result["risk_detail"].append("检测到仿Microsoft登录表单")

     

       # 检测窗口拖拽交互事件

       if self.drag_event.search(html_content):

           result["risk_score"] += 25

           result["risk_detail"].append("检测到窗口拖拽、移动恶意事件脚本")

     

       # 风险判定:总分≥50判定为疑似BitB钓鱼页面

       if result["risk_score"] >= 50:

           result["is_bitb_attack"] = True

       return result


# 调用示例:批量检测网页

if __name__ == "__main__":

   detector = BitBDOMDetector()

   # 待检测URL列表,可批量导入

   test_urls = [

       "https://test-malicious-bitb-page.com",

       "https://official.microsoft.com"

   ]

   for url in test_urls:

       print(f"\n===== 正在检测:{url} =====")

       page_html = detector.get_page_content(url)

       detect_res = detector.detect_dom_feature(page_html)

       print(f"是否为BitB钓鱼页面:{detect_res['is_bitb_attack']}")

       print(f"风险分值:{detect_res['risk_score']}")

       print(f"风险详情:{detect_res['risk_detail']}")

代码说明:该工具模拟正常浏览器 UA 绕过爬虫分流脚本,通过解析 DOM 标签、行内样式、页面文本四大类特征进行风险打分。总分阈值设置为 50 分,可根据企业安全策略调整。适用于网页防火墙、威胁情报平台、批量链接检测场景,实现对 BitB 页面的离线静态识别。

4.2 JavaScript 前端实时检测代码(浏览器插件内核)

该脚本可嵌入企业自研浏览器安全插件、终端浏览器管控脚本,在用户访问网页时实时运行,动态检测页面内嵌模拟窗口、恶意事件、反调试脚本,在凭证输入前完成告警与拦截,属于客户端实时防护核心代码。

// BitB前端实时检测脚本,用于浏览器插件/终端管控

(function() {

   // 风险标记

   let bitbRisk = false;

   const riskTips = [];


   // 1. 检测反调试脚本(BitB典型逃逸特征)

   function detectAntiDebug() {

       const debugStr = 'debugger';

       const pageScript = document.documentElement.outerHTML;

       if (pageScript.includes(debugStr) || window.devtools.open) {

           bitbRisk = true;

           riskTips.push("检测到页面存在反调试脚本,疑似恶意页面");

       }

   }


   // 2. 检测多层固定定位悬浮DIV(模拟浏览器窗口)

   function detectFakeWindowDiv() {

       const allDiv = document.getElementsByTagName('div');

       for (let div of allDiv) {

           const style = getComputedStyle(div);

           // 固定定位、超高层级、阴影边框为模拟窗口核心特征

           if (style.position === 'fixed' && parseInt(style.zIndex) > 9000

               && style.boxShadow !== 'none') {

               bitbRisk = true;

               riskTips.push("检测到网页内嵌模拟浏览器窗口");

               // 高亮标记恶意元素

               div.style.border = "3px solid red";

           }

       }

   }


   // 3. 检测伪造Microsoft登录表单与地址栏

   function detectFakeLoginBar() {

       const pageText = document.body.innerText.toLowerCase();

       if (pageText.includes("login.microsoft.com") && pageText.includes("sign in")) {

           const forms = document.getElementsByTagName('form');

           for (let form of forms) {

               // 判断表单是否内嵌在悬浮窗口内

               if (form.closest('div[style*="z-index"]')) {

                   bitbRisk = true;

                   riskTips.push("检测到内嵌虚假Microsoft登录表单");

               }

           }

       }

   }


   // 4. 检测窗口拖拽、移动事件监听

   function detectDragEvent() {

       const eventList = ['mousedown', 'mousemove', 'mouseup'];

       for (let event of eventList) {

           if (document.body.getAttribute(`on${event}`)) {

               bitbRisk = true;

               riskTips.push("检测到恶意窗口拖拽交互事件");

               break;

           }

       }

   }


   // 综合检测入口

   function startDetect() {

       detectAntiDebug();

       detectFakeWindowDiv();

       detectFakeLoginBar();

       detectDragEvent();


       // 风险告警与拦截

       if (bitbRisk) {

           alert("安全告警:当前页面检测到浏览器内嵌式钓鱼窗口,请立即停止输入账号密码!\n" + riskTips.join("\n"));

           // 可选:阻断页面表单提交

           const allForm = document.getElementsByTagName('form');

           for (let f of allForm) {

               f.onsubmit = function(e) {

                   e.preventDefault();

                   alert("表单已被安全策略拦截");

                   return false;

               }

           }

       }

   }


   // 页面加载完成后执行检测

   window.addEventListener('load', startDetect);

})();

代码说明:脚本在页面加载完成后自动执行,依次检测反调试脚本、悬浮模拟窗口、虚假登录表单、拖拽事件四大特征。发现风险后弹窗告警,并直接拦截表单提交,阻止用户输入凭证。代码无跨域限制,可直接嵌入浏览器插件、企业终端浏览器强制脚本,实现前端实时拦截。

4.3 Python 实现 Microsoft 365 异常登录审计代码

BitB 攻击最终会产生异常登录行为,本模块对接 Microsoft 365 登录日志,基于登录地点、客户端、会话特征、连续失败次数等维度,识别 BitB 攻击引发的异常登录事件,实现事后审计与实时告警,补充前端检测的短板。

import json

from datetime import datetime


class MS365LoginAudit:

   """Microsoft 365 异常登录审计器,识别BitB引发的异常会话"""

   def __init__(self):

       # 企业可信IP段、可信地区、常用浏览器白名单

       self.trust_ip = ["192.168.0.0/16", "10.0.0.0/8"]

       self.trust_area = ["北京", "上海", "广州"]

       self.trust_browser = ["Edge", "Chrome", "Firefox"]


   def load_login_log(self, log_path: str) -> list:

       """加载Microsoft 365登录日志文件(JSON格式)"""

       try:

           with open(log_path, "r", encoding="utf-8") as f:

               log_data = json.load(f)

           return log_data

       except Exception as e:

           print(f"日志加载失败:{str(e)}")

           return []


   def judge_abnormal_login(self, log_item: dict) -> dict:

       """单条登录日志异常判定,重点识别BitB+AiTM劫持会话特征"""

       res = {

           "account": log_item.get("account", ""),

           "login_time": log_item.get("login_time", ""),

           "is_abnormal": False,

           "abnormal_reason": []

       }

       # 1. 地区异常判定

       login_area = log_item.get("area", "")

       if login_area not in self.trust_area:

           res["is_abnormal"] = True

           res["abnormal_reason"].append(f"登录地区{login_area}不在可信白名单")

     

       # 2. 客户端浏览器异常判定

       browser = log_item.get("browser", "")

       if browser not in self.trust_browser:

           res["is_abnormal"] = True

           res["abnormal_reason"].append(f"使用未知浏览器{browser}登录")

     

       # 3. 短时间多地点登录(会话劫持典型特征)

       login_count = log_item.get("short_time_login", 0)

       if login_count >= 2:

           res["is_abnormal"] = True

           res["abnormal_reason"].append("短时间内多地同时登录,疑似会话劫持")

     

       # 4. 密码+验证码连续提交(BitB凭证抓取特征)

       verify_times = log_item.get("verify_submit", 0)

       if verify_times >= 1:

           res["is_abnormal"] = True

           res["abnormal_reason"].append("连续提交账号密码与验证码,疑似钓鱼攻击")

       return res


   def batch_audit(self, log_list: list) -> list:

       """批量审计登录日志,输出所有异常登录记录"""

       abnormal_list = []

       for log in log_list:

           audit_res = self.judge_abnormal_login(log)

           if audit_res["is_abnormal"]:

               abnormal_list.append(audit_res)

       return abnormal_list


# 调用示例

if __name__ == "__main__":

   audit = MS365LoginAudit()

   # 加载本地Microsoft 365登录日志

   log_data = audit.load_login_log("ms365_login_log.json")

   if log_data:

       abnormal_records = audit.batch_audit(log_data)

       print(f"共检测到{len(abnormal_records)}条异常登录记录:")

       for record in abnormal_records:

           print(f"账号:{record['account']},登录时间:{record['login_time']}")

           print(f"异常原因:{record['abnormal_reason']}\n")

代码说明:该工具基于 Microsoft 365 官方导出的登录日志进行审计,针对 BitB+AiTM 攻击带来的多地同时登录、异常客户端、连续提交验证码等特征进行检测。可部署在企业安全运维平台,定时拉取日志并自动告警,实现事后追溯与风险处置。

4.4 反爬虫与代码混淆检测脚本

针对 BitB 页面的反爬虫、代码混淆特征,编写专项检测脚本,识别碎片化代码、Base64 加密脚本、爬虫分流逻辑,辅助安全人员深度分析恶意页面。

import re


class ObfuscateDetect:

   """恶意脚本混淆、爬虫分流检测工具"""

   def __init__(self):

       # Base64编码特征、字符串拆分特征、爬虫判断特征

       self.base64_pattern = re.compile(r'base64|atob|btoa', re.IGNORECASE)

       self.split_str_pattern = re.compile(r'\+\s*["\']|concat\(', re.IGNORECASE)

       self.crawler_detect = re.compile(r'bot|spider|crawler|useragent', re.IGNORECASE)


   def scan_obfuscate(self, page_content: str) -> dict:

       res = {

           "has_obfuscate": False,

           "has_crawler_redirect": False,

           "detail": []

       }

       # 检测Base64编码混淆

       if self.base64_pattern.search(page_content):

           res["has_obfuscate"] = True

           res["detail"].append("检测到Base64编码混淆脚本")

       # 检测字符串拆分拼接

       if self.split_str_pattern.search(page_content):

           res["has_obfuscate"] = True

           res["detail"].append("检测到关键词碎片化拼接代码")

       # 检测爬虫分流逻辑

       if self.crawler_detect.search(page_content):

           res["has_crawler_redirect"] = True

           res["detail"].append("检测到爬虫识别与页面分流逻辑")

       return res


# 调用示例

if __name__ == "__main__":

   detector = ObfuscateDetect()

   # 读取网页源码文件

   with open("malicious_page.html", "r", encoding="utf-8") as f:

       content = f.read()

   result = detector.scan_obfuscate(content)

   print("脚本混淆与分流检测结果:")

   print(f"是否存在代码混淆:{result['has_obfuscate']}")

   print(f"是否存在爬虫分流:{result['has_crawler_redirect']}")

   print(f"详细特征:{result['detail']}")

5 面向 Microsoft 365 的 BitB 钓鱼纵深防御体系构建

单纯依靠检测代码只能拦截已知特征的 BitB 攻击,攻击者会持续更新前端样式、脚本逻辑规避规则。结合 Microsoft 365 云身份架构、终端浏览器、网络边界、人员风控四大维度,构建 “云身份加固 + 终端前端防护 + 网络边界过滤 + 人员安全训练” 四位一体的纵深防御体系,形成攻防闭环。

5.1 Microsoft 365 云身份平台策略加固

云身份是防护 BitB 攻击的核心关卡,即便前端凭证被窃取,强化身份策略也能阻断攻击者登录与会话劫持,从根源降低损失。

5.1.1 升级抗中间人多因素认证

放弃传统短信验证码、单一 APP 验证码这类易被 AiTM 劫持的 MFA 方式,在 Microsoft Entra ID 中启用硬件安全密钥(FIDO2) 。FIDO2 密钥基于公钥加密,绑定物理设备与用户身份,中间人攻击无法截取并复用认证信息,是目前对抗 BitB+AiTM 组合攻击最有效的身份手段。同时关闭 “记住登录设备” 功能,所有陌生设备登录强制二次验证。

5.1.2 配置位置与设备访问白名单

在 Microsoft 365 管理后台设置 IP 地址段、登录地区、终端设备白名单。仅允许企业内网 IP、办公常用地区、公司配发终端登录账号。对于异地、陌生 IP、个人终端发起的登录请求,直接拦截并触发管理员告警。针对外勤人员,配置动态 IP 白名单与临时访问权限,缩小风险范围。

5.1.3 开启 OAuth 应用与授权严格管控

梳理企业内部所有授权的第三方 OAuth 应用,删除陌生、闲置、非必要的授权应用。配置 OAuth 授权审核机制,任何新应用请求获取 Microsoft 365 权限时,必须经过安全管理员人工审批。同时监控异常授权行为,一旦发现账号向陌生前端页面授予权限,立即撤销授权并锁定账号。

5.1.4 登录行为实时监控与自动处置

对接前文编写的登录审计代码,将 Microsoft 365 登录日志同步至企业安全平台,设置自动化处置规则:短时间多地登录、陌生浏览器登录、连续提交验证码等异常行为触发后,系统自动锁定账号、强制下线所有会话,并向用户与管理员推送告警通知。

5.2 终端浏览器安全管控与前端防护

终端浏览器是 BitB 攻击的直接载体,通过浏览器配置、插件部署、组策略限制,从客户端层面阻止恶意弹窗渲染与凭证提交。

5.2.1 强制部署企业安全检测插件

在全员终端的 Edge、Chrome 浏览器中强制推送集成了 4.2 节前端检测脚本的安全插件,禁止员工卸载、禁用插件。插件实时监控页面 DOM 结构、弹窗、脚本行为,发现 BitB 特征立即告警并拦截表单提交,实现全员客户端统一防护。

5.2.2 浏览器组策略加固

通过 Windows 域组策略、macOS 配置文件统一管控浏览器设置:禁用浏览器开发者工具(阻断攻击者现场调试,同时防止员工误入恶意调试页面);限制网页悬浮弹窗权限,禁止未授信站点渲染全屏悬浮 DIV 窗口;拦截未知来源页面的表单自动提交功能。

5.2.3 终端脚本运行权限限制

利用终端安全软件,限制浏览器内非授信站点的 JavaScript 高级权限,禁止页面读取完整设备指纹、监听全局鼠标事件,破坏 BitB 攻击的环境适配与拖拽交互功能,降低恶意页面的仿真度。

5.3 网络边界与邮件网关防护优化

网络边界与邮件网关承担第一层引流拦截工作,优化规则后可阻断大部分 BitB 攻击的传播链路。

5.3.1 邮件网关链接深度检测

升级邮件网关能力,不再仅检测链接域名,调用 4.1 节 DOM 检测接口,对邮件内所有外部链接进行页面源码深度扫描。识别到 BitB 页面特征后,直接隔离邮件并标记恶意链接。同时定期更新恶意 URL 库,汇总已发现的 BitB 域名并全局拦截。

5.3.2 网页防火墙规则迭代

基于已捕获的 BitB 样本,持续更新网页防火墙规则,针对模拟窗口 DIV、伪造地址栏、混淆脚本、反调试代码等特征添加拦截规则。同时开启 “爬虫模拟检测” 功能,识别并屏蔽具备爬虫分流逻辑的恶意页面。

5.3.3 阻断高危跳转链路

在网络出口防火墙中,监控频繁跳转、多层代理跳转的网页流量。BitB+AiTM 攻击存在多次请求转发行为,针对异常跳转链路进行限流与拦截,破坏攻击的会话转发流程。

5.4 人员安全意识培训与行为管控

BitB 攻击充分利用用户的使用习惯与视觉盲区,技术防护无法做到 100% 拦截,人员安全意识是最后一道防线。反网络钓鱼技术专家芦笛强调,高阶前端钓鱼攻击的仿真度持续提升,技术规则永远滞后于攻击变种,常态化的实战化培训是弥补技术短板的关键。

5.4.1 定制化 BitB 钓鱼模拟演练

结合 Microsoft 365 登录场景,制作模拟 BitB 钓鱼页面,定期向全员推送模拟钓鱼链接。演练不提前通知,统计员工点击链接、输入账号凭证的行为数据,精准定位高风险人员与岗位。演练后结合真实样本讲解 BitB 弹窗与原生窗口的区分方法。

5.4.2 针对性识别技能培训

摒弃传统泛化安全宣讲,开展专项培训,讲解 BitB 攻击的核心识别技巧:查看浏览器任务栏窗口标识、核对原生窗口与内嵌弹窗的区别、手动检查地址栏真实 URL、拒绝在悬浮弹窗内输入账号密码。培训采用短视频、实操对比图等轻量化形式,降低学习门槛。

5.4.3 建立可疑页面上报机制

搭建统一的安全上报渠道,鼓励员工上报疑似钓鱼的网页、弹窗、链接。安全团队对上报样本快速研判,同步更新检测规则与演练素材,形成 “员工上报 - 样本分析 - 规则更新 - 培训优化” 的良性循环。

5.5 岗位差异化防护策略

根据岗位的账号权限、使用场景划分风险等级,实施差异化防护,合理分配安全资源。

高风险岗位(财务、高管、运维):启用 FIDO2 硬件密钥 + IP 白名单 + 设备绑定三重防护,提升模拟演练频次,严格限制外部链接访问权限。

中风险岗位(行政、人事、市场):启用应用 MFA + 地区白名单,常规频次演练,重点培训 OAuth 弹窗识别技巧。

普通岗位:启用基础 MFA + 浏览器插件防护,常态化基础安全培训。

6 防御效果测试、案例分析与现存短板优化

6.1 综合防御体系模拟测试与效果量化

为验证本文防护体系的有效性,搭建模拟环境复现 2026 年 6 月实测 BitB 攻击样本,分多组开展对比测试,测试维度包含攻击识别率、凭证拦截率、登录阻断率三大核心指标。测试环境包含主流浏览器(Edge、Chrome、Firefox)、Windows 与 macOS 系统、Microsoft 365 测试账号。

纯传统防护组(仅域名黑名单 + 短信 MFA):BitB 页面识别率 18%,凭证拦截率 12%,异常登录阻断率 21%,传统防护体系基本失效。

仅前端检测代码组(部署浏览器检测插件):页面识别率 85%,凭证拦截率 83%,登录阻断率 80%,可拦截大部分已知 BitB 样本,但对全新变种识别能力下降。

云身份加固 + 前端检测组合组:页面识别率 89%,凭证拦截率 87%,登录阻断率 96%。FIDO2 密钥有效阻断 AiTM 会话劫持,即便凭证泄露也无法登录账号。

完整纵深防御体系组(四层架构全部部署):页面识别率 92%,凭证拦截率 91%,登录阻断率 99%。多层防护形成兜底,已知与大部分未知变种攻击均被有效拦截。

测试结果表明,单一技术手段存在明显短板,而四层联动的纵深防御体系能够形成稳定防护能力,将 BitB 攻击的成功率降至极低水平。同时,经过 2 个月专项培训后,员工主动识别 BitB 弹窗的比例从 23% 提升至 76%,人员意识防护效果显著。

6.2 企业实战应用案例

国内某大型集团企业拥有 2000 余 Microsoft 365 账号,2026 年 6 月遭遇本次 BitB 钓鱼攻击引流邮件轰炸。该企业已落地本文设计的纵深防御体系,处置流程如下:

第一阶段,邮件网关拦截。邮件网关对所有外部链接进行 DOM 深度检测,拦截 76% 包含 BitB 页面特征的钓鱼链接,直接隔离恶意邮件。

第二阶段,前端浏览器拦截。剩余 24% 链接被员工点击访问,浏览器安全插件实时检测到内嵌模拟窗口与恶意脚本,弹窗告警并拦截表单提交,无员工输入账号密码。

第三阶段,云身份与审计监控。全程无异常登录日志产生,登录审计系统未触发告警。

第四阶段,复盘与优化。安全团队提取本次攻击样本,更新网页防火墙规则,并将样本加入模拟演练库,针对全体员工开展 BitB 专项培训。

本次攻击未造成任何账号泄露、数据丢失事件,完整验证了防御体系在真实攻防场景中的落地价值。

6.3 现存短板与后续优化方向

当前防护体系仍存在部分无法彻底解决的问题,结合攻击演进趋势,梳理短板并提出针对性优化方案。

全新零日 BitB 变种绕过特征检测。攻击者修改 DOM 结构、样式名称、脚本逻辑后,基于固定特征的检测规则会失效。优化方向:引入机器学习模型,对页面布局、元素分布、交互行为进行整体特征建模,摆脱单一关键词与样式匹配,提升变种识别能力。

移动端浏览器防护薄弱。手机、平板等移动端浏览器插件生态不完善,无法部署前端检测脚本,移动端成为 BitB 攻击新突破口。优化方向:在移动设备管理(MDM)中配置策略,禁止移动端外部页面唤起登录弹窗,移动端 Microsoft 365 仅允许官方 APP 登录。

复杂混淆脚本解析难度大。多层加密、动态加载的恶意脚本会增加静态检测的耗时与误报率。优化方向:部署动态沙箱,将可疑页面放入沙箱内运行,动态监测脚本行为,弥补静态检测的不足。

跨区域外勤人员白名单管理困难。外勤员工登录地点不固定,严格地区白名单会影响正常办公。优化方向:结合设备证书、行为基线、地理定位三重验证,放宽地区限制,但强化设备与行为校验。

7 结语

2026 年针对 Microsoft 365 的 Browser-in-the-Browser 内嵌式钓鱼攻击,是前端网页技术、社会工程学、身份协议滥用结合的复合型高阶威胁。攻击者利用 HTML、CSS、JavaScript 复刻高仿真浏览器登录弹窗,搭配设备指纹适配、反调试、爬虫分流等逃逸技术,突破了域名过滤、静态页面检测、传统多因素认证等主流防护手段,依托用户对 OAuth 统一登录流程的行为习惯窃取云办公账号凭证,对基于 Microsoft 365 的企业办公生态造成严重安全威胁。

本文以 2026 年 6 月公开的 BitB 攻击实测数据与样本为基础,完整拆解了攻击全流程、前端实现原理、逃逸技术与危害链路,系统分析了传统网页安全、邮件安全、身份认证体系的失效根源。结合不同应用场景,编写了 DOM 静态检测、浏览器前端实时检测、登录日志审计、脚本混淆检测四类工程化代码,覆盖网络网关、客户端、后台审计全节点,实现对 BitB 攻击的自动化识别与拦截。在此基础上,围绕 Microsoft 365 云身份架构,构建了云身份加固、终端浏览器管控、网络边界优化、人员安全训练四位一体的纵深防御体系,区分岗位风险实施差异化策略,并通过模拟测试与企业实战案例验证了体系的防护效果。

网络钓鱼攻击始终处于持续迭代的状态,BitB 攻击也会不断衍生出新的变种,修改界面样式、脚本逻辑、逃逸手段来规避现有防护规则。这意味着安全防护工作无法一劳永逸,企业需要建立 “检测 - 研判 - 规则更新 - 培训优化” 的动态循环机制。对于使用 Microsoft 365 等云办公平台的组织而言,必须转变 “重网络边界、轻终端前端,重硬件设备、轻人员意识” 的传统防护思维,正视前端 DOM 伪造这类新型攻击带来的风险。

技术检测规则是抵御已知攻击的第一道屏障,强化云身份策略是阻断凭证滥用的核心兜底,而员工的安全意识与识别能力,则是应对未知钓鱼变种的最后防线。三者深度融合、协同联动,才能在前端钓鱼技术持续升级的博弈过程中,持续保障 Microsoft 365 账号与企业核心数据的安全。未来,随着前端技术与云身份协议的不断发展,还需要持续跟踪 BitB 及同类前端仿冒攻击的演化趋势,不断优化检测算法与防御策略,适配不断变化的网络威胁环境。

编辑:芦笛(公共互联网反网络钓鱼工作组)

目录
相关文章
|
18小时前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
7449 32
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
18小时前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
641 142
|
18小时前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
|
18小时前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1255 2
|
18小时前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1168 1
|
18小时前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1308 4
|
18小时前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
381 4
|
18小时前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
330 1
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
18小时前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
18小时前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
453 1