Skip to content

Latest commit

 

History

History
707 lines (455 loc) · 38.9 KB

File metadata and controls

707 lines (455 loc) · 38.9 KB

第十二章:在 Azure 中使用 PowerShell

在本章中,我们深入探讨了如何利用 PowerShell 在 Azure 环境中执行全面的渗透测试。PowerShell 是一种多功能的脚本语言,它使渗透测试人员能够分析 Azure 复杂的生态系统,包括身份管理、基于角色的访问控制、数据存储、SQL、Web 服务等。通过收集 Azure 资源的详细信息并自动化复杂的分析,本章展示了 PowerShell 如何成为识别漏洞、评估安全配置并加强 Azure 防御潜在威胁的关键助手。充分利用 PowerShell 的潜力,提高 Azure 渗透测试的效率和效果,确保强大且韧性的云安全态势。

本章将涵盖以下主要主题:

  • Azure 简介

  • Azure 架构与治理

  • 访问 Azure

  • Azure 中的网络

  • 身份管理和基于角色的访问控制

  • Azure 数据存储与权限

  • Azure 与 SQL

  • Azure 与密钥库

  • Azure 与虚拟机

  • Azure 与 Web 服务

Azure 简介

Azure是微软的云计算平台。Azure 围绕身份管理和基于角色的访问控制的概念构建。在 Azure 中,我们可以控制各种类型的资源。Azure 的核心是Azure Active Directory,它用于执行身份管理。Azure 测试可以分为以下几部分:

  • 访问 Azure 与侦察:涉及如何访问 Azure 环境并开始分析 Azure 租户

  • 调查网络和 DNS:这涉及到对 Azure 基础设施的分析,识别已部署的系统以及网络基础设施的配置方式

  • 身份管理与基于角色的访问控制:这是关于分析和识别 Azure 租户中部署的身份管理弱点

  • 检查存储:重点分析和识别 Azure 租户中使用的存储结构的脆弱性

  • 虚拟机:重点分析和识别 Azure 租户中使用的虚拟机的脆弱性

  • Azure 与 SQL:关注于识别和分析 Azure 租户中使用的 SQL 系统类型

  • Azure Key Vaults:分析用于存储 Azure 密码的密钥库的配置情况

Azure 架构与治理

Azure 架构涵盖了一套全面的云计算服务、构建模块和资源,旨在促进各种应用程序和服务的开发、部署和管理。Microsoft Azure 提供了一个灵活且可扩展的平台,支持从简单的 Web 应用到复杂的企业解决方案等各种工作负载。以下是 Azure 架构中一些关键组件的概述:

  • 全球数据中心分布:Azure 运营着一个庞大的数据中心网络,这些数据中心在全球战略性地分布。全球的分布确保了低延迟访问服务并为应用程序提供高可用性。

  • 区域:Azure 被划分为多个地理区域,每个区域包含多个数据中心。这些区域彼此隔离,以提供冗余并使用户能够将资源部署到靠近目标受众的位置。

  • 可用性区域:Azure 在区域内提供可用性区域,以物理隔离的数据中心形式存在,具有独立的电力、冷却和网络。跨可用性区域部署资源可以提高韧性和容错能力。

  • 资源组:资源组是逻辑容器,用于组织和管理 Azure 中的相关资源。将资源分组可以简化管理、监控和策略应用。

  • 虚拟网络:Azure 虚拟网络允许用户在 Azure 云中创建私有、隔离的网络。它们便于连接虚拟机、数据库等资源,同时使用户能够控制网络配置。

  • 虚拟机VMs):Azure 虚拟机提供云中可扩展的计算能力。用户可以部署和管理运行各种操作系统的虚拟机,以满足其特定应用需求。

  • Azure Blob 存储:Azure Blob 存储是一种可扩展且安全的对象存储解决方案,适用于大量非结构化数据,如文档、图像和视频。它提供不同的存储层,以优化成本。

  • Azure 应用服务:Azure 应用服务使得用户能够在无需管理底层基础设施的情况下部署 Web、移动和 API 应用程序。它支持多种编程语言和框架。

  • Azure SQL 数据库:Azure SQL 数据库是一个完全托管的关系型数据库服务,提供高可用性、安全性和可扩展性,适用于需要结构化数据存储的应用程序。

  • Azure Kubernetes 服务AKS):对于容器化应用程序,Azure 提供 AKS——一种托管的 Kubernetes 服务。它简化了容器化应用程序的部署、管理和扩展。

  • Azure Active DirectoryAAD):Azure Active Directory 是一项基于云的身份和访问管理服务。它提供身份验证、授权和单点登录功能,增强安全性和用户管理。

  • Azure Functions:Azure Functions 允许用户运行事件触发的代码,而无需预配或管理服务器。它支持无服务器计算,实现小规模、独立功能的高效执行。

  • Azure 安全中心:Azure 安全中心为所有 Azure 资源提供高级威胁保护。它监控安全配置,识别潜在威胁,并提供可操作的洞察,以增强安全态势。

  • Azure DevOps:Azure DevOps 是一组用于构建、测试和部署应用程序的开发工具和服务。它包括版本控制、持续集成和发布管理等功能。

