Protección de APIs en una API Gateway

Zeping Bai

November 4, 2022

Technology

En junio de 2021, casi el 92% de los datos de los usuarios de LinkedIn fueron filtrados a través de APIs públicas que carecían de controles de seguridad. Los datos expuestos, que se vendieron en el mercado negro, incluían 700 millones de nombres de usuarios, datos personales, direcciones de correo electrónico, números de teléfono y otros detalles. Aunque LinkedIn considera este evento como un rastreo de datos públicos en lugar de un acceso ilícito, destaca la importancia de las medidas de seguridad en las APIs.

Como interfaz externa para que las aplicaciones proporcionen servicios, las APIs están constantemente expuestas a tráfico externo, enfrentándose a atacantes hostiles que emplean denegación de servicio, inyecciones y vulnerabilidades conocidas para atacar. Por ejemplo, en diciembre de 2020, los atacantes aprovecharon los defectos de log4j 2 para realizar ataques no configurados contra APIs. Por lo tanto, es necesario fortalecer la capacidad de la API para mantener fuera a estos atacantes maliciosos. Sin embargo, antes de adoptar medidas para asegurar una API, primero entendamos qué es una API.

¿Qué es una API?

Tradicionalmente, API (Interfaz de Programación de Aplicaciones) se refiere a las bibliotecas de enlace estático o dinámico del software para invocar sus funciones. Los desarrolladores pueden reutilizar las funciones proporcionadas por el software existente basándose en llamadas a sus APIs, como TCP/IP, proporcionado por los sistemas operativos.

Con la evolución de los sistemas de software y las redes, el término "API" ahora se refiere a las interfaces del sistema a las que se accede a través de una red. Los clientes llaman a estas interfaces utilizando protocolos como HTTP para realizar funciones del cliente, como consultar la API del tiempo para obtener información meteorológica.

En su sentido original, API se refiere a un canal proporcionado por el sistema de software para otros servicios, que define la especificación de interoperación entre varios subsistemas. El servicio de autenticación, por ejemplo, proporciona interfaces para el inicio de sesión, registro y obtención de información del usuario. Otros servicios pueden usar estas interfaces de llamada para completar la función de autenticación de usuarios. Del mismo modo, a través de la API, los subsistemas pueden cooperar para cumplir con la tarea de la aplicación completa.

¿Qué es la seguridad de las APIs?

Después de la descripción general de la API, ahora presentaremos la seguridad de las APIs. La seguridad de las APIs involucra tres perspectivas principales:

Seguridad de la Información (InfoSec): Desde la perspectiva de la información, asegurar que la información esté protegida durante su generación, transmisión, almacenamiento y destrucción en todo su ciclo de vida.

Seguridad de Red (NetSec): Desde la perspectiva de la red, asegurar que los datos transmitidos a través de la red no sean interceptados o alterados y que personas no autorizadas no accedan a la red.

Seguridad de Aplicaciones (AppSec): Desde la perspectiva del sistema de aplicaciones, asegurar que las aplicaciones desarrolladas puedan prevenir ataques maliciosos.

La seguridad de las APIs es la intersección de estos tres aspectos, lo que significa que los tres aspectos son indispensables si se desea hacer un buen trabajo en seguridad de APIs.

image.png

Ataques comunes a la seguridad de las APIs

OWASP, el proyecto abierto de seguridad de aplicaciones web, ha publicado una lista de 10 problemas comunes de seguridad en APIs OWASP API Security Project | OWASP Foundation.

Contiene los siguientes problemas:

Autorización de Nivel de Objeto Rota: Los usuarios acceden a objetos de datos a los que no tienen acceso.

Autenticación de Usuario Rota: Un error en la implementación del servicio de autenticación permite a los usuarios eludir el mecanismo de autenticación para acceder ilegalmente a la API.

Exposición Excesiva de Datos: Permite que los usuarios obtengan datos sensibles excesivos, que deberían estar prohibidos.

