El diseño seguro limita el daño
El diseño seguro es el conjunto de decisiones que reducen el daño cuando un programa falla. Lo importante es que un error pequeño no abra todo el sistema.
Piensa en la web de matrícula de una universidad. Un solo fallo en el formulario no debería dejar leer las notas de todos.
Al final de esta lección
Nota
Puedo aplicar reglas básicas de diseño seguro para decidir dónde poner un límite en un sistema.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Privilegio mínimo | dar a cada pieza solo el permiso que necesita | |
| Frontera de confianza | línea donde los datos pasan de una zona a otra | internet / red interna |
| Fallar de forma segura | ante un error, negar en lugar de permitir | |
| Superficie de ataque | todo lo que un atacante puede tocar | |
| Defensa en profundidad | varias barreras, no solo una |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cada pieza necesita solo su permiso
El privilegio mínimo es dar a cada cuenta, programa o servicio solo lo imprescindible. Si esa pieza se rompe o se engaña, el daño llega hasta donde llegaban sus permisos y no más.
Por eso la página que muestra el catálogo de una tienda no necesita poder borrar pedidos.
Ejemplo resuelto: qué permiso necesita cada pieza
| Pieza | Qué hace | Permiso justo | Permiso de más |
|---|---|---|---|
| Buscador del catálogo | Lee productos | Leer la tabla de productos | Escribir o borrar |
| Formulario de pedido | Crea pedidos | Añadir filas a pedidos | Leer las cuentas de usuarios |
| Informe de ventas | Cuenta pedidos | Leer pedidos | Cambiar precios |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una frontera separa zonas de distinto riesgo
Una frontera de confianza es el punto donde los datos pasan de una zona a otra. Lo que llega desde internet no es de fiar. Lo que circula dentro de la red interna se fía más.
En cada frontera hay que comprobar los datos. Marcar las fronteras en un dibujo es el primer paso del diseño.
Ante la duda, el sistema debe negar
Un sistema falla de forma segura si, cuando algo sale mal, se queda cerrado. Si la comprobación de permisos no responde, la petición se rechaza.
El diseño contrario abre la puerta cuando la cerradura se estropea. Sigue siendo un fallo, pero ahora pasa cualquiera.
Una comprobación que niega por defecto
# Cambia role a "alumno" y pulsa Run. Luego a "profesor".
role = "visitante"
allowed = ["profesor", "secretaria"]
if role in allowed:
print("puedes ver las notas")
else:
print("acceso negado")
Mira la superficie de la tienda
Tu laboratorio tiene una tienda pequeña con un buscador. Cada dirección a la que responde forma parte de su superficie de ataque. Ejecuta estos tres comandos. Solo miran: piden la portada, una búsqueda normal y una dirección que no existe.
La regla única
Advertencia
Ataca solo tu copia privada del laboratorio, que no tiene salida a internet. Probar un sistema ajeno, o sin permiso, es delito en casi todos los países.
La portada de la tienda
curl -s http://app:8000/ | head -n 2Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una búsqueda normal
curl -s -G --data-urlencode "q=pen" http://app:8000/searchSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una dirección que no existe
curl -s -o /dev/null -w "%{http_code}\n" http://app:8000/adminSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué te dicen las tres respuestas
El primero imprime <!doctype html> y <title>Corner Shop</title>. El segundo imprime Pen 1.2: el nombre y el precio. El tercero imprime 404, que significa que esa dirección no existe.
La tienda ofrece solo dos puertas, la portada y la búsqueda. Cuantas menos puertas, menos superficie.
Un error frecuente
Advertencia
Mucha gente cree que basta una sola barrera fuerte, como un cortafuegos. No es así. Una barrera puede fallar o saltarse. Con defensa en profundidad, cada capa limita el daño de la anterior: comprobar datos, permisos mínimos y registros.