Přechod na Microsoft Defender Správa zranitelností

Microsoft Defender for Cloud sjednocuje všechna řešení posouzení ohrožení zabezpečení, aby využívala kontrolu ohrožení zabezpečení Microsoft Defender Správa zranitelností.

Microsoft Defender Správa zranitelností se integruje do mnoha případů použití nativních pro cloud, jako jsou scénáře expedice kontejnerů a modulu runtime.

Posouzení ohrožení zabezpečení v Defenderu pro cloudové kontejnery využívající Qualys je teď vyřazené. Pokud jste ještě nepřevedli posouzeníohrožení zabezpečení pro Azure pomocí Microsoft Defender Správa zranitelností, proveďte přechod podle kroků na stránce.

Krok 1: Ověření povolení kontroly

Kontrola posouzení ohrožení zabezpečení kontejnerů založená na Microsoft Defender Správa zranitelností je ve výchozím nastavení povolená pro Defender for Containers, Defender for Container Registryies (zastaralé) a Správa stavu zabezpečení cloudu v defenderu. Organizace, které ho zakázaly, musí v jednom z plánů znovu povolit přepínač posouzení ohrožení zabezpečení bez agentů. Odráží se automaticky do kteréhokoli z uvedených plánů, které jsou povolené.

Screenshot of enabling “Agentless container vulnerability assessment” in settings.

Další informace o povolení kontroly Microsoft Defender Správa zranitelností najdete v tématu Povolení posouzení ohrožení zabezpečení na základě Microsoft Defender Správa zranitelností.

Krok 2: (Volitelné) Aktualizace rozhraní REST API a dotazů Azure Resource Graphu

Pokud jste programově přistupovali k výsledkům posouzení ohrožení zabezpečení kontejneru qualys, a to buď prostřednictvím rozhraní REST API služby Azure Resource Graph (ARG), nebo dotazů REST API nebo ARG podsestavy, musíte stávající dotazy aktualizovat tak, aby odpovídaly novému schématu nebo rozhraní REST API poskytovanému posouzením ohrožení zabezpečení nového kontejneru s využitím Microsoft Defender Správa zranitelností.

Další část obsahuje několik příkladů, které vám pomůžou pochopit, jak by se existující dotazy na nabídku Qualys měly přeložit na ekvivalentní dotazy s nabídkou využívající Microsoft Defender Správa zranitelností.

Příklady dotazů ARG

Všechny dotazy Azure Resource Graphu použité pro vytváření sestav by se měly aktualizovat tak, aby odrážely dříve uvedené Microsoft Defender Správa zranitelností assessmentKeys. Tady jsou příklady, které vám pomůžou přejít na dotazy Microsoft Defender Správa zranitelností.

Zobrazení imagí kontejneru, které nejsou v pořádku

Qualys
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
    | project 
        Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)), 
        ResourceType = tolower(split(id,"/").[6]), 
        subscriptionId, 
        severity = properties.status.severity, 
        status = properties.status.code, 
        VulnId = properties.id, 
        description = properties.displayName, 
        patchable = properties.additionalData.patchable, 
        cve = properties.additionalData.cve, 
        Repo = properties.additionalData.repositoryName, 
        imageDigest = properties.additionalData.imageDigest
    | where status == 'Unhealthy' 
Microsoft Defender Správa zranitelností
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
    | project 
        Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)), 
        ResourceType = tolower(split(id,"/").[6]), 
        subscriptionId, 
        severity = properties.additionalData.vulnerabilityDetails.severity, 
        status = properties.status.code, 
        VulnId = properties.id, 
        description = properties.description, 
        fixStatus = properties.additionalData.softwareDetails.fixStatus, 
        Repo = properties.additionalData.artifactDetails.repositoryName, 
        imageUri = properties.resourceDetails.id
    | where status == 'Unhealthy' 

Zobrazení imagí kontejnerů, které jsou v pořádku

Qualys
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
    | project 
        Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)), 
        ResourceType = tolower(split(id,"/").[6]), 
        subscriptionId, 
        status = properties.status.code, 
        Repo = properties.additionalData.repositoryName, 
        imageDigest = properties.additionalData.imageDigest
    | where status == 'Healthy'
Microsoft Defender Správa zranitelností
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
    | project 
        Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)), 
        ResourceType = tolower(split(id,"/").[6]), 
        subscriptionId, 
        status = properties.status.code,
        Repo = properties.additionalData.artifactDetails.repositoryName, 
        imageUri = properties.resourceDetails.id
    | where status == 'Healthy' 

Počet ohrožených obrázků podle závažnosti

Qualys
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | extend status = tostring(parse_json(properties).status.code)
    | extend severity = tostring(parse_json(properties).status.severity)
    | extend vulId=tostring((properties).id)
    | extend Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id))
    | where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
    | where status == 'Unhealthy' 
    | distinct 
        vulId, 
        severity
    | summarize count=count() by tostring(severity)
