Detection rules › Kusto

Copilot - Jailbreak Attempt Detected

Status
available
Severity
high
Time window
5m
Source
github.com/Azure/Azure-Sentinel

'Detects jailbreak attempts in Copilot interactions where users are trying to bypass Copilot guardrails and security controls. This rule identifies prompt injection and LLM abuse scenarios that could lead to initial access, credential access, or system impact.'

MITRE ATT&CK coverage

TacticTechniques
Initial AccessT1078 Valid Accounts
Credential AccessT1110 Brute Force
ImpactT1565 Data Manipulation

Rule body kusto

id: e5f6a7b8-c9d0-41e2-f3a4-b5c6d7e8f9a0
name: Copilot - Jailbreak Attempt Detected
description: |
  'Detects jailbreak attempts in Copilot interactions where users are trying to bypass Copilot guardrails and security controls.
  This rule identifies prompt injection and LLM abuse scenarios that could lead to initial access, credential access, or system impact.'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: MicrosoftCopilot
    dataTypes:
      - CopilotActivity
queryFrequency: 5m
queryPeriod: 5m
triggerOperator: gt
triggerThreshold: 0
tactics:
  - InitialAccess
  - CredentialAccess
  - Impact
relevantTechniques:
  - T1078
  - T1110
  - T1565
query: |
  CopilotActivity
  | where RecordType == "CopilotInteraction"
  | where LLMEventData has "JailbreakDetected"
  | extend Data = parse_json(LLMEventData)
  | extend Jailbreak = tostring(Data.Messages[0].JailbreakDetected)
  | where Jailbreak == "true"
  | project TimeGenerated, ActorName, AIModelName, Jailbreak
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: FullName
        columnName: ActorName
version: 1.0.0
kind: Scheduled

Stages and Predicates

Stage 1: source

CopilotActivity

Stage 2: where

| where RecordType == "CopilotInteraction"

Stage 3: where

| where LLMEventData has "JailbreakDetected"

Stage 4: extend

| extend Data = parse_json(LLMEventData)

Stage 5: extend

| extend Jailbreak = tostring(Data.Messages[0].JailbreakDetected)

Stage 6: where

| where Jailbreak == "true"

Stage 7: project

| project TimeGenerated, ActorName, AIModelName, Jailbreak

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
Jailbreakeq
  • true transforms: cased
LLMEventDatamatch
  • JailbreakDetected transforms: term
RecordTypeeq
  • CopilotInteraction transforms: cased

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
AIModelNameproject
ActorNameproject
Jailbreakproject
TimeGeneratedproject