Informative Appendix (non-normative)
This appendix provides an illustrative machine-readable Rules of Engagement (RoE) template for autonomous penetration testing engagements. It is intended to help platform operators, customers, and reviewers implement and verify the requirements in the Scope Enforcement, Human Oversight, and Graduated Autonomy domains. It does not prescribe one mandatory format for all platforms.
APTS requires platforms to ingest and validate machine-parseable Rules of Engagement before testing begins. In practice, customers and operators benefit from a concrete starter template that makes those requirements easier to implement, exchange, and review consistently.
This appendix shows:
A machine-readable RoE template should:
Use stable identifiers so the platform can correlate findings, audit logs, approvals, and recurring test cycles.
Recommended fields:
engagement_idroe_versionengagement_modelcreated_atupdated_atcustomer_referenceCapture the authoritative approval chain for the engagement.
Recommended fields:
customerasset_ownerapproval_referencevalid_fromvalid_untilapproversRepresent all authorized test windows in a machine-enforceable form.
Recommended fields:
timezonestart_timeend_timemaintenance_windowsmaximum_run_duration_minutesDefine the allowed target universe explicitly.
Recommended fields:
domainsip_rangescloudapiclient_side_agentsDocument production sensitivity and explicit no-test assets.
Recommended fields:
asset_criticalityhard_deny_listsensitive_data_locationsTranslate contractual or operational limits into machine-enforceable controls.
Recommended fields:
allowed_actionsprohibited_actionsrequires_explicit_human_approvalDocument the operational safety envelope.
Recommended fields:
per_target_rpsglobal_rpsmax_payload_sizebackoff_on_error_rate_percenthealth_degradation_stop_thresholdDefine how credentials and secrets may be used, stored, delegated, and destroyed.
Recommended fields:
client_providedplatform_issueddiscovered_credentialsreuse_restrictionsrevoke_at_endDefine who can authorize higher-risk actions and what happens on timeout.
Recommended fields:
approval_matrixtimeout_behaviorescalation_contactskill_switch_contactsengagement_id: eng-2026-001
roe_version: 1
engagement_model: one_time
created_at: 2026-04-18T00:00:00Z
updated_at: 2026-04-18T00:00:00Z
customer_reference: customer-2026-q2
authorization:
customer: Example Corp
asset_owner: [email protected]
approval_reference: signed-roe-2026-001
valid_from: 2026-04-18T00:00:00Z
valid_until: 2026-04-20T00:00:00Z
approvers:
- name: Security Lead
contact: [email protected]
- name: Asset Owner
contact: [email protected]
temporal_boundaries:
timezone: UTC
start_time: 2026-04-18T02:00:00Z
end_time: 2026-04-18T06:00:00Z
maximum_run_duration_minutes: 240
maintenance_windows:
- start: 2026-04-18T03:00:00Z
end: 2026-04-18T03:30:00Z
action: pause
targets:
domains:
- name: app.example.com
wildcard_policy: exact_only
- name: api.example.com
wildcard_policy: exact_only
ip_ranges:
- 203.0.113.0/24
cloud:
accounts:
- id: prod-account-1
provider: aws
regions:
- us-east-1
api:
base_urls:
- https://api.example.com
allowed_methods:
- GET
- POST
client_side_agents:
allowed: false
asset_criticality:
default: unknown
assets:
- target: app.example.com
criticality: production
- target: api.example.com
criticality: production
hard_deny_list:
- target: 169.254.169.254
reason: cloud metadata endpoint
- target: idp.example.com
reason: identity provider
- target: db-prod.example.com
reason: production database
allowed_actions:
- passive_reconnaissance
- authenticated_read_only_checks
- bounded_exploitation_attempts
prohibited_actions:
- destructive_testing
- persistence
- lateral_movement
- social_engineering
- data_exfiltration
requires_explicit_human_approval:
- credential_use
- data_access
- configuration_change
- client_side_agent_activation
rate_limits:
per_target_rps: 10
global_rps: 50
max_payload_size: 1048576
backoff_on_error_rate_percent: 20
health_degradation_stop_threshold: 0.2
credential_policy:
client_provided: allowed
platform_issued: allowed
discovered_credentials: do_not_use_without_approval
reuse_restrictions:
- no_cross_target_reuse
- no_post_engagement_reuse
revoke_at_end: true
approval_matrix:
medium_risk:
approvers:
- [email protected]
timeout_behavior: deny
high_risk:
approvers:
- [email protected]
- [email protected]
timeout_behavior: deny
critical_risk:
approvers:
- [email protected]
- [email protected]
- [email protected]
timeout_behavior: deny
incident_and_stop_conditions:
kill_switch_contacts:
- [email protected]
stop_on_scope_violation: true
stop_on_target_degradation: true
legal_escalation_contact: [email protected]
reporting_and_evidence:
evidence_retention_days: 90
classification_default: confidential
report_recipients:
- [email protected]
- [email protected]
{
"engagement_id": "eng-2026-001",
"roe_version": 1,
"engagement_model": "one_time",
"authorization": {
"customer": "Example Corp",
"approval_reference": "signed-roe-2026-001"
},
"temporal_boundaries": {
"timezone": "UTC",
"start_time": "2026-04-18T02:00:00Z",
"end_time": "2026-04-18T06:00:00Z"
},
"targets": {
"domains": [
{ "name": "app.example.com", "wildcard_policy": "exact_only" }
],
"ip_ranges": ["203.0.113.0/24"]
},
"allowed_actions": ["passive_reconnaissance", "authenticated_read_only_checks"],
"prohibited_actions": ["destructive_testing", "lateral_movement"]
}
<rules_of_engagement>
<engagement_id>eng-2026-001</engagement_id>
<roe_version>1</roe_version>
<engagement_model>one_time</engagement_model>
<authorization>
<customer>Example Corp</customer>
<approval_reference>signed-roe-2026-001</approval_reference>
</authorization>
<temporal_boundaries>
<timezone>UTC</timezone>
<start_time>2026-04-18T02:00:00Z</start_time>
<end_time>2026-04-18T06:00:00Z</end_time>
</temporal_boundaries>
<targets>
<domains>
<domain wildcard_policy="exact_only">app.example.com</domain>
</domains>
<ip_ranges>
<cidr>203.0.113.0/24</cidr>
</ip_ranges>
</targets>
<allowed_actions>
<action>passive_reconnaissance</action>
<action>authenticated_read_only_checks</action>
</allowed_actions>
<prohibited_actions>
<action>destructive_testing</action>
<action>lateral_movement</action>
</prohibited_actions>
</rules_of_engagement>
| Template area | Primary requirements |
|---|---|
| Authorization | APTS-SE-001, APTS-HO-004 |
| Temporal boundaries | APTS-SE-004, APTS-SE-008, APTS-SE-017 |
| Domains and IP ranges | APTS-SE-002, APTS-SE-003, APTS-SE-012 |
| Asset criticality and deny list | APTS-SE-005, APTS-SE-009, APTS-SE-010 |
| Per-action scope validation inputs | APTS-SE-006, APTS-SE-024, APTS-SE-025 |
| Rate limits and impact controls | APTS-SE-019, APTS-SC-004, APTS-SC-010 |
| Credential policy | APTS-SE-023, APTS-MR-019 |
| Approval and escalation matrix | APTS-HO-001, APTS-HO-003, APTS-HO-011 |
| Agent-specific boundaries | APTS-SE-022, APTS-AL-014 |
When reviewing a platform's RoE implementation, ask:
Recommended implementation practices:
This appendix does not:
Use this template as an implementation and review aid rather than a required canonical schema.