Microsoft Defender Správa zranitelností
securityresources
    | where type == "microsoft.security/assessments/subassessments"
    | extend assessmentKey = extract(".*assessments/(.+?)/.*",1,  id)
    | extend severity = tostring(properties.additionalData.vulnerabilityDetails.severity)
    | extend status = tostring(parse_json(properties).status.code)
    | extend vulId=tostring((properties).id)
    | extend Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id))
    | where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
    | where status == 'Unhealthy' 
    | distinct 
        vulId, 
        severity
    | summarize count=count() by tostring(severity)

Zobrazení podu, kontejneru a oboru názvů pro spuštěnou ohroženou image v clusteru AKS

Qualys
securityresources 
| where type =~ "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(@"(?i)providers/Microsoft.Security/assessments/([^/]*)", 1, id),
         subAssessmentId = tostring(properties.id),
         parentResourceId = extract("(.+)/providers/Microsoft.Security", 1, id)
| extend resourceId = extract(@'(?i)(.*?)@([^/]+)', 1,tostring(properties.resourceDetails.id))
| extend severity = tostring(parse_json(properties).status.severity)
| extend VulnId = tostring(parse_json(properties).id)
| extend status = tostring(parse_json(properties).status.code)
| where assessmentKey == "41503391-efa5-47ee-9282-4eff6131462c"
| extend resourceId = tostring(properties.resourceDetails.id),
         parsedJson = parse_json(tostring(properties.additionalData))
| extend containerData = parse_json(tostring(parsedJson.data.Containers))
| mv-expand containerDetails = containerData to typeof(dynamic)
| extend ContainerName = tostring(containerDetails.Name),
         ContainerPod = tostring(containerDetails.Pod.Name),
         Namespace = tostring(containerDetails.Pod.Namespace),
         ControllerType = tostring(containerDetails.Pod.ControllerType),
         ControllerName = tostring(containerDetails.Pod.ControllerName)
| where status == 'Unhealthy'
|project Image=resourceId, VulnId,severity, Namespace, ContainerName, ContainerPod,ControllerName,ControllerType

Microsoft Defender Správa zranitelností
securityresources 
| where type =~ "microsoft.security/assessments/subassessments"
| extend assessmentKey=extract(@"(?i)providers/Microsoft.Security/assessments/([^/]*)", 1, id)
| where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5" 
| extend azureClusterId = tostring(properties.additionalData.clusterDetails.clusterResourceId)
| extend cve =tostring(properties.id)
| extend status = properties.status.code
| extend severity=tostring(parse_json(properties).additionalData.vulnerabilityDetails.severity)
| where status == "Unhealthy"
| extend azureImageId = tostring(properties.resourceDetails.id)
| extend severity = tolower(properties.additionalData.vulnerabilityDetails.severity)
| extend kubernetesContext = properties.additionalData.kubernetesContext
| mv-expand workload = kubernetesContext.workloads
| mv-expand OwnedResource = workload.ownedResources
| mv-expand OwnedContainer = OwnedResource.containers                    
| mv-expand Container = workload.containers                    
| extend isController = isnotempty(workload.ownedResources)
| extend namespace =  tostring(workload.namespace)
| extend podName = iff(isController, tostring(OwnedResource.name), workload.name)
| extend containerName = iff(isController, tostring(OwnedContainer.name), Container.name)
| extend controllerName =  iff(isController, tostring(workload.name),"") 
| extend controllerType =  iff(isController, tostring(workload.kind),"")                       
| extend imageName = extract("(.+)@sha256:", 1, azureImageId) 
| project imageName, cve, severity, clusterId = azureClusterId, containerName, podName, controllerName, controllerType, namespace

Krok 3: (Volitelné) Vytváření sestav zabezpečení kontejneru

Microsoft Defender for Cloud poskytuje předsazovací sestavy prostřednictvím Azure Workbooks, včetně sešitu zabezpečení kontejneru.

Screenshot of Container Security workbook.

Tento sešit obsahuje výsledky kontroly ohrožení zabezpečení kontejneru z registru i modulu runtime.

Screenshot of workbook including container vulnerability scanning results.

Sešit poskytuje výsledky kontroly Microsoft Defender Správa zranitelností a nabízí komplexní přehled o ohroženích zabezpečení zjištěných v imagích kontejneru Azure Registry. Sešit Zabezpečení kontejnerů poskytuje následující výhody pro posouzení ohrožení zabezpečení kontejneru:

  • Přehled všech ohrožení zabezpečení: Zobrazte všechna zjištěná ohrožení zabezpečení napříč vašimi registry kontejnerů Azure a spuštěnými v clusteru AKS.

  • Řídicí panel zneužitelných ohrožení zabezpečení: Vyhrazený oddíl zvýrazňuje ohrožení zabezpečení se známými zneužitími a umožňuje týmům zabezpečení zaměřit se na ohrožení zabezpečení, která představují vysoké riziko zneužití. Tato možnost je dostupná pouze u kontroly posouzení ohrožení zabezpečení kontejneru s využitím Microsoft Defender Správa zranitelností.

    Screenshot of exploitable vulnerabilities dashboard.

  • Další dotazy ARG: Pomocí tohoto sešitu můžete zobrazit další příklady dotazů na data ARG mezi Qualys a Microsoft Defender Správa zranitelností. Další informace o úpravách sešitů najdete v galerii Sešity v programu Microsoft Defender for Cloud.

Další kroky