Estrategias y soluciones para mitigar las vulnerabilidades

API Owner Fundamentals

Bienvenidos al tercer blog de la serie del API Owner Fundamentals de la Fundación APIAddicts, curso pionero en su certificación y que este año ha sido realizado por algunos de nuestros warriors.

Hoy hablaremos de la Seguridad en las APIs, su importancia y los aspectos a tener en cuenta para evitar fallos cruciales. Así que comencemos por el principio... 

¿Por qué es tan importante la seguridad en las APIs?

 

En los sistemas anteriores al uso de las APIS toda la lógica de la aplicación, los pasos para la ejecución, la orquestación... se dividía en diferentes capas. Incluyendo la autenticación y orquestación desde el servidor. Es decir, la aplicación requería de diferentes bloques de lógica para ejecutarse que servían como muros alrededor de la información.

Con la evolución hacia las APIS, los problemas de seguridad que aparecen son distintos.

Odoo text and image block

No se trata de una aplicación de escritorio o un servlet que esté sirviendo la información, sino que un servidor da punto de entrada que me permiten exponer información. Las metodologías identificadas para servir a la seguridad de los sistemas tradicionales no sirven para este nuevo formato de: Distintas tecnologías llevan a problemas diferentes.


Una buena praxis es considerar las APIs como abiertas, no en el sentido de que puede consumirlas cualquiera, sino que se trata de una dirección y un puerto accesibles desde la internet. Aunque no estén publicadas o expuestas y requieran de algún tipo de credenciales son accesibles para cualquier conectada a la red de redes.
En materia de seguridad se dice que el riesgo 0 no existe, sino que existen diferentes grados de riesgo. Incluso para un API que se define para consumo únicamente interno también presenta riesgo. La gestión de seguridad se basa en conocer y proteger los diferentes canales. En el ámbito de la seguridad el paradigma cambia ya no se trata de generar un perímetro para proteger los sistemas, sino proteger los datos en sí.

Odoo image and text block

OWASP TOP 10

La organización OWASP se encarga de estudiar la seguridad de las aplicaciones, desde hace unos años realizan un documento con el listado de los 10 problemas principales en seguridad que existen en el mercado. Desde el final del 2019 reconocieron como distintos los riesgos producidos por las APIS a aquellos que se llevaban reportando en los sistemas de aplicaciones distintos.


Este documento seguirá este TOP 10 recogido por la OWASP como esqueleto para explicar brevemente las posibles correcciones, buenas prácticas y brechas que existen al realizar un desarrollo utilizando la tecnología API.

Principios de seguridad

1. Si no conoces, no proteges

Para llegar al proceso de seguridad de una API, se debe haber realizado la Definición entre otros procesos dentro del desarrollo de un proyecto API. API Security requiere de un catálogo bien definido que muestre documentados  todos los endpoints que tenemos expuestos, así como sus versiones (el ciclo de vida). Esto nos ampara en una de las primas de Seguridad: Si no conoces, no proteges.

2. Las APIs internas deben ser tratadas como si fueran públicas

Una de las razones por las que es importante securizar las APIs internas es para asegurar que desde un primer momento se están llevando buenas praxis como es un hacer excepciones y unos de los principios de los gestores de seguridad: “Mi trabajo es no confiar”.

3. Marcar el nivel de sensibilidad y asegurar el control en el acceso de nuestras entradas a los diferentes datos

La seguridad está basada en riesgo, no existe ningún sistema seguro por completo y existen muchos métodos de Hacking que permiten conocer y explotar las brechas que tenemos en nuestro sistema: Malware, Social Engineering o Reverse Engineering.

Trump es un actor poderoso, pero hasta a él le hackearon la cuenta de Twitter y por lo visto aumentó la calidad de su lenguaje por un breve periodo de tiempo. Esto se debe a que el sistema de Twitter tenía una brecha al haber permitido que ciertos usuarios fueran “super superadmin”. Un usuario con capacidad hasta para escribir tweets como si fuera otro usuario. Mediante la coacción de uno de los usuarios con este nivel de privilegios, se hizo sencillo para los crackers hacerse pasar por él. 


4 Riesgos de Seguridad

1. Protección de datos

La protección de los datos hace referencia a los problemas relacionados con el flujo de datos que necesita la API para su actividad, bien sea por el envío: Demasiada información en la respuesta mandada al usuario que permite una vía de acceso. O por la recepción de los datos: Demasiada información requerida en la petición realizada por el usuario contra la API o, cuando esta es algo inesperado por el sistema por llevar un formato que desconoce, Inyección.

2- Demasiada información requerida. El usuario tiene un formato de petición con el que puede modifica el comportamiento del servidor. Es decir, se permite lanzar una petición que da acceso a unos recursos a los que no debería tener acceso. Se piden datos que pueden configurar el acceso del cliente al conocerse y configurarse de forma inesperada para la aplicación. 


Esto ocurre a menudo, si se piensa solo en el formato de entrada de un sistema que está cerrado y es bien conocido sin valorar la diferente casuística que puede producirse. Para que esto no nos ocurra es importante conocer el formato de entrada de los datos. En el diagrama siguiente la bola roja identifica el dato inesperado.

Odoo image and text block

1- Demasiada información expuesta. El cliente puede realizar una petición a la que se le responde con información que no necesita para su actividad. Una práctica que abarata los costes de creación de APIs es “devuelvo todo chorro de datos y que el cliente seleccione los que necesite”. Esta práctica es un generador potencial de brechas. 

