前言传统网络安全防御的核心逻辑长期依赖边界防火墙、IPS、EDR拦截恶意IP、恶意域名、异常端口外联。绝大多数企业的M365安全运维只盯着邮件钓鱼、恶意附件、异常登录这三类高频风险完全忽略了Microsoft Graph API滥用带来的隐性威胁。2026年Group-IB披露的HollowGraph恶意软件攻击活动彻底打破了常规云安全防御认知。这套攻击体系不利用任何系统漏洞、不搭建私有C2服务器、不产生任何可疑流量全程复用微软官方合法云服务通道借助Outlook远期日历事件实现指令下发与数据窃取大量政企租户长期被渗透却无任何安全设备告警。本次文章从实战角度出发拆解HollowGraph完整攻击链路、隐匿原理提供可直接落地的PowerShell全租户排查脚本、Defender检测规则、SIEM检索语句同时配套全套M365租户加固配置帮运维人员彻底补齐云日历安全监控盲区。一、HollowGraph威胁基础全貌与攻击定位1.1 核心威胁基础信息HollowGraph属于Cavern模块化后门框架的衍生变体是针对性定向间谍攻击工具主要瞄准以色列政企、科研、金融类核心组织目前攻击范围正在向全球政企M365租户扩散。该恶意软件无专属CVE漏洞编号核心攻击手段为合法身份权限滥用Microsoft Graph API合规调用属于典型的无漏洞高级持续性威胁。关键情报来源为Group-IB威胁情报实验室、The Hacker News、FreeBuf安全社区威胁评级为高危持续性渗透威胁具备极强的隐蔽性、长驻留性、数据窃取性。1.2 恶意程序底层特性HollowGraph主体为.NET NativeAOT编译的独立DLL文件无需依赖本地.NET运行环境落地后无明显进程特征不易被常规EDR进程筛查捕获。程序功能极度精简仅保留两个核心执行指令get、send分别对应攻击者指令接收、本地数据外渗两大核心动作最大化降低程序体积与行为特征。区别于传统木马HollowGraph不会主动发起外网连接、不会创建系统服务、不会修改注册表启动项所有恶意行为均通过调用微软官方Graph API完成行为特征完全贴合正常企业用户办公操作。二、HollowGraph攻击链路与隐匿核心原理2.1 整体攻击架构流程整个攻击链路分为身份劫持、指令预埋、本地执行、数据回传、长期潜伏五个阶段全程无任何违规网络行为完美绕过边界安全设备与终端基础防护。我用架构图完整还原端到端攻击逻辑贴合真实渗透场景。A[攻击者] --|1.窃取M365有效凭证/令牌| B[劫持租户用户身份]B --|2.调用Microsoft Graph API| C[创建2050年远期日历事件]C --|3.嵌入加密指令/窃取任务| D[日历事件挂载加密附件]D --|4.定时轮询Graph日历接口| E[终端HollowGraph木马]E --|5.解密执行指令| F[本地探测文件/窃取敏感数据]F --|6.加密回传数据| G[新建远期日历事件上传窃取文件]G --|7.攻击者登录邮箱读取附件| H[完成数据窃取]E --|8.无本地驻留特征| I[长期潜伏、循环执行]2.2 2050年远期时间戳隐匿核心逻辑这是HollowGraph最核心的隐身手段也是绝大多数企业防御失效的关键原因。攻击者将所有恶意日历事件的时间固定设置为2050年及以后主流为2050年5月13日UTC时段。普通企业员工、运维人员的日历使用习惯仅聚焦当日、本周、本月日程极少主动检索数年乃至数十年后的日历内容。运维常规巡检、安全人员风险排查均不会将远期日历事件作为核查对象这就让恶意指令载体实现永久视觉隐身。同时Outlook客户端、网页端默认不加载超远期日历数据不会推送任何日程提醒用户完全无法感知恶意事件存在为攻击者长期潜伏、反复窃取数据提供了绝对隐蔽条件。2.3 双向C2通信完整机制HollowGraph摒弃了传统木马的IP端口C2通信模式直接将M365日历改造为双向死信通信通道指令下发、数据回传全部依托日历事件及附件完成。get指令负责下行指令传输。攻击者通过Graph API在被劫持用户邮箱创建固定格式日历事件事件主题以Event ID: 开头自定义任务编号恶意指令经过加密后写入事件附件。终端木马定时发起Graph日历查询请求读取远期事件附件解密后执行文件检索、数据窃取、系统信息采集等操作。send指令负责上行数据外渗。木马在本地采集到企业机密文件、业务数据、账号信息后通过RSAAES-256-GCM混合加密算法加密数据规避明文传输检测。随后调用Graph API创建全新的2050年远期日历事件事件主题以Boss随机字符任务编号命名加密数据以File数字.txt格式作为附件挂载。攻击者随时登录劫持邮箱下载附件解密即可获取核心数据。2.4 攻击前置条件与落地路径该攻击无任何漏洞利用过程所有攻击行为均建立在合法权限滥用基础上攻击者只需获取目标租户有效身份权限即可落地。主流入侵路径分为三类。第一类是钓鱼劫持通过仿冒微软登录页面、企业办公通知邮件诱导员工输入M365账号密码或窃取用户OAuth登录令牌获取长期有效访问权限。第二类是恶意应用授权攻击者搭建仿冒办公应用诱导用户授予Calendars.ReadWrite日历读写权限依托授权API接口操控用户日历。第三类是服务主体劫持通过渗透内网获取企业自建应用、服务主体的客户端密钥直接对接Entra ID调用Graph接口批量操控租户内用户日历。三、HollowGraph攻击突破传统防御的核心原因目前90%以上的政企M365防御体系都无法拦截HollowGraph攻击核心问题不是设备能力不足而是防御维度存在根本性缺失。首先是流量完全合法化。所有通信流量均对接微软官方域名graph.microsoft.com属于云服务正常合规请求边界防火墙、下一代IPS、流量审计设备默认全部放行不存在任何可拦截的恶意IP、恶意域名、异常端口。传统流量检测手段完全失效。其次是监控维度大面积空白。企业现有安全策略重点监控邮件收发、邮件附件、OneDrive文件传输、账号异常登录几乎所有租户都未开启日历事件操作审计、日历附件读写监控。EDR、邮件安全网关、云应用防护设备均无对应检测规则恶意行为全程无告警。再者是无补丁可修复。传统网络攻击可通过系统补丁、软件更新封堵漏洞而HollowGraph攻击滥用的是微软官方开放的API权限属于企业权限管控不当导致的人为安全风险微软无对应修复补丁企业不主动加固则永久存在漏洞。最后是潜伏周期无限制。远期日历事件一旦创建永久保存在用户邮箱内不会自动删除。木马定时轮询执行任务无进程特征、无日志异常可在企业内网潜伏数月甚至数年持续窃取核心数据不被发现。四、M365租户HollowGraph风险全量排查实战脚本下面提供可直接复制落地的PowerShell排查脚本适配所有M365商业租户、教育租户支持批量扫描全租户用户自动筛选远期恶意日历事件、异常命名事件、可疑附件一键导出风险报表适配日常运维巡检与应急溯源场景。脚本核心筛查特征2045年以后远期日历事件、Event ID/Boss开头恶意主题、批量日历附件、非工作时段异常日历操作。# HollowGraph M365日历C2风险全租户排查脚本# 适用场景日常巡检、入侵溯源、风险自查# 运行权限全局管理员、Exchange管理员、Graph日历读取全局权限# 前置模块安装Install-Module-Name ExchangeOnlineManagement,Microsoft.Graph.Calendar,Microsoft.Graph.AuditLog-Force-AllowClobber# 初始化日志与风险数组$riskResult ()$scanTimeGet-Date-Formatyyyy-MM-dd HH:mm:ss# 设定风险时间阈值2045年之后所有日历事件定义为高危可疑$dangerTimeGet-Date2045-01-01 00:00:00# 连接M365服务Connect-ExchangeOnline-ShowBanner:$falseConnect-MgGraph-ScopesCalendars.Read.All,AuditLog.Read.All,User.Read.All-Force# 获取租户所有邮箱用户$allMailUsersGet-EXORecipient-RecipientTypeDetails UserMailbox-ResultSize Unlimited# 逐用户遍历扫描日历事件foreach($userin$allMailUsers){$upn$user.UserPrincipalNameWrite-Host【正在扫描】用户$upn-ForegroundColor Cyantry{$userEventsGet-MgUserEvent-UserId$upn-All:$true-ErrorAction Stopforeach($eventin$userEvents){# 解析日历事件时间$eventStartTime[DateTime]$event.Start.DateTime# 匹配HollowGraph恶意特征$isFutureRisk$eventStartTime-gt$dangerTime$isMalSubject$event.Subject-match^Event ID:|^Boss.*ID$hasAttach$event.Attachments.Count-gt0# 命中风险特征则录入结果if($isFutureRisk-or$isMalSubject-or$hasAttach){$riskObj[PSCustomObject]{扫描时间 $scanTime用户UPN $upn日历事件主题 $event.Subject 事件开始时间 $eventStartTime.ToString(yyyy-MM-dd HH:mm:ss)附件数量 $event.Attachments.Count 事件创建时间 $event.CreatedDateTime 事件唯一ID $event.Id 风险判定 if($isFutureRisk){超远期日历事件}elseif($isMalSubject){恶意特征主题}else{可疑日历附件}}$riskResult$riskObj}}}catch{Write-Host【扫描失败】用户$upn错误信息$_-ForegroundColor Redcontinue}}# 导出扫描报表$savePath.\M365_HollowGraph风险扫描报表_$(Get-Date-Format yyyyMMdd).csv$riskResult|Export-Csv-Path$savePath-NoTypeInformation-Encoding UTF8Write-Host扫描完成风险报表已导出至$savePath-ForegroundColor Green# 断开服务连接Disconnect-MgGraph-Confirm:$falseDisconnect-ExchangeOnline-Confirm:$false4.1 脚本落地使用规范运行环境建议使用Windows Server运维服务器或本地合规运维终端禁止在个人办公电脑运行全局权限脚本避免权限泄露。首次运行需手动授权Graph API读取权限后续可配置任务计划程序实现每周自动扫描。报表重点核查维度2050年固定时段事件、无合理业务场景的远期事件、主题含特殊特征且携带附件的日历记录、非工作时段批量创建的日历事件。五、Defender for Cloud Apps XDR专属检测规则排查脚本偏向事后溯源企业常态化防御需要依托微软原生安全设备实现实时告警、自动拦截。下面提供可直接复制部署的检测规则与Kusto检索语句适配M365 Defender全系产品。5.1 行为基线检测规则直接部署在Defender for Cloud Apps中新建自定义云应用策略启用以下5条核心检测逻辑全部适配HollowGraph攻击行为特征。1. 账号在00:00-06:00非工作时段批量调用Graph日历创建接口1小时内创建3条及以上远期日历事件。2. 所有创建时间晚于2045年的日历事件无论主题、用途全部触发可疑告警。3. 日历事件挂载txt格式附件且附件无明文业务内容、加密特征明显。4. 未备案第三方应用、未知服务主体申请并使用Calendars.ReadWrite全域读写权限。5. 非Outlook、非Teams、非浏览器进程主动发起graph.microsoft.com日历API请求。5.2 Kusto实时检索语句SIEM/XDR通用该语句可直接粘贴至Defender XDR高级检索、Azure SIEM、自建M365日志分析平台实时监控恶意日历操作行为。// HollowGraph M365日历C2行为实时检索 AuditLogs | where OperationName in (Add event to calendar,Update calendar event,Add attachment to event,Delete calendar event) // 筛选2045年后远期风险事件 | extend EventStartTime parse_datetime(AdditionalProperties.newValue.startDateTime) | extend EventSubject AdditionalProperties.newValue.subject | extend AttachCount array_length(AdditionalProperties.newValue.attachments) | where EventStartTime datetime(2045-01-01) or EventSubject has_any (Event ID:,Boss) or AttachCount 0 // 剔除正常办公设备IP保留异常外联 | where ClientIP !has 内网网段 // 整理核心告警字段 | project 告警时间TimeGenerated, 操作用户UserPrincipalName, 操作类型OperationName, 日历主题EventSubject, 事件时间EventStartTime, 附件数量AttachCount, 访问IPClientIP, 应用名称AppDisplayName | sort by 告警时间 desc六、企业M365租户分层加固配置清单可直接落地HollowGraph攻击的核心突破口是权限滥用与监控缺失不存在一键修复的补丁只能通过分层管控、全域监控、权限收敛彻底封堵风险。以下加固方案按优先级排序适配大中小各类政企租户。6.1 身份权限层源头阻断API滥用首先完成OAuth应用权限收敛这是最核心的加固动作。登录Entra ID控制台进入应用权限管理界面批量回收所有未知第三方应用的Calendars.ReadWrite、Calendars.ReadWrite.All权限。仅保留企业官方办公、审批、协同类合规应用的日历权限且严格遵循最小权限原则禁止开放全域读写权限。每周固定开展应用审计清理闲置、未知、异常注册的应用与服务主体杜绝陌生应用持有高权限API调用能力。其次强化身份认证体系全租户强制开启MFA多因素认证禁用短信、语音验证码等易被劫持的认证方式统一使用微软验证器离线认证。配置条件访问策略拦截境外IP、匿名代理IP、未加入企业设备基线的终端访问Graph API与M365核心服务。针对管理员账号实施特权隔离全局管理员、Exchange管理员、安全管理员仅在特权工作站登录禁止日常办公终端使用高权限账号防止凭证批量泄露。6.2 日志监控层补齐日历安全盲区绝大多数企业默认关闭日历操作审计日志必须手动开启全域审计。在M365合规中心启用日历事件创建、修改、删除、附件上传、API调用全量日志采集日志留存时长设置为12个月及以上满足溯源与合规要求。将M365审计日志全量对接企业SIEM、XDR平台配置远期日历事件、批量日历操作、异常附件上传的自动告警规则触发告警后自动锁定涉事用户账号阻断持续渗透。配置服务器定时任务每周自动执行前文排查脚本生成风险巡检报表形成常态化自查机制。6.3 终端防护层拦截恶意木马行为在EDR平台新增进程行为规则拦截非官方Office进程、未知.NET进程发起的Graph日历API请求。重点监控.NET NativeAOT编译的未知DLL文件拦截其加载运行、外网外联行为。建立终端办公基线正常用户仅在工作时段操作日历对凌晨、深夜的批量日历读写行为设置高危告警及时发现木马定时轮询行为。6.4 应急处置层入侵后标准化响应流程企业发现HollowGraph风险痕迹后严格按照遏制、清除、恢复、加固四步流程处置避免处置不当导致二次渗透。第一时间遏制风险立即吊销涉事账号所有OAuth令牌、刷新账号密码、临时禁用账号M365访问权限阻断攻击者后续操控通道。全面清理恶意痕迹批量删除租户内所有2045年后的可疑日历事件彻底清理挂载的加密附件在终端查杀恶意DLL程序溯源钓鱼邮件、恶意授权等入侵入口。安全核验恢复核查涉事账号所有权限、第三方应用授权记录清理可疑服务主体与应用确认无残留风险后恢复账号正常使用。最后迭代加固策略优化Graph API监控规则、收紧OAuth权限策略组织全员开展云账号安全、钓鱼识别专项培训从源头降低入侵风险。七、威胁迭代趋势与企业防御误区总结当下云安全攻击已经彻底脱离传统漏洞利用、恶意流量外联的固有模式SaaS服务原生功能滥用成为高级攻击者的首选手段。HollowGraph的出现不是个例而是未来云间谍攻击的主流趋势。很多企业存在严重的防御误区认为部署了邮件网关、EDR、防火墙就可以抵御绝大多数威胁完全忽视M365精细化权限管控、细分日志审计的重要性。SaaS服务的合法性正在成为攻击者最好的隐身外衣。传统边界防御正在逐步失效云原生威胁的对抗核心不再是拦截恶意流量而是管控合法权限、识别异常行为、补齐监控盲区。企业必须跳出传统安全思维针对M365各类细分业务日历、联系人、任务、网盘建立专属监控体系才能应对持续迭代的高级云威胁。互动讨论1. 你的企业M365租户是否开启了日历事件操作审计日志日常运维中是否忽略过日历相关安全风险2. 你在运维工作中是否遇到过依托Office原生功能、合法云API实现的隐蔽攻击欢迎在评论区分享实战经验。