Переход на Управление уязвимостями Microsoft Defender

Microsoft Defender для облака объединяет все решения по оценке уязвимостей для использования сканера уязвимостей Управление уязвимостями Microsoft Defender.

Управление уязвимостями Microsoft Defender интегрируется во многих вариантах использования в облаке, таких как сценарии доставки контейнеров и среды выполнения.

Оценка уязвимостей контейнеров Defender для облака на платформе Qualys теперь прекращена. Если вы еще не перешли наоценки уязвимостей для Azure с Управление уязвимостями Microsoft Defender, выполните действия на странице, чтобы сделать переход.

Шаг 1. Убедитесь, что сканирование включено

Проверка уязвимостей контейнеров, на которую работает Управление уязвимостями Microsoft Defender, включена по умолчанию для Defender для контейнеров, Defender для реестров контейнеров (не рекомендуется) и Управления posture Cloud Security Defender. Организации, отключив их, необходимо повторно включить оценку уязвимостей без агента в одном из планов. Он автоматически отражает любой из упоминание включенных планов.

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

Дополнительные сведения о включении сканирования Управление уязвимостями Microsoft Defender см. в статье "Включение оценки уязвимостей, на основе Управление уязвимостями Microsoft Defender".

Шаг 2. Обновление REST API и запросов Azure Resource Graph (необязательно)

Если вы получили доступ к результатам оценки уязвимостей контейнеров с помощью Qualys программным способом, либо через REST API Azure Resource Graph (ARG) или REST API subassessment REST API или ARG, необходимо обновить существующие запросы, чтобы соответствовать новой схеме и /или REST API, предоставляемой новой оценкой уязвимостей контейнера, созданной Управление уязвимостями Microsoft Defender.

В следующем разделе содержится несколько примеров, которые помогут понять, как существующие запросы для предложения Qualys с питанием должны быть преобразованы в эквивалентные запросы с Управление уязвимостями Microsoft Defender powered предложение.

Примеры запросов ARG

Все запросы Azure Resource Graph, используемые для создания отчетов, должны быть обновлены, чтобы отразить перечисленные ранее Управление уязвимостями Microsoft Defender оценки. Ниже приведены примеры, которые помогут вам перейти к Управление уязвимостями Microsoft Defender запросам.

Отображение неработоспособных образов контейнеров

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
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' 

Отображение работоспособных образов контейнеров

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
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' 

Подсчет уязвимых изображений по серьезности

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
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)

Просмотр pod, контейнера и пространства имен для работающего уязвимого образа в кластере 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
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. Отчеты о безопасности контейнеров (необязательно)

Microsoft Defender для облака предоставляет отчеты из коробки с помощью книг Azure, включая книгу "Безопасность контейнеров".

Screenshot of Container Security workbook.

Эта книга включает в себя сканирование уязвимостей контейнеров как из реестра, так и среды выполнения.

Screenshot of workbook including container vulnerability scanning results.

Книга предоставляет результаты проверки Управление уязвимостями Microsoft Defender, предлагая полный обзор уязвимостей, обнаруженных в образах контейнеров Реестра Azure. Книга "Безопасность контейнеров" предоставляет следующие преимущества для оценки уязвимостей контейнеров:

  • Обзор всех уязвимостей. Просмотр всех уязвимостей, обнаруженных в реестрах контейнеров Azure, и запуск в кластере AKS.

  • Панель мониторинга уязвимостей, доступных для эксплойтов: выделенный раздел, который выделяет уязвимости с известными эксплойтами, что позволяет группам безопасности сосредоточиться на уязвимостях, которые представляют высокий риск эксплуатации. Это доступно только при проверке уязвимостей контейнера с помощью Управление уязвимостями Microsoft Defender.

    Screenshot of exploitable vulnerabilities dashboard.

  • Дополнительные запросы ARG: эту книгу можно использовать для просмотра дополнительных примеров запроса данных ARG между Qualys и Управление уязвимостями Microsoft Defender. Дополнительные сведения о том, как редактировать книги, см. в коллекции книг в Microsoft Defender для облака.

Следующие шаги