AIAgentsInfo (versión preliminar)

Importante

Parte de la información está relacionada con el producto preliminar que se puede modificar sustancialmente antes de su lanzamiento comercial. Microsoft no otorga garantías, expresas o implícitas, con respecto a la información que aquí se proporciona.

La AIAgentsInfo tabla está realizando la transición a la AgentsInfo tabla. Microsoft Agent 365 los clientes deben usar la AgentsInfo tabla hoy en día. La AIAgentsInfo tabla permanece accesible hasta el 1 de julio de 2026. Actualice las consultas para usarlas AgentsInfo antes de esta fecha. Para obtener más información, vea Esquema de búsqueda avanzada: cambios de nomenclatura.

La AIAgentsInfo tabla del esquema de búsqueda avanzada contiene información sobre los agentes de inteligencia artificial y sus entidades asociadas. Utilice esta referencia para crear consultas que devuelvan información sobre la tabla.

Microsoft Defender rellena esta tabla a través de conectores en Microsoft Defender for Cloud Apps Power Plaform y Microsoft Agent 365. Si su organización no implementa estos servicios, las consultas que usan la tabla no funcionan ni devuelven ningún resultado. Para más información, vea:

Para obtener información sobre otras tablas del esquema de búsqueda avanzada, vea la referencia de búsqueda avanzada.

Nombre de columna Tipo de datos Descripción
Timestamp datetime Última fecha y hora registradas para la información del agente
RegistrySource string Registro que proporcionó los metadatos del agente
AIAgentId guid Identificador único del agente asignado en Microsoft 365 Copilot o Copilot Studio
AIAgentName string Nombre para mostrar del agente
AgentCreationTime datetime Fecha y hora en que se creó el agente
CreatorAccountUpn string Nombre principal de usuario (UPN) de la cuenta que creó el agente
OwnerAccountUpns string Nombres principales de usuario (UPN) de todos los propietarios del agente
LastModifiedByUpn string Nombre principal de usuario (UPN) de la cuenta que modificó por última vez ese agente
LastModifiedTime datetime Fecha y hora en que se modificó por última vez el agente
LastPublishedTime datetime Fecha y hora en que se publicó por última vez el agente
LastPublishedByUpn string Nombre principal de usuario (UPN) de la cuenta que publicó por última vez el agente
AgentDescription string Descripción del agente como se muestra en el origen del agente
AgentStatus string Estado del agente; valores posibles: Creado, Publicado, Eliminado
UserAuthenticationType string El tipo de autenticación configurado por el agente para los usuarios que interactúan con el agente; valores posibles: None, Microsoft, Custom
AgentUsers string Lista de nombres principales de usuario (UPN) o identificadores de grupo que pueden usar el agente
KnowledgeDetails string Detalles sobre los orígenes de conocimiento agregados al agente
AgentActionTriggers string Lista de desencadenadores que hace que un agente autónomo tome medidas
RawAgentInfo string Contenido del JSON sin formato que describe el agente y contiene detalles de configuración, tal como se recibe del proveedor.
AuthenticationTrigger string Indica cuándo se desencadena la autenticación para el agente; valores posibles: según sea necesario, Always
AccessControlPolicy string Usuarios que pueden interactuar con el agente; valores posibles: Cualquiera, Lectores de Copilot, Pertenencia a grupos, Cualquiera (multiinquilino)
AuthorizedSecurityGroupIds dynamic Lista de Azure identificadores de grupo de Active Directory que pueden interactuar con el agente
AgentTopicsDetails dynamic Especificaciones de los temas que el agente puede realizar
AgentToolsDetails dynamic Especificaciones de las herramientas a las que el agente puede acceder y realizar acciones
EnvironmentId string Identificador del entorno de Microsoft Power Platform en el que reside el agente
Platform string La plataforma que proporcionó la información sobre los agentes; valores posibles: Copilot Studio
IsGenerativeOrchestrationEnabled boolean Indica si el agente usa la orquestación generativa (es decir, elige dinámicamente herramientas, conocimientos y acciones basadas en contexto) para funcionar
AgentAppId string Identificador de aplicación único registrado para el agente en Microsoft Entra
ConnectedAgentsSchemaNames dynamic Enumera los nombres de esquema de los agentes conectados, que son agentes administrados de forma independiente que están vinculados al principal para la orquestación.
ChildAgentsSchemaNames dynamic Enumera los nombres de esquema de los agentes secundarios que existen dentro del agente principal.
Version string Versión del agente
IsBlocked boolean Indica si un administrador ha bloqueado el agente.
Instructions string Símbolo del sistema del agente que define su comportamiento, persona y límites operativos predeterminados
EntraObjectId string Identificador único de objeto de aplicación empresarial del agente por Microsoft Entra ID
EntraBlueprintId string Identificador de la entidad de seguridad del plano técnico de identidad del agente por Agente de Microsoft Entra ID
AIModel string El modelo de inteligencia artificial que alimenta el agente
AccessCapabilities dynamic Funcionalidades de acceso a datos concedidas al agente
ElementTypes dynamic Tipos de componentes técnicos que componen el agente
SourceAgentId string Identificador nativo de la plataforma del agente, como el identificador de Azure Resource Manager (ARM) para los agentes de Microsoft Foundry o el identificador de agente con ámbito de entorno para los agentes de Copilot Studio

Consultas de ejemplo

