Azure渗透测试实战:从信息收集到数据外泄的完整工具链指南 1. 项目概述为什么需要一份Azure渗透测试工具清单如果你是一名安全工程师或者红队成员最近几年肯定没少和云环境打交道。微软的Azure作为全球第二大公有云承载了海量的企业应用和数据。但和传统的本地数据中心不同云环境的攻击面发生了根本性的变化。你不能再只盯着那几台物理服务器和防火墙规则了。在Azure里一个配置不当的存储账户、一个权限过大的服务主体或者一个公开的管理接口都可能成为整个租户沦陷的入口。我见过太多案例客户以为上了云就万事大吉结果因为一个简单的错误配置导致核心数据被拖库。这份清单的初衷就是把我自己和团队在多年Azure渗透测试实战中那些真正好用、能打、能解决问题的工具整理出来。它不是一份简单的软件列表而是一条从“外部侦察”到“权限提升”再到“横向移动和数据窃取”的完整攻击链工具指南。你会发现很多工具并非为Azure“而生”但在云渗透的特定场景下它们被赋予了新的用法和组合。从基础的枚举信息收集到利用特定服务漏洞进行突破再到在复杂的Azure AD和订阅资源网络中持续渗透每一个环节都有对应的“利器”。对于刚接触云安全测试的朋友它能帮你快速建立武器库对于有经验的老手或许也能发现一两个之前忽略的“神器”。2. 核心思路Azure渗透测试的阶段性武器配置在开始罗列工具之前我们必须先理解Azure渗透测试的典型流程。这不同于传统的网络渗透其核心围绕两个关键实体Azure AD身份目录和Azure 订阅资源容器。我们的攻击路径往往是先通过某种方式如钓鱼、泄露的凭证、公开的API获得一个初始立足点一个用户或服务主体的凭证然后在这个身份所在的Azure AD租户和关联的订阅中进行横向移动和权限提升。因此我的工具清单也遵循这个逻辑分为几个关键阶段信息收集与枚举阶段这个阶段的目标是“看清战场”。我们可能只有一个邮箱、一个用户名或者一个偶然发现的存储账户URL。我们需要用工具摸清租户结构、用户、组、应用程序、服务主体、订阅、资源等信息绘制出攻击地图。权限提升与漏洞利用阶段在枚举的基础上寻找配置错误、脆弱策略或已知漏洞。目标是将一个低权限身份如普通用户提升为高权限身份如全局管理员、订阅所有者或者从一个受限的服务主体突破到更广的资源访问权限。横向移动与持久化阶段获得高权限后在订阅内的虚拟机、存储、数据库等资源之间跳转窃取数据并部署后门、创建隐蔽的持久化通道确保访问权限不会轻易丢失。数据外泄与影响证明阶段最终阶段安全地导出敏感数据如密钥、存储文件、数据库内容并生成清晰的证据报告。下面我将按照这四个阶段结合实战场景逐一拆解每个阶段的核心工具、使用方法和避坑指南。3. 阶段一信息收集与枚举工具详解进入一个陌生的Azure环境两眼一抹黑是最危险的。枚举工具就是你的“侦察卫星”。这个阶段追求的是静默、全面、自动化。3.1 AzureAD信息枚举AzureHound与ROADtoolsAzureHound是BloodHound针对Azure AD的收集器堪称“Azure版BloodHound”。它通过调用Microsoft Graph API收集用户、组、服务主体、设备、角色分配、条件访问策略等所有对象及其之间的关系并生成可以导入Neo4j数据库的数据文件。实战用法首先你需要一个有效的访问令牌。这可以通过多种方式获得例如使用ROADrecon后文会提到导入一个已认证的会话或者使用MSOLSpray对密码进行喷洒获得一个有效账户。获得令牌后运行命令非常简单azurehound -u username -p password -t tenant-id list或者使用已经获取的刷新令牌azurehound --refresh-token refresh_token list它会输出一个.json文件用BloodHound GUI导入后你就能看到清晰的攻击路径图比如“哪些用户可以重置高危用户的密码”、“哪些服务主体拥有订阅的Owner角色”。核心价值它最大的优势是将复杂的Azure AD权限关系可视化。你不需要手动去分析成千上万的用户和角色分配关系AzureHound会自动计算出最短的提权路径。例如它可能揭示一个看似无害的“帮助台”组其成员拥有给特定服务主体添加凭据的权限而这个服务主体又对某个关键存储账户有写入权限。注意事项API权限AzureHound需要较高的API权限如User.Read.All,Group.Read.All,Directory.Read.All等。如果使用的账户权限不足收集的数据会不完整。通常需要全局管理员或特权角色管理员身份才能收集全量数据。流量特征它的API调用模式比较有规律容易被防守方的云应用安全代理CASB或Azure AD Identity Protection检测到。在真正的红队行动中可能需要结合令牌轮换、低速率请求等方式降低噪音。数据量大型企业的Azure AD对象可能多达数十万收集过程耗时较长生成的.json文件也很大。ROADtools是一个由微软自家工程师同时也是顶级研究员开发的Azure AD评估框架。它的ROADrecon组件是一个图形化界面工具用于认证、枚举和导出数据。与AzureHound的区别ROADrecon更偏向于交互式、手动的深度枚举。它提供了非常好的数据浏览和过滤界面你可以像在资源管理器中一样逐层点击查看用户详情、组成员关系、应用程序的权限清单等。AzureHound是自动化的“路径发现器”而ROADrecon是手动的“数据检查镜”。实战场景当你通过钓鱼获得一个中级管理员的会话后可以用ROADrecon快速登录然后重点查看该用户所属的所有角色和组。该用户创建或拥有的服务主体Service Principals。检查有没有配置了高风险OAuth权限的应用程序例如Mail.ReadWrite,Files.ReadWrite.All。技巧ROADrecon的“导出”功能很棒可以将所有数据导出为SQLite数据库方便你用SQL进行自定义的复杂查询这是纯GUI工具做不到的。3.2 订阅与资源枚举MicroBurst与Azucar在摸清Azure AD的脉络后下一步就是看这个身份能访问哪些具体的Azure订阅和资源虚拟机、存储账户、密钥保管库等。这里需要切换“视角”从Graph API转向Azure Resource Manager API。MicroBurst是一个功能强大的PowerShell脚本框架专门用于Azure订阅的渗透测试和信息收集。它不需要预先安装复杂的模块下载即用。核心功能Invoke-EnumerateAzureSubscriptions列出当前凭证可访问的所有订阅。Invoke-EnumerateAzureResources枚举指定订阅中的所有资源VM, Storage, SQL DB, Key Vault等并识别公开暴露的资源如公网IP的VM配置了“公共访问”的存储容器。Invoke-EnumerateAzurePasswords一个高风险功能尝试从自动化脚本如ARM模板、虚拟机自定义脚本扩展、逻辑应用等地方提取硬编码的密码或密钥。Get-AzureDomainInfo如果目标订阅中托管了自定义域关联了Azure AD DS或普通域此脚本可以尝试收集域信息。实战案例假设我们通过一个服务主体的证书获得了访问权限。首先用Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $tenantId连接然后运行Invoke-EnumerateAzureSubscriptions发现我们能访问3个订阅。针对其中一个生产订阅运行Invoke-EnumerateAzureResources发现列出了50多个资源。快速浏览输出发现有2台Linux虚拟机配置了公网IP并且SSH端口22对全网开放0.0.0.0/0。这是一个明显的攻击入口。有一个存储账户名为prodbackups其容器策略被设置为Blob匿名读取。这意味着任何人都可以直接通过URL下载里面的备份文件可能包含数据库转储或配置文件。有一个密钥保管库Key Vault但当前身份没有读取权限需要后续提权。避坑指南MicroBurst的一些功能特别是密码枚举会触发大量的日志记录在已部署高级威胁防护的环境下非常显眼。它的资源枚举依赖于Get-AzResource这个Az PowerShell模块的cmdlet如果订阅中资源类型特别多如成千上万个存储账户运行速度会较慢。可以考虑结合REST API自己编写更高效的枚举脚本。Azucar是一个开源的Azure安全审计工具用PowerShell编写。它更像一个“安全检查清单”自动化执行器。与MicroBurst的对比MicroBurst偏向攻击性枚举找攻击点Azucar更偏向安全配置审计找配置错误。它会按照一系列预定义的安全规则基于CIS基准、Azure安全中心建议等检查订阅中的配置风险例如存储账户是否启用加密、网络安全组是否有过于宽松的规则、SQL数据库是否启用审计等。红队价值为什么红队要用审计工具因为防守方遗漏的配置错误就是红队最好的突破口。Azucar能帮你快速定位那些“显而易见的”但防守方可能忽略的弱点。例如它可能会标记出一个允许从任意IP地址0.0.0.0/0进行管理访问端口3389/22的虚拟机这比你一台台去扫描端口要高效得多。使用建议将Azucar作为“第二轮”信息收集工具。在第一轮用MicroBurst摸清资源列表后针对关键订阅运行Azucar生成一份详细的风险报告从中筛选出最可能被利用的配置项。4. 阶段二权限提升与漏洞利用工具实战枚举之后我们手头可能只有几个低权限账户或服务主体。这个阶段的目标是“撬开更大的门”。4.1 针对Azure AD的提权MSOLSpray与AzureADLateralMovementMSOLSpray是一个密码喷洒工具专门针对Azure AD的认证端点。密码喷洒是一种针对大量用户名尝试少数几个常用密码的攻击旨在避免触发账户锁定策略。原理它模拟正常的用户登录行为向Azure AD的各类认证端点如/common/oauth2/token/{tenant}/oauth2/token发送请求。相比于传统的对本地Active Directory的喷洒Azure AD的响应速率限制和智能锁定策略有所不同需要工具进行适配。实战配置python3 msolspray.py -u users.txt -p Spring2024! --url https://login.microsoftonline.com/common/oauth2/token --output valid_creds.txt-u: 用户名列表文件格式可以是usercompany.com或UPN。-p: 要尝试的密码。也可以使用-P指定密码文件。--url: 认证端点。使用/common端点可以同时测试多个租户如果用户名格式正确但更隐蔽的方式是针对特定租户的端点。--output: 将有效的凭证对输出到文件。关键技巧代理与延迟务必使用代理池并在请求之间添加随机延迟--delay和--jitter参数以规避基于IP的速率限制和风控。识别锁定密切观察返回信息。如果收到AADSTS50126错误无效用户名或密码说明用户名存在但密码错误如果收到AADSTS50053或50055则表明账户被锁定或密码过期这本身也是有价值的信息说明这个账户是活跃的。组合其他信息结合从领英、GitHub等渠道收集的员工邮箱列表可以极大提高喷洒的成功率。AzureADLateralMovement这不是一个单一工具而是一系列技术和工具的集合核心思想是利用Azure AD中对象之间的权限关系进行横向移动。经典案例——滥用Application Administrator角色我们通过喷洒获得了一个用户userAcontoso.com的凭证。通过AzureHound发现userA是“Application Administrators”角色的成员。“Application Administrators”角色的权限包括管理所有应用程序的凭据Application.ReadWrite.All和AppRoleAssignment.ReadWrite.All。我们可以利用这个权限为一个已存在的、拥有高权限的Enterprise Application服务主体添加新的客户端密钥Client Secret或证书。具体操作可以使用PowerZure或直接调用Microsoft Graph API的addPassword方法。成功后我们就获得了这个高权限服务主体的身份可以以其身份执行操作实现权限提升。工具辅助PowerZure是一个强大的PowerShell框架它封装了许多此类攻击向量。例如其Get-AzurePasswords函数会尝试列出所有可读的Key Vault密码Set-AzureBackdoor函数可以尝试在虚拟机上创建后门账户。在提权场景下你需要仔细研究当前身份通过Azure AD角色或资源RBAC所拥有的权限然后使用PowerZure中对应的模块去尝试利用。4.2 针对Azure资源的漏洞利用Stormspotter与BlobHunter当攻击面从目录服务扩展到具体的计算、存储资源时我们需要新的工具。Stormspotter它将自己定义为“Azure Red Team的防御工具”这很有趣。它的核心是一个前端界面用于可视化Azure资源之间的关系以及它们的网络安全组规则。但正因为它能“看到”攻击路径所以对红队而言它是一个绝佳的“攻击路径规划器”。工作流程使用配套的收集器azucar与前文的Azucar同名但不同工具容易混淆或AzureHound收集数据。将数据导入Stormspotter的后端。在前端界面你可以看到所有资源VM、子网、负载均衡器的拓扑图。你可以模拟攻击选择一个入口点如一台有公网IP的VM然后查看根据现有的NSG规则可以从这台VM访问到哪些其他内部资源“爆炸半径”。红队应用假设我们通过漏洞获得了一台位于“DMZ”子网中Web服务器的权限。在传统网络里DMZ到内网的访问是严格限制的。但在云中规则可能更复杂。通过Stormspotter我们可以快速看到这台Web服务器所在子网的NSG是否允许它访问到后端数据库子网的特定端口如1433它是否与某个管理跳板机处于同一个虚拟网络对等互连中可视化结果能让我们瞬间找到下一步横向移动的最佳目标而不是盲目地扫描端口。BlobHunter是一个专注于寻找公开暴露的Azure Blob存储容器的工具。Azure Blob存储的误配置是导致数据泄露的最常见原因之一。原理它通过生成大量的、可能的存储账户名和容器名组合然后尝试匿名访问HTTP HEAD或GET请求。存储账户名具有全局唯一性通常与公司名、产品名、环境名如contosoprodcompanybackup相关。容器名则常用web,logs,backup,data等。使用方法python3 blobhunter.py -c wordlists/container-names.txt -w wordlists/account-words.txt -t 50 -o results.json-c: 容器名字典。-w: 用于生成存储账户名的关键词字典它会自动组合成keywordsuffix的形式如prodstorage,prodblob。-t: 线程数。-o: 输出结果。实战心得成功率这种枚举的成功率取决于字典的质量。一个好的做法是从目标的公开信息中提取关键词公司官网、招聘信息、GitHub代码库中的配置片段、甚至SSL证书中的域名。不仅仅是“公开”BlobHunter主要找的是“匿名公共读取”。但有时容器是“私有”的却配置了共享访问签名链接这些链接可能泄露在GitHub、论坛或JS文件里。因此配合GitHub Dorks搜索*.blob.core.windows.net或TruffleHog扫描Git历史中的密钥使用效果更佳。影响巨大一旦找到一个公开的、包含敏感信息的容器如客户数据库备份、源代码、配置文件这往往可以直接作为渗透测试的关键成果因为它的业务影响非常直观。5. 阶段三横向移动与持久化技术工具链获得一个立足点后如何在云环境中隐蔽地移动并留下后门是考验红队功力的地方。5.1 在订阅内横向移动PowerZure与Azure C2框架PowerZure如前所述它是一个功能丰富的攻击框架。在横向移动阶段它的价值更加凸显。执行命令如果你获得了虚拟机的贡献者权限可以使用Invoke-AzureRmVMRunCommand或Invoke-AzureVMCommand取决于Azure模块版本在虚拟机上远程执行命令。PowerZure封装了这些功能。# 使用PowerZure在目标VM上执行命令 Invoke-PowerZure -Action EXECUTE -Username user -Password pass -Tenant tenant -SubscriptionId sub-id -ResourceGroup rg -VM vm-name -Command whoami /all这相当于在云环境中获得了“远程命令执行”能力是横向移动的基石。获取虚拟机磁盘有时执行命令会被安全软件拦截。另一种更底层的方法是直接下载虚拟机的操作系统磁盘VHD文件挂载到我们控制的一台“分析机”上然后离线提取密码哈希、配置文件等。PowerZure的Get-AzureDisk和Copy-AzureDisk相关函数可以辅助完成这个复杂过程。操作Runbook如果目标订阅使用了Azure Automation并且当前身份有权限可以创建或修改一个PowerShell Runbook在其中嵌入反向Shell或凭证收集代码然后触发执行。这是一种非常隐蔽的横向移动方式因为流量走的是Azure的内部通道。Azure C2框架如Cobalt Strike的Azure C2功能或专门为云设计的Stratus Red Team中的技术。其核心思想是利用云服务本身作为命令与控制的中转站规避基于IP和域名的检测。常见技术Azure Storage Queue C2将命令编码后放入一个Azure存储队列受控主机定期轮询该队列获取指令将结果放入另一个队列。所有通信都通过合法的core.windows.net域名流量看起来是正常的Azure存储访问。Azure Functions/Logic Apps C2将恶意代码部署到无服务器函数中受控主机通过HTTP触发该函数来获取指令。防守方需要仔细审查函数代码才能发现异常而通常他们只监控函数的调用日志。Service Bus Topics C2与存储队列类似但使用Service Bus的发布/订阅模式更适合控制大量主机。工具实现目前没有完全开源的“一键式”Azure C2框架但相关技术已在红队社区广泛讨论。实现它需要你对Azure这些服务的SDK和API有深入了解。一个简单的PoC可以从使用Azure PowerShell或CLI操作存储队列开始。5.2 持久化机制部署后门用户、逻辑应用与托管标识滥用持久化的目标是在失去初始访问权限后仍能重新获得访问。在Azure中除了传统的虚拟机后门更有趣的是在云管理平面留下的后门。后门用户/服务主体创建隐藏的全局管理员使用New-AzureADUser创建一个看起来像系统账户的用户如svc-azure-sync并赋予其全局管理员角色。然后通过条件访问策略或其他方式尽可能隐藏该用户的登录日志这很难但可以尝试设置该用户从特定IP地址登录时不触发MFA。创建高权限服务主体创建一个新的Enterprise Application服务主体并授予其Directory.ReadWrite.All或某个订阅的Owner权限。然后为其配置一个长达数年的证书凭据。服务主体的认证不涉及交互式登录更隐蔽。滥用逻辑应用进行持久化Azure Logic App可以定期运行。创建一个Logic App其工作流是每隔一段时间去读取一个公开的GitHub Gist或一个Azure存储Blob中的内容作为指令然后根据指令执行操作例如调用Graph API创建一个新的管理员用户或者向一个外部Webhook发送当前所有用户列表。攻击者只需要更新Gist或Blob中的指令就能控制整个持久化流程。防守方很难区分这是一个恶意的Logic App还是一个正常的自动化业务流程。利用托管标识Managed Identity这是Azure中一种让资源如VM、函数应用自动获取Azure AD令牌的机制。如果一个被我们攻陷的虚拟机开启了系统分配的托管标识并且这个标识被赋予了某些权限我们就可以直接从虚拟机内部获取访问令牌而无需在磁盘上存储任何凭证。# 在启用了系统分配托管标识的Azure VM内部 curl http://169.254.169.254/metadata/identity/oauth2/token?api-version2018-02-01resourcehttps://management.azure.com/ -H Metadata:true获取到的令牌就可以用来调用Azure Resource Manager API。如果托管标识权限很大这就成了一个非常强大的持久化后门。更隐蔽的是攻击者可以尝试给一个资源如一个不常用的存储账户分配一个用户分配的托管标识并赋予高权限然后将该标识“隐藏”起来。6. 阶段四数据外泄与清理痕迹最后阶段我们需要安全地取出“战利品”并尽量抹除痕迹。6.1 数据提取技术AzCopy与Storage Explorer的“合法”使用当发现一个存储账户中有敏感数据时直接使用攻击工具下载可能会触发异常流量告警。此时使用微软官方的、合法的工具是更好的选择。AzCopy这是一个高性能的命令行工具专用于向/从Azure存储复制数据。它的流量特征与正常业务运维完全一致。# 使用SAS令牌从其他地方获取匿名下载整个容器 azcopy copy https://target.blob.core.windows.net/secretcontainer/*?sv2022-11-02ss...srt...sprl /local/path/ --recursive优势速度极快支持断点续传可配置并发度。在业务时间窗口内进行下载几乎无法被区分。关键点你需要一个有效的SAS令牌或账户密钥。这些可能通过之前的提权操作获得如从Key Vault中读取从虚拟机元数据服务中获取附加到VM的存储账户密钥或通过应用程序权限访问存储。Azure Storage Explorer图形化工具在需要交互式浏览和选择特定文件时非常有用。你可以使用获得的令牌或密钥直接添加到Storage Explorer中然后像使用资源管理器一样拖拽文件。它的所有操作也是通过官方的Azure Storage REST API完成流量是“清白”的。数据筛选在下载前尽量先通过工具如PowerZure的某些功能或自己写脚本调用存储API列出文件列表只针对敏感文件如包含backup,sql,dump,config,.p12,.pfx等关键词的文件进行下载以减少流量和时间。6.2 日志清理与反溯源挑战在Azure中彻底清理操作日志几乎是一项不可能完成的任务但这不意味着我们什么都不做。Azure活动日志Activity Log记录订阅级别的资源管理操作创建VM、修改NSG等。这些日志默认存储在Azure平台内用户无法删除。但你可以混淆视听在测试尾声发起大量无关的、低风险的“噪音”操作如反复读取某个公开的Blob创建又删除一些低成本的资源组将真正的恶意操作淹没在大量日志条目中增加防守方的分析难度。禁用诊断设置如果活动日志被配置为发送到Log Analytics工作区或存储账户并且你有权限可以尝试删除或修改这些诊断设置阻止后续日志的传输。但平台自身的日志是无法被触及的。Azure AD审核日志记录目录服务中的更改用户登录、角色分配更改等。同样这些日志由微软管理无法删除。核心策略因此在Azure渗透中反溯源的核心不在于删除日志而在于避免在日志中留下独一无二的、可关联到你的攻击链的标识。使用云原生资源尽量使用目标云环境内的资源作为跳板如攻陷的VM其IP地址是Azure数据中心的IP与正常业务流量无异。避免使用个人工具特征自定义工具的用户代理User-Agent字符串很容易被标记。尽量使用官方的Azure PowerShell模块、CLI或SDK发起API调用或者模仿目标环境中已有的合法管理工具的特征。时间窗口选择在目标系统的业务活跃期进行操作你的操作日志会与其他管理员的合法操作交织在一起。7. 工具链整合与自动化实战脚本单独使用每个工具是基础但真正的效率来源于将它们串联起来形成自动化的工作流。这里我分享一个简单的、基于Shell脚本的自动化侦察思路。假设我们已经通过钓鱼获得了一个普通用户的凭证usercompany.com:Password123。我们可以编写一个脚本自动执行以下步骤#!/bin/bash # 这是一个概念性脚本实际使用需要处理错误、令牌管理、参数传递等复杂问题。 USER$1 PASS$2 TENANT$3 echo [*] 阶段1: Azure AD枚举 # 使用ROADrecon或直接调用Graph API获取基础信息 python3 roadrecon.py auth -u $USER -p $PASS --tenant $TENANT python3 roadrecon.py gather # 导出数据供后续分析 python3 roadrecon.py export -o azuread_data.db echo [*] 阶段2: 检查Azure AD角色并尝试提权 # 分析导出的数据寻找用户所在的特权角色 # 这里可以集成一个自定义的Python脚本查询sqlite数据库 python3 analyze_roles.py azuread_data.db $USER echo [*] 阶段3: 枚举Azure订阅和资源 # 使用MicroBurst假设凭证已有订阅访问权限 Import-Module .\MicroBurst.psm1 Connect-AzAccount -Credential (New-Object System.Management.Automation.PSCredential($USER, (ConvertTo-SecureString $PASS -AsPlainText -Force))) -Tenant $TENANT $subs Invoke-EnumerateAzureSubscriptions foreach ($sub in $subs) { Set-AzContext -SubscriptionId $sub.Id Invoke-EnumerateAzureResources -SubscriptionId $sub.Id -Verbose | Export-Csv -Path resources_$($sub.Name).csv -NoTypeInformation # 针对每个订阅运行快速安全检查 .\Azucar.ps1 -Export Excel -OutputPath audit_$($sub.Name).xlsx } echo [*] 阶段4: 扫描公开存储 # 使用BlobHunter基于公司名称生成字典 python3 blobhunter.py -c common_containers.txt -w company_keywords.txt -t 30 -o public_blobs.json echo [*] 侦察完成。请分析以下文件 echo - Azure AD关系数据: azuread_data.db echo - 各订阅资源清单: resources_*.csv echo - 配置审计报告: audit_*.xlsx echo - 公开Blob列表: public_blobs.json这个脚本将四个阶段的任务串联起来从获得凭证开始自动完成从目录到资源层的初步侦察并输出结构化的结果供人工深入分析。在实际使用中你需要为每个工具编写更健壮的参数处理和错误处理逻辑并考虑令牌过期后的自动刷新机制。8. 防御视角与常见检测规则知己知彼了解防守方如何检测这些攻击能帮助你更好地规避。作为渗透测试者在报告中提供有价值的检测建议同样重要。针对枚举活动的检测Graph API调用频率异常短时间内由单个用户/应用发起的大量List、Get操作特别是/users,/groups,/servicePrincipals。Azure AD审核日志中的OperationName为List users等。非常用工具的用户代理监控来自非官方Azure Portal、非公司标准管理设备或已知攻击工具如ROADrecon,AzureHound的部分默认User-Agent的API请求。权限提升尝试频繁的Role assignment创建/删除事件特别是将高权限角色如Global Administrator,Privileged Role Administrator分配给新创建或非常用的服务主体。针对横向移动的检测VM Run Command的异常使用在非运维时间由非管理员账户发起的RunCommand操作特别是执行whoami,net user,powershell -enc等可疑命令。存储账户的异常访问模式从一个新地区、新IP地址访问存储账户特别是进行大量列举List Blobs或下载操作。或者一个通常只被内部VM访问的存储账户突然被外部IP访问。Key Vault的密集读取短时间内对Key Vault中多个密码、证书的Get操作。针对持久化的检测新服务主体的高权限授予新创建的应用程序/服务主体立即被授予订阅的Owner或Contributor角色。逻辑应用/函数的可疑代码在Logic App或Function App的代码版本历史中出现可疑的PowerShell或Python代码片段如调用Invoke-WebRequest到外部域名或使用Microsoft.Graph模块进行用户枚举。托管标识的权限变更为虚拟机或应用服务分配的托管标识其角色分配发生异常变更被添加了过高权限。我个人的体会是在云渗透中“动作要快痕迹要轻”。自动化脚本能帮你快速完成初期的“广撒网”式侦察但一旦发现高价值目标后续的深入利用和横向移动必须转为手动、低速、模拟正常行为的模式。每一次API调用前都要问自己这个操作在正常的运维中会发生吗它的频率和模式是否合理永远不要低估一个配置了Sentinel和成熟告警规则的云SOC团队的能力。你的成功往往不在于工具多么先进而在于你对云环境本身的理解是否比防守方更深入一层。