다음을 통해 공유


AIAgentsInfo

고급 헌팅 스키마의 테이블에는 AIAgentsInfo 파일, IP 주소, URL, 사용자 또는 디바이스와 같은 다양한 엔터티에 대한 정보가 엔드포인트용 Microsoft Defender 경고, Office 365 Microsoft Defender 관련 정보가 포함되어 있습니다. Microsoft Defender for Cloud Apps 및 Microsoft Defender for Identity. 이 참조를 사용하여 이 표의 정보를 반환하는 쿼리를 생성합니다.

이 고급 헌팅 테이블은 다양한 Microsoft Defender 서비스의 레코드로 채워집니다. organization Microsoft Defender XDR 서비스를 배포하지 않으면 테이블을 사용하는 쿼리가 작동하지 않거나 결과가 반환되지 않습니다. Microsoft Defender XDR 서비스를 배포하는 방법에 대한 자세한 내용은 지원되는 서비스 배포를 참조하세요.

고급 헌팅 스키마의 다른 표에 대한 자세한 내용은 고급 헌팅 참조를 참조하세요.

열 이름 데이터 형식 설명
Timestamp datetime 에이전트 정보에 대해 기록된 마지막 날짜 및 시간
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(사용자 계정 이름) 또는 그룹 ID 목록
KnowledgeDetails string 에이전트에 추가된 지식 원본에 대한 세부 정보
AgentActionTriggers string 자율 에이전트가 조치를 취하게 하는 트리거 목록
RawAgentInfo string 공급자로부터 받은 대로 에이전트를 설명하고 구성 세부 정보를 포함하는 원시 JSON의 콘텐츠
AuthenticationTrigger string 에이전트에 대해 인증이 트리거되는 시기를 나타냅니다. 가능한 값: 필요에 따라, 항상
AccessControlPolicy string 에이전트와 상호 작용할 수 있는 사용자; 가능한 값: Any, Copilot reader, Group Membership, Any(다중 테넌트)
AuthorizedSecurityGroupIds dynamic 에이전트와 상호 작용할 수 있는 Azure Active Directory 그룹 ID 목록
AgentTopicsDetails dynamic 에이전트가 수행할 수 있는 topics 사양
AgentToolsDetails dynamic 에이전트가 에 액세스하고 작업을 수행할 수 있는 도구의 사양
EnvironmentId string 에이전트가 상주하는 Microsoft Power Platform 환경의 식별자
Platform string 에이전트에 대한 정보를 제공한 플랫폼입니다. 가능한 값: Copilot Studio
IsGenerativeOrchestrationEnabled boolean ndicates 에이전트가 생성 오케스트레이션(즉, 컨텍스트에 따라 도구, 지식 및 작업을 동적으로 선택)을 사용하여 작동하는지 여부를 나타냅니다.
AgentAppId string Microsoft Entra 에이전트에 등록된 고유 앱 식별자
ConnectedAgentsSchemaNames dynamic 오케스트레이션을 위해 주 에이전트에 연결된 독립적으로 관리되는 에이전트인 연결된 에이전트의 스키마 이름을 나열합니다.
ChildAgentsSchemaNames dynamic 주 에이전트 내에 있는 자식 에이전트의 스키마 이름을 나열합니다.

샘플 쿼리

인증이 없는 에이전트

이러한 에이전트는 공개 가용성으로 인해 organization 상당한 위험을 초래할 수 있으므로 인증 메커니즘이 없는 에이전트를 식별하는 것이 중요합니다. 조직은 문제를 해결할 수 있도록 이러한 에이전트에 대해 알고 있어야 합니다.

권장 사항:

  • 소유자와 에이전트의 사용 사례를 확인하여 공개 액세스를 위한 것인지 확인합니다.
  • topics, 작업 및 지식 원본을 검토하여 내부 또는 중요한 정보가 포함되지 않았는지 확인합니다.
 AIAgentsInfo
| summarize arg_max(Timestamp, *) by AIAgentId
| where AgentStatus != "Deleted" 
| where UserAuthenticationType == "None"
| project-reorder AgentCreationTime ,AIAgentId, AIAgentName, AgentStatus, CreatorAccountUpn, OwnerAccountUpns

비표준 포트에 대한 의심스러운 HTTP 요청

443 또는 80 이외의 포트에서 HTTP 작업을 사용하는 에이전트를 식별합니다.

권장 사항:

  • 에이전트 소유자에게 필요한지 확인하고 특정 비즈니스 사용 사례에 대해 문의합니다.
AIAgentsInfo
// Find agents with topic that contains Http request action to non 443 port
| summarize arg_max(Timestamp, *) by AIAgentId
| 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 요청

사용 가능한 Power Platform 커넥터를 사용하여 엔드포인트에 HTTP 작업을 사용하는 에이전트를 식별합니다.

권장 사항:

  • 필요한지 에이전트 소유자에게 확인하고 비즈니스 사용 사례에 대해 문의합니다. 대신 커넥터를 사용하는 것이 좋습니다.
AIAgentsInfo
// Find agents with topic that contains Http request to endpoint with built-in connector
| summarize arg_max(Timestamp, *) by AIAgentId
| 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

AI 제어 입력 값으로 전자 메일 보내기

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 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 비밀에 환경 변수 사용 - Power Apps | Microsoft Learn)
  • 가능하지 않은 경우 보안 입력 옵션이 사용하도록 설정되어 있는지 확인합니다(Power Automate에서 암호와 같은 중요한 입력 관리 - Power Automate | Microsoft Learn).
//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 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 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 기술 커뮤니티인 Microsoft Defender XDR 기술 커뮤니티에서 Microsoft Security 커뮤니티에 참여하세요.