AIAgentsInfo (предварительная версия)

Важно!

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

Таблица AIAgentsInfo переходит в таблицу AgentsInfo . Microsoft Agent 365 клиенты должны использовать таблицу AgentsInfo сегодня. Таблица AIAgentsInfo остается доступной до 1 июля 2026 г. Обновите запросы для использования AgentsInfo до этой даты. Дополнительные сведения см. в разделе Расширенная схема охоты — изменения именования.

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

Microsoft Defender заполняет эту таблицу через соединители в Microsoft Defender for Cloud Apps Power Plaform и Microsoft Agent 365. Если ваша организация не развертывает эти службы, запросы, использующие таблицу, не работают и не возвращают никаких результатов. Дополнительные сведения см. в разделе:

Сведения о других таблицах в схеме расширенного поиска см. в справочнике по расширенному поиску.

Имя столбца Тип данных Описание
Timestamp datetime Последняя дата и время, записанные для сведений об агенте
RegistrySource string Реестр, предоставляющий метаданные агента
AIAgentId guid Уникальный идентификатор агента, назначенный ему в Microsoft 365 Copilot или Copilot Studio
AIAgentName string Отображаемое имя агента
AgentCreationTime datetime Дата и время создания агента
CreatorAccountUpn string Имя участника-пользователя (UPN) учетной записи, создающей агент
OwnerAccountUpns string Имена субъектов-пользователей (UPN) всех владельцев агента
LastModifiedByUpn string Имя участника-пользователя (UPN) учетной записи, которая в последний раз изменяла этот агент
LastModifiedTime datetime Дата и время последнего изменения агента
LastPublishedTime datetime Дата и время последней публикации агента
LastPublishedByUpn string Имя участника-пользователя (UPN) учетной записи, последней публиковавшей агент
AgentDescription string Описание агента, отображаемое в источнике агента
AgentStatus string Состояние агента; возможные значения: Создано, Опубликовано, Удалено
UserAuthenticationType string Настроенный тип проверки подлинности агента для пользователей, взаимодействующих с агентом; возможные значения: None, Microsoft, Custom
AgentUsers string Список имен субъектов-пользователей (UPN) или идентификаторов групп, которые могут использовать агент
KnowledgeDetails string Сведения об источниках знаний, добавленных в агент
AgentActionTriggers string Список триггеров, которые заставляют автономный агент принимать меры
RawAgentInfo string Содержимое необработанного JSON, описывающего агент и содержащего сведения о конфигурации, полученное от поставщика
AuthenticationTrigger string Указывает, когда для агента активируется проверка подлинности; возможные значения: При необходимости, Всегда
AccessControlPolicy string Пользователи, которые могут взаимодействовать с агентом; возможные значения: Any, Читатели Copilot, Членство в группах, Любой (мультитенантный)
AuthorizedSecurityGroupIds dynamic Список идентификаторов групп Azure Active Directory, которым разрешено взаимодействовать с агентом
AgentTopicsDetails dynamic Спецификации разделов, которые может выполнять агент
AgentToolsDetails dynamic Спецификации средств, к которым агент может получить доступ и выполнять действия с
EnvironmentId string Идентификатор среды Microsoft Power Platform, в которой находится агент
Platform string Платформа, которая предоставила сведения об агентах; возможные значения: Copilot Studio
IsGenerativeOrchestrationEnabled boolean Указывает, использует ли агент генеративную оркестрацию (то есть динамически выбирает средства, знания и действия на основе контекста) для работы.
AgentAppId string Уникальный идентификатор приложения, зарегистрированный для агента в Microsoft Entra
ConnectedAgentsSchemaNames dynamic Список имен схем подключенных агентов, которые являются независимо управляемыми агентами, связанными с основным агентом для оркестрации.
ChildAgentsSchemaNames dynamic Список имен схем дочерних агентов, которые существуют в основном агенте
Version string Версия агента
IsBlocked boolean Указывает, заблокирован ли агент администратором.
Instructions string Системный запрос агента, определяющий его поведение по умолчанию, личность и операционные границы
EntraObjectId string Уникальный идентификатор объекта корпоративного приложения агента по Microsoft Entra ID
EntraBlueprintId string Идентификатор субъекта схемы идентификации агента по Microsoft Entra ID для агентов
AIModel string Модель ИИ, на основе агента
AccessCapabilities dynamic Возможности доступа к данным, предоставленные агенту
ElementTypes dynamic Типы технических компонентов, составляющие агент
SourceAgentId string Собственный идентификатор агента платформы, например идентификатор Azure Resource Manager (ARM) для агентов Microsoft Foundry или идентификатор агента в области среды для агентов Copilot Studio

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

Следующие примеры запросов возвращают результаты в зависимости от указанного источника реестра или соединителя:

  • Чтобы вернуть результаты в Agent 365, добавьте RegistrySource == "A365" в запрос.
  • Чтобы вернуть результаты для Defender for Cloud Apps Power Platform, используйте .RegistrySource == "PowerPlatform"

Запросы, использующие Agent 365 в качестве источника реестра

Список всех агентов в Agent 365

Этот запрос определяет все агенты, опубликованные в Agent 365.

let IdentityIdtoUPN = materialize (
  IdentityInfo
  | distinct AccountObjectId, AccountUpn
  | extend AccountObjectId = tostring(AccountObjectId)
  | where isnotempty(AccountObjectId) and isnotempty(AccountUpn));
AIAgentsInfo
  | where RegistrySource == "A365"
  | summarize arg_max(Timestamp, *) by AIAgentId
  | extend AIAgentId = tostring(AIAgentId)
  | extend RawAgentInfoJson = parse_json(RawAgentInfo)
  | extend DeveloperName = RawAgentInfoJson.developerName
  | extend OwnerId = tostring(RawAgentInfoJson.owners[0].entityId)
    | extend CreatorId = tostring(RawAgentInfoJson.creatorId)
    | join kind=leftouter IdentityIdtoUPN on $left.OwnerId == $right.AccountObjectId
    | project-rename OwnerUpn = AccountUpn
    | join kind=leftouter IdentityIdtoUPN on $left.CreatorId == $right.AccountObjectId
    | project-rename CreatorUpn = AccountUpn
    | project-away OwnerId, CreatorId, AccountObjectId, AccountObjectId1
  | project-reorder AgentCreationTime, AIAgentId, AIAgentName,  OwnerUpn, CreatorUpn, DeveloperName

Опубликованные агенты без инструкций

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

Рекомендации:

  • Убедитесь, что все компоненты оркестрации создания имеют четко определенные инструкции, определяющие назначение, границы и разрешенные действия агента. Регулярно просматривайте и обновляйте инструкции для обеспечения безопасности и предотвращения неправильного использования.
let IdentityIdtoUPN = materialize (
IdentityInfo
| distinct AccountObjectId, AccountUpn
| extend AccountObjectId = tostring(AccountObjectId)
| where isnotempty(AccountObjectId) and isnotempty(AccountUpn));
AIAgentsInfo 
| summarize arg_max(Timestamp, *) by AIAgentId 
| where RegistrySource == "A365"
| where IsBlocked == 0 // not blocked
| where isnotnull(Instructions)
| where isempty(Instructions) or Instructions == "N/A"
| extend RawAgentInfoJson = parse_json(RawAgentInfo)
| extend DeveloperName = RawAgentInfoJson.developerName
| extend PublishedStatus = RawAgentInfoJson.publishedStatus
| where PublishedStatus == "Published" //published
| extend OwnerId = tostring(RawAgentInfoJson.owners[0].entityId)
| extend CreatorId = tostring(RawAgentInfoJson.creatorId)
| join kind=leftouter IdentityIdtoUPN on $left.OwnerId == $right.AccountObjectId
| project-rename OwnerUpn = AccountUpn
| join kind=leftouter IdentityIdtoUPN on $left.CreatorId == $right.AccountObjectId
| project-rename CreatorUpn = AccountUpn
| project-away RawAgentInfoJson, OwnerId, CreatorId, AccountObjectId, AccountObjectId1
| project-reorder AgentCreationTime, AIAgentId, AIAgentName, Instructions, OwnerUpn, CreatorUpn ,DeveloperName

Настроенные средства MCP

Этот запрос определяет агенты Agent 365 ИИ, для которых настроены средства протокола контекста модели (MCP). Средства MCP расширяют возможности агента, но вводят дополнительные рекомендации по безопасности, так как они могут выполнять расширенные операции и взаимодействовать с внешними ресурсами. Если они неправильно настроены или не нужны, эти средства могут увеличить область атаки и предоставить конфиденциальные данные или функциональные возможности.

Рекомендации:

  • У владельца агента убедитесь, что средство MCP по-прежнему требуется. Если это так, проверьте его конфигурацию на соответствие рекомендациям по обеспечению безопасности и обеспечьте доступ с минимальными привилегиями. Удалите все неиспользуемые или ненужные средства MCP, чтобы снизить риск.