总结:Azure 的架构为在云中构建和扩展应用程序提供了强大的基础。凭借其多样化的服务、全球基础设施和强大的安全功能,Azure 满足了广泛企业和行业的需求,使它们能够创新并转型其 IT 环境。

PowerShell 在 Azure 治理中起着至关重要的作用,使管理员能够高效地管理、执行策略并保持 Azure 资源的合规性。以下是如何在 Azure 中利用 PowerShell 进行治理的详细说明和示例:

Azure 策略强制执行

Azure 策略允许你在资源上强制执行规则和标准。PowerShell 的 AzPolicy 模块提供了与 Azure 策略交互的 cmdlet:

 # Assign a policy to deny the creation of resources without tags
New-AzPolicyAssignment -Name "DenyResourceWithoutTags" -DisplayName "Deny Resources Without Tags" -Scope "/subscriptions/{subscriptionId}" -PolicyDefinitionReferenceId "/providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionId}" -EnforcementMode DoNotEnforce

PowerShell cmdlet New-AzPolicyAssignment 用于在 Azure 中创建新的策略分配。你提供的命令似乎是在创建一个名为 “DenyResourceWithoutTags” 的新策略分配,显示名称为 “Deny Resources Without Tags”。以下是所使用的参数的详细说明:

  • Name:指定策略分配的名称。在这种情况下,它是 “DenyResourceWithoutTags”。

  • DisplayName:指定策略分配的显示名称。这是将在 Azure 门户和其他界面中显示的名称。

  • Scope:指定策略分配将应用的范围。在此示例中,它设置为订阅级别的范围:(/subscriptions/{subscriptionId})。你需要将 {subscriptionId} 替换为实际的订阅 ID。

  • PolicyDefinitionReferenceId:指定要分配的策略定义的 ID。这引用一个现有的策略定义。值应采用 /providers/Microsoft.Authorization/policyDefinitions/{policyDefinitionId} 格式。你需要将 {policyDefinitionId} 替换为你想要分配的实际策略定义的 ID。

  • EnforcementMode:指定策略分配的强制执行模式。在这种情况下,它设置为 DoNotEnforce,意味着策略已创建但未强制执行。这对于测试或逐步推出策略非常有用。强制执行模式的可能值有 DefaultDoNotEnforceEnforce

基于角色的访问控制(RBAC)

PowerShell 的 AzRole 模块有助于管理 RBAC 分配,确保为用户或应用程序提供适当的权限:

 # Assign a user the contributor role to a specific resource group
New-AzRoleAssignment -ObjectId "{userObjectId}" -RoleDefinitionName "Contributor" -Scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

资源标签

强制执行资源标签有助于增强组织和成本管理。可以使用 PowerShell 自动化标签过程:

 # Add tags to a virtual machine
Set-AzResource -ResourceId "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}" -Tag @{ "Environment" = "Production"; "Project" = "XYZ" }

资源锁定

通过使用 PowerShell 应用资源锁定,防止意外删除或修改关键资源:

 # Apply a read-only lock to a storage account
New-AzResourceLock -LockLevel ReadOnly -LockNotes "Critical Resource" -ResourceId "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}"

Azure 蓝图部署

定义并部署 Azure 蓝图,蓝图包含资源、策略和 RBAC 分配模板,确保一致的治理:

 # Create and assign a blueprint
New-AzBlueprint -Name "MyBlueprint" -SubscriptionId "{subscriptionId}" -BlueprintFile "C:\Path\To\Blueprint.json"

合规性报告

PowerShell 可用于生成合规性报告,提供资源遵循组织政策的洞察:

 # Get compliance status for all resources in a subscription
Get-AzPolicyState -SubscriptionId "{subscriptionId}" | Where-Object { $_.ComplianceState -eq "NonCompliant" }

总结来说,Azure 治理中的 PowerShell 能够帮助管理员自动执行政策强制、管理访问控制、实施资源标签、应用锁定、部署蓝图并生成合规性报告。这确保了与组织标准一致的有序、安全和合规的 Azure 环境。

访问 Azure

本节的目标是描述如何使用 PowerShell 将查询与 Azure 内的资源连接。

安装并导入 Azure PowerShell 模块

在开始侦察之前,安装并导入 Azure PowerShell 模块是必不可少的。该模块提供了专门为与 Azure 资源交互而设计的 cmdlet:

 Install-Module -Name Az -Force -AllowClobber -Scope CurrentUser
Import-Module Az

认证并连接到 Azure

认证并连接到 Azure 订阅,以访问环境中的资源:

PS C:\> $Creds = Get-Credential
PS C:\> Connect-AzAccount -Credential $Creds
Account                      SubscriptionName   TennantID                              Environment
-------                      ----------------   ------------------------------------   -----------
ajcblyth@snowcapcyber.com    Infinity           749a36a1-402a-481c-a0c0-66f677504ea8   AzureCloud

一旦我们连接到 Azure 租户,我们可以查询以确保其正确性:

 PS C:\> Get-AzTenant
Id                                       Name              Category Domains
--                                       ----              -------- -------
749a36a1-402a-481c-a0c0-66f677504ea8     SnowCap Cyber     Home     {snowcapcyber.onmicrosoft.com, snowcapcyber.com}

在 Azure 中的网络

本节的目标是描述如何在 Azure 中使用 PowerShell 执行网络侦察和分析,作为渗透测试的一部分。我们的目标是使用这些信息构建网络图。一旦我们获得公共 IP 地址和名称,就可以开始使用 nslookup 探索 DNS 服务的类型:

 PS C:\> nslookup devtest.snowcapcyber.com
Server:          192.168.1.254
Address:    192.168.1.254#53
Non-authoritative answer:
devtest.snowcapcyber.com    canonical name = snowcapcyber.z13.web.core.windows.net. snowcapcyber.z16.web.core.windows.net    canonical name = web.s768fd45.store.core.windows.net. Name:    web.s768fd45.store.core.windows.net
Address: 52.239.123.45

通过分析 DNS 名称,我们可以识别服务类型。下表列出了可用的 DNS 后缀:

DNS 后缀 关联的 Azure 服务
file.core.windows.net 存储帐户 – 文件
blob.core.windows.net 存储帐户 – Blob
azurewebsites.net 应用服务和函数应用
scm.azurewebsites.net 应用服务 – 管理
database.windows.net 数据库 – MSSQL
documents.azure.com 数据库 – Cosmos DB
cloudapp.azure.com 客户 – 分配的公共 IP DNS
vault.azure.net 密钥保管库
azurecontainer.io 容器实例
azurecr.io 容器注册表

表 12.1 – 可用 DNS 后缀列表

资源发现

首先使用 Get-AzResource cmdlet 发现 Azure 资源。这将提供有关各种资源的信息,包括虚拟机、数据库和网络组件:

 Get-AzResource | Select-Object ResourceGroupName, ResourceType, ResourceName

虚拟网络枚举

要了解网络结构,请使用 Get-AzVirtualNetwork cmdlet。这将检索虚拟网络的详细信息,包括子网和相关资源:

 Get-AzVirtualNetwork | Select-Object ResourceGroupName, Name, AddressSpace, @{Name="Subnets"; Expression={$_.Subnets.Name -join ", "}}

子网分析

深入分析虚拟网络内的子网配置,识别 IP 地址范围和相关资源:

 Get-AzVirtualNetwork -ResourceGroupName "YourResourceGroup" | Get-AzVirtualNetworkSubnetConfig | Select-Object Name, AddressPrefix

网络安全组探索

使用 Get-AzNetworkSecurityGroup 检查 网络安全组NSGs)。NSGs 作为防火墙,控制到资源的流量以及资源的流出:

 Get-AzNetworkSecurityGroup -ResourceGroupName "YourResourceGroup" | Get-AzNetworkSecurityRuleConfig

公共 IP 地址枚举

识别与资源关联的公共 IP 地址,以了解潜在的外部连接点:

 Get-AzPublicIpAddress | Select-Object ResourceGroupName, Name, IpAddress

Azure Active Directory(AAD)侦察

使用 AAD 命令了解身份管理情况。这包括检索有关用户、组和应用程序的信息。Get-AzureADUser 命令从 AAD(Entra)中检索用户:

 Get-AzureADUser | Select-Object DisplayName, UserPrincipalName
Get-AzureADGroup | Select-Object DisplayName, Description
Get-AzureADApplication | Select-Object DisplayName, AppId

服务主体枚举

使用 Get-AzADServicePrincipal 来识别服务主体,服务主体用于验证 Azure 服务:

 Get-AzADServicePrincipal | Select-Object DisplayName, ApplicationId, ServicePrincipalNames

构建网络图

利用收集到的信息,你可以开始构建网络图。使用如 Graphviz 等工具可视化不同资源、子网和安全组之间的关系:

 $dotContent = @"
digraph NetworkMap {
  subgraph cluster_vnet {
    label="Virtual Network: YourVNet"
    "Subnet A" -> "Subnet B"
  }
  "Subnet B" -> "Web Server"
  "Subnet B" -> "Database Server"
  "Web Server" -> "DB Server"
  "Web Server" -> "Public IP"
}
"@
$dotContent | Out-File -FilePath "NetworkMap.dot"

生成 DOT 文件后,可以使用 Graphviz 工具将其转换为可视化表示,提供全面的网络图。

