Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Atacando Aplicaciones, APIs, Apps Móviles, Servidores Redes, Dispositivos IoT
SCI: Sistemas de Control Industrial
COS: Centro de Operaciones de Seguridad

Interacción entre el usuario y el sistema en un esquema OAuth

¿Y esa API si es segura?

El protocolo OAUTH y la seguridad de las APIs
Las API (Application Programming Interface) son cada vez más populares en todo tipo de servicios. Sin embargo, es necesario garantizar que el intercambio de información que se realiza a través de las API sea seguro. En este artículo se aborda un protocolo para garantizar APIs seguras.

Hoy en día es común encontrar APIs para casi cualquier servicio o producto ofrecido en internet. Desde juegos, hasta servicios bancarios, pasando por noticias, e incluso música, la demanda de esta tecnología es global.

Para los que no sepan, una API no es más que un software que tiene la capacidad de comunicarse con otra aplicación que, en teoría, no tiene ningún tipo de relación, sea porque sus objetivos son diferentes, la tecnología empleada en su creación es distinta o, incluso, los fabricantes o propietarios no son los mismos. Un ejemplo de esto sería Facebook y toda la variedad de juegos que se pueden disfrutar en dicha plataforma. En este caso, los juegos son las APIs.

El uso masivo de estas pequeñas aplicaciones ha permitido que los servicios ofrecidos por distintas empresas y personas intercambien funcionalidades, datos y recursos mientras interactúan entre sí, generando de esta forma innumerables oportunidades de negocio y la posibilidad de ofrecer servicios que antes parecían imposibles.

Pero este intercambio de información tiene que ser seguro y, sobre todo, debe garantizar a los usuarios que las usan que, en caso de necesitarlos para su funcionalidad, sus datos confidenciales no serán divulgados a un tercero. Por ejemplo, imaginemos la siguiente situación; una persona que disfruta de la comodidad, agilidad y rapidez que brinda una empresa dedicada a prestar servicios de transporte privado, usa la API creada por esta empresa para solicitar un servicio. Esta persona, para pagar el servicio, utiliza su cuenta bancaria desde la misma aplicación. Ahora imagínese, ¿qué pasaría si la información financiera del cliente, como números de cuenta y claves de acceso, fueran conocidos por la aplicación de la empresa de transporte? Podría suceder que uno de los administradores acceda a la información bancaria del cliente y la usara en su propio beneficio y, al ser un servicio externo a la entidad bancaria, no hay manera que ésta pueda hacerse responsable por la posible pérdida de activos en la cuenta. Básicamente, sería como entregarle las llaves de la casa a un desconocido y esperar que éste no te vaya a robar.

Bien, entendida la idea del problema, surgió la necesidad de crear reglas que permitieran a una API acceder o interactuar con un servicio externo de manera limitada y, sobre todo, en caso de requerirse, ni el usuario ni el prestador del servicio tengan que revelar la información confidencial compartida por ambos a la API.

Ese conjunto de reglas se dio a conocer en el año 2007 como Open Autorización Protocol, o por sus siglas OAUTH en su versión 1.0, gracias a la colaboración de varios ingenieros de Twitter, Google y otras empresas. Aunque no fue hasta el 2010 que recibió su aprobación de estándar.

OAuth, como su nombre lo dice, es un protocolo abierto que permite la autorización segura de una API, de manera estándar y simple, para interactuar con aplicaciones de escritorio, móviles y sitios Web (IETF, 2010). Aunque dos años después, este estándar fue reemplazado por una evolución del mismo, OAuth 2.0, que añadió características tales como la dependencia de transporte de datos mediante el uso de HTTPS, una mayor flexibilidad en su uso, y una centralización en el uso de las diferentes claves (IETF, 2012).

funcionamiento
Figura 1. Funcionamiento de OAUTH - HP

Para explicar el funcionamiento de OAuth, haré uso de un ejemplo básico que no necesariamente se asemeja a la forma real en que trabajan los servicios y aplicaciones mencionadas.

Supongamos que vamos a realizar una compra por Internet, y para ello usaremos una aplicación de pago en línea que llamaremos cliente. Como es un pago, necesitaremos la intervención de un banco, el cual vendrá a ser el servidor de autorización, y nosotros nos identificaremos como usuario.

Cuando un usuario accede a la aplicación, el cliente se pone en contacto con el servidor, solicitando unas credenciales temporales. Esta solicitud lleva consigo dos identificadores proporcionados previamente por el servidor cuando la aplicación fue creada.

Cuando llega la petición al servidor, y éste confirma que los identificadores son válidos, le responde al cliente, enviándole por respuesta las credenciales solicitadas. Estas credenciales son dos e identifican al cliente y al proceso de autenticación actual.

Una vez el cliente tiene las credenciales, éste comunica directamente al usuario con el servidor, y el servidor pide al usuario sus datos de identificación. Después de que el usuario se identifica, el servidor le pregunta si autoriza al cliente realizar la transacción. En caso de que el usuario autorice, el servidor envía al cliente un código, generado aleatoriamente, que sirve como identificador del usuario.

Cuando el cliente conoce ese código, le solicita al servidor unas credenciales finales enviándole tres datos, el código del usuario y las dos credenciales solicitadas anteriormente. De esta manera, y si todo se ha realizado correctamente, el servidor comprueba los datos y envía al cliente dos identificadores de acceso , los cuales serán usados para completar la transacción. Una vez termina la transacción, las credenciales usadas se vuelven inútiles, es decir, se eliminan.

En conclusión, desde el punto de vista de la seguridad, el protocolo resuelve el problema de que un usuario tenga que usar su información confidencial de un sitio Web o plataforma (datos de autenticación) en múltiples APIs que, en teoría, requieren de dicha información para poder ser usadas.

Además, como el protocolo funciona con un mecanismo de identificación simultánea de un usuario, una aplicación y una sesión verificando la integridad de las peticiones mediante firmas digitales. Una firma digital es un mecanismo criptográfico que permite al receptor de un mensaje firmado digitalmente, identificar a la entidad originadora de dicho mensaje. Esto evita que, en caso de que una petición sea capturada, pueda ser utilizada desde otra aplicación con el fin de acceder a los datos de un usuario.

Para terminar, la importancia del protocolo radica en su simplicidad, y por ser un estándar abierto, permite que muchas plataformas lo usen teniendo en cuenta, eso sí, todas las medidas de seguridad que se deben implementar para que su uso sea seguro y confiable.


Foto del autor

Jhony Arbey Villa Peña

Ingeniero en Sistemas.

Apasionado por las redes la música y la seguridad.



Relacionado




Estado de los servicios - Términos de Uso