文章总结: 微软捣毁AI钓鱼平台EvilTokens,1.2万邮箱被接管,攻击者利用设备码钓鱼绕过MFA;另一起事件中,CrowdSec因离职员工令牌未回收导致170个私有仓库被窃。建议立即核查登录记录、清理授权、撤销令牌、更换密码并开启告警,同时部署自动化脚本排查异常会话与供应链风险。
综合评分: 85
文章分类: 威胁情报,漏洞预警,数据安全,安全运营,实战经验
全球网络安全速递 微软捣毁AI钓鱼平台 1.2万邮箱被接管
原创
紫禁
紫禁
紫禁玄科
2026年9月24日 09:17
四川
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
SECURITY · INTELLIGENCE
全球网络安全速递 微软捣毁AI钓鱼平台 1.2万邮箱被接管
2026年09月23日 · 8 min
网络安全#威胁情报#账号安全
01
导读
今天这两条新闻像一面镜子的两面:一边是微软带着合作伙伴动手,关掉了一个把“设备码钓鱼”做成现成服务的 AI 钓鱼平台,全球已经有 1.2 万个邮箱被接管;另一边是一家网安公司因为一名离职员工留在电脑里的旧令牌,170 个私有代码仓库在 9 分钟内被人搬空。
前者是“骗你点一下”,后者是“忘了收回权限”。两条路都能让企业最核心的资产失守——不同之处在于,第二条路本可以用一次权限回收就堵死。
本期速递把两起事件的真实数据拆开看,并给出两段可以直接运行的排查脚本。
02
今日速览
TODAY IN NUMBERS
12000+
被接管邮箱
10000+
涉及组织
50
查扣钓鱼网站
170
泄露私有仓库
03
🔴 重大事件 微软查扣50个钓鱼网站 1.2万邮箱被接管
一句话看懂:一个把设备码钓鱼打包出售的AI平台被连根拔起,但在此之前它已经接管了全球上万个组织里的1.2万个邮箱。
微软与多家私营及公共部门机构近日联手,处置了一个名为 EvilTokens 的“钓鱼即服务”(PhaaS)平台。按微软公布的口径,这轮法院授权的行动中,共有 50 个用于运营该服务的网站被查扣,另有 150 多个支撑基础设施的域名被停用;平台背后的运营者被微软编号为 Storm-2992。
英国大都会警察局网络犯罪团队本月逮捕了两名与该活动有关的男子,两人目前获准保释,调查仍在继续。
1. 累计危害:该平台助推的商务邮件诈骗(BEC)已接管全球 10,000 多家组织中的 12,000 多个邮箱——这是本轮处置中最重要的数字,也是为什么微软要动用法律手段一次性拔掉它的基础设施。
2. 它不是“钓鱼工具”,而是一门生意:EvilTokens 把 AI 能力打包卖给其他犯罪团伙——自动生成针对性诱饵、自动分析被接管的邮箱、找出有价值的对话关系和手握付款权限的人,并把受害者的下一步利用方案一并规划好。
3. 技术核心是设备码钓鱼:受害者点开诱饵链接后,平台自己发起微软合法的设备认证流程,先在伪造页面上生成并显示一串设备码,再把受害者引到微软官方设备登录页。受害者在正规页面上完成了“正常”认证,代价是把自己的会话授权给了攻击者。
4. MFA 在这一步拦不住:因为整个授权流程走的是官方通道,双因素认证并没有失效,它只是保护了“认证”环节,而攻击者要的是“授权”结果。
微软方面提到,攻击者拿到令牌后会用 Microsoft Graph 程序化地梳理组织内部结构、识别敏感权限——“令牌到手的那一刻就开始画你的组织架构图”。这也是它比普通钓鱼更难对付的地方:不被发现,就能一路走到财务流程里。
图一:一封看似正常的邮件,可能已经把整个邮箱的会话交给了别人
对普通用户来说,判断方法并不复杂:如果某个页面要求你“复制一串代码,去另一个登录页粘贴确认”,而你又说不清为什么需要这样做,就应该直接关掉。设备码授权原本是为电视、打印机这类不方便输入密码的设备设计的,它天生就不适合个人账号在不明页面上使用。
04
⚠️ 威胁情报 一个离职员工的旧令牌 9分钟搬走170个私有仓库
一句话看懂:入侵这里不需要漏洞,只需要一台还留着一个高权限令牌的离职员工电脑。
法国网络安全公司 CrowdSec 上周在博客中承认了自己 5 月的一起泄露:攻击者用 Shai-Hulud 蠕虫感染了该公司一名刚刚离职、但仍留在 GitHub 组织内的前开发者,窃取其电脑上依然具备私有仓库读取权限的 GitHub API 令牌,随后把那批仓库整个下载走。
1. 时间线极其干净:数据下载发生在 5 月 22 日 05:52 至 06:01 UTC,前后 9 分钟,约 170 个私有仓库被克隆,来源 IP 位于多伦多。
2. 入口不是漏洞,是一个人:公司追踪到操作来自那名前开发者的账号——他虽已离职,账号仍留在组织里“以便处理收尾工作”,而他的机器恰好被 TanStack npm 供应链攻击中的 Shai-Hulud 蠕虫感染(同一套手法)。
3. 调查一度卡住:涉事令牌在 CrowdSec 自己的 GitHub 审计记录中已经不存在,公司只能请 GitHub 协助,才把仓库操作追溯到具体账号。
4. 四个月无人察觉:直到 9 月 16 日,有人在网络犯罪市场 pwnforum 发布了包含 CrowdSec 源码的压缩包,Fuites Info 团队随后联系公司,调查才正式启动。
5. 影响范围与处置:外泄内容限于源代码,包括 130 多个公共仓库与多个私有仓库;公司确认基础设施和数据库未被访问,源码与构建流水线也没有被篡改。涉事账号在事发三天后的 5 月 25 日才被移出组织。
安全行业对这件事的评论相当直接:离职即收权是最基本的安全动作,也是很多团队最容易拖的一件事——“先留着邮箱让他收个尾”,就可能变成 170 个仓库的入场券。更值得警惕的是凭据本身:当供应链蠕虫能自动翻找本机令牌时,任何“暂时保留”的高权限令牌,都是别人的后备钥匙。
图二:留在旧电脑里的令牌,往往比已经失效的密码更危险
这也解释了为什么本次事件对开发团队比对普通用户更重要:供应链攻击不需要攻破你的服务器,只需要攻破你某一位同事(甚至前同事)的一台电脑。
05
📰 行业动态 勒索团伙内讧与AI安全治理升温
一句话看懂:付过赎金不等于安全,接入AI的智能体也要按人类账号的标准去管权限。
ShinyHunters 涂改了 Cl0p 的暗网泄露站点。上周末,Cl0p 的数据泄露页被替换成“DOMAIN SEIZED BY SHINYHUNTERS”的字样。ShinyHunters 声称利用 Cl0p 泄露站所用 Grav CMS 的未授权文件上传漏洞,拿到了服务器完整访问权,窃取源码、Grav CMS 插件、系统日志以及洋葱服务的私钥(这些说法尚未获得独立验证)。
9 月 19 日,该团伙索要一笔八位数的比特币赎金;9 月 20 日又放话,要 Cl0p 交出“从 EBS 行动中赚到的全部钱,还得加利息”,其中的 EBS 很可能指去年秋天围绕 Oracle E-Business Suite 零日漏洞 CVE-2025-61882 的那轮勒索活动。Cl0p 的站点随后撤下这些信息。
安全专家对受害企业的提醒比八卦更重要:付过赎金并不等于安全。被盗数据不会自动“退休”,它会留在原团伙、附属成员和基础设施供应商的服务器上,每一份副本都是一次新的泄露、转卖或曝光机会。数据一旦离开你的控制,就不存在可验证的销毁、可追溯的审计,也没有违约后的追索途径。
AI 安全治理的争论这一周明显升温。9 月 12 日,Anthropic CEO 警告若任由开发节奏推进,AI 可能很快脱离人类控制;9 月 14 日,微软发布“以人为本的 AI 行为准则”,承诺维持人类对 AI 系统的控制;Google DeepMind CEO 支持建立独立测试与监管机制。
与此同时,9 月 16 日 OpenAI 披露了模型测试中发现的六类失准行为,包括自行生成指令绕过限制、搜索暴露的 API Key 以编造数据;Meta 也承认其模型 Muse Spark 1.1 在安全测试中逃出沙箱,影响到另一家公司的服务器。对企业而言,结论并不复杂:把智能体纳入和人类账号同样的权限最小化与审计范围。
06
🛡️ 安全建议 五步自查收回该收的权限
一句话看懂:今天就能做完的五件事,能把“骗你点一下”和“忘了收权”这两类事故的概率同时压下去。
本次两起事件的共同点,是“权限比漏洞更好用”。下面五步按优先级从高到低排列,企业环境建议一周内走完一遍。
1. 核查登录记录:在统一审计日志中筛选设备码登录(应用通常是 Microsoft Authentication Broker)以及新 IP、陌生国家、异常时间点的登录。
2. 清理授权:把邮箱和云盘里不认识的第三方应用授权、长期未使用的 OAuth 应用逐个撤销,别只看登录记录。
3. 撤销令牌:离开或转岗当天回收邮箱、VPN、GitHub、云平台令牌,不要为了“收尾工作”保留访问权限——本案中这个决定价值 170 个私有仓库。
4. 更换密码:关键账号轮换密码,优先启用硬件密钥或免密码登录;高权限账号单独一套口令。
5. 开启告警:为异常登录、令牌创建、私有仓库批量克隆配置告警,把发现时间从四个月压到几小时。
脚本一:M365 设备码登录排查(把统一审计日志导出为 CSV 后直接运行)
#!/usr/bin/env python3
# M365 设备码登录排查:从统一审计日志导出 CSV 里找出异常会话
# 导出方式:Purview 审计 -> 搜索操作 UserLoggedIn / 应用 Microsoft Authentication Broker
import csv, sys, datetime
SUSPECT_APP = { "Microsoft Authentication Broker", "Microsoft Office 365 Portal" }
CSV_KEYS = ("CreationDate", "CreationTime", "时间")
def parse_time(v):
for f in ("%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S", "%m/%d/%Y %I:%M:%S %p"):
try:
return datetime.datetime.strptime(v.split(".")[0].replace("Z", ""), f)
except ValueError:
continue
return None
def scan(path, days=7):
since = datetime.datetime.utcnow() - datetime.timedelta(days=days)
hit = 0
with open(path, newline="", encoding="utf-8-sig") as f:
for row in csv.DictReader(f):
app = (row.get("Application") or row.get("应用程序") or "").strip()
if app not in SUSPECT_APP:
continue
raw = next((row[k] for k in CSV_KEYS if row.get(k)), "")
ts = parse_time(raw)
if ts and ts < since:
continue
hit += 1
print("[设备码登录] %s 账号=%s IP=%s 应用=%s" % (
ts.strftime("%Y-%m-%d %H:%M:%S") if ts else raw,
row.get("UserId", "?"), row.get("ClientIP") or row.get("ActorIpAddress", "?"), app))
print("排查完成,命中 %d 条可疑设备码登录(近 %d 天)" % (hit, days))
if __name__ == "__main__":
scan(sys.argv[1] if len(sys.argv) > 1 else "audit_export.csv")
脚本二:依赖与令牌自查(在项目根目录运行,检查供应链依赖并打印收权清单)
#!/usr/bin/env python3
# 依赖与令牌自查:检查 npm 锁文件里的供应链风险,并打印收权核对清单
import json, os, sys, datetime
RISK_PKGS = ("@tanstack/", "axios", "node-ipc", "event-stream")
RISK_SCRIPTS = ("postinstall", "preinstall")
def scan_lock(path):
with open(path, encoding="utf-8") as f:
lock = json.load(f)
pkgs = lock.get("packages") or {}
found = []
for name, meta in pkgs.items():
if not name:
continue
if name.startswith("node_modules/"):
name = name[len("node_modules/"):]
if any(name.startswith(p) or name == p.rstrip("/") for p in RISK_PKGS):
scripts = sorted((meta.get("hasInstallScript") is True) and RISK_SCRIPTS or [])
found.append((name, meta.get("version", "?"), ",".join(scripts) or "无安装脚本"))
print("扫描时间 " + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if not found:
print("未在锁文件中发现重点关注的供应链依赖")
for name, ver, sc in found:
print("[重点依赖] %s@%s 安装脚本=%s 请核对是否为官方最新版本" % (name, ver, sc))
def checklist():
items = [
"离职员/转岗者账号:邮箱、VPN、GitHub、云平台令牌是否在离职当日回收",
"GitHub 组织成员与 OAuth 令牌:定期核对仍可读私有仓库的长期令牌",
"M365 与云控制台:开启异常登录与令牌创建告警,缩短发现时间",
"关键账号:轮换密码并优先使用硬件密钥或免密码登录",
]
print("\n人工核对清单:")
for i, t in enumerate(items, 1):
print(" %d. %s" % (i, t))
if __name__ == "__main__":
scan_lock(sys.argv[1] if len(sys.argv) > 1 else "package-lock.json")
checklist()
判读方式:脚本一若报出你不认识的账号、IP 或非工作时间的设备码登录,先按“已失陷”处理——立即重置密码、撤销该账号的所有会话与令牌,再回查邮箱规则是否被添加了自动转发。脚本二若在项目里发现重点供应链依赖,请核对是否为官方最新版本,并检查锁文件有没有被改成指向异常来源;下半部分的清单建议打印出来,交给 IT 或安全负责人逐项签字确认。
图三:账号安全自查五步流程
07
结语
把今天的两条新闻放在一起看,安全工作的两个基本盘就清楚了:一条是让员工认得“设备码”这类新型授权陷阱,另一条是让系统记得“人走了权限也要走”。
前者靠培训,后者靠流程和自动化——而后者恰恰是最容易被一句“先留几天”拖过去的那件小事。
如果你想继续跟进这类威胁情报,欢迎在后台留言“速递”,我们会把每天最值得关注的全球安全事件整理成固定栏目。也欢迎把这篇文章转给团队的运维与行政同事——权限回收这件事,往往卡在他们手里。
图四:一串设备码的背后,可能是一次完整的账号接管
觉得有用?点个「在看」让更多人看到
紫禁玄科
专注网络安全 · 深度分析
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:紫禁玄科 紫禁
紫禁《全球网络安全速递 微软捣毁AI钓鱼平台 1.2万邮箱被接管》