Обнаруживайте локальные агенты ИИ с помощью Microsoft Defender для конечной точки (предварительная версия)

Важно!

Некоторые сведения относятся к предварительно выпущенному продукту, который может быть существенно изменен перед выпуском. Корпорация Майкрософт не дает явных или подразумеваемых гарантий относительно предоставленных здесь сведений.

Microsoft Defender автоматически обнаруживает поддерживаемые локальные агенты ИИ и серверы MCP, настроенные на подключенных к Defender устройствах, и отображает их в инвентаре агентов ИИ и в расширенном поиске. Дополнительные сведения об обнаружении локальных агентов ИИ см. в статье Обнаружение локальных агентов ИИ с помощью Microsoft Defender для конечной точки.

Из этой статьи вы узнаете, как просматривать обнаруженные агенты в инвентаризации, изучать их связи с устройствами и удостоверениями, а также исследовать присутствие агента с помощью расширенной охоты.

Примечание.

Функция обнаружения локальных ИИ-агентов обеспечивает только возможности обнаружения и расследования и не включает оценку уровня защищенности или оповещения для агентов конечных устройств.

Предварительные условия

Прежде чем обнаруживать локальные агенты ИИ в конечных точках, убедитесь, что вы соответствуете следующим требованиям:

  • Ваша среда находится в коммерческом облаке. Суверенные и национальные облака не поддерживаются.
  • У вашей организации есть лицензия Microsoft Defender для конечной точки, план 2, Microsoft 365 E5, Microsoft Agent 365 или Microsoft 365 E7.
  • Устройства подключены к Microsoft Defender для конечной точки.
  • Устройства запускают поддерживаемую версию Windows или macOS, а антивирусная программа Microsoft Defender обновляется с текущими ежемесячными обновлениями платформы и подсистемы.
  • На ваших устройствах Microsoft Defender Antivirus работает в активном режиме, а защита в режиме реального времени включена в приложении «Безопасность Windows».

Вам не требуется дополнительное развертывание, конфигурация или скрипты, выходящие за рамки требований к подключению устройства. Если устройство соответствует всем предварительным требованиям, обнаружение агента начинается автоматически.

Просмотреть локальных агентов ИИ в реестре

  • Чтобы просмотреть список всех локальных агентов ИИ, обнаруженных в конечных точках, выполните следующие действия:

    1. Войдите на портал Microsoft Defender.

    2. На левой панели навигации выберите Ресурсы>ИИ-агенты.

    3. Выберите Локальные агенты , чтобы просмотреть отфильтрованный список локальных агентов ИИ, обнаруженных на устройствах конечных точек.

  • Чтобы просмотреть сведения о конкретном агенте, выполните следующие действия:

    1. В списке Локальные агенты выберите агент, чтобы открыть область Агент .

      Снимок экрана: инвентаризация локальных агентов ИИ на портале Microsoft Defender с обнаруженными агентами.

    2. Просмотрите сведения об агенте, в том числе:

      • Имя агента, версия и связанный процесс
      • Связанное устройство и пользователь
      • Первые просмотренные и обновленные метки времени
      • Уровень целостности, состояние автоматического утверждения и индикатор доверия
      • Настроенные серверы MCP, если обнаружены

    Дополнительные сведения об использовании инвентаризации агентов ИИ см. в статье Обнаружение агентов ИИ и оценка состояния безопасности с помощью Microsoft Defender.

Запрашивайте локальных агентов ИИ с помощью расширенного поиска

Используйте Advanced hunting для проактивного анализа наличия локальных ИИ-агентов, чтобы понять, к каким пользователям и ресурсам они могут получить доступ, и выявить конфигурации высокого риска. Эти запросы помогают оценивать уязвимость, трассировать пути доступа к конфиденциальным ресурсам и определять приоритеты реагирования на безопасность.

Таблицы ExposureGraphNodes и ExposureGraphEdges представляют собой граф безопасности для локальных агентов ИИ, включая сущности и связи.

Примечание.

Следующие запросы используют таблицу ExposureGraphEdges для запроса устройства, связанного с агентом ИИ. Вы также можете использовать ExposureGraphNodes таблицу, чтобы запрашивать фактический агент.

Получите список агентов ИИ на всех конечных точках

В этом запросе перечислены все обнаруженные локальные агенты ИИ и устройства, на которые они работают:

ExposureGraphEdges
| where SourceNodeLabel == "endpointAiAgent"
| where EdgeLabel =~ "runs on"
| summarize Devices = make_set(TargetNodeName),
            DeviceCount = dcount(TargetNodeName)
    by AIAgent = SourceNodeName
| sort by DeviceCount desc

Сопоставление агентов ИИ с пользователями

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

let accessEdges = dynamic(["contains", "has credentials of", "has permissions to",
                           "has role on", "can authenticate as", "can authenticate to"]);