Falta de Recursos y Limitación de Tasa: Falta de restricciones en la cantidad de recursos necesarios para satisfacer las demandas del cliente, así como en los volúmenes de solicitudes realistas.

Autorización de Nivel de Función Rota: Los usuarios acceden a una API de función a la que no tienen acceso.

Asignación Masiva: Los usuarios cambian involuntariamente los datos que no están autorizados a editar a través de una interfaz desarrollada incorrectamente.

Configuración Incorrecta de Seguridad: Medidas de seguridad configuradas incorrectamente para la API.

Inyección: La entrada de datos no confiables desencadena inyecciones SQL, de comandos, ejecución de comandos imprevistos o acceso a datos.

Gestión Inadecuada de Activos: Gestionar los recursos de la API de manera inapropiada, como liberar APIs para entornos de prueba o versiones anteriores incorrectas de APIs fuera de línea.

Registro y Monitoreo Insuficientes: Es difícil identificar anomalías de seguridad utilizando métodos de auditoría debido a la falta de herramientas de registro y monitoreo para el acceso a la API.

Después de notar los problemas comunes relacionados con la seguridad de las APIs, ¿qué se debe implementar para protegerlas?

¿Cómo proteger tu API?

En términos de proteger la API, también es posible tomar medidas desde tres perspectivas:

InfoSec: Podemos construir un sistema de confidencialidad para la información en cumplimiento con las políticas legales y los requisitos de seguridad para evitar la divulgación de información personal.

NetSec: Es necesario cifrar y verificar la transmisión de datos.

AppSec: Necesitamos fortalecer la seguridad de la aplicación.

Aquí hay algunas prácticas adicionales para la seguridad de las APIs.

Cifrado constante: Podemos prevenir la interceptación y alteración de datos causadas por redes no gestionadas mediante una configuración de TLS de flujo completo. Además, también es necesario habilitar mTLS para verificar la corrección del lado del cliente y prevenir el acceso no autorizado.

Usar tokens con precaución: Debemos ser cautelosos al emplear JWTs, ya que permite al cliente decodificarlos, lo que podría exponer información confidencial si se utiliza incorrectamente. Además, necesitaremos ayuda al revocar una sesión de inicio de sesión específica, ya que aplicar un procedimiento de revocación es complicado debido a sus limitaciones.

Granularidad de Permisos Más Pequeña: Asignar permisos mínimos para el acceso a la API y los datos para evitar la posibilidad de acceso no autorizado.

Validación de Entrada: Nunca confíes en los valores de entrada del cliente. Debes validar los valores de entrada del cliente para asegurarte de que cumplan con los requisitos de seguridad.

Limitación de Tasa: Limitar el ritmo de acceso a la API. Esta medida previene ataques de denegación de acceso, que ocurren cuando un sistema se sobrecarga con solicitudes que no puede manejar todas a la vez.

Registro y Monitoreo: Diseñar un mecanismo de registro y monitoreo adecuado para el sistema nos permite identificar eventos de seguridad y tomar medidas rápidamente. También podemos retroceder en el tiempo después de un evento de seguridad de la información para identificar los sistemas y datos afectados y determinar el alcance de cualquier posible fuga de datos.

Las medidas mencionadas anteriormente requieren que hagamos cambios específicos en el sistema de aplicaciones procesando componentes individuales, lo que no solo es muy costoso, sino también propenso a más problemas.

¿Cómo podemos implementar medidas de seguridad sin poner en peligro los servicios de la aplicación?

Puertas de Enlace de API

Las puertas de enlace de API ofrecen un nuevo camino fuera de la transformación del sistema, lo que reduce significativamente el costo de la transformación y proporciona una gestión centralizada y unificada del tráfico de entrada. Las puertas de enlace de API también ofrecen ricas características de seguridad, que nos permiten prohibir y registrar visitas no autorizadas.

Utilizando Apache APISIX como ejemplo, la siguiente sección describirá varios escenarios de aplicación de puertas de enlace de API para asegurar las APIs.

Cifrado (TLS/mTLS)