PowerShell 和 Azure cmdlets 为渗透测试人员提供了一个强大的工具集,用于在 Azure 环境中进行网络侦察和画像分析。通过收集资源、虚拟网络、安全配置和身份组件的信息,可以构建详细的网络图。这个图对于理解 Azure 环境、识别潜在攻击面以及在渗透测试中做出明智决策至关重要。在任何环境中进行渗透测试时,始终确保获得适当授权,并遵守道德准则。

身份管理和基于角色的访问控制

渗透测试涉及评估系统的安全性,PowerShell 是分析 Azure 环境中 身份管理IDM)和 基于角色的访问控制RBAC)的有价值工具。通过其丰富的 cmdlets 集,PowerShell 使渗透测试人员能够收集信息、识别潜在漏洞,并模拟场景来评估 Azure 环境的安全态势。

收集关于用户和身份管理的信息

PowerShell 可以检索关于用户及其属性的详细信息。Get-AzADUser cmdlet 是执行此任务的强大工具:

 # Retrieve all users in Azure AD
Get-AzADUser -All $true | Select-Object DisplayName, UserPrincipalName, UserType, ObjectId

此命令获取 Azure AD 中所有用户的显示名称、用户主体名称、用户类型和对象 ID 等信息。渗透测试人员可以利用这些数据识别特权账户和潜在的攻击目标。

探索 RBAC 分配

PowerShell 便于检查 RBAC(基于角色的访问控制)分配,帮助渗透测试人员了解谁可以访问哪些资源。Get-AzRoleAssignment cmdlet 用于检索角色分配的相关信息:

 # List role assignments within a specific subscription
Get-AzRoleAssignment -Scope "/subscriptions/{subscription-id}" | Select-Object DisplayName, SignInName, RoleDefinitionName

此命令显示每个角色分配的显示名称、登录名称和角色定义名称,帮助测试人员识别具有提升权限的用户,并理解整体的 RBAC 配置。

审查资源的访问控制设置

PowerShell 可以审查访问控制设置,评估特定资源的 RBAC 配置效果。Get-AzRoleDefinition cmdlet 提供有关内置角色及其权限的详细信息:

 # Retrieve information about the "Contributor" built-in role
Get-AzRoleDefinition -Name "Contributor" | Select-Object Name, Description, Actions

该命令获取“Contributor”角色的信息,包括其名称、描述以及允许的操作。渗透测试人员可以利用这些信息评估特定角色分配的影响,并识别潜在的安全风险。

修改 RBAC 分配以进行模拟

PowerShell 允许渗透测试人员通过修改 RBAC 分配来模拟场景。New-AzRoleAssignment cmdlet 可用于创建临时分配以供测试使用:

 # Create a temporary role assignment for testing
New-AzRoleAssignment -ObjectId "{user-object-id}" -RoleDefinitionName "Reader" -Scope "/subscriptions/{subscription-id}"

该命令将“Reader”角色分配给指定订阅中的特定用户。测试人员可以利用此功能,在不影响生产环境的情况下评估对 RBAC 配置更改的影响。

自动化身份管理和 RBAC 分析

可以编写 PowerShell 脚本来自动化身份管理和 RBAC 分析。例如,脚本可以遍历用户及其角色,生成报告,并突出显示异常或潜在的安全问题:

 # Sample script to automate RBAC analysis
$users = Get-AzADUser -All $true
foreach ($user in $users) {
    $roleAssignments = Get-AzRoleAssignment -ObjectId $user.ObjectId
    Write-Output "User: $($user.DisplayName)"
    Write-Output "Role Assignments:"
    $roleAssignments | Select-Object RoleDefinitionName, Scope
    Write-Output "`n"
}

该脚本遍历所有用户,检索他们的角色分配,并输出相关信息。自动化可以显著提高渗透测试过程的效率。

PowerShell 是渗透测试人员在分析 Azure 环境中的身份管理和 RBAC 时不可或缺的工具。通过利用其功能,测试人员可以收集信息、评估配置,并模拟场景,有效识别和解决安全漏洞。

Azure 数据存储和权限

PowerShell 是渗透测试人员在 Azure 环境中分析身份和数据存储权限的强大工具。在渗透测试场景中,理解和审查 Azure 数据存储及其相关权限对于识别潜在的安全漏洞至关重要。以下是 PowerShell 在此过程中如何应用:

分析 Azure 数据存储

Azure 提供多种存储服务,如 Blob 存储、表存储和队列存储。PowerShell 可以收集有关这些服务、配置和数据的信息:

 # Get information about Blob Storage accounts
Get-AzStorageAccount | ForEach-Object {
    $account = $_
    Write-Output "Storage Account Name: $($account.StorageAccountName)"
    Get-AzStorageContainer -Context $_.Context | ForEach-Object {
        Write-Output "   Container Name: $($_.Name)"
        # Additional commands to analyze blobs within the container
    }
    Write-Output "`n"
}

该脚本列出所有 Azure 存储帐户及其关联的容器,为渗透测试人员分析数据存储配置提供了起点。

调查数据权限

PowerShell 使测试人员能够检查权限并访问与 Azure 数据存储相关的控制设置。了解谁可以访问数据以及他们拥有的权限级别,对于识别潜在的安全风险至关重要:

 # Get Blob Container permissions for a specific storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName "YourResourceGroup" -AccountName "YourStorageAccountName"
$container = "YourBlobContainer"
Get-AzStorageContainerAcl -Context $storageAccount.Context -Name $container | Select-Object Id, Access

该脚本检索并显示特定 Blob 容器的访问控制列表ACLs),提供有关谁有访问权限以及他们的访问级别的洞察。

检查 RBAC 设置

Azure 使用 RBAC 管理对资源的访问,包括数据存储。可以利用 PowerShell 来审查 RBAC 的分配和配置:

 # Get RBAC assignments for a specific storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName "YourResourceGroup" -AccountName "YourStorageAccountName"
Get-AzRoleAssignment -Scope $storageAccount.Id | Select-Object DisplayName, SignInName, RoleDefinitionName

此脚本提供有关指定存储账户的角色分配的信息,帮助测试人员识别具有提升权限的用户。

使用 Azure Key Vault 分析数据安全

Azure Key Vault 经常用于安全存储和管理诸如存储账户密钥之类的敏感信息。PowerShell 可以与 Azure Key Vault 交互,并评估密钥管理的安全性:

 # Retrieve secrets from Azure Key Vault
$keyVault = Get-AzKeyVault -VaultName "YourKeyVaultName" -ResourceGroupName "YourResourceGroup"
Get-AzKeyVaultSecret -VaultName $keyVault.VaultName | Select-Object Name, Value

此脚本获取并显示存储在指定 Azure Key Vault 中的机密,允许测试人员识别可能影响 Azure 数据存储安全的敏感信息。

自动化数据存储和权限分析

可以编写 PowerShell 脚本来自动化分析 Azure 数据存储及其相关权限。这些脚本可以迭代存储账户、容器和访问设置,提供对安全景观的全面洞察:

 # Automated analysis of Azure Storage Accounts
Get-AzStorageAccount | ForEach-Object {
    $account = $_
    Write-Output "Storage Account Name: $($account.StorageAccountName)"
    # Additional commands for analyzing containers, permissions, etc.     Write-Output "`n"
}

此脚本自动检索和分析所有 Azure 存储账户的信息,简化渗透测试工作流程。

总之,PowerShell 在分析 Azure 中的身份和数据存储权限时证明了其多功能性和高效性。通过利用其功能,测试人员可以收集信息、评估配置,并识别与 Azure 数据存储相关的潜在安全风险。自动化进一步增强了渗透测试的效果,允许以可扩展和高效的方式彻底检查 Azure 资源。

Azure 和 SQL

PowerShell 是渗透测试人员分析 Azure 环境中的身份和 SQL 组件的强大工具。Azure 身份服务,如 AAD 和 SQL 数据库,在安全和管理访问资源方面至关重要。以下是 PowerShell 在渗透测试期间用于分析 Azure 中的身份和 Azure 中的 SQL 的方法。

分析 Azure 身份

以下是涉及的步骤:

  1. 检索用户信息:PowerShell 可以获取 Azure Active Directory 中关于用户的信息,提供潜在攻击目标的见解:

     # Retrieve user information from Azure AD
    Get-AzADUser -All $true | Select-Object DisplayName, UserPrincipalName, UserType, ObjectId
    

    此命令获取 Azure AD 中所有用户的显示名称、用户主体名称、用户类型和对象 ID 的详细信息。渗透测试人员可以分析这些数据,以识别特权账户或潜在攻击点。

  2. 检查服务主体:服务主体代表通常用于自动化任务的非人类账户。PowerShell 允许测试人员调查服务主体及其权限:

     # List service principals in Azure AD
    Get-AzADServicePrincipal | Select-Object DisplayName, ServicePrincipalNames, AppId, ObjectType
    

    此命令列出服务主体,提供有关其显示名称、服务主体名称、应用程序 ID 和对象类型的详细信息。测试人员可以仔细审查这些细节,以识别潜在的安全风险。

分析 Azure SQL

以下是涉及的步骤:

  1. 检索 SQL 服务器信息:PowerShell 使测试人员能够收集有关 Azure SQL 服务器的信息,包括其配置和关联的数据库:

     # Get information about Azure SQL servers
    Get-AzSqlServer | Select-Object ServerName, ResourceGroupName, Location, Version
    

    此命令列出 SQL 服务器的详细信息,如 SQL 服务器名称、资源组、位置和版本。测试人员可以利用这些信息评估 SQL 服务器的配置和潜在的安全风险。

  2. 审查数据库权限:PowerShell 可以分析 Azure SQL 数据库中的权限,帮助测试人员识别具有提升权限的用户:

     # List users and their roles in an Azure SQL database
    $server = Get-AzSqlServer -ResourceGroupName "YourResourceGroup" -ServerName "YourSqlServer"
    $database = "YourDatabase"
    Get-AzSqlDatabase -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName -DatabaseName $database | Get-AzSqlDatabaseServerActiveDirectoryAdministrator | Select-Object DisplayName, SignInName
    

    此脚本检索有关特定 SQL 数据库的 Active Directory 管理员信息。它提供诸如显示名称和登录名称等详细信息,帮助测试人员识别具有管理员角色的用户。

  3. 审计 SQL 数据库活动:PowerShell 可以启用和查看 Azure SQL 数据库的审计设置,帮助测试人员跟踪和分析数据库活动:

     # Enable auditing for an Azure SQL database
    $database = "YourDatabase"
    Set-AzSqlDatabaseAuditing -ServerName $server.ServerName -ResourceGroupName $server.ResourceGroupName -DatabaseName $database -StorageAccountName "YourStorageAccount" -AuditActionGroup "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP", "FAILED_DATABASE_AUTHENTICATION_GROUP"
    

    此命令启用对成功和失败的数据库身份验证进行审计。测试人员可以查看审计日志以分析用户活动。

自动化身份和 SQL 分析

PowerShell 脚本可以自动化分析 Azure 身份和 SQL 组件。这些脚本可以遍历用户、服务主体、SQL 服务器和数据库,提供全面的安全概览。

总结:PowerShell 对渗透测试人员在分析 Azure 中的身份和 SQL 时是一项不可或缺的工具。通过利用其功能,测试人员可以收集信息、检查配置,并识别与 Azure 身份服务和 SQL 数据库相关的潜在安全风险。自动化进一步简化了渗透测试过程,使得能够以可扩展和高效的方式全面检查 Azure 资源。以下是如何利用 PowerShell 测试 Azure 和密钥保管库的方法:

  • Azure 资源管理:PowerShell 提供了与 Azure 资源交互的 cmdlet,允许你测试资源的配置、管理和提供。例如,你可以使用 New-AzResourceGroupNew-AzStorageAccountNew-AzVM 来分别创建资源组、存储账户和虚拟机。然后,你可以使用 Get-AzResource 等 cmdlet 验证资源是否正确创建。

  • Azure 密钥保管库管理:PowerShell 提供了管理 Azure 密钥保管库的 cmdlet,允许你测试访问策略、密钥管理和秘密管理。例如,你可以使用 New-AzKeyVaultSet-AzKeyVaultAccessPolicySet-AzKeyVaultSecret 来创建密钥保管库、设置访问策略和存储秘密。你还可以使用 Get-AzKeyVaultSecretGet-AzKeyVaultKey 来验证秘密和密钥的存在。

  • 使用 PowerShell 测试 Azure Functions:可以使用 PowerShell 脚本测试和管理 Azure Functions。你可以使用 New-AzFunctionApp cmdlet 来创建新的 Function App,使用 Publish-AzWebapp 来部署函数代码。然后,你可以通过提供示例输入数据并验证输出,来测试该函数。

  • 集成测试 Azure APIs:PowerShell 可用于 Azure APIs 的集成测试。通过使用 Invoke-RestMethod 等 cmdlet,你可以向 Azure REST APIs 发送 HTTP 请求并验证响应。例如,你可以通过向 Azure 资源管理 API 发送请求,来编程管理 Azure 资源。

  • Azure 策略的自动化测试:可以使用 PowerShell 脚本来测试 Azure 策略。你可以使用 cmdlet 如 New-AzPolicyDefinition 来定义策略,Test-AzPolicyAssignment 来评估策略合规性,以及 Get-AzPolicyEvent 来获取策略评估结果。

Azure 和 Key Vaults

PowerShell 是一种强大的脚本语言和命令行外壳,它在渗透测试中分析 Azure 资源和 Key Vaults 时非常有用。Azure 服务,如 Azure Resource ManagerARM)和 Azure Key Vault,是存储敏感信息的关键组件。以下是如何在渗透测试过程中使用 PowerShell 分析 Azure 和 Key Vaults 的方法。

分析 Azure 资源

以下是涉及的步骤:

  1. 检索 Azure 资源信息:

    PowerShell 可以检索有关各种 Azure 资源的详细信息,包括虚拟机、存储账户和网络组件:

     # Retrieve information about virtual machines in a specific resource group
    Get-AzVM -ResourceGroupName "YourResourceGroup" | Select-Object Name, ResourceGroupName, Location, PowerState
    

    此命令列出指定资源组中的虚拟机,显示包括 VM 名称、资源组、位置和电源状态等详细信息。渗透测试人员可以分析这些信息,以识别潜在的攻击目标。

  2. 检查网络安全组NSGs)规则:

    网络安全组控制 Azure 资源的入站和出站流量。PowerShell 使测试人员能够审查 NSGs 规则,寻找潜在的安全风险:

     # List NSG rules for a specific subnet
    $subnet = "YourSubnet"
    (Get-AzNetworkSecurityGroup -ResourceGroupName "YourResourceGroup" | Get-AzNetworkSecurityRuleConfig | Where-Object { $_.SourcePortRange -eq '*' -and $_.DestinationPortRange -eq '*' -and $_.Direction -eq 'Inbound' -and $_.SourceAddressPrefix -eq '*' -and $_.DestinationAddressPrefix -eq "$subnet" }) | Select-Object Name, Priority, Access, Direction, Protocol
    

    此脚本提取并显示特定子网的入站 NSGs 规则,提供关于配置的安全策略的见解。

分析 Azure Key Vaults

以下是涉及的步骤:

  1. 检索 Key Vault 秘密:

    PowerShell 可以检索并分析存储在 Azure Key Vault 中的秘密,帮助测试人员识别可能影响安全性的敏感信息:

     # Retrieve secrets from Azure Key Vault
    $keyVault = Get-AzKeyVault -VaultName "YourKeyVaultName" -ResourceGroupName "YourResourceGroup"
    Get-AzKeyVaultSecret -VaultName $keyVault.VaultName | Select-Object Name, Version, Enabled
    

    此命令提取并显示指定 Azure Key Vault 中秘密的详细信息,包括它们的名称、版本以及是否启用。渗透测试人员可以利用这些信息评估存储秘密的安全性。

  2. 审核 Key Vault 访问:

    PowerShell 使测试人员能够审核对 Key Vault 的访问,提供关于谁在何时访问了 Key Vault 的信息:

     # Enable auditing for an Azure Key Vault
    Set-AzKeyVault -VaultName "YourKeyVaultName" -ResourceGroupName "YourResourceGroup" -EnableSoftDelete $true -EnablePurgeProtection $true -EnableRbacAuthorization $true -Sku Premium
    

    此命令启用包括审计在内的各种安全功能,用于 Azure 密钥保管库。测试人员可以查看审计日志以分析访问模式。

自动化分析 Azure 资源和密钥保管库

PowerShell 脚本可以自动化 Azure 资源和密钥保管库的分析。这些脚本可以遍历各种资源类型、密钥保管库和配置,提供对安全态势的全面洞察。

总结来说,PowerShell 是渗透测试人员在分析 Azure 资源和密钥保管库时的宝贵工具。通过利用其功能,测试人员可以收集信息、检查配置,并识别与 Azure 服务和存储的机密相关的潜在安全风险。自动化进一步简化了渗透测试过程,使得对 Azure 资源和密钥保管库的彻底检查变得更加可扩展和高效。

Azure 和虚拟机

Azure 开发服务的基本方法是使用虚拟机。我们可以查询 Azure 租户以识别所有关联的虚拟机。通过使用 Get-AzVM 命令,我们可以获得与租户关联的所有虚拟机的列表:

PS C:\> Get-AzVM
ResourceGroupName                  Name Location            VmSize  OsType        NIC           ProvisioningState
-----------------                  ---- --------            ------  ------        ---           -----------------
SNOWCAPCLOUD                 SNOWUNIX01  UKWales   Standard_D8s_v3   Linux        SNOWUNIX01268         Succeeded
SNOWWINCLOUD                  SNOWWIN01  UKWales   Standard_D8s_v3 Windows        SNOWWIN01789          Succeeded
SNOWWINCLOUD                  SNOWWIN02  UKCardiff Standard_D8s_v3 Windows        SNOWWIN02906          Succeeded

我们可以使用 Get-AzVM 命令按名称和位置查询虚拟机,如下所示:

PS C:\> Get-AzVM -Name *UNIX* | Where-Object { $_.StorageProfile.OsDisk.OsType -eq "Linux" -or $_.StorageProfile.OsDisk.OsType -eq "Linux" }
ResourceGroupName                  Name Location            VmSize  OsType        NIC           ProvisioningState
-----------------                  ---- --------            ------  ------        ---           -----------------
SNOWCAPCLOUD                 SNOWUNIX01  UKWales   Standard_D8s_v3   Linux        SNOWUNIX01268         Succeeded
PS C:\> Get-AzVM -Location "UKCardiff"
ResourceGroupName                  Name Location            VmSize  OsType        NIC           ProvisioningState
-----------------                  ---- --------            ------  ------        ---           -----------------
SNOWWINCLOUD                  SNOWWIN02  UKCardiff Standard_D8s_v3 Windows        SNOWWIN02906          Succeeded

一旦我们知道租户中所有虚拟机的名称,就可以查询租户并提取虚拟机的公共 IP 地址。我们可以按如下方式实现这一点。然后,一旦我们识别出与租户关联的所有公共 IP 地址,就可以开始攻击/探测这些 IP 地址:

 PS C:\> Get-azpublicipaddress -Name SNOWUNIX01 | select IpAddress
IpAddress
137.135.55.253

一旦我们识别出可以用于访问 Microsoft Azure 的 IP 地址,我们就可以开始利用它提供的各种功能。

Azure 和 Web 服务

PowerShell 是渗透测试人员在进行全面安全评估时分析 Azure 资源和 Web 服务的多功能工具。Azure 是微软的云计算平台,托管着广泛的服务,渗透测试人员可以利用 PowerShell 来评估这些服务的安全性。以下是 PowerShell 在渗透测试过程中用于分析 Azure 资源和 Web 服务的详细指南:

分析 Azure 资源

以下是涉及的步骤:

  1. 检索关于 Azure 资源的信息:

    PowerShell 可以收集关于各种 Azure 资源的信息,如虚拟机、存储帐户和数据库:

     # Retrieve information about virtual machines in a specific resource group
    Get-AzVM -ResourceGroupName "YourResourceGroup" | Select-Object Name, ResourceGroupName, Location, PowerState
    

    此命令获取虚拟机名称、资源组、位置和电源状态等详细信息。它提供了关于虚拟机当前状态的洞察,帮助渗透测试人员识别潜在的目标。

  2. 分析存储帐户:

    PowerShell 允许测试人员检查存储帐户及其相关配置:

     # List storage accounts and their properties
    Get-AzStorageAccount | Select-Object StorageAccountName, ResourceGroupName, Location, AccountType
    

    此脚本列出存储帐户以及帐户名称、资源组、位置和帐户类型等详细信息。它帮助测试人员评估 Azure 存储的安全态势。

  3. 调查 Azure 数据库:

    对于托管在 Azure 上的数据库,PowerShell 可以提供有关其配置和设置的信息:

     # Get information about Azure SQL databases
    Get-AzSqlDatabase -ResourceGroupName "YourResourceGroup" -ServerName "YourSqlServer" | Select-Object DatabaseName, Collation, Edition, ServiceObjectiveName
    

    该命令检索如数据库名称、排序规则、版本和服务目标等详细信息。测试人员可以利用这些信息评估 Azure SQL 数据库的安全配置。

分析 Azure 中的 Web 服务

以下是涉及的步骤:

  1. 检索 Azure 应用服务信息:

    Azure 应用服务托管 Web 应用程序和 API。PowerShell 使测试人员能够获取这些服务的详细信息:

     # List Azure App Services and their configurations
    Get-AzWebApp | Select-Object Name, ResourceGroupName, Location, DefaultHostName
    

    该命令列出了 Azure 应用服务,包括如服务名称、资源组、位置和默认主机名等详细信息。它提供了关于托管在 Azure 上的 Web 应用程序的洞察。

  2. 分析 Web 应用程序配置:

    可以使用 PowerShell 来检索托管在 Azure 应用服务上的 Web 应用程序的配置和设置:

     # Get web application configurations
    $webAppName = "YourWebAppName"
    (Get-AzWebApp -ResourceGroupName "YourResourceGroup" -Name $webAppName).SiteConfig
    

    该脚本获取特定 Web 应用程序的站点配置,包括与身份验证、CORS 和其他安全相关的设置。

  3. 调查 Azure Functions:

    Azure Functions 提供无服务器计算能力。PowerShell 可以帮助测试人员分析 Azure Functions 的配置:

     # List Azure Functions and their configurations
    Get-AzFunctionApp | Select-Object Name, ResourceGroupName, Location, Kind
    

    该命令列出了 Azure Functions,提供如函数应用名称、资源组、位置和类型等详细信息。测试人员可以使用这些信息评估无服务器组件。

自动化分析 Azure 资源和 Web 服务

可以编写 PowerShell 脚本来自动化分析 Azure 资源和 Web 服务。自动化提高了效率,并使渗透测试人员能够扩大评估范围。

总结来说,通过利用 PowerShell 的功能,测试人员可以收集详细信息,审查配置,并识别与 Azure 服务和托管 Web 应用程序相关的潜在安全风险。自动化进一步简化了渗透测试过程,使得 Azure 资源和 Web 服务的彻底检查能够以可扩展且高效的方式进行。

总结

在本章中,我们探索了 PowerShell 在进行 Azure 渗透测试中的关键作用。通过利用 PowerShell 的能力,我们深入分析了 Azure 的多方面内容,解构了身份管理、基于角色的访问控制、数据存储、SQL 和 Web 服务。通过使用 PowerShell 脚本,测试人员获得了 Azure 资源的细致洞察,执行了自动化分析,并识别了潜在的安全漏洞。本章强调了跨服务分析的重要性,并展示了 PowerShell 在增强 Azure 对抗网络威胁方面的效率。

通过这次全面的探索,你将能够利用 PowerShell 的强大功能进行有效的渗透测试,确保 Azure 环境的韧性和安全性。