Puntos a revisar para cuidar este tipo de riesgo en datos es los resets de las credenciales, tener claro que codificado no es equivalente a encriptado (sí un dato puede estar bajo las dos transformaciones). Y, en especial, desde el principio del proyecto API asegurar que la arquitectura sea basada en datos acotados, es decir, siguiendo las necesidades esperadas por el cliente.


En el diagrama siguiente vemos que una API responde con los datos que necesita el usuario (círculos verdes) pero envía también datos que no son necesarios para las funciones del cliente (circulo rojo). Esto permite llegar a información que en sí misma no se debería tener acceso desde un endpoint específico, pero además, también podría servir para acceder a credenciales (caso UBER).

2- Demasiada información requerida. El usuario tiene un formato de petición con el que puede modifica el comportamiento del servidor. Es decir, se permite lanzar una petición que da acceso a unos recursos a los que no debería tener acceso. Se piden datos que pueden configurar el acceso del cliente al conocerse y configurarse de forma inesperada para la aplicación. 


Esto ocurre a menudo, si se piensa solo en el formato de entrada de un sistema que está cerrado y es bien conocido sin valorar la diferente casuística que puede producirse. Para que esto no nos ocurra es importante conocer el formato de entrada de los datos. En el diagrama siguiente la bola roja identifica el dato inesperado.

.

Odoo text and image block
Odoo image and text block






3- Injection. Pese a que es un problema más relacionado con sistemas anteriores, sigue apareciendo en el mundo API. Tenemos que valorar que tipo de información está entrando, ya no solo a nivel del valor de la información, sino también a nivel de tipo de dato. 

2. Authorization

A nivel de autorización se identifica en el ranking de la OWASP brecha la conocida como BOLA o Broken Object Level Access Control. Se debe a que un usuario puede llegar a obtener información sin necesidad de autenticarse dentro del sistema.

Suele estar relacionado con que el acceso a los datos de los diferentes endpoint son sencillos de adivinar, por ejemplo una secuencia numérica. De tal modo que si conozco cómo acceder a cierto endpoint me es sencillo llegar a otro.

Si no se está controlando el número de peticiones que lleva a cabo un usuario, es sencillo que este pueda probar hasta encontrar una relación entre los endpoints que le permitan llegar a información a la que no debería tener acceso.

Odoo image and text block

3. Authentication

Las brechas de autenticación comprometen al sistema al permitir que un hacker suplante a otro usuario y tenga acceso a toda la información que tiene el suplantado, esto se conoce como autenticación rota. La seguridad de la autenticación se basa en realizar las suficientes pruebas como para probar toda la casuística, incluso aquello que no se espera el sistema y, generar con pruebas automáticas sobre estos datos para facilitar las futuras modificaciones que puedan realizarse.  Se trata de un riesgo de seguridad muy amplio, en este blog presentaremos diferentes tecnologías relacionadas y una conclusión sobre este enorme campo. 

TLS


Normal TLS: Me conecto a través de un navegador, éste revisa el TLS del servidor al que intento conocerme. El navegador mira al servidor. revisa su certificado y si confía en él: . se conecta 

Mutuo TLS: Además de lo anterior, el servidor exige un certificado y realiza el mismo procedimiento que el navegador para permitir la conexión.

En ambos casos existen los llamados Certificator Authority, que emiten el documento que certifica la autenticidad de “quién soy”.


JWT


El JSON web token se trata de un sistema de securización pero cuenta con algunos problemas derivados del mal uso (no se encripta) o de problemas que ha mostrado la tecnología. Como que todos los JWT con la definición de un campo a None permitía padar el payload.

.


OAuth


El usuario y la contraseña no son un buen sistema de autenticación, es codificado no encriptado. Del mismo modo el OAuth token prueba que tienes la llave de acceso no quién eres, algo así como la tarjeta de hotel. OAuth no es una prueba de quién está llamando: yo soy “Joni” y quiero acceder a mis recursos. Un Token como el Basic o el Bearer es más costoso para el consumidor, se pasa el secret pero da más seguridad que el OAuth.




4. Rate Limit

El Rate limit hace referencia a la cantidad de peticiones que aceptamos contra nosotros: bien de un usuario concreto o de un servicio específico. Incluye no proteger correctamente los puntos de autenticación como el login, el reseteo o los puntos de OAuth. Y se basa en los intentos por minuto que se permiten a una combinación que puede ser solo a nivel de IP (nivel de protección bajo) o bien, además, con otros campos.

Relacionado con esto, se comienza a considerar inseguro el sistema con SMS, ni tampoco los parámetros de los headers o queries por poder encontrarse sin problema en los logs.

Conclusiones

Cuanto más sabemos de seguridad más reafirmamos que ningún sistema es seguro. La seguridad en las APIs es esencial ya que estas exponen la lógica de la aplicación y los datos confidenciales, como la #PII. Por ello, es necesario centrarse en las estrategias y soluciones para comprender y mitigar las vulnerabilidades de las aplicaciones web.

Además es un factor fundamental que debemos tener en cuenta durante todo el proceso de APIficación. Hay que pensar en cómo hackear nuestros propios sistemas para poder estar preparados para todo y machacar con lo que no estamos esperando, solo así podremos proteger los datos más sensibles. 

Blog realizado por Iván Jesús Monferrer

Escriba un comentario

Usted debe ser registrado escribir un comentario.