No solo puedes habilitar TLS para la API para ofrecer acceso HTTPS, sino también activar mTLS para verificar la identidad del cliente. Naturalmente, también es posible habilitar TLS/mTLS para servicios ascendentes para garantizar la seguridad del tráfico mientras viaja a través de la red interna. Puedes consultar el manual de mTLS para activar la funcionalidad necesaria.

Verificación de Identidad

Todas las conexiones pueden estar cifradas, pero esto no garantiza la seguridad de la API. Como resultado, en entornos comerciales reales, debemos incluir componentes relacionados con la autenticación. Para abordar este problema, APISIX ofrece una variedad de plugins conectados a la autenticación que pueden integrarse fácilmente con servicios de autenticación externos o directamente a través de la puerta de enlace. Estos plugins van desde los más simples como Basic Auth, Key Auth, JWT Auth y Forward Auth, hasta los más complejos como LDAP, OpenID Connect y Open Policy Agent.

Limitación de Tasa

La falta de recursos y la limitación de tasa son dos asaltos frecuentes. Para estas situaciones, las puertas de enlace suelen incluir plugins relacionados con la limitación de tasa; Apache APISIX no es una excepción. Ofrece tres plugins: limit-count, limit-req y limit-conn, que proporcionan características de limitación de velocidad de solicitud, medición de solicitud y limitación de conexión. Pueden ayudar a controlar efectivamente la presión de acceso a la API y prevenir que el sistema se sobrecargue con cantidades inmanejables de solicitudes.

Restricciones de Seguridad

APISIX ofrece plugins de CORS y CSRF para proporcionar protección contra solicitudes cruzadas y falsificación de solicitudes entre sitios para la API, mejorando aún más su capacidad para salvaguardar su seguridad. Además, sus plugins de restricción permiten bloquear IP, UA, Referer y URI, lo que puede contrarrestar la mayoría de los ataques a la API.

Verificación de Entrada

APISIX proporciona el plugin request-validation, que permite a los proveedores de API validar la entrada del usuario a través de jsonschema. Los datos estructurados y el lenguaje de descripción de reglas de validación pueden usarse bien para la validación de datos.

Observabilidad

Los métodos enumerados anteriormente son formas de salvaguardar la API. Sin embargo, ningún sistema es completamente seguro. Una vez que un sistema es atacado, debemos actuar rápidamente para determinar la causa del ataque y prevenir más daños. Como resultado, APISIX también ofrece una amplia gama de plugins de registro, que pueden enviar registros a varios destinos, incluyendo Kafka, Clickhouse y soluciones de registro como servicio ofrecidas por proveedores de nube como Google Cloud, Splunk, etc.

Además, APISIX ofrece funcionalidad de seguimiento de enlaces con acoplamiento a Skywalking, OpenTelemetry y otros programas de seguimiento.

Además, APISIX proporciona el plugin Prometheus, que puede calcular y exportar métricas relacionadas con las solicitudes de API al servicio de monitoreo Prometheus para ayudar a identificar problemas de rendimiento y evitar interrupciones del servicio sistémico.

Podemos identificar posibles incidentes de seguridad a tiempo haciendo que el sistema sea suficientemente observable.

Capacidades de Programación

Por último, pero no menos importante, APISIX también ofrece un plugin serverless para abordar vulnerabilidades de día cero, permitiendo a los usuarios utilizar código Lua para ejecutar alguna lógica cuando llega la solicitud. Podemos aprovechar esta funcionalidad para bloquear temporalmente algunas vulnerabilidades de día cero a medida que surgen.

Conclusión

La seguridad de las APIs es esencial para los proveedores de servicios, por lo que los desarrolladores deben esforzarse por mantenerla actualizada. Para demostrar cómo las puertas de enlace de API pueden usarse en diferentes entornos de aplicación, este artículo utiliza Apache APISIX como ejemplo, que es una estrategia novedosa que difiere de la modificación del sistema y ayuda a los desarrolladores a reducir el costo de las preocupaciones de seguridad.

Tags: