Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важно!
Некоторые сведения относятся к предварительно выпущенной продукции, которая может быть существенно изменена до его коммерческого выпуска. Корпорация Майкрософт не дает никаких гарантий, явных или подразумеваемых, относительно предоставленных здесь сведений.
Таблица 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
Жестко заданные учетные данные в разделах или действиях
Агенты с жестко заданными учетными данными в разделах или действиях могут предоставлять учетные данные с открытым текстом для непреднамеренных сущностей.
Рекомендации:
- Рассмотрите возможность сохранения учетных данных в Azure Key Vault и получения их во время выполнения с помощью переменных среды (см. раздел Использование переменных среды для Azure Key Vault секретов).
- Если вы не можете использовать Azure Key Vault, убедитесь, что вы включили параметр защищенного ввода (см. раздел Управление конфиденциальными входными данными, такими как пароли).
//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.