Prácticas recomendadas para la seguridad de las puertas de enlace de API
Kuria Macharia
7 de septiembre de 2022
0 minutos de lecturaLas API son un componente fundamental del panorama de desarrollo actual debido a su importancia en los microservicios. Como el software moderno suele estar compuesto por varios microservicios, algunas funcionalidades pueden quedar fuera del alcance de una API individual. Con una puerta de enlace de API, podemos agregar esos servicios para que funcionen como si fueran una sola API y devolver respuestas complejas de distintos microservicios mediante una única llamada a la puerta de enlace. Por ejemplo, con una puerta de enlace de API y GraphQL, se puede usar un único esquema definido para consultar campos de datos específicos de distintos microservicios y obtener una respuesta unificada.
¿Qué es una puerta de enlace de API?
Una puerta de enlace de API es una capa abstracta que suele funcionar como la única interfaz pública entre los microservicios y los clientes que los consumen. Actúa como proxy de los microservicios de backend: conecta los endpoints de la API orientados al cliente, enruta sus solicitudes a los microservicios adecuados y agrega los datos de respuesta antes de enviarlos al cliente que los solicitó. Proporciona una interfaz de programación de aplicaciones coherente y uniforme que simplifica el trabajo de los desarrolladores de frontend.
Otros beneficios de las puertas de enlace de API incluyen:
Balanceo de carga: podemos configurar una puerta de enlace de API para que distribuya las solicitudes entrantes de los clientes entre las instancias de servicio disponibles y así ofrecer balanceo de carga.
Eliminación de solicitudes de ida y vuelta: una puerta de enlace elimina las solicitudes innecesarias de los clientes que pueden aumentar la latencia y reducir el rendimiento. Estos pueden enviar una única solicitud a la puerta de enlace, que la reenvía a varios servicios y agrega las respuestas.
Centralización de la supervisión de uso y las analíticas: una puerta de enlace de API permite integrar herramientas de supervisión y analíticas para recopilar y analizar datos valiosos relacionados con el tráfico de usuarios, el tiempo de ejecución y los errores. Esta información es esencial para tomar decisiones sobre el escalado y la depuración de una aplicación.
El acceso de las API a los servicios de backend las convierte en un objetivo atractivo para los hackers maliciosos que buscan acceder a esos servicios o interceptar datos en tránsito. Una puerta de enlace de API actúa como una barrera de seguridad entre los endpoints de los microservicios de backend y los endpoints de los clientes.
En este artículo, analizaremos los beneficios de seguridad que ofrecen las puertas de enlace de API y exploraremos las prácticas recomendadas que debemos seguir, además de otras medidas para mantenerlas seguras.
Cómo una puerta de enlace de API mejora la seguridad
La seguridad es una preocupación fundamental para las empresas que ofrecen sus servicios como API. Una puerta de enlace de API puede mejorar la postura de seguridad de los sistemas que utilizan endpoints de API públicos de varias maneras, entre ellas:
Aplicación de políticas
Las políticas son reglas que deben cumplirse al acceder a los servicios subyacentes y administrar el comportamiento de la API. Una política consta de dos componentes: las reglas que se deben comprobar y la acción resultante. Las políticas se aplican dentro de la puerta de enlace de API. Podemos personalizarlas para adaptarlas a las necesidades de distintas tareas, como la autenticación y autorización o la administración del tráfico. Un buen ejemplo es la serialización de JSON y otros tipos de datos, que podemos estandarizar en un único punto de entrada.
Protección contra la sobrecarga de tráfico
Una puerta de enlace de API puede limitar la cantidad de veces que se llama a una API en un período determinado. Esto garantiza que no se supere la capacidad de procesamiento de solicitudes del backend. También protege el sistema contra ataques de denegación de servicio (DoS), que consisten en inundar de tráfico los microservicios de backend. Además, protege la API contra ataques de fuerza bruta y de prueba y error, en los que se envían numerosas solicitudes con credenciales diferentes.
Disyuntores
Un disyuntor mejora la postura de seguridad al garantizar que la conexión con los servicios de backend esté protegida. Funciona interrumpiendo las conexiones al backend durante un período definido si detecta que se alcanzó una cantidad determinada de fallas de conexión consecutivas. Así evita sobrecargar el backend con solicitudes que probablemente fallen. Es una medida de protección automática que impide que los atacantes provoquen fallas en cascada en las API.
Desacoplamiento de los servicios de backend de las aplicaciones de frontend
Una puerta de enlace de API mejora la seguridad de los servicios de backend sensibles al eliminar todo contacto directo entre ellos y las aplicaciones de frontend. Esto también limita la información que el frontend puede conocer sobre los microservicios que procesan sus solicitudes. Así se protege el sistema contra los ataques de inyección SQL, que consisten en dirigir código malicioso a las bases de datos de backend. Limitar la información disponible sobre el backend dificulta que alguien inicie ataques de inyección SQL, ya que no tiene información sobre la base de datos de la que provienen los datos.
Prácticas recomendadas para la seguridad de las puertas de enlace de API
Una puerta de enlace de API puede reducir el riesgo de ataques de inyección mediante la validación básica de las entradas de todas las solicitudes. Así, las solicitudes con datos sospechosos se descartan antes de llegar a los servicios de backend.
Aunque las puertas de enlace ofrecen excelentes capacidades de seguridad, también debemos tomar medidas proactivas para proteger nuestros endpoints de API y microservicios. Veamos algunas prácticas recomendadas para crear una puerta de enlace de API segura.
HTTPS y cifrado de solicitudes
Para mejorar la seguridad de una puerta de enlace de API, primero debemos asegurarnos de que se comunique con los clientes mediante HTTPS. HTTPS es un protocolo seguro que cifra todos los datos en tránsito y aumenta su seguridad. Actualmente es el estándar del sector para los sitios web públicos. El protocolo TLS es especialmente importante al transmitir datos sensibles, por ejemplo, al iniciar sesión en un servicio de correo electrónico, una cuenta bancaria o un sistema empresarial de forma remota. También nos permite transferir la tarea de administrar TLS del cliente al proveedor de servicios en la nube.
Validación de solicitudes de API
Debemos configurar una puerta de enlace de API para que valide las solicitudes de API recibidas de los clientes antes de reenviarlas a los microservicios de backend. Por ejemplo, podemos configurar la puerta de enlace para que compruebe que un parámetro o encabezado de la solicitud no esté vacío, o que la carga útil cumpla con el esquema JSON permitido.
Si la validación falla, la puerta de enlace de API descarta la solicitud y devuelve un error al cliente. Esto reduce la cantidad de solicitudes innecesarias que se reenvían al servidor y mitiga el riesgo de ataques de inyección.
Configuración del registro
Debemos habilitar el registro en una puerta de enlace de API para resolver problemas de acceso de los clientes y de ejecución de solicitudes. La puerta de enlace de API genera dos tipos de registros: de ejecución y de acceso.
Los registros de ejecución contienen detalles de cada paso que sigue una puerta de enlace de API para procesar una solicitud. Incluyen trazas de ejecución, pasos de validación y errores. Los registros de acceso contienen detalles de cada ingreso a la puerta de enlace de API. Cada solicitud genera una entrada que indica quién accede a la puerta de enlace y cómo lo hace.
Implementación de límites de frecuencia
En una puerta de enlace de API, debemos implementar límites de frecuencia para:
Prevenir ataques de denegación de servicio (DoS)
Limitar el impacto de las fallas en cascada
Limitar el uso de recursos.
Implementar límites de frecuencia en la puerta de enlace de API protege los microservicios del tráfico malicioso y de las sobrecargas de tráfico legítimo que pueden provocar una falla del sistema. Las políticas de limitación de velocidad ayudan a mitigar los inconvenientes de los límites de frecuencia estrictos al poner en cola las solicitudes que superan el límite para procesarlas en la siguiente cuota. Podemos aplicar políticas de límites de frecuencia y de limitación de velocidad a un recurso específico o a todas las solicitudes.
Habilitación de un firewall de aplicaciones web (WAF)
Podemos proteger nuestra puerta de enlace de API con un firewall de aplicaciones web (WAF), que limita el acceso a la API según un conjunto de condiciones y reglas definidas. Esto ayuda a proteger la puerta de enlace de API contra amenazas comunes, como el scripting entre sitios y los ataques de inyección.
Por ejemplo, podemos usar un WAF para denegar o permitir el acceso a solicitudes provenientes de bloques CIDR, rangos de direcciones IP o países específicos. También puede detectar y descartar solicitudes que contengan scripts maliciosos o código SQL. Implementar un WAF permite acercar la barrera de seguridad al cliente y liberar a la puerta de enlace de API de cargas de trabajo innecesarias.
El WAF es un filtro eficaz de contenido a nivel HTTP, e incluso US CISA lo recomendó como una de las soluciones para prevenir ataques relacionados con la vulnerabilidad Log4j. También es una de las prácticas recomendadas de Snyk para corregir Log4Shell.
Designación de puertas de enlace de API
Debemos crear puertas de enlace de API separadas según sus casos de uso para reducir la posible superficie de ataque y evitar la exposición innecesaria de endpoints de API. Designar puertas de enlace de API también ayuda a limitar la propagación de fallas si una puerta de enlace falla o aplica una limitación de velocidad.
Por ejemplo, si se produce un ataque contra una puerta de enlace, no se interrumpirán todos los servicios del sistema. Esto facilita mucho la depuración del sistema porque la superficie de ataque es mucho menor.
Cómo aprovechar al máximo tu puerta de enlace de API
La medida más importante que podemos tomar para proteger nuestra API es implementar una puerta de enlace de API.
Esta desacopla las arquitecturas de microservicios de la API pública y nos permite introducir distintas barreras de seguridad entre ellas. Estas barreras —incluidos los límites de frecuencia, el WAF, HTTPS y la validación de solicitudes— mitigan el riesgo de ataques comunes contra las API, como la inyección SQL, el scripting entre sitios y la denegación de servicio.
Al seguir las prácticas recomendadas, como la comunicación HTTPS, la validación de solicitudes, el registro, los límites de frecuencia, el WAF y la designación de puertas de enlace de API, reducimos el riesgo de ataques exitosos contra los endpoints y los datos en tránsito. Obtén más información sobre la seguridad de las API aquí.
Empieza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.
