Centinela
Escáner de seguridad web SaaS multi-tenant en construcción: hoy existen los fundamentos; el escaneo está planeado.
Rol: Diseño y desarrollo del producto
- Next.js
- FastAPI
- PostgreSQL
- Redis
Problema
Escanear un sitio web en busca de vulnerabilidades es útil, pero hecho sobre un sitio ajeno y sin permiso es un problema serio. Muchas herramientas dejan esa responsabilidad en manos de quien las usa y no comprueban nada. Para un producto que se quiere ofrecer como servicio a varias organizaciones, eso no alcanza.
Centinela parte de una idea: solo se escanea lo que el usuario puede demostrar que le pertenece, y ninguna organización puede ver datos de otra. De esas dos reglas sale casi todo el diseño, y por eso las construí antes que el escáner.
Lo que está planeado
Centinela es un producto en construcción. Esta sección separa con claridad lo que ya existe de lo que todavía es un plan, porque no quiero que se lea como más avanzado de lo que está.
Lo que ya existe
Los fundamentos ya están construidos y probados:
- Una base de datos con seguridad por filas, que aísla los datos de cada organización.
- Identidad, organizaciones y equipos, con roles de propietario, administrador, miembro y lector que el servidor hace cumplir.
- Una interfaz en español y en inglés, y la estructura para planes distintos, sin cobro todavía.
- El acuerdo de autorización que el usuario debe aceptar, con registro de cuándo y qué versión aceptó.
- La verificación de propiedad de un dominio por registro DNS TXT o por carta firmada y revisada.
Esto es lo que se puede usar hoy. Todavía no hay escaneo de ningún tipo.
Lo que viene
Las siguientes etapas, en orden, son las que harán del proyecto un escáner de verdad:
- Una salida segura a internet, para que los escaneos solo alcancen los destinos autorizados.
- Colas y workers que ejecuten los escaneos fuera de la aplicación web.
- Chequeos pasivos de lo que un sitio ya expone: cabeceras, TLS, cookies y configuración de correo.
- Un panel con el resultado y informes claros y accionables.
- Más adelante, escaneo de APIs y chequeos activos no destructivos.
Las pantallas que se ven en este caso son bocetos con datos ficticios de lo que se pretende construir, y lo indican en su pie de imagen.
Cómo lo abordo
Elegí un orden poco vistoso a propósito. Un panel con gráficos se puede construir en cualquier momento, pero el aislamiento entre organizaciones y la prueba de autorización son difíciles de añadir cuando ya hay datos y usuarios. Hacerlos primero me da una base sobre la que el escáner puede crecer sin riesgos escondidos.
Cada etapa se planifica antes de escribir código y se cierra solo cuando está probada. Prefiero mostrar un producto pequeño y honesto, con lo que ya funciona a la vista y lo que falta señalado, antes que una lista larga de promesas.
Arquitectura
Diagrama simplificado; omite detalles internos por privacidad.
- El panel y la API ya existen; cada consulta pasa por seguridad por filas en PostgreSQL.
- Antes de escanear, el dominio se verifica con un registro DNS TXT o una carta firmada.
- La cola con workers y los informes están planeados y todavía no se construyen.
Decisiones técnicas
Seguridad por filas de PostgreSQL además de los filtros de la aplicación.
- Por qué
- En un producto con varias organizaciones, un filtro olvidado en una consulta basta para mostrar datos de otra. Con la regla puesta en la base de datos, cada consulta queda limitada a su organización aunque el código falle.
- Trade-off
- Las pruebas y las migraciones son más trabajosas, y hay que cuidar que cada conexión indique a qué organización pertenece.
Verificar la propiedad del dominio con un registro DNS TXT o con una carta firmada, antes de escanear.
- Por qué
- Escanear un sitio ajeno sin permiso es un problema legal y ético. Pedir una prueba que solo el dueño puede dar deja constancia de la autorización.
- Trade-off
- Añade fricción al primer uso: el usuario tiene que tocar su DNS o esperar una revisión manual de la carta.
Acceso por niveles: un snapshot público limitado y el resto detrás de un acuerdo de autorización.
- Por qué
- Un nivel sin autorización permite mostrar valor con lo que cualquier visitante ya puede observar, y los niveles más invasivos exigen un acuerdo aceptado.
- Trade-off
- Hay que definir con cuidado dónde termina lo público y mantener claro qué hace cada nivel, lo que complica el diseño del producto.
Galería
Mi rol
Lo diseño y lo construyo yo solo. Empecé por lo que más cuesta arreglar después, el aislamiento entre organizaciones y la autorización para escanear, y dejé para más adelante el escaneo en sí. Por eso hoy tiene fundamentos sólidos y todavía no escanea nada.