Escribir un contract¶
- Encuentra la garantía en una suite de tests pública. El lab mide afirmaciones que los
sandboxes hacen sobre sí mismos, así que un contract parte del test de otro proyecto y lo
nombra en
source. Las suites candidatas están encorpus-roadmap.md. - Escríbelo en términos neutrales en
contracts/<category>/<id>.toml: la policy, los fixtures, un attack que no debe tener efecto, un control que tiene que seguir funcionando y el efecto para el assert (Contracts, formato). - Haz que el attack sea real. Córrelo sin sandbox: tiene que funcionar, o el caso es
vacuous. Nunca debilites un attack para que un sandbox pase. - Mantén el control independiente del attack. Corre después del attack, así que no debe necesitar nada que un attack exitoso cambie.
- Di qué lo decide. Cuando un exit status es la evidencia, declara
expect_exity, si el attack puede salir con su status de bloqueo por otra razón,blocked_exit. Declararequirespara las capacidades del host yospara los sistemas a los que aplica. -
Escribe la siguiente versión del corpus en el mismo pull request:
python3 runner/corpus.py build 1.1y agrega una línea a
contracts/CHANGES.mdque diga por qué. Los tests del lab correncorpus.py checky fallan si no (Versiones del corpus). 7. Corre los tests del lab (python3 -m unittest discover -s runner/tests): los sandboxes de referencia revisan que un sandbox allow-all escape de tu attack y que uno deny-all rompa tu control.
Si una garantía solo tiene sentido en el modelo de un sandbox, dilo en el contract. Un
sandbox que no puede expresar un campo recibe unsupported.