Övergång till Microsoft Defender – hantering av säkerhetsrisker

Microsoft Defender för molnet förenar alla lösningar för sårbarhetsbedömning för att använda Microsoft Defender – hantering av säkerhetsrisker sårbarhetsskanner.

Microsoft Defender – hantering av säkerhetsrisker integreras i många molnbaserade användningsfall, till exempel containrars leverans- och körningsscenarier.

Sårbarhetsbedömningen för Defender för molnet containrar som drivs av Qualys har nu dragits tillbaka. Om du ännu inte har övergått tillsårbarhetsbedömningar för Azure med Microsoft Defender – hantering av säkerhetsrisker följer du stegen på sidan för att göra övergången.

Steg 1: Kontrollera att genomsökning är aktiverat

Genomsökning av sårbarhetsbedömning för containrar som drivs av Microsoft Defender – hantering av säkerhetsrisker är aktiverat som standard för Defender för containrar, Defender för containerregister (inaktuell) och Defender Cloud Security Posture Management. Organisationer som inaktiverade den måste återaktivera sårbarhetsbedömningen för agentlösa containrar i något av planerna. Den återspeglar automatiskt för någon av de nämnda planerna som är aktiverad.

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

Mer information om hur du aktiverar Microsoft Defender – hantering av säkerhetsrisker genomsökning finns i Aktivera sårbarhetsbedömning som drivs av Microsoft Defender – hantering av säkerhetsrisker.

Steg 2: (Valfritt) Uppdatera REST API- och Azure Resource Graph-frågor

Om du kom åt resultatet av utvärdering av sårbarhetsbedömningar för containrar via Qualys programmatiskt, antingen via Rest API:et för Azure Resource Graph (ARG) eller REST API för underbedömning eller ARG-frågor, måste du uppdatera dina befintliga frågor så att de matchar det nya schemat och/eller REST-API:et som tillhandahålls av den nya sårbarhetsbedömningen för containrar som drivs av Microsoft Defender – hantering av säkerhetsrisker.

Nästa avsnitt innehåller några exempel som kan hjälpa dig att förstå hur befintliga frågor för Qualys-baserade erbjudanden ska översättas till motsvarande frågor med det Microsoft Defender – hantering av säkerhetsrisker drivna erbjudandet.

ARG-frågeexempel

Alla Azure Resource Graph-frågor som används för rapportering bör uppdateras för att återspegla de Microsoft Defender – hantering av säkerhetsrisker assessmentKeys som angavs tidigare. Följande är exempel som hjälper dig att övergå till Microsoft Defender – hantering av säkerhetsrisker frågor.

Visa containeravbildningar som inte är felfria

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 – hantering av säkerhetsrisker
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' 

Visa felfria containeravbildningar

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 – hantering av säkerhetsrisker
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' 

Räkna sårbara bilder efter allvarlighetsgrad

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 – hantering av säkerhetsrisker
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)

Visa podd, container och namnrymd för en sårbar avbildning som körs i AKS-klustret

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 – hantering av säkerhetsrisker
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

Steg 3: (Valfritt) Rapportering av containersäkerhet

Microsoft Defender för molnet tillhandahåller rapportering direkt via Azure-arbetsböcker, inklusive en containersäkerhetsarbetsbok.

Screenshot of Container Security workbook.

Den här arbetsboken innehåller resultat av sårbarhetsgenomsökning av containrar från både register och körning.

Screenshot of workbook including container vulnerability scanning results.

Arbetsboken ger resultat från Microsoft Defender – hantering av säkerhetsrisker genomsökning och ger en omfattande översikt över sårbarheter som identifierats i dina Azure Registry-containeravbildningar. Arbetsboken Containers Security ger följande fördelar med sårbarhetsbedömning av containrar:

  • Översikt över alla sårbarheter: Visa alla sårbarheter som identifierats i dina Azure Container Registries och som körs i AKS-klustret.

  • Instrumentpanel för sårbarheter som kan utnyttjas: Ett dedikerat avsnitt som belyser sårbarheter med kända sårbarheter, vilket gör det möjligt för säkerhetsteam att fokusera på sårbarheter som utgör en hög risk för utnyttjande. Detta är endast tillgängligt med genomsökning av sårbarhetsbedömning för containrar som drivs av Microsoft Defender – hantering av säkerhetsrisker.

    Screenshot of exploitable vulnerabilities dashboard.

  • Ytterligare ARG-frågor: Du kan använda den här arbetsboken för att visa fler exempel på hur du frågar ARG-data mellan Qualys och Microsoft Defender – hantering av säkerhetsrisker. Mer information om hur du redigerar arbetsböcker finns i galleriet Arbetsböcker i Microsoft Defender för molnet.

Nästa steg