Supongamos que estoy creando un servicio para almacenar toda la información segura o confidencial que utilizan mis otras aplicaciones. Piense contraseñas, o claves SSH privadas. Bajo el viejo paradigma de programación de "hacer una cosa realmente, muy bien", quiero hacer este servicio lo más seguro posible. Estoy tomando las siguientes precauciones:
- Todos los datos están encriptados en la base de datos (duh)
- Los datos almacenados se asignan aleatoriamente a una de las múltiples bases de datos (incluso si una base de datos estaba comprometida, no todos , los datos están en esa)
- El acceso a los datos está controlado por permisos de token específicos: el token A no tiene permiso para acceder a los datos del token B y viceversa, y el token C es el único con permiso para escribir datos, A y B solo pueden leerlo (por ejemplo, ejemplo)
- El servicio real se ejecuta en AWS, por lo que tenemos sus precauciones de seguridad 'físicas'
- El acceso de SSH a la producción se deshabilita permanentemente: cuando una nueva implementación necesita subir, se ejecuta un script en AWS que hace girar un nuevo servidor. El servidor tiene una secuencia de comandos de inicio que extrae la compilación más reciente de Bitbucket y realiza los pasos de configuración necesarios
- Hay un tablero real para administrar tokens, etc. - este tablero está protegido por una autenticación de dos factores (recibo un código en mi teléfono que debo ingresar cuando quiero iniciar sesión, además del nombre de usuario / contraseña)
Me parece que este es un entorno bastante seguro, pero puedo identificar un par de vulnerabilidades:
- Mi cuenta de AWS: si mi cuenta de AWS estuviera comprometida, un atacante podría editar fácilmente la secuencia de comandos de inicio del servidor para hacer algo malicioso o abrir el acceso SSH al servidor de producción.
- Mi cuenta de Bitbucket: Del mismo modo, si mi cuenta de Bitbucket estuviera comprometida, un atacante podría incluir un código malicioso en la compilación de mi proyecto, que el servidor la retiraría la próxima vez que se implementara.
Estas son las vulnerabilidades obvias, sin embargo, no estoy seguro de cómo proteger esa vía de ataque. También me preocupa no saber lo que no sé: ¿hay algún vector de ataque que no haya considerado o fallas en mi configuración planeada?