let IdentityIdtoUPN = materialize (
  IdentityInfo
  | distinct AccountObjectId, AccountUpn
  | extend AccountObjectId = tostring(AccountObjectId)
  | where isnotempty(AccountObjectId) and isnotempty(AccountUpn));
  AIAgentsInfo
  | where RegistrySource == "A365"
  | summarize arg_max(Timestamp, *) by AIAgentId
  | extend RawAgentInfoJson = parse_json(RawAgentInfo)
  | extend DeveloperName = RawAgentInfoJson.developerName
  | extend OwnerId = tostring(RawAgentInfoJson.owners[0].entityId)
  | extend CreatorId = tostring(RawAgentInfoJson.creatorId)
  | join kind=leftouter IdentityIdtoUPN on $left.OwnerId == $right.AccountObjectId
  | project-rename OwnerUpn = AccountUpn
  | join kind=leftouter IdentityIdtoUPN on $left.CreatorId == $right.AccountObjectId
  | project-rename CreatorUpn = AccountUpn
  | where isnotempty(AgentActionTriggers)
  | extend AgentActionTriggersJson = parse_json(AgentActionTriggers)
  | where array_length(AgentActionTriggersJson) > 1
  | mv-expand Trigger = AgentActionTriggersJson
  | extend ActionType = Trigger.type
  | where ActionType == "RemoteMCPServer"
  | project-away Trigger, RawAgentInfoJson, AgentActionTriggersJson, OwnerId, CreatorId, AccountObjectId, AccountObjectId1
  | project-reorder AgentCreationTime, AIAgentId, AIAgentName, ActionType, OwnerUpn, CreatorUpn, DeveloperName

HTTP-запросы к конечным точкам, отличным от HTTPS

Этот запрос определяет Agent 365 агентов ИИ, которые отправляют HTTP-запросы к конечным точкам с помощью схем, отличных от HTTPS. Обмен данными через незашифрованный ПРОТОКОЛ HTTP предоставляет конфиденциальные данные при передаче и повышает риск перехвата или незаконного изменения. Злоумышленники могут использовать эту уязвимость для сбора учетных данных, маркеров сеанса или другой конфиденциальной информации, что приводит к утечке данных или несанкционированного доступа.

Рекомендации:

  • Просмотрите эти агенты и обновите все действия HTTP для использования конечных точек HTTPS. Если для конкретного бизнес-случая требуется небезопасная связь, задокументируйте обоснование и примените компенсирующие элементы управления, такие как шифрование на уровне сети или ограничения IP-адресов.
let IdentityIdtoUPN = materialize (
IdentityInfo
| distinct AccountObjectId, AccountUpn
| extend AccountObjectId = tostring(AccountObjectId)
| where isnotempty(AccountObjectId) and isnotempty(AccountUpn)); 
AIAgentsInfo
  | where RegistrySource == "A365"
  | summarize arg_max(Timestamp, *) by AIAgentId
  | extend RawAgentInfoJson = parse_json(RawAgentInfo)
  | extend DeveloperName = RawAgentInfoJson.developerName
  | extend OwnerId = tostring(RawAgentInfoJson.owners[0].entityId)
  | extend CreatorId = tostring(RawAgentInfoJson.creatorId)
  | join kind=leftouter IdentityIdtoUPN on $left.OwnerId == $right.AccountObjectId
  | project-rename OwnerUpn = AccountUpn
  | join kind=leftouter IdentityIdtoUPN on $left.CreatorId == $right.AccountObjectId
  | project-rename CreatorUpn = AccountUpn
  | where isnotempty(AgentActionTriggers)
  | extend AgentActionTriggersJson = parse_json(AgentActionTriggers)
  | where array_length(AgentActionTriggersJson) > 1
  | mv-expand Trigger = AgentActionTriggersJson
  | extend ServerUrls = Trigger.serverUrls
  | mv-expand Url = ServerUrls
  | extend ParsedUrl = parse_url(tostring(Url))
  | extend Scheme = tostring(ParsedUrl["Scheme"]) 
  | where isnotempty(Scheme) and Scheme != "https"
  | project-away RawAgentInfoJson, ParsedUrl, ServerUrls, OwnerId, CreatorId, AccountObjectId, AccountObjectId1
  | project-reorder AgentCreationTime, AIAgentId, AIAgentName, Url, Scheme, OwnerUpn, CreatorUpn, DeveloperName

Запросы, использующие Power Platform в качестве источника реестра

Агент без проверки подлинности

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

Рекомендации:

  • Подтвердите вариант использования агента с владельцем, чтобы определить, предназначен ли он для общедоступного доступа.
  • Просмотрите разделы, действия и источники знаний, чтобы убедиться в отсутствии внутренней или конфиденциальной информации.
AIAgentsInfo
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted" 
| where UserAuthenticationType == "None"
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, AgentStatus, CreatorAccountUpn, OwnerAccountUpns

Подозрительный HTTP-запрос на нестандартный порт

Определите агентов, использующих действия HTTP на портах, отличных от 443 или 80.

Рекомендации:

  • Подтвердите у владельца агента, что это необходимо, и узнайте о конкретном варианте использования для бизнеса.
AIAgentsInfo
// Find agents with topic that contains Http request action to non 443 port
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted"
| mvexpand Topic = AgentTopicsDetails
| where Topic has "HttpRequestAction"
| extend TopicActions = Topic.beginDialog.actions
| mvexpand action = TopicActions
| where action['$kind'] == "HttpRequestAction"
| extend Url = tostring(action.url.literalValue)
| extend ParsedUrl = parse_url(Url)
| extend Port = tostring(ParsedUrl["Port"])
| where isnotempty(Port) and Port != 443
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, ParsedUrl ,Url, Port, AgentStatus, CreatorAccountUpn, OwnerAccountUpns, Topic

Подозрительный HTTP-запрос к конечной точке соединителя

Определите агентов, использующих действия HTTP для конечной точки с доступным соединителем Power Platform.

Рекомендации:

  • Проверьте у владельца агента, если это необходимо, и спросите о варианте использования для бизнеса. Вместо этого рекомендуется использовать соединитель.
AIAgentsInfo
// Find agents with topic that contains Http request to endpoint with built-in connector
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted"
| mvexpand Topic = AgentTopicsDetails
| where Topic has "HttpRequestAction"
| extend TopicActions = Topic.beginDialog.actions
| mvexpand action = TopicActions
| where action['$kind'] == "HttpRequestAction"
| extend Url = tostring(action.url.literalValue)
| extend ParsedUrl = parse_url(Url)
| extend Host = tostring(ParsedUrl["Host"])
| where Host has_any("graph.microsoft.com", "management.azure.com")
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, ParsedUrl ,Url, Host, AgentStatus, CreatorAccountUpn, OwnerAccountUpns, Topic

Отправка электронной почты в входные значения, контролируемые ИИ

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

Рекомендации:

  • Подтвердите у владельца агента, требуется ли он, и узнайте о варианте использования для бизнеса. Если это возможно, жестко закодировать получателя сообщения электронной почты в действие.
AIAgentsInfo
//Find agents with email sending tool via microsoft 365 connector, where the input //parameters of the inputs are populated by generative orchestrator
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted"
| extend IsGenAIOrchestrator = tostring(todynamic(RawAgentInfo).Bot.Attributes.configuration) has '"GenerativeActionsEnabled": true'
| where IsGenAIOrchestrator
| mvexpand Action = AgentToolsDetails
| extend  OperationId = tostring(Action.action.operationId), ActionName = tostring(Action.modelDisplayName), Action
| where OperationId == "SendEmailV2" 
| where isempty(Action.inputs) //All inputs are populated by Orchestrator
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, AgentStatus, CreatorAccountUpn, OwnerAccountUpns, ActionName

Жестко заданные учетные данные в разделах или действиях

Агенты с жестко заданными учетными данными в разделах или действиях могут предоставлять учетные данные с открытым текстом для непреднамеренных сущностей.

Рекомендации:

//Find Agents with hard-coded credentials in Topics or Actions can expose clear-text credentials to unintended entities. 
let suspicious_patterns = @"(AKIA[0-9A-Z]{16})|(AIza[0-9A-Za-z_\-]{35})|(xox[baprs]-[0-9a-zA-Z]{10,48})|(ghp_[A-Za-z0-9]{36,59})|(sk_(live|test)_[A-Za-z0-9]{24})|(SG\.[A-Za-z0-9]{22}\.[A-Za-z0-9]{43})|(\d{8}:[\w\-]{35})|(eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+)|(Authorization\s*:\s*Basic\s+[A-Za-z0-9=:+]+)|([A-Za-z]+:\/\/[^\/\s]+:[^\/\s]+@[^\/\s]+)";
AIAgentsInfo
| summarize arg_max(Timestamp, *) by AIAgentId 
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted" 
| mv-expand tool = AgentToolsDetails
| mv-expand topic = AgentTopicsDetails
| where isnotempty(tool) and isnotempty(topic)
| where tool matches regex suspicious_patterns or topic matches regex suspicious_patterns
| extend SuspiciousMatchTool = tool, SuspiciousMatchTopic = topic
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, AgentStatus, CreatorAccountUpn, OwnerAccountUpns, SuspiciousMatchTool, SuspiciousMatchTopic

Агенты с настроенным средством MCP

Поиск агентов с помощью настроенного средства MCP.

Рекомендации:

  • Подтвердите у владельца агента, требуется ли средство MCP. В противном случае рассмотрите возможность его удаления, чтобы снизить любые потенциальные риски.
//Find agents with MCP tool configured
AIAgentsInfo
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted"
| mvexpand Action = AgentToolsDetails
| where  Action.action.operationDetails["$kind"] == "ModelContextProtocolMetadata"
| extend MCPName = Action.action.operationDetails["operationId"]
| summarize MCPTools = make_set(MCPName) by AIAgentName, AIAgentId, EnvironmentId, CreatorAccountUpn

Совет

Хотите узнать больше? Общайтесь с членами сообщества Microsoft Security в нашем техническом сообществе: Microsoft Defender XDR Tech Community.