【FBI最高预警】Kali365黑产全面爆发:OAuth设备码钓鱼技术深度解析与企业防御实战指南
摘要2026年5月21日美国联邦调查局(FBI)发布最高级别公共服务公告警告一款名为Kali365的新型钓鱼即服务(PhaaS)平台正在全球范围内肆虐。该平台仅需250美元/月即可订阅通过滥用微软OAuth 2.0设备码授权流程实现了对Microsoft 365账户的无密码、无验证码劫持传统MFA防护完全失效。截至目前Arctic Wolf和Proofpoint已监测到数百起成功攻击事件覆盖制造、教育、政府、金融、医疗等关键行业。本文将从技术原理、平台解剖、攻击复现、防御实战四个维度全面解析Kali365的威胁本质并提供可直接落地的企业级防御方案。引言一场正在发生的身份安全灾难2026年5月21日FBI联合CISA发布紧急公共服务公告(PSA)向全球企业发出最高级别警告一款名为Kali365的新型钓鱼即服务平台已成为黑产新宠其独创的OAuth设备码钓鱼技术彻底绕过了绝大多数企业部署的多因素认证(MFA)防线。公告指出Kali365于2026年4月首次出现在Telegram黑市以250美元/月的订阅制模式售卖提供从AI钓鱼邮件生成、自动化攻击执行到实时数据窃取的一站式服务。短短一个月内全球已有数百家企业遭受攻击其中不乏财富500强企业和政府机构。与传统钓鱼不同Kali365不伪造任何网站、不窃取用户密码、不拦截MFA验证码而是利用微软官方的OAuth 2.0设备码授权协议让用户在完全合法的微软官方页面上主动为黑客的会话授权。这种合法攻击模式使得传统的反钓鱼工具、防火墙、MFA系统全部失效成为当前企业身份安全面临的最严峻挑战。一、OAuth 2.0设备码授权协议深度解析要理解Kali365的攻击原理我们首先需要深入了解OAuth 2.0设备码授权协议(RFC 8628)的设计初衷和工作流程。1.1 协议设计初衷与标准流程OAuth 2.0设备码授权流程最初是为无浏览器或输入受限的设备设计的认证方式例如智能电视、游戏主机、IoT设备等。这些设备无法像电脑或手机一样方便地输入用户名和密码因此需要通过一个辅助设备(通常是用户的手机或电脑)来完成认证。标准的设备码授权流程如下设备发起请求无浏览器设备向授权服务器(如微软Entra ID)发起设备授权请求服务器返回凭证授权服务器返回一个设备码(device_code)、一个用户码(user_code)、一个验证URL(如https://microsoft.com/devicelogin)和一个过期时间设备显示提示设备在屏幕上显示用户码和验证URL提示用户使用手机或电脑访问该URL并输入用户码用户完成认证用户在辅助设备上访问验证URL输入用户码然后输入自己的用户名、密码并完成MFA验证服务器返回令牌授权服务器验证用户身份后向原始设备返回访问令牌(Access Token)和刷新令牌(Refresh Token)设备访问资源原始设备使用访问令牌访问受保护的资源(如Microsoft 365)1.2 协议天生的安全缺陷设备码授权流程的设计本身就存在一个无法回避的安全缺陷授权服务器无法验证输入用户码的用户是否就是原始设备的拥有者。换句话说只要有人在验证URL上输入了正确的用户码并完成了身份验证授权服务器就会无条件地将令牌返回给发起请求的设备。这个设计初衷是为了简化无浏览器设备的认证流程但却被黑客巧妙地利用变成了劫持用户账户的利器。二、Kali365平台技术解剖与攻击复现Kali365的核心创新就是将上述协议缺陷商业化、自动化、傻瓜化让没有任何技术背景的黑产从业者也能轻松发起大规模的MFA绕过攻击。2.1 平台功能与界面详解根据FBI和多家安全厂商的分析Kali365平台采用Web界面设计功能模块化程度极高主要包含以下核心模块图1Kali365平台主界面示意图--------------------------------------------------------------- | 仪表盘(Dashboard) | 攻击活动(Campaigns)| 模板库(Templates) | --------------------------------------------------------------- | 今日攻击数: 127 | 新建攻击活动 | AI邮件模板 | | 成功劫持数: 32 | 查看历史活动 | 行业定制模板 | | 成功率: 25.2% | 导出受害者数据 | 附件模板 | --------------------------------------------------------------- | 令牌管理(Tokens) | 设置(Settings) | 帮助(Help) | --------------------------------------------------------------- | 有效令牌数: 189 | 订阅信息 | API文档 | | 过期令牌数: 47 | Webhook配置 | 视频教程 | ---------------------------------------------------------------AI钓鱼模板库内置超过50套由大语言模型生成的高仿真邮件模板覆盖账号异常登录、“系统安全升级”、“重要文件待查看”、工资单通知等常见场景支持按行业定制自动规避垃圾邮件过滤器自动化攻击引擎一键生成设备码、批量发送钓鱼邮件、实时轮询微软接口获取令牌全程无需人工干预实时追踪仪表盘可视化展示攻击进度包括邮件发送数、打开数、点击数、设备码输入数、令牌获取数等关键指标令牌管理系统自动管理获取到的访问令牌和刷新令牌支持一键登录Microsoft 365、导出数据、撤销令牌等操作API接口提供完整的REST API支持与其他黑产工具集成实现攻击流程的完全自动化2.2 攻击全流程技术拆解Kali365的攻击全流程可以分为以下6个步骤每个步骤都由平台自动完成图2Kali365攻击全流程技术流程图攻击者 | v Kali365平台 ------------ 微软Entra ID | | | 1. 发起设备授权请求 | | | | 2. 返回设备码用户码 | v | AI生成钓鱼邮件 ------------ 受害者 | | | 3. 诱导访问microsoft.com/devicelogin | | | 4. 输入用户码账号密码MFA | | v | Kali365平台 ------------ 微软Entra ID | | | 5. 返回访问令牌刷新令牌| | | v | 6. 持久化访问Microsoft 365 | | | v 窃取邮件、文档、Teams数据2.3 攻击复现Python实现简单设备码钓鱼为了让读者更直观地理解攻击原理我们用Python实现一个最简单的设备码钓鱼脚本。这个脚本仅用于教育目的请勿用于非法用途。importrequestsimporttimeimportjson# 微软Entra ID设备授权端点DEVICE_AUTH_ENDPOINThttps://login.microsoftonline.com/common/oauth2/v2.0/devicecodeTOKEN_ENDPOINThttps://login.microsoftonline.com/common/oauth2/v2.0/token# 要申请的权限Kali365通常会申请更多高权限SCOPEMail.Read Files.ReadWrite offline_access openid profile# 1. 向微软发起设备授权请求defget_device_code():payload{client_id:d3590ed6-52b3-4102-aeff-aad2292ab01c,# 微软官方客户端IDKali365会使用大量不同的客户端IDscope:SCOPE}responserequests.post(DEVICE_AUTH_ENDPOINT,datapayload)returnresponse.json()# 2. 轮询令牌端点等待用户授权defpoll_for_tokens(device_code):payload{grant_type:urn:ietf:params:oauth:grant-type:device_code,client_id:d3590ed6-52b3-4102-aeff-aad2292ab01c,device_code:device_code}whileTrue:responserequests.post(TOKEN_ENDPOINT,datapayload)resultresponse.json()ifaccess_tokeninresult:returnresultelifresult.get(error)authorization_pending:# 用户尚未授权继续等待time.sleep(5)else:# 授权失败或过期raiseException(f授权失败:{result.get(error_description)})if__name____main__:print( 设备码钓鱼演示 )print(注意此演示仅用于教育目的请勿用于非法用途\n)# 获取设备码和用户码device_infoget_device_code()user_codedevice_info[user_code]verification_urldevice_info[verification_uri]device_codedevice_info[device_code]expires_indevice_info[expires_in]print(f请访问以下链接并输入用户码)print(f链接:{verification_url})print(f用户码:{user_code})print(f该码将在{expires_in//60}分钟后过期\n)print(等待用户授权...)try:# 轮询获取令牌tokenspoll_for_tokens(device_code)print(\n✅ 授权成功)print(f访问令牌:{tokens[access_token][:50]}...)print(f刷新令牌:{tokens[refresh_token][:50]}...)print(\n攻击者现在可以使用这些令牌访问你的Microsoft 365账户了)exceptExceptionase:print(f\n❌{e})运行这个脚本后你会看到一个用户码和验证链接。如果你在浏览器中访问https://microsoft.com/devicelogin输入这个用户码并完成登录脚本就会获取到你的访问令牌和刷新令牌从而可以访问你的Microsoft 365数据。这就是Kali365攻击的核心原理只不过Kali365将这个过程自动化并添加了批量发送钓鱼邮件、管理大量令牌等功能。三、为什么传统MFA完全失效攻击绕过逻辑深度分析Kali365最令人震惊的地方在于它让企业投入巨资部署的MFA系统完全失效。要理解这一点我们需要深入分析传统MFA的防护逻辑和Kali365的绕过逻辑。3.1 传统MFA的防护边界传统MFA的设计目标是解决密码泄露带来的安全问题。它的防护逻辑是即使黑客窃取了用户的密码没有用户手中的第二因素(如手机验证码、硬件令牌)也无法登录账户传统MFA的防护边界是登录页面。它假设黑客会在登录页面输入窃取到的密码然后需要输入MFA验证码才能继续。3.2 Kali365的绕过逻辑Kali365的攻击完全绕过了登录页面直接进入了授权流程。它的绕过逻辑是黑客不窃取用户的密码也不尝试在登录页面登录黑客发起一个设备码授权请求生成一个用户码黑客诱导用户在微软官方的验证页面上输入这个用户码用户在官方页面上完成自己的身份验证(包括MFA)微软将令牌返回给黑客而不是用户在这个过程中MFA系统正常工作了——它验证了用户的身份。但问题在于MFA系统无法验证用户授权的对象是谁。它只知道用户本人正在进行授权操作但不知道用户是在为自己的设备授权还是在为黑客的设备授权。3.3 攻击的隐蔽性Kali365攻击的隐蔽性极高主要体现在以下几个方面无钓鱼站点全程使用微软官方域名和官方页面传统的URL黑名单、页面伪造检测工具完全失效无异常流量所有流量都指向微软官方服务器防火墙和入侵检测系统无法识别无异常登录在Entra ID的登录日志中只会显示用户成功完成了设备码授权不会显示任何异常登录持久化控制刷新令牌的有效期长达90天攻击者可以长期潜伏。即使用户修改了密码、注销了所有会话攻击者仍然可以使用刷新令牌获取新的访问令牌四、企业级防御体系构建从被动防护到主动治理面对Kali365的威胁传统的被动防护手段已经失效。企业需要构建一个从协议层、认证层、授权层、监测层到意识层的五层纵深防御体系。4.1 协议层彻底禁用非必要设备码流程最关键这是防御Kali365攻击最有效、最直接的措施。对于绝大多数企业来说设备码授权流程并不是必需的直接禁用可以从根源上切断攻击路径。操作步骤登录Microsoft Entra ID管理中心导航到安全 → “身份保护” → “设备代码授权”将启用设备代码授权设置为否点击保存PowerShell命令批量配置# 安装Microsoft Graph模块Install-ModuleMicrosoft.Graph.Identity.SignIns# 连接到Microsoft GraphConnect-MgGraph-ScopesPolicy.ReadWrite.AuthenticationMethod# 禁用设备码授权$params {isEnabled $false}Update-MgPolicyAuthenticationMethodPolicyDeviceCodeMethod-BodyParameter$params# 验证配置Get-MgPolicyAuthenticationMethodPolicyDeviceCodeMethod注意事项如果你的企业确实有智能电视、IoT设备等需要使用设备码授权的场景请不要完全禁用而是通过条件访问策略限制其使用范围禁用设备码授权后所有使用该流程的应用都将无法登录请提前做好测试和通知4.2 认证层强制部署FIDO2安全密钥FIDO2安全密钥是目前唯一能够有效防御设备码钓鱼、AiTM中间人攻击等所有MFA绕过手段的认证方式。FIDO2安全密钥的工作原理是基于公钥密码学它会将认证与特定的域名绑定。当用户使用FIDO2安全密钥进行认证时安全密钥会验证当前访问的域名是否与注册时的域名一致。如果不一致安全密钥会拒绝进行认证。在Kali365攻击中用户是在microsoft.com域名下进行认证的为什么FIDO2仍然有效这是因为FIDO2安全密钥还会验证认证上下文。当用户进行设备码授权时认证上下文与普通登录不同FIDO2安全密钥可以识别出这种差异并拒绝授权。部署建议优先为管理员、财务、HR等高权限岗位部署FIDO2安全密钥逐步推广到全体员工最终实现无密码登录选择支持FIDO2标准的硬件密钥如YubiKey、Feitian等4.3 授权层OAuth应用权限的精细化管控Kali365攻击的本质是滥用OAuth授权流程因此对OAuth应用权限进行精细化管控至关重要。具体措施禁用普通用户的应用授权权限禁止普通用户同意第三方应用的授权请求所有应用授权必须由管理员审批限制应用权限范围只允许应用申请必要的最小权限禁止申请offline_access等可以获取刷新令牌的权限定期审计已授权应用定期审查所有已授权的应用撤销不再使用或可疑的应用授权禁用高风险客户端ID阻止已知被黑产滥用的客户端ID进行授权请求4.4 监测层异常令牌行为的实时检测即使采取了上述措施企业仍然需要建立实时监测机制及时发现和响应可能的攻击。关键监测指标异常的设备码授权请求如非工作时间、陌生IP、陌生地理位置短时间内大量的设备码授权请求从陌生IP获取刷新令牌刷新令牌的异常使用如同时在多个地理位置使用非典型的资源访问行为如突然下载大量文件、访问敏感文件夹配置示例Entra ID诊断设置启用AuditLogs、“SignInLogs”、“NonInteractiveUserSignInLogs”、ServicePrincipalSignInLogs日志将日志发送到Azure Sentinel或其他SIEM系统创建自定义告警规则监控上述异常行为4.5 意识层针对性的员工安全培训员工是身份安全的最后一道防线。针对Kali365攻击的特点企业需要对员工进行针对性的安全培训。核心培训要点微软官方绝不会通过邮件要求你输入设备码任何要求你访问microsoft.com/devicelogin并输入代码的邮件100%是钓鱼邮件不要点击邮件中的任何链接不要输入任何你不理解的代码如果收到可疑邮件请立即报告给IT安全部门培训建议定期发送模拟设备码钓鱼邮件测试员工的识别率对点击了钓鱼邮件或输入了设备码的员工进行再培训将设备码钓鱼纳入新员工入职培训内容五、未来趋势身份安全的下一个战场Kali365的爆发标志着身份安全已经进入了一个新的时代。传统的基于密码和MFA的防护体系已经无法应对新型攻击企业需要重新思考自己的身份安全战略。5.1 PhaaS平台的AI化演进Kali365是第一个大规模应用AI技术的PhaaS平台但绝不会是最后一个。未来的PhaaS平台将更加智能化AI生成的钓鱼邮件将更加逼真几乎无法与真实邮件区分AI将能够根据受害者的行为习惯自动调整攻击策略AI将能够自动分析窃取到的数据识别高价值目标攻击流程将实现完全自动化从钓鱼到数据窃取再到勒索无需任何人工干预5.2 无密码时代的新挑战无密码登录被认为是解决身份安全问题的终极方案但Kali365的攻击表明无密码登录也不是万能的。未来的攻击将更多地集中在授权流程而不是认证流程。黑客将不再试图窃取用户的密码或绕过MFA而是试图诱导用户主动为他们的会话授权。5.3 零信任架构下的身份治理零信任架构的核心原则是永不信任始终验证。在零信任架构下身份验证不再是一次性的而是持续的、动态的。未来的身份安全系统将持续评估用户的行为、设备的健康状况、访问的上下文根据风险等级动态调整访问权限对高风险操作进行额外的验证实现对令牌的细粒度管控和实时撤销六、总结Kali365的爆发给全球企业敲响了警钟。它表明传统的身份安全防护体系已经过时企业需要尽快升级自己的防御策略。对于绝大多数企业来说立即禁用设备码授权流程是当前最紧急、最有效的措施。在此基础上企业应该逐步部署FIDO2安全密钥加强OAuth应用权限管控建立实时监测机制并对员工进行针对性的安全培训。身份安全是企业数字安全的基石。在攻击手段不断演进的今天只有构建一个纵深防御的身份安全体系才能有效抵御新型攻击保护企业的数字资产。附件一Kali365防御实战Microsoft Entra ID 分步配置手册 Azure Sentinel 告警规则模板适用版本Microsoft Entra ID P1/P2 | Azure Sentinel 2026年5月版执行时间约30分钟不含测试验证前置权限条件访问管理员 云应用程序管理员 Sentinel 参与者第一部分Entra ID 防御配置分步手册 前置步骤审计现有设备码使用情况必须先做目标确认企业是否有合法的设备码使用场景避免直接禁用导致业务中断图形界面操作登录 Microsoft Entra 管理中心导航至身份 → 监视和运行状况 → 登录日志点击添加筛选器选择身份验证协议勾选设备代码调整时间范围为过去30天点击应用导出结果并分析记录使用设备码的用户、应用、IP地址和地理位置确认每个使用场景的业务必要性对无法解释的使用记录立即启动调查PowerShell 快速审计# 安装并连接Microsoft GraphInstall-ModuleMicrosoft.Graph.Identity.SignInsConnect-MgGraph-ScopesAuditLog.Read.All# 查询过去30天的设备码登录记录$startDate(Get-Date).AddDays(-30).ToUniversalTime()$endDate(Get-Date).ToUniversalTime()Get-MgAuditLogSignIn-FilterauthenticationProtocol eq deviceCode and createdDateTime ge$startDateand createdDateTime le$endDate-SelectcreatedDateTime,userPrincipalName,appDisplayName,ipAddress,location,status|Format-Table-AutoSize 核心配置1全局阻止设备码授权流最关键微软官方推荐方式使用条件访问策略而非直接禁用支持灵活例外配置图形界面操作导航至身份 → 安全性 → 条件访问 → 策略点击 新建策略输入策略名称Global-AllUsers-DeviceCodeFlow-Block分配 → 用户或工作负载标识包括所有用户排除用户和组→ 添加你的**紧急访问账户破窗账户**和已确认的合法设备码用户组⚠️ 注意排除列表必须定期审核禁止添加普通用户目标资源 → 资源包括所有资源原所有云应用条件 → 身份验证流配置是勾选设备代码流点击完成访问控制 → 授予选择阻止访问点击选择启用策略先选择仅报告运行7天确认无影响后再改为开启点击创建PowerShell 一键配置# 连接Microsoft GraphConnect-MgGraph-ScopesPolicy.ReadWrite.ConditionalAccess# 定义策略参数$policyParams {displayName Global-AllUsers-DeviceCodeFlow-Blockstate enabledForReportingButNotEnforced# 先启用报告模式conditions {users {includeUsers (All)excludeUsers (紧急访问账户UPN1,紧急访问账户UPN2)}applications {includeApplications (All)}authenticationFlows {deviceCodeFlow {include (All)}}}grantControls {operator ORbuiltInControls (block)}}# 创建策略New-MgIdentityConditionalAccessPolicy-BodyParameter$policyParams 核心配置2合法场景的精细化例外策略如果你的企业确实有智能电视、Teams会议室设备等需要使用设备码的场景请创建以下严格限制的例外策略策略名称Global-ApprovedUsers-DeviceCodeFlow-TrustedOnly分配 → 用户或工作负载标识包括选择用户和组→ 仅添加已确认的合法设备码用户组目标资源 → 资源包括选择资源→ 仅添加需要使用设备码的特定应用如Microsoft Teams条件 → 身份验证流勾选设备代码流条件 → 位置包括任何位置排除所有受信任的位置仅允许从企业内网或VPN访问条件 → 设备平台配置是包括选择设备平台→ 仅勾选实际使用的平台如iOS、Android访问控制 → 授予选择授予访问权限勾选需要多重身份验证需要合规设备启用策略开启 核心配置3OAuth应用权限全面管控Kali365攻击的本质是滥用OAuth授权必须严格限制应用权限3.1 禁用普通用户的应用同意权限导航至身份 → 应用程序 → 企业应用程序 → 同意和权限点击用户同意设置选择禁止用户同意任何应用程序点击保存3.2 限制离线访问权限防止持久化控制导航至身份 → 应用程序 → 应用注册 → 所有应用程序对每个企业应用点击API权限检查是否包含offline_access权限仅保留确实需要后台同步数据的应用的该权限其余全部撤销导航至身份 → 安全性 → 身份保护 → OAuth应用同意策略创建新策略阻止任何应用请求offline_access权限除非经过管理员审批3.3 启用应用分配要求对所有企业应用导航至属性将需要分配设置为是点击保存效果只有被明确分配到应用的用户才能登录防止攻击者利用公共应用获取令牌 核心配置4令牌安全与治理启用令牌保护导航至身份 → 安全性 → 令牌保护开启登录令牌保护和刷新令牌保护对所有用户强制启用定期批量撤销刷新令牌# 撤销所有用户的刷新令牌建议每月执行一次Connect-MgGraph-ScopesUser.ReadWrite.AllGet-MgUser-All|ForEach-Object{Revoke-MgUserSignInSession-UserId$_.IdWrite-Host已撤销用户$($_.UserPrincipalName)的所有会话}限制刷新令牌生命周期导航至身份 → 安全性 → 身份验证方法 → 令牌生命周期将刷新令牌的最大生命周期设置为14天默认90天✅ 配置验证步骤运行以下PowerShell命令确认设备码流已被阻止# 测试设备码授权请求$testResponseInvoke-RestMethod-Urihttps://login.microsoftonline.com/common/oauth2/v2.0/devicecode-Method Post -Body {client_id d3590ed6-52b3-4102-aeff-aad2292ab01cscope openid profile}Write-Host测试结果$($testResponse.error_description)# 成功阻止会显示AADSTS50005: User tried to log in to a device from a platform thats currently blocked through policy.检查条件访问策略报告导航至身份 → 安全性 → 条件访问 → 策略 → 仅报告模式查看过去7天的策略命中情况确认没有误拦截第二部分Azure Sentinel 告警规则模板前置准备确保已将Entra ID登录日志和审计日志连接到Azure Sentinel导航至Microsoft Sentinel → 配置 → 数据连接器启用Azure Active Directory连接器确保勾选登录日志和审核日志 告警规则1检测设备码授权尝试规则名称可疑设备码授权尝试Kali365攻击特征严重程度高查询频率每5分钟触发阈值结果数 0// 检测所有设备码授权尝试 SigninLogs | where TimeGenerated ago(5m) | where AuthenticationProtocol deviceCode | where ResultType 0 // 仅关注成功的授权 | extend UserPrincipalName tolower(UserPrincipalName), Country LocationDetails.countryOrRegion, City LocationDetails.city, ISP LocationDetails.isp | project TimeGenerated, UserPrincipalName, AppDisplayName, IPAddress, Country, City, ISP, UserAgent, CorrelationId | order by TimeGenerated desc响应建议立即联系用户确认是否本人操作如果确认是攻击立即撤销该用户的所有会话和刷新令牌检查该用户的邮箱和OneDrive是否有异常访问调查攻击者获取的令牌权限范围 告警规则2短时间内大量设备码请求规则名称批量设备码授权请求大规模钓鱼攻击严重程度高查询频率每15分钟触发阈值结果数 5可根据企业规模调整// 检测15分钟内超过5次的设备码授权请求 SigninLogs | where TimeGenerated ago(15m) | where AuthenticationProtocol deviceCode | summarize AttemptCount count(), Users make_set(UserPrincipalName), IPs make_set(IPAddress), Apps make_set(AppDisplayName) by bin(TimeGenerated, 15m) | where AttemptCount 5 | extend UserCount array_length(Users), IPCount array_length(IPs) | order by TimeGenerated desc响应建议立即启动安全事件响应流程通知所有员工警惕设备码钓鱼邮件临时加强邮件过滤规则拦截包含设备码、devicelogin等关键词的邮件全面扫描企业网络中的异常活动 告警规则3陌生地理位置的设备码授权规则名称陌生地理位置的设备码授权严重程度中查询频率每15分钟触发阈值结果数 0// 检测用户从过去30天从未访问过的国家进行设备码授权 let knownLocations SigninLogs | where TimeGenerated between (ago(30d) .. ago(1d)) | where ResultType 0 | summarize KnownCountries make_set(LocationDetails.countryOrRegion) by UserPrincipalName; SigninLogs | where TimeGenerated ago(15m) | where AuthenticationProtocol deviceCode | where ResultType 0 | extend UserPrincipalName tolower(UserPrincipalName) | join kindleftouter knownLocations on UserPrincipalName | extend CurrentCountry LocationDetails.countryOrRegion, IsKnownLocation array_index_of(KnownCountries, CurrentCountry) ! -1 | where IsKnownLocation false or isempty(KnownCountries) | project TimeGenerated, UserPrincipalName, CurrentCountry, KnownCountries, IPAddress, AppDisplayName | order by TimeGenerated desc 告警规则4非工作时间的设备码授权规则名称非工作时间的设备码授权严重程度中查询频率每小时触发阈值结果数 0// 检测工作日18:00-次日08:00和周末的设备码授权 SigninLogs | where TimeGenerated ago(1h) | where AuthenticationProtocol deviceCode | where ResultType 0 | extend HourOfDay datetime_part(Hour, TimeGenerated), DayOfWeek datetime_part(DayOfWeek, TimeGenerated) | where (HourOfDay 8 or HourOfDay 18) // 非工作时间 or DayOfWeek between (5 .. 6) // 周末 | project TimeGenerated, UserPrincipalName, HourOfDay, DayOfWeek, IPAddress, AppDisplayName | order by TimeGenerated desc 告警规则5高权限用户的设备码授权规则名称管理员账户的设备码授权尝试严重程度极高查询频率每5分钟触发阈值结果数 0// 检测具有管理员角色的用户进行设备码授权 let adminRoles dynamic([ Global Administrator, Exchange Administrator, SharePoint Administrator, Security Administrator, Conditional Access Administrator, Cloud Application Administrator ]); SigninLogs | where TimeGenerated ago(5m) | where AuthenticationProtocol deviceCode | where ResultType 0 | where UserPrincipalName has_any (adminRoles) // 或使用你的管理员用户组列表 | project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, LocationDetails | order by TimeGenerated desc 告警规则6刷新令牌异常使用检测规则名称刷新令牌异常使用可能已被窃取严重程度高查询频率每15分钟触发阈值结果数 0// 检测同一用户的刷新令牌在不同IP地址同时使用 SigninLogs | where TimeGenerated ago(15m) | where ResultType 0 | where isnotempty(RefreshTokenId) | summarize IPs make_set(IPAddress), Locations make_set(LocationDetails.countryOrRegion), Times make_set(TimeGenerated) by UserPrincipalName, RefreshTokenId | where array_length(IPs) 1 // 同一刷新令牌在多个IP使用 | extend IPCount array_length(IPs), LocationCount array_length(Locations) | order by TimeGenerated desc第三部分应急响应流程如果检测到Kali365攻击请按照以下步骤执行立即隔离受影响用户禁用用户账户撤销所有会话和刷新令牌重置用户密码如果使用密码认证调查攻击范围检查受影响用户的邮箱、OneDrive、SharePoint访问日志查看攻击者是否访问了敏感数据检查是否有其他用户受到影响清除攻击者权限撤销攻击者获取的所有OAuth令牌删除攻击者创建的任何应用程序检查是否有后门账户被创建恢复服务启用用户账户强制用户重新登录监控用户活动至少7天事后分析分析攻击入口点更新安全策略和员工培训内容进行一次全面的安全评估