ExposureGraphEdges
| where SourceNodeLabel == "endpointAiAgent"
| project AIAgent = SourceNodeName, DeviceId = TargetNodeId, Device = TargetNodeName
| join kind=inner (
    ExposureGraphEdges
    | where EdgeLabel in (accessEdges)
    | where TargetNodeLabel in ("device", "ec2.instance", "microsoft.compute/virtualmachines")
    | project UserId = SourceNodeId, User = SourceNodeName,
              UserType = SourceNodeLabel, DeviceId = TargetNodeId
) on DeviceId
| summarize AIAgents = make_set(AIAgent) by Device, User, UserType
| sort by Device asc

Найти агентов ИИ на устройствах пользователей с широкими правами доступа

Этот запрос позволяет определить, какие пользователи на локальных устройствах с ИИ-агентом имеют доступ к наибольшему числу ресурсов, что помогает расставить приоритеты рисков на основе масштаба доступа:

let accessEdges = dynamic(["contains", "has credentials of", "has permissions to",
                           "has role on", "can authenticate as", "can authenticate to",
                           "member of", "can impersonate as"]);
let biEdges =
    ExposureGraphEdges
    | where EdgeLabel in (accessEdges)
    | project src = SourceNodeId, tgt = TargetNodeId,
              srcName = SourceNodeName, tgtName = TargetNodeName, edge = EdgeLabel
    | union (
        ExposureGraphEdges
        | where EdgeLabel in (accessEdges)
        | project src = TargetNodeId, tgt = SourceNodeId,
                  srcName = TargetNodeName, tgtName = SourceNodeName, edge = EdgeLabel
    );
let userAccess =
    ExposureGraphEdges
    | where SourceNodeLabel == "user"
    | where EdgeLabel in ("has permissions to", "has role on")
    | summarize 
        ResourceCount = dcount(TargetNodeId),
        ResourceTypes = make_set(TargetNodeLabel)
        by UserId = SourceNodeId, User = SourceNodeName;
ExposureGraphEdges
| where SourceNodeLabel == "endpointAiAgent"
| project AIAgent = SourceNodeName, n1 = TargetNodeId, Device = TargetNodeName
| join kind=inner (
    biEdges | project n1 = src, UserId = tgt, User = tgtName
) on n1
| join kind=inner userAccess on UserId
| summarize AIAgents = make_set(AIAgent) by Device, User, ResourceCount,
    tostring(ResourceTypes)
| sort by ResourceCount desc

Найдите ИИ-агентов, у которых есть пути к критически важным или конфиденциальным ресурсам

Этот запрос отслеживает пути доступа от локальных агентов ИИ через граф воздействия на ресурсы, помеченные как критические или содержащие конфиденциальные данные:

let accessEdges = dynamic(["contains", "has credentials of", "has permissions to",
                           "has role on", "can authenticate as", "can authenticate to",
                           "member of", "can impersonate as"]);
let biEdges =
    ExposureGraphEdges
    | where EdgeLabel in (accessEdges)
    | project src = SourceNodeId, tgt = TargetNodeId,
              srcName = SourceNodeName, tgtName = TargetNodeName, edge = EdgeLabel
    | union (
        ExposureGraphEdges
        | where EdgeLabel in (accessEdges)
        | project src = TargetNodeId, tgt = SourceNodeId,
                  srcName = TargetNodeName, tgtName = SourceNodeName, edge = EdgeLabel
    );
let sensitiveAssets =
    ExposureGraphNodes
    | extend CriticalityLevel = toint(NodeProperties.rawData.criticalityLevel.criticalityLevel)
    | extend HasSensitiveData = iff(isnotempty(NodeProperties.rawData.containsSensitiveData),
        "Yes", "No")
    | extend CriticalityReason = tostring(NodeProperties.rawData.criticalityLevel.ruleNames)
    | where CriticalityLevel > 0 or HasSensitiveData == "Yes"
    | extend Criticality = case(
        CriticalityLevel == 1, "Critical",
        CriticalityLevel == 2, "High",
        CriticalityLevel == 3, "Medium",
        CriticalityLevel == 4, "Low",
        "Sensitive Data"
    )
    | project AssetId = NodeId, AssetName = NodeName, AssetType = NodeLabel,
              Criticality, HasSensitiveData, CriticalityReason;
ExposureGraphEdges
| where SourceNodeLabel == "endpointAiAgent"
| project AIAgent = SourceNodeName, n1 = TargetNodeId, Device = TargetNodeName
| join kind=inner (
    biEdges | project n1 = src, n2 = tgt, Hop1 = tgtName, Via1 = edge
) on n1
| join kind=inner (
    biEdges | project n2 = src, n3 = tgt, Via2 = edge
) on n2
| join kind=inner (
    sensitiveAssets | project n3 = AssetId, AssetName, AssetType,
                             Criticality, HasSensitiveData, CriticalityReason
) on n3
| summarize ExposedVia = make_set(Hop1) by
    AIAgent, Device, AssetName, AssetType,
    Criticality, HasSensitiveData, CriticalityReason
| sort by Criticality asc, HasSensitiveData desc