Microsoft Defender Güvenlik Açığı Yönetimi geçiş

Bulut için Microsoft Defender, Microsoft Defender Güvenlik Açığı Yönetimi güvenlik açığı tarayıcısını kullanmak için tüm güvenlik açığı değerlendirme çözümlerini birleştiren bir çözümdür.

Microsoft Defender Güvenlik Açığı Yönetimi, kapsayıcı gönderimi ve çalışma zamanı senaryoları gibi birçok buluta özel kullanım örneğiyle tümleşir.

Qualys tarafından desteklenen Bulut için Defender Kapsayıcıları Güvenlik Açığı Değerlendirmesi kullanımdan kaldırılmıştır. Microsoft Defender Güvenlik Açığı Yönetimi ile Azure için güvenlik açığı değerlendirmelerine henüzgeçiş yapmadıysanız, geçişi yapmak için sayfadaki adımları izleyin.

1. Adım: Taramanın etkinleştirildiğini doğrulayın

Microsoft Defender Güvenlik Açığı Yönetimi tarafından desteklenen kapsayıcı güvenlik açığı değerlendirme taraması, Kapsayıcılar için Defender, Kapsayıcı Kayıt Defterleri için Defender (kullanım dışı) ve Defender Bulut Güvenliği Duruş Yönetimi için varsayılan olarak etkindir. Devre dışı bırakmış olan kuruluşların planlardan birinde Aracısız kapsayıcı güvenlik açığı değerlendirmesi iki durumlu düğmesini yeniden etkinleştirmesi gerekir. Bu, belirtilen planlardan herhangi birine otomatik olarak yansır.

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

Microsoft Defender Güvenlik Açığı Yönetimi taramayı etkinleştirme hakkında daha fazla bilgi için bkz. Microsoft Defender Güvenlik Açığı Yönetimi tarafından desteklenen güvenlik açığı değerlendirmesini etkinleştirme.

2. Adım: (İsteğe bağlı) REST API ve Azure Kaynak Grafı sorgularını güncelleştirme

Azure Kaynak Grafı (ARG) Rest API veya Subassessment REST API veya ARG sorguları aracılığıyla Qualys tarafından program aracılığıyla kapsayıcı güvenlik açığı değerlendirme sonuçlarına erişiyorsanız, mevcut sorgularınızı yeni şemayla ve/veya tarafından desteklenen yeni kapsayıcı güvenlik açığı değerlendirmesi tarafından sağlanan REST API ile eşleşecek şekilde güncelleştirmeniz gerekir Microsoft Defender Güvenlik Açığı Yönetimi.

Sonraki bölümde Qualys destekli teklif için mevcut sorguların Microsoft Defender Güvenlik Açığı Yönetimi destekli teklifle eşdeğer sorgulara nasıl çevrilmesi gerektiğini anlamanıza yardımcı olabilecek birkaç örnek yer almaktadır.

ARG sorgu örnekleri

Raporlama için kullanılan tüm Azure Kaynak Grafı sorguları, daha önce listelenen Microsoft Defender Güvenlik Açığı Yönetimi değerlendirme Tuşlarını yansıtacak şekilde güncelleştirilmelidir. Aşağıda, Microsoft Defender Güvenlik Açığı Yönetimi sorgulara geçmenize yardımcı olacak örnekler verilmiştir.

İyi durumda olmayan kapsayıcı görüntülerini göster

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 Güvenlik Açığı Yönetimi
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' 

İyi durumdaki kapsayıcı görüntülerini göster

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 Güvenlik Açığı Yönetimi
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' 

Güvenlik açığı olan görüntüleri önem derecelerine göre sayma

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 Güvenlik Açığı Yönetimi
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)

AKS kümesinde çalışan bir güvenlik açığı olan görüntünün podunu, kapsayıcısını ve ad alanını görüntüleme

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 Güvenlik Açığı Yönetimi
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

3. Adım: (İsteğe Bağlı) Kapsayıcı Güvenliği raporlaması

Bulut için Microsoft Defender, Kapsayıcı Güvenliği çalışma kitabı da dahil olmak üzere Azure Çalışma Kitapları aracılığıyla kullanıma açık raporlama sağlar.

Screenshot of Container Security workbook.

Bu çalışma kitabı hem kayıt defterinden hem de çalışma zamanından gelen kapsayıcı güvenlik açığı tarama sonuçlarını içerir.

Screenshot of workbook including container vulnerability scanning results.

Çalışma kitabı, azure kayıt defteri kapsayıcı görüntülerinizde algılanan güvenlik açıklarına kapsamlı bir genel bakış sunan Microsoft Defender Güvenlik Açığı Yönetimi taramadan sonuçlar sağlar. Kapsayıcı güvenliği çalışma kitabı, kapsayıcı güvenlik açığı değerlendirmesi için aşağıdaki avantajları sağlar:

  • Tüm güvenlik açıklarına genel bakış: Azure Container Kayıt Defterlerinizde algılanan ve AKS kümesinde çalışan tüm güvenlik açıklarını görüntüleyin.

  • Açıklardan yararlanılabilir güvenlik açıkları panosu: Güvenlik ekiplerinin yüksek güvenlik açığı riski oluşturan güvenlik açıklarına odaklanmasına olanak tanıyan, bilinen açıklara sahip güvenlik açıklarını vurgulayan özel bir bölüm. Bu yalnızca Microsoft Defender Güvenlik Açığı Yönetimi tarafından desteklenen kapsayıcı güvenlik açığı değerlendirme taramasıyla kullanılabilir.

    Screenshot of exploitable vulnerabilities dashboard.

  • Ek ARG sorguları: Qualys ile Microsoft Defender Güvenlik Açığı Yönetimi arasında ARG verilerini sorgulamaya yönelik daha fazla örnek görüntülemek için bu çalışma kitabını kullanabilirsiniz. Çalışma kitaplarını düzenleme hakkında daha fazla bilgi için bkz. Bulut için Microsoft Defender çalışma kitapları galerisi.

Sonraki adımlar