AID-I-003.001: Detection-Driven Quarantine & Safe-Mode Downgrade
A2A containment: Disable or quarantine the contained agent's peer registrations, discovery advertisements, message routes, delegated leases, and pending cross-agent work so isolation covers inter-agent execution paths as well as user-facing endpoints.
Pillars: infra, app
Lifecycle: response
Scope boundary
Owns reversible detection-driven quarantine, safe-mode downgrade, hard-containment playbook execution, target resolution, and post-action verification. It consumes signed findings or decisions and does not compute anomaly scores or perform long-term eviction.
AID-E-002: AID-I-003.001 applies reversible detection-driven quarantine or safe mode; AID-E-002 terminates confirmed-compromised active execution and revokes execution leases. Escalate to E-002 when continued runtime existence is no longer acceptable; do not report a quarantine state as process or pod eviction.
AID-I-005: AID-I-003.001 contains a resolved target through quarantine or degraded mode; AID-I-005 issues and enforces a last-resort system-wide or tenant-wide halt. A target-scoped safe mode can be an input to escalation, but it does not satisfy global halt coverage or restart-gate evidence.
Implementation guidance
- AID-I-003.001-G001: Apply reversible quarantine or safe-mode downgrade from an authenticated high-risk finding; credential, session, principal, or grant revocation remains an AID-E-001 action with separate evidence.
- AID-I-003.001-G002: Design AI systems with a 'safe mode' or degraded functionality state.
- AID-I-003.001-G003: Utilize SOAR platforms to automate quarantine/throttling actions.
- AID-I-003.001-G004: Trip a hallucination or safety circuit breaker into a degraded operating mode when upstream health signals cross containment thresholds.
- AID-I-003.001-G005: Escalate from soft throttling to hard containment when budget exhaustion is paired with suspicious signals such as recursive tool loops, repeated retries, anomalous latency growth, or high-confidence abuse detections.
AID-I-003.001-G001
Required alert and trust inputs
Use this method when a signed detection receipt nominates one concrete principal, session, workload, source address, or tenant for containment. The responder does not trust queue-body confidence, target IDs, or requested actions. A signature-verifying adapter checks the detector issuer/audience, schema, target binding, source evidence digest, policy version, freshness, and replay nonce. A separately signed containment policy maps the verified finding class and asset type to one bounded action. Network/session quarantine is owned here; credential revocation and decoy routing remain separate dependency actions with independently verified receipts.
Idempotent containment transaction
# File: response/verified_quarantine.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
@dataclass(frozen=True)
class VerifiedAlert:
alert_id: str
incident_id: str
target_type: str
target_id: str
finding_class: str
evidence_sha256: str
receipt_sha256: str
@dataclass(frozen=True)
class VerifiedContainmentPolicy:
policy_sha256: str
scope_id: str
action_by_finding_and_target: dict[tuple[str, str], str]
@dataclass(frozen=True)
class ContainmentAuthority:
"""Required authenticated runtime adapter callables; no fallback implementation."""
claim_once: Callable[[VerifiedAlert, str, VerifiedContainmentPolicy], dict[str, object]]
apply: Callable[[dict[str, object]], dict[str, object]]
read_effective_state: Callable[[dict[str, object]], dict[str, object]]
finalize: Callable[[dict[str, object], str], None]
@dataclass(frozen=True)
class EvidenceWriter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
append_and_verify: Callable[[dict[str, object]], dict[str, str]]
def quarantine(
*,
alert: VerifiedAlert,
policy: VerifiedContainmentPolicy,
authority: ContainmentAuthority,
evidence: EvidenceWriter,
) -> dict[str, object]:
key = (alert.finding_class, alert.target_type)
if key not in policy.action_by_finding_and_target:
event = {
"schema_version": "aidefend.quarantine.v1",
"control": "AID-I-003.001",
"alert_id": alert.alert_id,
"incident_id": alert.incident_id,
"target_type": alert.target_type,
"target_id": alert.target_id,
"policy_sha256": policy.policy_sha256,
"outcome": "NOT_APPLICABLE",
}
return {"outcome": "NOT_APPLICABLE", "evidence": evidence.append_and_verify(event)}
action = policy.action_by_finding_and_target[key]
lease = authority.claim_once(alert, action, policy)
try:
action_receipt = authority.apply(lease)
state = authority.read_effective_state(lease)
expected = {
"target_type": alert.target_type,
"target_id": alert.target_id,
"action": action,
"policy_sha256": policy.policy_sha256,
"lease_id": lease["lease_id"],
}
for field, value in expected.items():
if state.get(field) != value:
raise PermissionError("effective containment mismatch: " + field)
if state.get("contained") is not True:
raise PermissionError("target is not effectively contained")
final = evidence.append_and_verify({
"schema_version": "aidefend.quarantine.v1",
"control": "AID-I-003.001",
"alert_id": alert.alert_id,
"incident_id": alert.incident_id,
**expected,
"alert_receipt_sha256": alert.receipt_sha256,
"source_evidence_sha256": alert.evidence_sha256,
"action_receipt_sha256": action_receipt["receipt_sha256"],
"readback_receipt_sha256": state["receipt_sha256"],
"outcome": "PASS",
})
authority.finalize(lease, "PASS")
return {"outcome": "PASS", "evidence": final}
except Exception:
authority.finalize(lease, "ERROR")
raise
Apply quarantine and verify
The authority uses a durable uniqueness key over alert, target, action, and policy; applies the provider change with optimistic concurrency; and records before/after state. For a WAF IP set it retries lock-token conflicts and preserves unrelated entries. For a session or workload it changes the exact server-side authorization/network state. Requests to disable credentials, route to a honeypot, or open tickets carry their own action-bound receipts and are evaluated by their owners; their receipts remain separate and do not change the quarantine result.
AID-I-003.001-G002
Safe-mode authority
Implement safe mode as a versioned server-side authority, not a process-global Boolean or a default-false feature flag. A signature-verified mode policy enumerates the tenant/agent scope, monotonic version, allowed model route, tools, network destinations, write capabilities, maximum cost/resource profile, expiry, and recovery rule for each mode. The authority is the only writer; every gateway and dispatcher reads the effective version at request time and fails closed if it is missing, stale, rollbacked, or unverifiable.
The authentication adapter must fetch the immutable receipt identified by its digest, verify its signature, issuer, audience, schema, request/principal/scope binding, freshness, and revocation state, and return only the verified fields. Adapter failure is an authorization error, never an anonymous or caller-asserted fallback.
Request-time capability gate
# File: containment/safe_mode_gate.py
from __future__ import annotations
from dataclasses import dataclass
import re
from typing import Callable
MODES = {"NORMAL", "SAFE_TOOLS_ONLY", "READ_ONLY", "QUARANTINE"}
SHA256 = re.compile(r"^[a-f0-9]{64}$")
@dataclass(frozen=True)
class VerifiedModeState:
scope_id: str
mode: str
version: int
policy_sha256: str
state_receipt_sha256: str
allowed_capabilities: frozenset[str]
model_route: str
@dataclass(frozen=True)
class ProposedOperation:
request_id: str
scope_id: str
capability: str
operation_sha256: str
@dataclass(frozen=True)
class RequestContextClaim:
principal_id: str
request_id: str
scope_id: str
authentication_receipt_sha256: str
@dataclass(frozen=True)
class VerifiedRequestContext:
principal_id: str
request_id: str
scope_id: str
authentication_receipt_sha256: str
@dataclass(frozen=True)
class AuthenticationAuthority:
"""Required signature-verifying authentication adapter; no fallback implementation."""
read_verified: Callable[[str], VerifiedRequestContext]
@dataclass(frozen=True)
class ModeAuthority:
"""Required authenticated runtime adapter callables; no fallback implementation."""
read_verified: Callable[[str], VerifiedModeState]
@dataclass(frozen=True)
class Dispatcher:
"""Required authenticated runtime adapter callables; no fallback implementation."""
execute: Callable[[ProposedOperation, VerifiedRequestContext, str, int], dict[str, object]]
@dataclass(frozen=True)
class EvidenceWriter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
append_and_verify: Callable[[dict[str, object]], dict[str, str]]
def dispatch(
*,
operation: ProposedOperation,
request_context: RequestContextClaim,
authentication: AuthenticationAuthority,
authority: ModeAuthority,
dispatcher: Dispatcher,
evidence: EvidenceWriter,
) -> dict[str, object]:
if SHA256.fullmatch(request_context.authentication_receipt_sha256) is None:
raise PermissionError("authentication receipt digest is invalid")
verified_context = authentication.read_verified(
request_context.authentication_receipt_sha256
)
claimed = (
request_context.principal_id, request_context.request_id,
request_context.scope_id, request_context.authentication_receipt_sha256,
)
verified = (
verified_context.principal_id, verified_context.request_id,
verified_context.scope_id, verified_context.authentication_receipt_sha256,
)
if (
not isinstance(verified_context, VerifiedRequestContext)
or claimed != verified
or operation.request_id != verified_context.request_id
or operation.scope_id != verified_context.scope_id
or not verified_context.principal_id
):
raise PermissionError("operation is not bound to a verified authentication receipt")
state = authority.read_verified(verified_context.scope_id)
if state.scope_id != verified_context.scope_id:
raise PermissionError("mode state scope mismatch")
if state.mode not in MODES or state.version < 1:
raise PermissionError("invalid effective mode state")
if operation.capability not in state.allowed_capabilities:
receipt = evidence.append_and_verify({
"schema_version": "aidefend.safe-mode-decision.v1",
"control": "AID-I-003.001",
"request_id": operation.request_id,
"principal_id": verified_context.principal_id,
"authentication_receipt_sha256": verified_context.authentication_receipt_sha256,
"scope_id": verified_context.scope_id,
"operation_sha256": operation.operation_sha256,
"capability": operation.capability,
"mode": state.mode,
"mode_version": state.version,
"policy_sha256": state.policy_sha256,
"state_receipt_sha256": state.state_receipt_sha256,
"outcome": "FAIL",
})
return {"allowed": False, "outcome": "FAIL", "evidence": receipt}
result = dispatcher.execute(
operation,
verified_context,
state.model_route,
state.version,
)
if (
result.get("operation_sha256") != operation.operation_sha256
or result.get("mode_version") != state.version
or result.get("capability") != operation.capability
):
raise PermissionError("dispatcher receipt is not bound to the mode decision")
receipt = evidence.append_and_verify({
"schema_version": "aidefend.safe-mode-decision.v1",
"control": "AID-I-003.001",
"request_id": operation.request_id,
"principal_id": verified_context.principal_id,
"authentication_receipt_sha256": verified_context.authentication_receipt_sha256,
"scope_id": verified_context.scope_id,
"operation_sha256": operation.operation_sha256,
"capability": operation.capability,
"mode": state.mode,
"mode_version": state.version,
"model_route": state.model_route,
"policy_sha256": state.policy_sha256,
"state_receipt_sha256": state.state_receipt_sha256,
"dispatch_receipt_sha256": result["receipt_sha256"],
"outcome": "PASS",
})
return {"allowed": True, "result_ref": result["result_ref"], "evidence": receipt}
Verify the safe-mode change
Entering or clearing a mode uses a compare-and-swap transaction on the durable authority, records actor/automation identity, incident, reason, previous/new version, and policy digest, then requires readback from every gateway/dispatcher replica before acknowledging convergence. Exit requires a separately authorized recovery decision; expiry never silently restores NORMAL. Enforce capabilities at the side-effect dispatcher, outbound gateway, filesystem/data service, model router, and quota authority—not only in response headers or UI.
AID-I-003.001-G003
Playbook contract
Treat SOAR as an orchestrator, not a trust oracle. A signature-verified playbook binds finding class, target type, required enrichment receipts, ordered actions, per-action owner/control, idempotency key, approval rule, rollback/compensation rule, and evidence schema. Alert, enrichment, and human approval inputs must be signed and bound to the same incident, target, action manifest, policy digest, and freshness window. The SOAR connector receives only the least privilege needed for its one action.
Receipt-driven executor
# File: soar/verified_playbook.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
@dataclass(frozen=True)
class PlaybookAction:
action_id: str
owner_control: str
adapter: str
target_type: str
operation: str
requires_approval: bool
@dataclass(frozen=True)
class VerifiedPlaybook:
playbook_id: str
policy_sha256: str
action_manifest_sha256: str
actions: tuple[PlaybookAction, ...]
@dataclass(frozen=True)
class VerifiedIncident:
incident_id: str
alert_receipt_sha256: str
target_type: str
target_id: str
@dataclass(frozen=True)
class ApprovalVerifier:
"""Required authenticated runtime adapter callables; no fallback implementation."""
consume_once: Callable[[VerifiedIncident, PlaybookAction, str], dict[str, object]]
@dataclass(frozen=True)
class ActionAdapter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
execute_once: Callable[[VerifiedIncident, PlaybookAction, str], dict[str, object]]
independently_read: Callable[[VerifiedIncident, PlaybookAction], dict[str, object]]
@dataclass(frozen=True)
class AdapterRegistry:
"""Required authenticated runtime adapter callables; no fallback implementation."""
resolve: Callable[[str], ActionAdapter]
@dataclass(frozen=True)
class EvidenceWriter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
append_and_verify: Callable[[dict[str, object]], dict[str, str]]
def execute_playbook(
*,
playbook: VerifiedPlaybook,
incident: VerifiedIncident,
approvals: ApprovalVerifier,
adapters: AdapterRegistry,
evidence: EvidenceWriter,
) -> dict[str, object]:
receipts: list[dict[str, object]] = []
for action in playbook.actions:
if action.target_type != incident.target_type:
raise PermissionError("action target type mismatch")
approval = None
if action.requires_approval:
approval = approvals.consume_once(
incident,
action,
playbook.action_manifest_sha256,
)
adapter = adapters.resolve(action.adapter)
idempotency_key = ":".join(
(incident.incident_id, action.action_id, playbook.policy_sha256)
)
applied = adapter.execute_once(
incident,
action,
idempotency_key,
)
readback = adapter.independently_read(incident, action)
if (
applied.get("target_id") != incident.target_id
or readback.get("target_id") != incident.target_id
or applied.get("operation") != action.operation
or readback.get("operation") != action.operation
or readback.get("effective") is not True
):
raise PermissionError("SOAR action did not reach the exact target state")
receipts.append({
"action_id": action.action_id,
"owner_control": action.owner_control,
"action_receipt_sha256": applied["receipt_sha256"],
"readback_receipt_sha256": readback["receipt_sha256"],
"approval_receipt_sha256": (
approval["receipt_sha256"] if approval is not None else None
),
})
final = evidence.append_and_verify({
"schema_version": "aidefend.soar-playbook.v1",
"control": "AID-I-003.001",
"playbook_id": playbook.playbook_id,
"policy_sha256": playbook.policy_sha256,
"action_manifest_sha256": playbook.action_manifest_sha256,
"incident_id": incident.incident_id,
"target_type": incident.target_type,
"target_id": incident.target_id,
"alert_receipt_sha256": incident.alert_receipt_sha256,
"actions": receipts,
"outcome": "PASS",
})
return {"outcome": "PASS", "evidence": final}
Failure semantics and verification
Connectors must use durable idempotency, optimistic concurrency, scoped service identities, provider request IDs, bounded retries, and compensating actions defined by the signed playbook. Never continue past an unverified action unless policy explicitly defines independent branches. Ticket creation and notification are evidence/coordination actions, not proof that quarantine succeeded. Approval binds the canonical action and is consumed once; a generic chat approval is invalid.
AID-I-003.001-G004
Required signed inputs
This method applies when one or more upstream controls produce signature-verified health or safety receipts for an exact tenant, agent, model/deployment version, evaluation window, and input population. It does not recompute consensus, evidence coverage, contradiction, schema, or tool-policy signals. A missing, stale, unverified, differently scoped, or incomplete upstream receipt is INSUFFICIENT_DATA and cannot retain NORMAL mode. Thresholds, correlation windows, mode mappings, hysteresis, expiry, and recovery conditions come only from a signed, monotonic breaker policy.
Durable circuit-breaker transition
# File: containment/verified_breaker.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
MODES = {"NORMAL", "SAFE_TOOLS_ONLY", "READ_ONLY", "QUARANTINE"}
@dataclass(frozen=True)
class VerifiedSignalBundle:
scope_id: str
deployment_sha256: str
population_sha256: str
observed_from_epoch: int
observed_to_epoch: int
signal_receipt_sha256s: tuple[str, ...]
values: dict[str, float | int | bool]
@dataclass(frozen=True)
class VerifiedBreakerPolicy:
policy_sha256: str
scope_id: str
version: int
@dataclass(frozen=True)
class BreakerDecision:
mode: str
reason_code: str
decision_sha256: str
@dataclass(frozen=True)
class PolicyEvaluator:
"""Required authenticated runtime adapter callables; no fallback implementation."""
evaluate: Callable[[VerifiedSignalBundle, VerifiedBreakerPolicy], BreakerDecision]
@dataclass(frozen=True)
class ModeAuthority:
"""Required authenticated runtime adapter callables; no fallback implementation."""
compare_and_set: Callable[[str, int, str, str, str], dict[str, object]]
read_all_replicas: Callable[[str], dict[str, object]]
@dataclass(frozen=True)
class EvidenceWriter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
append_and_verify: Callable[[dict[str, object]], dict[str, str]]
def trip(
*,
signals: VerifiedSignalBundle,
policy: VerifiedBreakerPolicy,
evaluator: PolicyEvaluator,
authority: ModeAuthority,
expected_state_version: int,
evidence: EvidenceWriter,
) -> dict[str, object]:
if signals.scope_id != policy.scope_id:
raise PermissionError("signal and policy scopes differ")
if not signals.signal_receipt_sha256s:
raise PermissionError("no verified upstream signal receipts")
decision = evaluator.evaluate(signals, policy)
if decision.mode not in MODES:
raise PermissionError("policy evaluator returned an invalid mode")
write = authority.compare_and_set(
policy.scope_id,
expected_state_version,
decision.mode,
decision.decision_sha256,
policy.policy_sha256,
)
readback = authority.read_all_replicas(policy.scope_id)
if (
readback.get("mode") != decision.mode
or readback.get("version") != write.get("version")
or readback.get("policy_sha256") != policy.policy_sha256
or readback.get("complete") is not True
):
raise PermissionError("breaker mode did not converge across the population")
final = evidence.append_and_verify({
"schema_version": "aidefend.safety-breaker.v1",
"control": "AID-I-003.001",
"scope_id": policy.scope_id,
"deployment_sha256": signals.deployment_sha256,
"population_sha256": signals.population_sha256,
"signal_receipt_sha256s": list(signals.signal_receipt_sha256s),
"policy_sha256": policy.policy_sha256,
"policy_version": policy.version,
"decision_sha256": decision.decision_sha256,
"mode": decision.mode,
"mode_version": write["version"],
"replica_receipt_sha256": readback["receipt_sha256"],
"outcome": "PASS",
})
return {"outcome": "PASS", "mode": decision.mode, "evidence": final}
Apply and verify the transition
The separately verified policy evaluator rejects unknown/extra signals, NaN/infinity, unit or window mismatch, missing required producers, policy rollback, and stale receipts. The mode authority uses compare-and-swap and a monotonic version, records incident/reason, and never lets expiry silently restore NORMAL. Gateway, dispatcher, model router, write path, tool path, and egress boundary consume the new version through the safe-mode control in this sub-technique; this breaker PASS proves only the transition and complete propagation, not each boundary's independent enforcement.
AID-I-003.001-G005
Required correlated signals
Consume independently signed receipts from the budget ledger and the policy-required suspicious-signal producers. Each receipt must bind the same tenant/principal/session/agent scope, deployment and policy versions, observation window, source population, units, event IDs, and freshness. Never infer a missing Boolean as false or a missing score as zero. A signed escalation matrix owns required producer combinations, thresholds, correlation windows, hysteresis, and the exact bounded action for each level.
Verified escalation transaction
# File: containment/verified_escalation.py
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
ACTIONS = {"ALLOW", "SOFT_THROTTLE", "HARD_THROTTLE", "QUARANTINE", "BLOCK"}
@dataclass(frozen=True)
class VerifiedSignalReceipt:
producer: str
scope_id: str
deployment_sha256: str
observed_from_epoch: int
observed_to_epoch: int
evidence_sha256: str
receipt_sha256: str
values: dict[str, int | float | bool]
@dataclass(frozen=True)
class VerifiedEscalationPolicy:
policy_sha256: str
policy_version: int
scope_id: str
required_producers: frozenset[str]
@dataclass(frozen=True)
class EscalationDecision:
action: str
level: int
decision_sha256: str
reason_codes: tuple[str, ...]
@dataclass(frozen=True)
class PolicyEvaluator:
"""Required authenticated runtime adapter callables; no fallback implementation."""
evaluate: Callable[[tuple[VerifiedSignalReceipt, ...], VerifiedEscalationPolicy], EscalationDecision]
@dataclass(frozen=True)
class ContainmentAuthority:
"""Required authenticated runtime adapter callables; no fallback implementation."""
apply_once: Callable[[str, str, str, str], dict[str, object]]
read_effective: Callable[[str], dict[str, object]]
@dataclass(frozen=True)
class EvidenceWriter:
"""Required authenticated runtime adapter callables; no fallback implementation."""
append_and_verify: Callable[[dict[str, object]], dict[str, str]]
def escalate(
*,
receipts: tuple[VerifiedSignalReceipt, ...],
policy: VerifiedEscalationPolicy,
evaluator: PolicyEvaluator,
authority: ContainmentAuthority,
evidence: EvidenceWriter,
) -> dict[str, object]:
producers = {item.producer for item in receipts}
if producers != policy.required_producers:
event = {
"schema_version": "aidefend.correlated-escalation.v1",
"control": "AID-I-003.001",
"scope_id": policy.scope_id,
"policy_sha256": policy.policy_sha256,
"missing_producers": sorted(policy.required_producers - producers),
"unexpected_producers": sorted(producers - policy.required_producers),
"outcome": "INSUFFICIENT_DATA",
}
return {"outcome": "INSUFFICIENT_DATA", "evidence": evidence.append_and_verify(event)}
if any(item.scope_id != policy.scope_id for item in receipts):
raise PermissionError("signal scope mismatch")
if len({item.deployment_sha256 for item in receipts}) != 1:
raise PermissionError("signal deployment mismatch")
decision = evaluator.evaluate(receipts, policy)
if decision.action not in ACTIONS:
raise PermissionError("invalid escalation action")
action_receipt = authority.apply_once(
policy.scope_id,
decision.action,
decision.decision_sha256,
policy.policy_sha256,
)
readback = authority.read_effective(policy.scope_id)
if (
readback.get("action") != decision.action
or readback.get("decision_sha256") != decision.decision_sha256
or readback.get("effective") is not True
):
raise PermissionError("escalation action is not effective")
final = evidence.append_and_verify({
"schema_version": "aidefend.correlated-escalation.v1",
"control": "AID-I-003.001",
"scope_id": policy.scope_id,
"deployment_sha256": receipts[0].deployment_sha256,
"policy_sha256": policy.policy_sha256,
"policy_version": policy.policy_version,
"signal_receipt_sha256s": [item.receipt_sha256 for item in receipts],
"signal_evidence_sha256s": [item.evidence_sha256 for item in receipts],
"decision_sha256": decision.decision_sha256,
"level": decision.level,
"action": decision.action,
"reason_codes": list(decision.reason_codes),
"action_receipt_sha256": action_receipt["receipt_sha256"],
"readback_receipt_sha256": readback["receipt_sha256"],
"outcome": "PASS",
})
return {"outcome": "PASS", "action": decision.action, "evidence": final}
Verify escalation
The policy evaluator verifies every receipt signature/schema/issuer/audience, exact scope and deployment, unit and window compatibility, required raw-evidence digest, freshness, replay nonce, finite numeric values, and policy rollback before evaluation. The containment authority applies the exact throttle/quarantine/block profile transactionally and independently reads gateway, session, tool, and credential state as applicable; credential revocation remains an explicit owner dependency rather than an assumed side effect.
Open-source tools
- StackStorm
- Shuffle SOAR
- Open Policy Agent (OPA)
- Kubernetes
- OpenTelemetry (containment trigger telemetry; not an enforcement point)
Commercial / hosted tools
- Splunk SOAR
- Palo Alto Networks Cortex XSOAR
- IBM Security QRadar SOAR (on-premises)
- Tines
- Torq
- AWS Lambda
- Azure Functions
- Google Cloud Run functions
Threat mappings
MITRE ATLAS
- AML.T0029 Denial of AI Service
- AML.T0034.002 Cost Harvesting: Agentic Resource Consumption
- AML.T0046 Spamming AI System with Chaff Data
- AML.T0096 AI Service API (containment restricts abusive service use)
MAESTRO
- Denial of Service (DoS) Attacks (L4)
- Resource Hijacking (L4) (quarantine contains hijacked resources)
- Agent Pricing Model Manipulation (L7) (safe-mode limits economic abuse)
- Compromised Agents (L7) (quarantine contains compromised agent instances)
OWASP LLM Top 10 2026
- LLM03:2026 Excessive Agency (quarantine and safe mode remove risky agent routes and delegated execution paths)
- LLM06:2026 Unbounded Consumption (budget-exhaustion signals trigger verified downgrade or hard containment)
- LLM07:2026 Misinformation (hallucination circuit breakers stop suspect outputs from continuing through normal operation)
OWASP ML Top 10 2023
- N/A
OWASP Top 10 for Agentic Applications 2026
- ASI10:2026 Rogue Agents (quarantine isolates rogue agents)
- ASI08:2026 Cascading Failures (safe-mode limits cascade propagation)
- ASI02:2026 Tool Misuse and Exploitation (quarantine contains tool misuse)
- ASI03:2026 Identity and Privilege Abuse
NIST Adversarial Machine Learning 2025
- NISTAML.014 Energy-latency
- NISTAML.039 Compromising connected resources (quarantine limits lateral impact)
Cisco Integrated AI Security and Safety Framework
- AISubtech-13.1.1 Compute Exhaustion (correlated budget and abuse findings trigger verified throttling or quarantine)
- AISubtech-13.1.2 Memory Flooding (correlated budget and abuse findings trigger verified throttling or quarantine)
- AISubtech-13.1.3 Model Denial of Service (correlated budget and abuse findings trigger verified throttling or quarantine)
- AISubtech-13.1.4 Application Denial of Service (correlated budget and abuse findings trigger verified throttling or quarantine)
- AISubtech-13.2.1 Service Misuse for Cost Inflation (correlated budget and abuse findings trigger verified throttling or quarantine)
- AISubtech-14.1.2 Insufficient Access Controls (incident-time capability restrictions are enforced at actual dispatch boundaries)
- AISubtech-9.1.2 Unauthorized or Unsolicited System Access (incident safe mode restricts agent write and network capabilities)
- AISubtech-9.1.3 Unauthorized or Unsolicited Network Access (incident safe mode restricts agent write and network capabilities)
- AITech-12.1 Tool Exploitation (verified findings trigger tool restrictions and exact-target quarantine)
- AITech-13.1 Disruption of Availability (correlated budget and abuse findings trigger verified throttling or quarantine)
- AITech-13.2 Cost Harvesting / Repurposing (correlated budget and abuse findings trigger verified throttling or quarantine)
- AITech-9.1 Model or Agentic System Manipulation (incident safe mode restricts agent write and network capabilities)
Google Secure AI Framework 2.0 - Risks
- DMS: Denial of ML Service (containment limits service exhaustion)
- RA: Rogue Actions (quarantine isolates agents performing rogue actions)
Databricks AI Security Framework 3.0
- Model Serving - Inference requests 9.7: Denial of Service (DoS)
- Agents - Core 13.4: Resource Overload (containment prevents resource overload)
- Agents - Core 13.13: Rogue Agents in Multi-Agent Systems (quarantine isolates rogue agents)
- Agents - Core 13.3: Privilege Compromise
- Agents - Core 13.2: Tool Misuse (quarantine contains suspicious tool-calling behavior)