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

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

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

Defender for IoT 固件分析是一种分析固件映像并提供对固件映像中安全漏洞的理解的工具。

先决条件

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

为 Azure PowerShell 准备环境

  • 安装 Azure PowerShell使用 Azure Cloud Shell

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

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

    Find-Module -Name Az.FirmwareAnalysis | Install-Module
    
  • 将订阅加入 Defender for IoT 固件分析。

  • 运行 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