English · Español
Lab 00 — Pasada de hardening sobre security/THREATS.md¶
🇪🇸 Recorre
security/THREATS.mdlínea por línea. Para cada hilo abierto: cerrarlo, aceptarlo con razón explícita, o reposicionarlo como off-ramp. Cero ambigüedad.
Objetivo¶
Recorrer cada hilo abierto en security/THREATS.md de principio a fin. Para cada uno: implementar la mitigación (Cerrar), escribir una justificación (Aceptar), o moverlo a la lista de off-ramp (Aplazar). Al finalizar, THREATS.md contiene cero elementos en estado OPEN.
Preparación¶
security/THREATS.mdde fases anteriores.READING_LIST.md(se creará en el lab 02 — este lab añade entradas antes de que el lab 02 escriba el resto).- El CI:
pip-audit,bandit,mypy --strict,pytest. Ejecútalos todos en verde antes de comenzar.
Tareas¶
- Instantánea del estado actual.
Imprime:
- Total de amenazas listadas.
- Número en estado OPEN.
- Número en MITIGATED.
- Número sin estado explícito (un bug — márcalo y añade un estado explícito).
- Triaje de cada amenaza abierta. Para cada hilo abierto, en orden, decide una de tres:
- Cerrar. Implementa la mitigación ahora. Añade un test que la verifique. Actualiza el estado a
MITIGATED by <test_name>con un enlace. - Aceptar con justificación. Escribe la justificación según
theory/03-residual-risk-and-offramps.md. Debe incluir: (a) por qué la amenaza no aplica ahora, (b) mitigaciones en vigor, © disparador para reevaluación, (d) fecha de revisión. -
Aplazar a off-ramp. Mueve a
READING_LIST.mdbajo la sección "off-ramps". Marca enTHREATS.mdcomo[PUNTED: see READING_LIST.md #N]. -
Reejecuta CI y las herramientas de seguridad:
Las cuatro deben pasar. Si bandit o pip-audit marcan nuevos problemas, decide: cerrar o aceptar (con justificación). Repite hasta que esté limpio.
- Verifica la instantánea:
Esperado:
- OPEN: 0
- MITIGATED o ACCEPTED: > 0
- Todas las amenazas tienen un estado explícito.
- Escribe un resumen de hardening de una página en
security/HARDENING_PHASE_40.md: - Cuántas amenazas comenzaron abiertas vs. terminaron abiertas.
- Cuántas fueron cerradas; tests clave de cierre.
- Cuántas fueron aceptadas; la amenaza aceptada de mayor riesgo (una frase).
- Cuántas fueron aplazadas; puntero a la sección off-ramp.
Entregables¶
security/THREATS.mdactualizado con cero amenazasOPEN.security/HARDENING_PHASE_40.md(una página).- Tests añadidos para cualquier amenaza recién cerrada en
tests/security/. - Entradas off-ramp añadidas a
READING_LIST.md.
Aceptación¶
python scripts/count_threats.pyreporta 0 amenazas abiertas.- Cada amenaza tiene: un enlace
MITIGATED by <test>, unACCEPTED with rationale + review date, o una referenciaPUNTED to READING_LIST.md #N. bandit,pip-audit,mypy --strict, ypytestpasan todos.- El resumen de hardening es honesto sobre qué amenazas fueron aceptadas, no solo cuáles fueron cerradas.
Trampas¶
- Cerrar una amenaza sin un test. Si no hay test, no cerraste nada — escribiste un comentario. Cada amenaza cerrada debe tener un test que fallaría si la amenaza se reintrodujese.
- Aceptar sin un disparador. "Aceptada para siempre" no es aceptación, es evitación. Oblígate a escribir el disparador de reevaluación.
- Aplazar con demasiada agresividad. Si aplazas más del ~30% de las amenazas abiertas, estás usando el off-ramp como vertedero. Reexamina: ¿alguna era un cierre rápido que omitiste?
- Tratar advertencias de
banditypip-auditcomo "no reales". Algunas son ruido (falsos positivos sobre patrones). Para cada advertencia, o añade un comentario# noseccon una justificación de una frase, o arréglala. La supresión silenciosa está prohibida.
Extensión¶
- Añade un paso de CI que ejecute
count_threats.pyy falle si algún hilo está en estadoOPEN. Previene la acumulación futura de hilos abiertos. - Añade un recordatorio de revisión a 6 meses — una tabla markdown en la cabecera de
THREATS.mdcon la próxima fecha de revisión de cada entrada "aceptada", ordenable.
Siguiente: 01-write-the-postmortem.md