你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure PowerShell 将固件映像上传到固件分析

本文介绍如何使用 Azure PowerShell 将固件映像上传到固件分析。

固件分析是一种工具,可用于分析固件映像并提供对固件映像中安全漏洞的理解。

先决条件

本快速入门假定你基本了解固件分析。 有关详细信息,请参阅面向设备制造商的固件分析。 有关支持的文件系统的列表,请参阅有关固件分析的常见问题解答

为 Azure PowerShell 准备环境

  1. 安装 Azure PowerShell使用 Azure Cloud Shell

  2. 运行 Connect-AzAccount 命令来登录到 Azure PowerShell。 如果使用 Cloud Shell,请跳过此步骤。

  3. 如果这是你首次使用固件分析的 Azure PowerShell,请安装该扩展:

    Find-Module -Name Az.FirmwareAnalysis | Install-Module
    
  4. 加入订阅以使用固件分析。

  5. 运行 Set-AzContext,将订阅设置为在当前会话中使用。 选择要在其中上传固件映像的订阅。

将固件映像上传到工作区

  1. 创建要上传的固件映像。 插入资源组名称、工作区名称以及要包含在各自参数中的固件映像的详细信息 - 这些参数包括 DescriptionFileNameVendorModelVersion

    New-AzFirmwareAnalysisFirmware -ResourceGroupName myResourceGroup -WorkspaceName default -Description 'sample description' -FileName file -Vendor vendor -Model model -Version version
    

此命令的输出包括一个 Name 属性,即固件 ID。 保存此 ID 以供下一个命令使用。

  1. 生成 SAS URL,在下一步中将使用该 URL 将固件映像发送到 Azure 存储。 将 sampleFirmwareID 替换为在上一步保存的固件 ID。 可以将 SAS URL 存储在变量中,以便更轻松地访问将来的命令:

    $sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default
    
  2. 使用以下脚本将固件映像上传到 Azure 存储。 将 pathToFile 替换为本地计算机上的固件映像的路径。 用引号将路径引起来。

    $uri = [System.Uri] $sasURL.Url
    $storageAccountName = $uri.DnsSafeHost.Split(".")[0]
    $container = $uri.LocalPath.Substring(1)
    $containerName, $blob = $container -split '/', 2
    $sasToken = $uri.Query
    $filePath = 'pathToFile'
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
    Set-AzStorageBlobContent -File $filePath -Container $containerName -Context $storageContext -Blob $blob -Force
    

下面是一个端到端示例工作流,展示了如何使用 Azure PowerShell 命令创建和上传固件映像。 替换开头设置的变量的值以反映环境。

$filePath='/path/to/image'
$resourceGroup='myResourceGroup'
$workspace='default'

$fileName='file1'
$vendor='vendor1'
$model='model'
$version='test'

$FWID = (New-AzFirmwareAnalysisFirmware -ResourceGroupName $resourceGroup -WorkspaceName $workspace -FileName $fileName -Vendor $vendor -Model $model -Version $version).Name

$sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId $FWID -ResourceGroupName $resourceGroup -WorkspaceName $workspace

$uri = [System.Uri] $sasURL.Url
$storageAccountName = $uri.DnsSafeHost.Split(".")[0]
$container = $uri.LocalPath.Substring(1)
$containerName, $blob = $container -split '/', 2
$sasToken = $uri.Query
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken
Set-AzStorageBlobContent -File $filePath -Container $containerName -Context $storageContext -Blob $blob -Force

检索固件分析结果

若要检索固件分析结果,必须确保分析的状态为“就绪”。 将 sampleFirmwareID 替换为你的固件 ID,将 myResourceGroup 替换为你的资源组名称,将 default 替换为你的工作区名称:

Get-AzFirmwareAnalysisFirmware -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default

查找“状态”字段以显示“就绪”,然后运行相应的命令来检索固件分析结果。

如果要自动执行检查分析状态的过程,可使用以下脚本定期检查资源状态,直到资源状态达到“就绪”。 可根据映像的大小设置 $timeoutInSeconds 变量 - 映像越大可能需要的分析时间越长,因此请根据需要调整此变量。

$ID = Get-AzFirmwareAnalysisFirmware -ResourceGroupName $resourceGroup -WorkspaceName default -FirmwareId $FWID | Select-Object -ExpandProperty Id

Write-Host "Successfully created a firmware image, recognized in Azure by this resource id: $ID."

$timeoutInSeconds = 10800
$startTime = Get-Date

while ($true) {
    $resource = Get-AzResource -ResourceId $ID
    $status = $resource.Properties.Status

    if ($status -eq 'ready') {
        Write-Host "Firmware analysis completed with status: $status"
        break
    }

    $elapsedTime = (Get-Date) - $startTime
    if ($elapsedTime.TotalSeconds -ge $timeoutInSeconds) {
        Write-Host "Timeout reached. Firmware analysis status: $status"
        break
    }

    Start-Sleep -Seconds 10
}

SBOM

以下命令检索固件映像中的 SBOM。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisSbomComponent -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default

缺点

以下命令检索在固件映像中找到的 CVE。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisCve -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

二进制强化

以下命令检索固件映像中二进制强化的分析结果。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisBinaryHardening -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

密码哈希

以下命令检索固件映像中的密码哈希。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisPasswordHash -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

Certificates

以下命令检索在固件映像中找到的易受攻击的加密证书。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisCryptoCertificate -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default 

“键”

以下命令检索在固件映像中找到的易受攻击的加密密钥。 将每个参数替换为资源组、订阅、工作区名称和固件 ID 的相应值。

Get-AzFirmwareAnalysisCryptoKey -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default