La seguridad de las API es uno de los aspectos más importantes que debe cuidar en casi cualquier aplicación.
Hoy en día, las API son la mejor forma de integrar su aplicación con otras aplicaciones. Proporcionan una puerta de entrada a su aplicación y, por lo tanto, las API deben ser lo suficientemente seguras para que no reciba visitas no deseadas.
Veamos algunas vulnerabilidades de las API que pueden suponer una amenaza para su aplicación.
Vulnerabilidades comunes de las API
#1. Secuencias de comandos en sitios cruzados (XSS)
Los ataquesXSS son comunes en las aplicaciones web, pero también pueden producirse a través de las API si los datos entrantes del usuario no se desinfectan correctamente. Los atacantes pueden ejecutar scripts maliciosos en el servidor y obtener acceso a datos sensibles.
#2. Violación de la limitación de velocidad
La violación de la función de limitación de velocidad de la API puede dar a los atacantes la oportunidad de bombardear su servidor con un gran número de peticiones. Eventualmente, el servidor podría colapsarse y su base de clientes podría tener dificultades para contactar con usted.
#3. Autenticación inadecuada
Si la API no está correctamente configurada utilizando un método de autenticación fiable, cualquier tercero puede acceder a su sistema a través de la API. La autorización también es importante porque define quién puede acceder a qué recurso de la API hasta un tiempo determinado.
#4. Transmisión de datos insegura
Los datos que se envían a los consumidores de su API deben encriptarse por el camino. Si no es así, existen posibilidades de que los datos sean filtrados por atacantes que utilicen un ataque man-in-the-middle. Por eso siempre se recomienda utilizar un protocolo seguro como HTTPS para transmitir los datos.
#5. Dependencias obsoletas/desaprobadas
Las API tienen muchas dependencias externas que se utilizan para llevar a cabo tareas complejas y para descargar cierta lógica compleja. Si esas dependencias tienen una vulnerabilidad, entonces indirectamente, su API también se vuelve vulnerable. Asegúrese siempre de actualizar las versiones de las dependencias.
Ahora que conoce las vulnerabilidades de la API, veamos algunas de las mejores prácticas para asegurar su API.
Lea también: Las mejores alternativas de Postman para probar API para desarrolladores
Seguridad de la API – Mejores prácticas
Versionado de la API
Es crucial supervisar y actualizar regularmente sus API con dependencias actualizadas, ya que éstas podrían contener vulnerabilidades importantes. Puede notificarlo a los usuarios de la API publicando una versión de parche de la API de acuerdo con el versionado semántico.
Mantener su API actualizada es lo mínimo que puede hacer para evitar que sea explotada por los atacantes.
Autenticación
Hay un montón de formas de autenticar a un usuario de la API. La forma más sencilla es utilizar el método de nombre de usuario/contraseña, pero eso es demasiado básico y sólo depende de lo fuerte que sea la contraseña.
Otra forma es utilizar claves API para acceder a la API. Puede proporcionar a cada usuario de la API una clave única que pueda utilizar.
La autenticación JWT es una técnica en la que las credenciales del usuario se convierten en un token firmado digitalmente y luego se envían al usuario. A continuación, el usuario devuelve el mismo token en cada solicitud al servidor para que éste lo valide. Los JWT también tienen un tiempo de caducidad.
La solución más eficaz es OAuth. Permite el acceso de terceros a la API con credenciales de inicio de sesión ya existentes. Por ejemplo, si ya ha iniciado sesión en Google, una aplicación puede utilizar esas credenciales para acceder a su cuenta sin necesidad de contraseña. Su cuenta de Google se convierte en la contraseña.
Autorización
La autorización es algo diferente a la autenticación. Mientras usted autoriza a un usuario, éste ya está autenticado para utilizar su API, y sólo se trata de saber a qué recurso de la API puede acceder.
Por ejemplo, un profesor universitario puede tener acceso a todos los estudiantes de un lote, pero un solo estudiante sólo puede acceder a sus datos. En este caso, el estudiante y el profesor están autenticados en el mismo sistema, pero sólo están autorizados a realizar determinadas acciones.
Asegurarse de que la autorización de la API funciona bien puede evitar el acceso no autorizado a un recurso.
Redacción de datos
La redacción de datos es el proceso de revelar selectivamente información a los usuarios y proteger la información sensible. Una autorización adecuada puede conducir a una mejor redacción de los datos. Las normativas sobre privacidad de datos, como el GDPR, también se basan en la redacción de datos. Cualquier tercero no deseado debería ser incapaz de asomarse a los datos personales o sensibles.
Puede implementar la reacción de datos mediante la implementación de un middleware o un gestor de pasarelas.
Cifrado
Se ha convertido en la comprobación de seguridad más importante en el mundo actual. La encriptación es imprescindible si está tratando con cualquier tipo de información sensible. El mínimo cifrado que puede hacer es utilizar el protocolo HTTPS, que utiliza el protocolo de enlace TLS (Transport Layer Security) y SSL (Secure Socket Layer).
La encriptación de extremo a extremo es otra forma de asegurar los datos en tránsito. Los datos que se almacenan en la base de datos también deben encriptarse en caso de que un atacante pueda entrar en la base de datos y acceder a los datos.
Gestión de errores
La información sobre la infraestructura de la aplicación puede filtrarse a los atacantes a través de mensajes de error detallados. Para evitarlo, mantenga los mensajes de error genéricos e implemente una gestión de errores personalizada. Asegúrese de que no se registra información sensible del sistema en los detalles de los errores.
Validación de entradas y sanitización de datos
La validación de la entrada es muy importante cuando se trata de API porque no se conoce la entrada hasta que el usuario la envía.
La sanitización es el proceso de eliminar cualquier código ejecutable no deseado de la carga útil. Un atacante puede introducir un script Javascript, y si usted no lo sanea antes de pasarlo a su HTML, se ejecutará como un script y obtendrá datos.
Una desinfección inadecuada puede dar lugar a ataques de secuencias de comandos en sitios cruzados (XSS).
Sistemas de detección de intrusiones
También conocidos como IDS, los sistemas de detección de intrusiones ayudan a supervisar y detectar el tráfico de red que llega a la API. Si encuentra algún comportamiento inusual en el tráfico, puede registrarlo y alertar a las autoridades competentes.
En general, existen dos tipos de sistemas: los basados en red y los basados en host. En los sistemas basados en red, el sistema se distribuye entre diferentes puntos de control para supervisar el tráfico en varios puntos. En un sistema basado en host, se despliega en un único host.
Estos sistemas son una forma excelente de determinar quién está intentando acceder a su red antes de que obstaculicen sus datos.
Listas blancas de IP
Las listas blancas de IP son una forma de permitir que sólo determinadas direcciones IP accedan a su API y a su red. Esta técnica puede no funcionar si tiene una API pública porque es demasiado complejo hacer una lista de todas las IP.
Es beneficiosa si sabe que sólo algunas de las aplicaciones de los sistemas van a acceder a su API.
Tokens web JSON
Los JWT se utilizan generalmente para autenticar a un usuario enviándole un token firmado digitalmente y creado a partir de sus credenciales. Funciona porque oculta las credenciales reales del usuario, y además no necesita almacenar las credenciales en la base de datos o en el lado del usuario.
El JWT puede dividirse en tres secciones: encabezado, carga útil y firma. La sección de carga útil contiene las credenciales del usuario, y la cabecera puede contener información como el algoritmo utilizado. La sección de firma es firmada digitalmente por el servidor y el cliente en cada solicitud posterior.
Los JWT suelen tener una fecha de caducidad, tras la cual el servidor genera un nuevo token y lo envía al usuario.
Registro y supervisión
Monitorizar el tráfico a su API puede ser beneficioso para detectar e identificar de antemano a los visitantes no deseados. Puede supervisar todas y cada una de las solicitudes, pero asegúrese de que los registros no contengan información sensible.
Limitación de la tasa
Si una API no implementa la limitación de velocidad, es vulnerable a los ataques DDoS debido a la afluencia inesperada de tráfico de red. Los atacantes pueden inundar el sistema con un gran número de peticiones en poco tiempo y acabar colapsando el servidor.
Las API de estrangulamiento y limitación de velocidad evitan los ataques de denegación de servicio restringiendo el flujo de tráfico de la API.
Dependencias seguras
Las vulnerabilidades no sólo surgen del código de su API, también pueden formar parte de las dependencias de terceros que pueda estar utilizando en su API. Por eso es importante supervisar y escanear regularmente sus dependencias y detectar cualquier vulnerabilidad que pueda estar presente en ellas.
Puede implementar un trabajo programado para escanear y actualizar regularmente las dependencias si pueden actualizarse con una versión de parche que corrija la vulnerabilidad. Además, elija dependencias que sean más seguras y proporcionen actualizaciones de seguridad frecuentes.
Cabeceras de seguridad
Las cabeceras de seguridad deben devolverse con la respuesta de la API para instruir al navegador sobre la seguridad de la API y cómo debe actuar. Las cabeceras importantes que puede enviar para mejorar la seguridad son:
- Cache-Control: Establézcalo como
no-store
para evitar almacenar información sensible en el navegador. - Content-Security-Policy: Establecerla a
frame-ancestors 'none
‘ evita enmarcar las respuestas de la API en uniframe
. - Tipo de contenido: Esta cabecera es importante porque sin ella el navegador intenta adivinar el tipo de la respuesta de la API y puede dar lugar a ataques de sniffing. Para la respuesta JSON, puede establecerlo en
application/json
. - X-Content-Type-Options: Fíjelo a
nosniff
para indicar al navegador que no adivine el tipo MIME de la respuesta y que lo busque sólo en la cabeceraContent-Type
.
Estándares y marcos de seguridad
Diseñe su API con la ayuda de estándares y marcos de seguridad predefinidos para asegurarse de que su API está al día con las últimas consideraciones de seguridad.
Caducidad de tokens
Si utiliza tokens portadores, el tiempo de caducidad del token debe ser breve porque requiere la reautenticación del usuario, lo cual es positivo. En JWT, suele haber dos tokens: de acceso y de refresco. Los tokens de actualización son de larga duración, mientras que los tokens de acceso son de corta duración. En cualquier caso, sus tokens deben tener un tiempo de caducidad.
Cortafuegos de aplicaciones web
Un WAF, también conocido como cortafuegos de aplicaciones web, es una puerta de enlace que supervisa, filtra y bloquea cualquier tráfico de red malicioso. A menudo es la mejor forma de prevenir ataques maliciosos a través del protocolo HTTP.
Uso de pasarelas API
Si desea configurar fácilmente la seguridad de las API y gestionar las rutas API y su acceso, puede optar por las pasarelas API. También proporcionan herramientas de supervisión, registro y análisis, que puede utilizar para supervisar su API.
Cero confianza
La idea detrás de la estrategia de confianza cero es no confiar en ninguna fuente centralizada. La seguridad debe ser estratificada e implementada en múltiples puntos de control.
Básicamente, no se puede confiar en nadie, ni siquiera en los desarrolladores que trabajan en la API. Todas y cada una de las puertas de enlace deben ser supervisadas y analizadas para evitar violaciones de la seguridad.
La automatización resulta muy útil en estos casos. Puede utilizar herramientas automatizadas para supervisar y bloquear regularmente las actividades inusuales o sospechosas.
Palabras finales
No puede hacer mucho para mantener seguras sus API. Siempre hay algunas lagunas en el software que pueden ser explotadas. Dichas lagunas dan lugar a vulnerabilidades de día cero. Así que, para asegurar sus API, lo menos que puede hacer es mantenerlas actualizadas con los últimos estándares de seguridad.
Eche un vistazo a las mejores herramientas de pruebas de seguridad de aplicaciones dinámicas.