Aprendizajes de anteriores empresas de SaaS
En una startup típica de SaaS, el equipo de desarrollo está sometido a una gran presión para ofrecer nuevas funciones. Suele haber competidores mejor financiados, el equipo de ventas pide una última función para cerrar el trato y el equipo de atención al cliente pide una corrección de errores. Puede ser difícil dar prioridad a la seguridad a menos que un cliente empresarial más grande lo exija o tu junta directiva lo imponga desde arriba.
En la mayoría de las startups, es posible que no dispongas de una gama completa de perfiles técnicos: puede que aún no tengas un jefe de producto a tiempo completo, probablemente no tengas un jefe de seguridad a tiempo completo en tu equipo de desarrollo. Un equipo de desarrollo sometido a la presión de la entrega se verá obligado a recortar muchos gastos, incluso en materia de seguridad.
He sido el CTO de 3 startups SaaS en fase inicial. (Teamleader, Officient & Futureproofed) A continuación he resumido mis aprendizajes de esas experiencias pasadas en empresas SaaS.

Evitar reinventar la rueda
Un gran ejemplo: no construyas un sistema de inicio de sesión con contraseñas. Sí, podrías construirlo en unos días, pero el coste de mantenerlo y añadir funciones de protección avanzadas en el futuro será muy alto. Considera utilizar un inicio de sesión mediante Single-sign on como Gmail o utiliza un servicio como Auth0.com. No sólo tendrás una experiencia de inicio de sesión más fluida y con más funciones, sino que además no tendrás que preocuparte por toda una clase de aspectos de seguridad relacionados con el inicio de sesión (fuerza bruta, credenciales de usuario filtradas en servicios de terceros, evitar y detectar ataques de toma de control de cuentas, validación de direcciones de correo electrónico, registro...).
Al final, si elige el proveedor adecuado, no sólo estará reduciendo su superficie de ataque, sino que también estará ganando tiempo que podrá dedicar a funciones más valiosas.
Otros buenos ejemplos que podrían ahorrarte semanas o meses son:
- No almacene tarjetas de crédito, utilice algo como Stripe o Mollie o Chargebee
- No ejecute usted mismo software complejo como MySQL o PostgreSQL o ElasticSearch. Utiliza servicios gestionados en la nube como RDS.
- No crees tus propios sistemas de registro. Utiliza sistemas como Sentry o Papertrail (y no registres allí ningún dato sensible).
- No utilice sus propios servidores de correo electrónico (SMTP), sino un servicio gestionado como Sendgrid o Mailgun.
- No construyas servidores websocket, utiliza servicios gestionados como Pusher.com
- No construyas tu propio sistema de featureflagging, utiliza un servicio como Launchdarkly
- No construyas tu propia integración de calendario, utiliza una herramienta como cronofy.com
- Al crear integraciones en general, busca API unificadas en ese espacio, como Apideck.
Invierta tiempo en un sistema de comunicación de crisis
Asegúrate de tener herramientas configuradas, como una aplicación de chat para hablar con tus clientes o, mejor aún, una página de estado gestionada o una cuenta de Twitter donde comunicar los problemas. En caso de que ocurra algo malo, es una gran práctica permitir que el resto de tu empresa se comunique con tus clientes mientras tú te centras en solucionar el problema durante una crisis.
Añadir guardarraíles globales
Probablemente estés revisando Pull Requests de tus desarrolladores, ¡genial! Es toda una tarea revisarlos para comprobar su mantenibilidad, rendimiento y funcionalidad. ¿Tienes tiempo para revisar también la seguridad? Seguro que podrás cubrir algunos riesgos, pero es bueno poder dejar de lado algunos riesgos añadiendo algunos guardrails y configuración global.
A veces, puedes tener suerte y existen soluciones globales para problemas específicos.
- Si utilizas nodeJS y no te gusta pensar en la contaminación del prototipo, debes congelar el prototipo para desactivar esta clase de ataques en toda la aplicación. Aikido puede construir automáticamente un Pull Request que haga esto por ti.
- Si utiliza SQL y teme los ataques de inyección SQL (debería temerlos), puede utilizar un WAF (como AWS WAF) o RASP (como Datadog's app security) para la protección de toda la aplicación.
- Si está descubriendo muchos ataques XSS, es probable que pueda eliminar gran parte de ellos introduciendo una política CSP muy estricta en el navegador.
- Si realiza muchas solicitudes salientes basadas en entradas de clientes, podría ser vulnerable a ataques SSRF. Si bien puede ser difícil bloquear esto por completo, puede mitigar los daños asegurándose de que no puede conducir a algo peor (como un ataque IMDSv1 sobre credenciales IAM en AWS). Aikido monitoriza esto en tu nube AWS por defecto.
- Cuando se trata de almacenamiento de objetos, evitar tipos específicos de funciones como Pickle, XML, (un)serialize en Java y PHP,.. y en su lugar optar por opciones de almacenamiento simples como JSON puede evitar muchos exploits típicos relacionados con unserialización insegura. Aikido monitoriza este tipo de funciones en tu código por defecto.
- Si utiliza una CDN o mecanismos de almacenamiento en caché, utilice dominios separados para sus activos estáticos con configuraciones de CDN separadas para evitar todo tipo de ataques de envenenamiento de caché (ChatGPT se encontró con esta trampa recientemente).
Eduque a sus desarrolladores con este sencillo truco
Hay un truco muy sencillo (valga el juego de palabras) que puede aplicar en sus procesos. Una pregunta rápida para el equipo de desarrollo durante la planificación del sprint:
¿Cómo puede piratearse la funcionalidad que estamos construyendo? (y ¿cómo podemos evitarlo?)
Aunque es posible que el equipo de desarrollo no pueda prever todos los posibles abusos, esta metodología es muy fácil de aplicar. Es un pequeño paso adicional que anima a los desarrolladores a comprobar las consideraciones de seguridad antes de emprender cualquier trabajo de desarrollo.

Asigne prioridades a las distintas partes de su código base
No todo será un objetivo tan grande para los piratas informáticos. Los componentes clave que les encanta atacar son :
- Sistemas de pago, monederos, sistemas de crédito
- Funcionalidad que se conecta a API caras como SMS, voip (piense en Twilio)
- Restablecimiento de contraseñas, sistemas de inicio de sesión, invitaciones a usuarios
- Funciones de exportación como PDF, Excel,.. exportaciones que podrían realizar operaciones de riesgo.
- Todo lo relacionado con la carga de archivos e imágenes
- Funciones que realizan solicitudes salientes por diseño, como webhooks
- Cualquier tipo de función que envíe correo electrónico, especialmente con contenido personalizado
PD: Aikido puede ayudarte a centrarte sólo en los repositorios más importantes del universo de tu startup asignando niveles de riesgo a cada base de código.
No olvide el aspecto humano
Como CTO en una pequeña startup, normalmente también eres el encargado de la seguridad operativa. Proporciona a tu equipo los medios para proteger sus cuentas. Asegúrate de que utilizan Yubikeys de hardware o aplicaciones de software para 2FA y, si es posible, hazlo cumplir. Herramientas como Gmail permiten hacerlo. Es una gran primera línea de defensa contra los ataques de phishing.
Mantenerse al día en prácticas de seguridad es difícil
Aprender sobre nuevos tipos de ataques al software es difícil. Ya es bastante difícil seguir las actualizaciones de los lenguajes que utilizas (Python, Node, Go,..) o los parches del sistema operativo o los exploits populares en paquetes de código abierto. Los ataques específicos se vuelven más populares con el tiempo, por lo que vale la pena seguir las tendencias. Por ejemplo, después de notar un repunte en los ataques de adquisición de subdominios el año pasado, Aikido introdujo una herramienta de monitorización de adquisición de subdominios para prevenir ese riesgo y automatizar la práctica de monitorizar estos registros DNS.
Automatice
En mis anteriores empresas, intentábamos pasar al siguiente nivel de seguridad haciendo que una persona de seguridad creara un calendario con tareas de seguridad recurrentes. Hacer una revisión de acceso para todas las aplicaciones cada trimestre. Hacer un escaneo de secretos filtrados en el código cada dos semanas, limpiar las CVEs de paquetes de código abierto cada viernes, hacer un escaneo SAST de vez en cuando, verificar los registros DNS para tomas de subdominios cada mes,... El resultado de estas tareas era difícil de clasificar y convertir en procesable para los desarrolladores. Peor aún, cuando esta persona dejaba la empresa, era difícil para cualquier otra persona retomar estas tareas porque requerían muchos conocimientos específicos.
Aquí es donde la idea de Aikido comenzó a crecer. Necesitábamos una solución que automatizara todo lo anterior, filtrara el ruido y pusiera las tareas delante de tus desarrolladores en Slack o Jira.
Empieza a escanear tu código y tu nube con Aikido hoy mismo. Regístrate aquí y empieza a escanear gratis.