クイック スタート: Azure PowerShell を使用して、ファームウェア分析にファームウェア イメージをアップロードする
この記事では、Azure PowerShell を使用してファームウェア イメージをファームウェア分析にアップロードする方法について説明します。
ファームウェア分析は、ファームウェア イメージを分析し、ファームウェア イメージのセキュリティの脆弱性を理解できるようにするツールです。
前提条件
このクイック スタートでは、ファームウェア分析に関する基本的な理解を前提としています。 詳細については、「デバイス ビルダーのファームウェア分析」を参照してください。 サポートされているファイル システムの一覧については、「ファームウェア分析についてよく寄せられる質問」を参照してください。
Azure PowerShell の環境を準備する
Connect-AzAccount コマンドを実行して Azure PowerShell にサインインします。 Cloud Shell を使用する場合は、この手順をスキップしてください。
ファームウェア分析の Azure PowerShell を初めて使用する場合は、拡張機能をインストールします。
Find-Module -Name Az.FirmwareAnalysis | Install-Module
サブスクリプションをファームウェア分析にオンボードします。
Set-AzContext を実行して、現在のセッションで使用するサブスクリプションを設定します。 ファームウェア イメージをアップロードするサブスクリプションを選択します。
ワークスペースにファームウェア イメージをアップロードする
アップロードするファームウェア イメージを作成します。 リソース グループ名、ワークスペース名、および組み込むファームウェア イメージに関する追加の詳細をそれぞれのパラメーター (
Description
、FileName
、Vendor
、Model
、Version
など) に挿入します。New-AzFirmwareAnalysisFirmware -ResourceGroupName myResourceGroup -WorkspaceName default -Description 'sample description' -FileName file -Vendor vendor -Model model -Version version
このコマンドの出力には、ファームウェア ID である Name
プロパティが含まれています。 次のコマンドで使用できるように、この ID を保存します。
次の手順で使用する SAS URL を生成して、ファームウェア イメージを Azure Storage に送信します。
sampleFirmwareID
を、前の手順で保存したファームウェア ID に置き換えます。 SAS URL を変数に格納することで、次回以降のコマンドで簡単にアクセスできできるようになります:$sasUrl = New-AzFirmwareAnalysisWorkspaceUploadUrl -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default
次のスクリプトを使用して、ファームウェア イメージを Azure Storage にアップロードします。 パスを含む '
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
証明書
次のコマンドでは、ファームウェア イメージで見つかった脆弱な暗号化証明書を取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。
Get-AzFirmwareAnalysisCryptoCertificate -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default
キー
次のコマンドでは、ファームウェア イメージで見つかった脆弱な暗号化キーを取得します。 各引数を、リソース グループ、サブスクリプション、ワークスペース名、ファームウェア ID の適切な値に置き換えます。
Get-AzFirmwareAnalysisCryptoKey -FirmwareId sampleFirmwareID -ResourceGroupName myResourceGroup -WorkspaceName default