Serverless.com Security
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Una Organización es la entidad de más alto nivel dentro del ecosistema de Serverless Framework. Representa un grupo colectivo, como una empresa, departamento o cualquier entidad grande, que abarca múltiples proyectos, equipos y aplicaciones.
El Equipo son los usuarios con acceso dentro de la organización. Los equipos ayudan a organizar a los miembros según roles. Colaboradores
pueden ver y desplegar aplicaciones existentes, mientras que Administradores
pueden crear nuevas aplicaciones y gestionar la configuración de la organización.
Una Aplicación es un agrupamiento lógico de servicios relacionados dentro de una Organización. Representa una aplicación completa compuesta de múltiples servicios serverless que trabajan juntos para proporcionar una funcionalidad cohesiva.
Un Servicio es el componente central de una aplicación Serverless. Representa tu proyecto serverless completo, encapsulando todas las funciones, configuraciones y recursos necesarios. Se define típicamente en un archivo serverless.yml
, un servicio incluye metadatos como el nombre del servicio, configuraciones del proveedor, funciones, eventos, recursos, plugins y variables personalizadas.
Este es un resumen del tutorial oficial de la documentación:
Crea una cuenta de AWS (Serverless.com comienza en la infraestructura de AWS)
Crea una cuenta en serverless.com
Crea una aplicación:
Esto debería haber creado una app llamada tutorialapp
que puedes verificar en serverless.com y una carpeta llamada Tutorial
con el archivo handler.js
que contiene algo de código JS con un código helloworld
y el archivo serverless.yml
declarando esa función:
Crea un proveedor de AWS, yendo al dashboard en https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Para dar acceso a serverless.com
a AWS, pedirá ejecutar un stack de cloudformation usando este archivo de configuración (en el momento de escribir esto): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Esta plantilla genera un rol llamado SFRole-<ID>
con arn:aws:iam::aws:policy/AdministratorAccess
sobre la cuenta con una Identidad de Confianza que permite a la cuenta de AWS de Serverless.com
acceder al rol.
El tutorial pide crear el archivo createCustomer.js
, que básicamente creará un nuevo endpoint de API manejado por el nuevo archivo JS y pide modificar el archivo serverless.yml
para que genere una nueva tabla DynamoDB, defina una variable de entorno, el rol que estará utilizando las lambdas generadas.
Despliegue ejecutando serverless deploy
El despliegue se realizará a través de una pila de CloudFormation
Tenga en cuenta que las lambdas están expuestas a través de API gateway y no a través de URLs directas
Pruébelo
El paso anterior imprimirá las URLs donde se han desplegado sus funciones lambda de puntos finales de API
Los roles de IAM excesivamente permisivos pueden otorgar acceso no autorizado a recursos en la nube, lo que lleva a filtraciones de datos o manipulación de recursos.
Principio de Menor Privilegio: Asigne solo los permisos necesarios a cada función.
Usar Roles Separados: Diferencie roles según los requisitos de la función.
Almacenar información sensible (por ejemplo, claves API, credenciales de base de datos) directamente en serverless.yml
o en el código puede llevar a la exposición si los repositorios son comprometidos o si se compromete el acceso a AWS, ya que serán legibles desde las configuraciones de las lambdas.
Variables de Entorno: Inyecte secretos en tiempo de ejecución sin codificarlos.
Integración con Secrets Manager: Utilice servicios como AWS Secrets Manager, Azure Key Vault o HashiCorp Vault.
Variables Encriptadas: Aproveche las características de encriptación del Framework Serverless para datos sensibles.
Controles de Acceso: Restringa el acceso a secretos según los roles.
Evitar Registrar Secretos: Asegúrese de que los secretos no se expongan en registros o mensajes de error.
Las dependencias desactualizadas o inseguras pueden introducir vulnerabilidades, mientras que un manejo inadecuado de la entrada puede llevar a ataques de inyección de código.
Gestión de Dependencias: Actualice regularmente las dependencias y escanee en busca de vulnerabilidades.
Validación de Entrada: Implemente una validación y sanitización estrictas de todas las entradas.
Revisiones de Código: Realice revisiones exhaustivas para identificar fallas de seguridad.
Análisis Estático: Utilice herramientas para detectar vulnerabilidades en la base de código.
Sin un registro y monitoreo adecuados, las actividades maliciosas pueden pasar desapercibidas, retrasando la respuesta a incidentes.
Registro Centralizado: Agregue registros utilizando servicios como AWS CloudWatch o Datadog.
Habilitar Registro Detallado: Capture información esencial sin exponer datos sensibles.
Configurar Alertas: Configure alertas para actividades sospechosas o anomalías.
Monitoreo Regular: Monitoree continuamente registros y métricas en busca de posibles incidentes de seguridad.
APIs abiertas o mal aseguradas pueden ser explotadas para acceso no autorizado, ataques de Denegación de Servicio (DoS) o ataques entre sitios.
Autenticación y Autorización: Implemente mecanismos robustos como OAuth, claves API o JWT.
Limitación de Tasa y Regulación: Prevenga abusos limitando las tasas de solicitud.
Configuración Segura de CORS: Restringa los orígenes, métodos y encabezados permitidos.
Utilizar Firewalls de Aplicaciones Web (WAF): Filtrar y monitorear solicitudes HTTP en busca de patrones maliciosos.
Recursos compartidos y un aislamiento inadecuado pueden llevar a escalaciones de privilegios o interacciones no deseadas entre funciones.
Aislar Funciones: Asigne recursos y roles de IAM distintos para asegurar una operación independiente.
Particionamiento de Recursos: Utilice bases de datos o buckets de almacenamiento separados para diferentes funciones.
Usar VPCs: Despliegue funciones dentro de Nubes Privadas Virtuales para un mejor aislamiento de red.
Limitar Permisos de Funciones: Asegúrese de que las funciones no puedan acceder o interferir con los recursos de otras funciones a menos que sea explícitamente necesario.
Los datos no encriptados en reposo o en tránsito pueden ser expuestos, lo que lleva a filtraciones de datos o manipulación.
Encriptar Datos en Reposo: Utilice las características de encriptación del servicio en la nube.
Encriptar Datos en Tránsito: Utilice HTTPS/TLS para todas las transmisiones de datos.
Comunicación API Segura: Haga cumplir protocolos de encriptación y valide certificados.
Gestionar Claves de Encriptación de Forma Segura: Utilice servicios de claves gestionadas y rote las claves regularmente.
Los mensajes de error detallados pueden filtrar información sensible sobre la infraestructura o la base de código, mientras que las excepciones no manejadas pueden llevar a fallos en la aplicación.
Mensajes de Error Genéricos: Evite exponer detalles internos en las respuestas de error.
Manejo Centralizado de Errores: Gestione y sanee errores de manera consistente en todas las funciones.
Monitorear y Registrar Errores: Realice un seguimiento y analice errores internamente sin exponer detalles a los usuarios finales.
Las configuraciones de despliegue expuestas o el acceso no autorizado a las tuberías de CI/CD pueden llevar a despliegues de código malicioso o configuraciones incorrectas.
Asegurar las Tuberías de CI/CD: Implemente controles de acceso estrictos, autenticación multifactor (MFA) y auditorías regulares.
Almacenar Configuración de Forma Segura: Mantenga los archivos de despliegue libres de secretos codificados y datos sensibles.
Utilizar Herramientas de Seguridad de Infraestructura como Código (IaC): Emplee herramientas como Checkov o Terraform Sentinel para hacer cumplir políticas de seguridad.
Despliegues Inmutables: Prevenga cambios no autorizados después del despliegue adoptando prácticas de infraestructura inmutable.
Usar plugins de terceros no verificados o maliciosos puede introducir vulnerabilidades en sus aplicaciones serverless.
Evaluar Plugins Exhaustivamente: Evalúe la seguridad de los plugins antes de la integración, favoreciendo aquellos de fuentes reputadas.
Limitar el Uso de Plugins: Utilice solo los plugins necesarios para minimizar la superficie de ataque.
Monitorear Actualizaciones de Plugins: Mantenga los plugins actualizados para beneficiarse de parches de seguridad.
Aislar Entornos de Plugins: Ejecute plugins en entornos aislados para contener posibles compromisos.
Funciones accesibles públicamente o APIs sin restricciones pueden ser explotadas para operaciones no autorizadas.
Restringir el Acceso a Funciones: Utilice VPCs, grupos de seguridad y reglas de firewall para limitar el acceso a fuentes de confianza.
Implementar Autenticación Robusta: Asegúrese de que todos los puntos finales expuestos requieran autenticación y autorización adecuadas.
Utilizar API Gateways de Forma Segura: Configure API Gateways para hacer cumplir políticas de seguridad, incluyendo validación de entrada y limitación de tasa.
Deshabilitar Puntos Finales No Utilizados: Revise regularmente y desactive cualquier punto final que ya no esté en uso.
Otorgar permisos excesivos a miembros del equipo y colaboradores externos puede llevar a acceso no autorizado, filtraciones de datos y uso indebido de recursos. Este riesgo se ve incrementado en entornos donde múltiples individuos tienen diferentes niveles de acceso, aumentando la superficie de ataque y el potencial de amenazas internas.
Principio de Menor Privilegio: Asegúrese de que los miembros del equipo y colaboradores tengan solo los permisos necesarios para realizar sus tareas.
Claves de Acceso y Claves de Licencia son credenciales críticas utilizadas para autenticar y autorizar interacciones con el CLI de Serverless Framework.
Claves de Licencia: Son identificadores únicos requeridos para autenticar el acceso a Serverless Framework Versión 4 que permite iniciar sesión a través del CLI.
Claves de Acceso: Credenciales que permiten al CLI de Serverless Framework autenticarse con el Dashboard de Serverless Framework. Al iniciar sesión con el CLI serverless
, se generará y almacenará una clave de acceso en la computadora portátil. También puede configurarla como una variable de entorno llamada SERVERLESS_ACCESS_KEY
.
Exposición a Través de Repositorios de Código:
Codificar o comprometer accidentalmente Claves de Acceso y Claves de Licencia en sistemas de control de versiones puede llevar a acceso no autorizado.
Almacenamiento Inseguro:
Almacenar claves en texto plano dentro de variables de entorno o archivos de configuración sin la encriptación adecuada aumenta la probabilidad de filtración.
Distribución Inadecuada:
Compartir claves a través de canales no seguros (por ejemplo, correo electrónico, chat) puede resultar en la interceptación por actores maliciosos.
Falta de Rotación:
No rotar regularmente las claves extiende el período de exposición si las claves son comprometidas.
Permisos Excesivos:
Claves con permisos amplios pueden ser explotadas para realizar acciones no autorizadas en múltiples recursos.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)