你当前正在访问 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 准备环境
运行 Connect-AzAccount 命令来登录到 Azure PowerShell。 如果使用 Cloud Shell,请跳过此步骤。
如果这是你首次使用 Defender for IoT 固件分析的 Azure PowerShell,请安装该扩展:
Find-Module -Name Az.FirmwareAnalysis | Install-Module
将订阅加入 Defender for IoT 固件分析。
运行 Set-AzContext,将订阅设置为在当前会话中使用。 选择要在其中上传固件映像的订阅。
将固件映像上传到工作区
创建要上传的固件映像。 插入资源组名称、工作区名称以及要包含在各自参数中的固件映像的详细信息 - 这些参数包括
Description
、FileName
、Vendor
、Model
或Version
。New-AzFirmwareAnalysisFirmware -ResourceGroupName myResourceGroup -WorkspaceName default -Description 'sample description' -FileName file -Vendor vendor -Model model -Version version
此命令的输出包括一个 Name
属性,即固件 ID。 保存此 ID 以供下一个命令使用。
生成 SAS URL,在下一步中将使用该 URL 将固件映像发送到 Azure 存储。 将
sampleFirmwareID
替换为在上一步保存的固件 ID。 可以将 SAS URL 存储在变量中,以便更轻松地访问将来的命令:$sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default
使用以下脚本将固件映像上传到 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