Ir al contenido

Plantillas de control operacional

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

Estas plantillas implementan el control continuo. Son esquemas de trabajo, no formularios que deban completarse con texto genérico. Las claves se mantienen en inglés para que los archivos sean consistentes entre herramientas. Los valores narrativos se escriben en el idioma de trabajo. Añade campos cuando una operación necesite más precisión y conserva identificadores estables entre notas, outputs y evidencias.

Estructura de directorios
ENGAGEMENT_ID/
├── 00-control/
│ ├── scope.md
│ ├── decisions.md
│ ├── coverage.yaml
│ └── cleanup.yaml
├── 10-assets/
├── 20-activity/
├── 30-raw-output/
├── 40-evidence/
├── 50-deliverables/
└── 90-temporary/

30-raw-output conserva resultados originales. 40-evidence contiene selecciones saneadas y vinculadas a una afirmación. 90-temporary tiene una política de eliminación explícita. Los secretos viven fuera de esta estructura en el almacén aprobado.

assets.yaml
- asset_id: asset-001
first_seen: 2026-07-28T10:02:11+02:00
observed_from: position-external
addresses:
- 192.0.2.10
names:
- mail.example.test
role_hypotheses:
- mail-gateway
ownership: in-scope
interfaces:
- transport: tcp
port: 25
state: open
evidence: evidence-001
notes: ''
hypotheses.yaml
- hypothesis_id: hyp-014
statement: El servicio SMTP permite relay sin autenticar hacia destinatarios externos.
asset_ids:
- asset-001
supporting_evidence:
- evidence-011
contradicting_evidence: []
assumptions:
- El dominio del destinatario es externo a la política de relay.
discriminating_test: Probar RCPT TO con un destinatario externo controlado sin enviar DATA.
expected_change: Se registra una transacción SMTP que termina con RSET y QUIT.
state: testing
owner: operator-01
next_action: action-031

La hipótesis describe una capacidad concreta. No uses «SMTP vulnerable» porque no define condición, identidad, destinatario ni efecto.

coverage.yaml
- coverage_id: coverage-smtp-001
asset_id: asset-001
position: position-external
surface: smtp
depth:
banner: complete
ehlo: complete
starttls: complete
auth: unauthenticated-only
relay: controlled-recipient-only
user-enumeration: blocked-by-policy
time_window:
start: 2026-07-28T10:02:11+02:00
end: 2026-07-28T10:18:42+02:00
limitations:
- No authenticated mailbox was provided.
evidence:
- evidence-001
- evidence-011

Guarda el secreto en una bóveda y referencia su entrada:

credentials.yaml
- credential_id: credential-007
identity: DOMAIN.LOCAL/USERNAME
secret_type: password
secret_reference: vault://ENGAGEMENT_ID/credential-007
source: provided
first_seen: 2026-07-28T09:00:00+02:00
validation:
- service: smtp-submission
asset_id: asset-001
result: accepted
checked_at: 2026-07-28T10:20:00+02:00
lockout_context: unknown
owner: operator-01
sessions-and-pivots.yaml
sessions:
- session_id: session-003
created_at: 2026-07-28T11:04:20+02:00
source: workstation-01
destination: asset-024
mechanism: ssh
identity: USERNAME
privilege: unprivileged
dependencies:
- credential-009
health_check: ssh-controlmaster-check
cleanup_id: cleanup-018
pivots:
- pivot_id: pivot-002
source_session: session-003
mechanism: ssh-dynamic-forward
local_bind: 127.0.0.1:1080
reachable_scope:
- 10.20.30.0/24
dns_path: remote
process_reference: activity-092
health_check: controlled-http-endpoint
cleanup_id: cleanup-019
infrastructure.yaml
- infra_id: infra-redirector-01
function: https-redirector
provider_reference: provider-resource-redacted
public_addresses:
- 192.0.2.40
domains:
- edge.example.test
certificate_reference: certificate-003
upstream: infra-teamserver-01
allowed_paths:
- /health
- /api/v1/
logging_destination: logs/redirector-01
health_check: health-redirector-01
rotation_condition: certificate-or-address-exposure
teardown_id: cleanup-041
activity.yaml
- activity_id: activity-092
started_at: 2026-07-28T11:06:00+02:00
operator: operator-01
source_position: session-003
asset_ids:
- asset-031
hypothesis_id: hyp-028
action: Abrir un listener SOCKS local a través de la sesión SSH existente.
command_reference: transcript-20260728-01
raw_output: 30-raw-output/activity-092.txt
result: success
interpretation: El listener local existe. Aún falta validar la conectividad de extremo a extremo.
evidence:
- evidence-044
next_action: activity-093
evidence.yaml
- evidence_id: evidence-044
claim: La ruta SOCKS alcanzó el endpoint HTTP controlado desde la red remota.
captured_at: 2026-07-28T11:07:14+02:00
source: 30-raw-output/activity-093.txt
sanitized_copy: 40-evidence/evidence-044.txt
sha256: SHA256_REDACTED
collector: operator-01
decisions-and-cleanup.yaml
decisions:
- decision_id: decision-012
decided_at: 2026-07-28T11:30:00+02:00
context: Las pruebas repetidas de autenticación alcanzaron el umbral de bloqueo acordado.
options:
- continue
- pause
- switch-to-provided-account
decision: pause
authority: lead-01
communication: update-20260728-03
cleanup:
- cleanup_id: cleanup-019
asset_id: asset-024
change: Reenvío dinámico SSH en el puerto local 1080.
previous_state: No existía un listener en 127.0.0.1:1080.
reversal: Terminar el proceso SSH que mantiene el listener.
verification: Confirmar que no quedan listeners ni configuraciones de proxy dependientes.
state: pending
owner: operator-01
  • Los timestamps incluyen offset.
  • Los placeholders nunca se sustituyen por datos de otro encargo para «poner un ejemplo».
  • Los outputs originales no se editan. El saneamiento produce otro artefacto y conserva el hash del original.
  • Un rechazo de autenticación no invalida una credencial en otros servicios.
  • Una sesión cerrada conserva su registro y cambia de estado.
  • Una tarea de limpieza solo termina cuando se ha verificado el estado posterior.
  • La revisión del equipo busca entradas sin responsable, evidencia o siguiente acción.