Las consultas de ejemplo siguientes devuelven resultados en función del origen o conector del Registro especificado:

  • Para devolver resultados en Agent 365, agregue RegistrySource == "A365" la consulta.
  • Para devolver los resultados de Defender for Cloud Apps Power Platform, use RegistrySource == "PowerPlatform".

Consultas que usan Agent 365 como origen del Registro

Enumerar todos los agentes de Agent 365

Esta consulta identifica todos los agentes que se publican en 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

Agentes publicados sin instrucciones

Esta consulta identifica Agent 365 agentes de inteligencia artificial que se publican pero que carecen de instrucciones configuradas. Las instrucciones que faltan aumentan el riesgo de ataques por inyección rápida, donde la entrada malintencionada puede influir en que el agente se desvíe de su comportamiento previsto. Sin instrucciones claras, el agente puede responder de forma imprevisible o exponer datos confidenciales.

Recomendaciones:

  • Asegúrese de que todos los componentes de orquestación generativas tienen instrucciones bien definidas que especifican el propósito, los límites y las acciones permitidas del agente. Revise y actualice periódicamente las instrucciones para mantener la seguridad y evitar el uso indebido.
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

Herramientas de MCP configuradas

Esta consulta identifica Agent 365 agentes de inteligencia artificial que tienen configuradas herramientas de Protocolo de contexto de modelo (MCP). Las herramientas de MCP amplían las funcionalidades del agente, pero presentan consideraciones de seguridad adicionales porque pueden ejecutar operaciones avanzadas e interactuar con recursos externos. Si no se configura correctamente o no es necesario, estas herramientas pueden aumentar la superficie expuesta a ataques y exponer datos o funciones confidenciales.

Recomendaciones:

  • Confirme con el propietario del agente si la herramienta MCP sigue siendo necesaria. Si es así, revise su configuración para comprobar el cumplimiento de los procedimientos recomendados de seguridad y asegúrese de tener acceso con privilegios mínimos. Quite las herramientas mcp no utilizadas o innecesarias para reducir el riesgo.
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

Solicitudes HTTP a puntos de conexión que no son HTTPS

Esta consulta identifica Agent 365 agentes de inteligencia artificial que envían solicitudes HTTP a puntos de conexión mediante esquemas que no son HTTPS. La comunicación a través de HTTP sin cifrar expone datos confidenciales en tránsito y aumenta el riesgo de interceptación o manipulación. Los atacantes podrían aprovechar esta vulnerabilidad para capturar credenciales, tokens de sesión u otra información confidencial, lo que conduce a infracciones de datos o acceso no autorizado.

Recomendaciones:

  • Revise estos agentes y actualice todas las acciones HTTP para usar puntos de conexión HTTPS. Si la comunicación no segura es absolutamente necesaria para un caso empresarial específico, documente la justificación y aplique controles compensadores, como el cifrado de nivel de red o las restricciones de 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

Consultas que usan Power Platform como origen del Registro

Agente sin autenticación

Es importante identificar los agentes que no usan mecanismos de autenticación. Estos agentes pueden suponer riesgos significativos para la organización porque están disponibles públicamente. Las organizaciones deben conocer estos agentes para que puedan solucionar cualquier problema.

Recomendaciones:

  • Confirme el caso de uso del agente con el propietario para determinar si está pensado para el acceso público.
  • Revise los temas, las acciones y los orígenes de conocimiento para asegurarse de que no se incluye información interna o confidencial.
AIAgentsInfo
| summarize arg_max(Timestamp, *) by AIAgentId
| where RegistrySource == "PowerPlatform"
| where AgentStatus != "Deleted" 
| where UserAuthenticationType == "None"
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, AgentStatus, CreatorAccountUpn, OwnerAccountUpns

Solicitud HTTP sospechosa al puerto no estándar

Identifique los agentes que usan acciones HTTP en puertos distintos de 443 u 80.

Recomendaciones:

  • Confirme con el propietario del agente si es necesario e indaga sobre el caso de uso empresarial específico.
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

Solicitud HTTP sospechosa al punto de conexión del conector

Identifique los agentes que usan acciones HTTP en un punto de conexión con un conector de Power Platform disponible.

Recomendaciones:

  • Compruebe con el propietario del agente si es necesario y pregunte sobre el caso de uso empresarial. Considere la posibilidad de usar un conector en su lugar.
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

Envío de correo electrónico a valores de entrada controlados por inteligencia artificial

Identifique los agentes que usan orquestación generativa que implica el envío de herramientas de correo electrónico a través de Outlook y los valores de entrada de las acciones rellenadas por el orquestador generativo. Esta configuración es arriesgada, ya que con un ataque XPIA correcto, el agente se puede usar para filtrar datos a destinatarios arbitrarios.

Recomendaciones:

  • Confirme con el propietario del agente si es necesario e indaga sobre el caso de uso empresarial. Si es factible, codifique de forma rígida al destinatario del correo electrónico en la acción.
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

Credenciales codificadas de forma rígida en temas o acciones

Los agentes con credenciales codificadas de forma rígida en Temas o Acciones pueden exponer credenciales de texto no cifrado a entidades no intencionadas.

Recomendaciones:

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

Agentes con una herramienta MCP configurada

Busque agentes con una herramienta MCP configurada.

Recomendaciones:

  • Confirme con el propietario del agente si la herramienta MCP sigue siendo necesaria. De lo contrario, considere la posibilidad de quitarlo para mitigar los posibles riesgos.
//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

Sugerencia

¿Desea obtener más información? Participe con la comunidad de Seguridad de Microsoft en nuestra Tech Community: Tech Community de Microsoft Defender XDR.