Seguridad criptográfica en IoT (y VI)ElevenPaths 20 junio, 2016 La proliferación de dispositivos y plataformas de servicios IoT está siendo mucho más rápida que la adopción de medidas de seguridad en su ámbito. Ante la apremiante necesidad de mecanismos que garanticen la autenticación, integridad y confidencialidad, tanto de las comunicaciones como de los propios dispositivos, se tiende a trasladar las soluciones criptográficas contrastadas en la IT tradicional, como son los certificados digitales de clave pública sobre protocolos SSL/TLS. Seguimos avanzando en el estado del arte de las soluciones criptográficas para IoT. PoC Web Aunque la descripción literal de los comandos de autenticación pueda parecer enrevesada, una vez implementados dentro de una librería de código, su utilización se vuelve muy sencilla, como se observa a continuación: A modo de simple prueba de concepto (PoC) hemos implementado el caso de uso práctico de un dispositivo IoT que debe autenticarse ante un servicio web de forma robusta, utilizando hardware criptográfico para ello. Para que el ejemplo pueda hacerse extensivo al público general, se emplea Arduino como entorno de desarrollo, sobre una plataforma ESP8266 que facilita el acceso a la web mediante su interface Wifi. Podría utilizarse cualquier módulo ESP8266, en este caso se ha empleado un NodeMCU v0.9, cargando un sketch generado a partir del core ESP8266 para Arduino.Como hardware criptográfico se ha elegido un Cryto-Authenticator Atmel SHA204A conectado externamente al módulo NodeMCU. De las diferentes librerías para Arduino que hay para manejar el SHA204A, la que mejor se adaptaba de forma general, y más trabajada se encontraba, era el trabajo de Nusku de 2013. No obstante, no parecería funcionar de forma uniforme en diferentes dispositivos, y presentaba algunas carencias importantes. Hemos solucionado estos problemas publicando nuestro propio fork en Github. La autenticación en el servicio web se realiza insertando en la petición HTTP (GET request) un token de autenticación. Esta es una practica muy común y extendida entre los más importantes sistemas de autenticación web. Para ello se añade la cabecera (header) «Authorization», con los parámetros adecuados. Estos deben incluir el tipo de token «11PATHS-HMAC-256«, junto a los valores correspondientes codificados en formato Base64. Para simplificar el proceso, la cabecera incluye además del “id” del dispositivo, el «nonce» (challenge) y la «base» utilizados para calcular la firma «signature» de verificación, aunque el protocolo soporta el que challenge lo proporcione el servidor. Al enviar todos estos datos en la petición, seria posible volver a re-utilizar peticiones capturadas. Para evitar esta debilidad se agrega el timestamp como parte de la petición a firmar en formato unix-time. GET /?timestamp=1458647701 HTTP/1.1rn Para poder realizar la firma de la petición HTTP con el Atmel SHA204A, esta se resume a 20 bytes mediante el algoritmo SHA-1. El core de Arduino para ESP8266 incluye esta función en la librería «Hash.h», pero en caso de utilizar otra plataforma se puede añadir desde la Crytosuite para Arduino. Con los 20 bytes obtenidos se invoca el comando Nonce del SHA204A, obteniendo los 32 bytes resultantes a modo de reto, que son almacenados. Seguidamente se invoca el comando HMAC indicando el número de slot que contiene clave con la que se calculará la HMAC-SHA-256, junto al modo de ejecución. Conocidos estos valores (modo y slot) se puede deducir la base de 24 bytes añadida al calculo. El resultado de este comando serán los 32 bytes correspondientes a la firma de la petición. Estos valores, junto con el «id» que asignemos al dispositivo, serán los parámetros en base64 que incluirá la cabecera. La codificación en base64 se realiza utilizando la librería de Adam Rudd. Authorization: 11PATHS-HMAC-256 id=»EjEjEg==», nonce=»LmzzEpRnXvqmvnbOSobGp1VysR/wEpWoMNaY2Miew5g=», base=»EQACAAAAAAAAAAAAAAAA7gAAAAABIwAA», signature=»4qnOa5ZGecdzC+DscOSuOhJ64LeB1jTieJATUWPoIZE=» El servicio web podrá verificar la autenticidad del dispositivo IoT que realiza la petición, realizando los mismos cálculos y comparando los resultados. Para ello, tan solo debe conocer la clave de 32 bytes asignada al dispositivo por su «id». Como parte de la demostración, se ha publicado el servicio web de ejemplo en la url: http://sha204a.cf Este servicio web responderá con un JSON que contendrá información relativa a la autenticación, en caso de ser válida, o en su defecto, con los detalles del error que se haya producido. Puede ser utilizado libremente para la realización de pruebas, ya que responde a cualquier id, que haya firmado con la clave de ejemplo: «EB0C68BF96E8C26635D3450293D2FC501A63A09924FE90A7BD916AC521FDE0AA« En este ejemplo no se produce una autenticación recíproca, es decir; la repuesta del servicio web no contiene ningún parámetro destinado a verificar su propia legitimidad, aunque hubiera sido fácil haberlo incorporado. Usualmente se delega esta condición al establecer una conexión segura SSL (https) donde se verifica el certificado del servidor web. El código del sketch Arduino es muy simple. Gestiona la conexión a Internet, mediante la librería «WiFiManager.h», la cual si no se ha configurado o no está disponible el SSID o su credencial no es válida, levanta un AP con un portal cautivo desde el que configurar la red Wifi. Una vez establecida la conexión a Internet, se establece la hora actual s través de un servidor NTP. Cada vez que se pulse el botón FLASH, realizará una petición autenticada por el SHA204A al servicio web configurado. Para probar la conexión al servicio web se puede utilizar un simple Script en BASH que simula el cálculo de la firma tal y como lo haría el ATSHA204A y realiza al petición web. Tanto este Shell Script, como el código Arduino para el módulo IoT, y el código en PHP del servicio web están publicados en este espacio de Github: https://github.com/latchdevel/crypto-iot Con toda la información facilitada es posible deducir fácilmente el número de slot que ocupa la clave utilizada como ejemplo en el ATSHA204A. La primera persona que nos explique cómo en la Community de ElevenPaths, recibirá un módulo de evaluación Atmel CryptoAuthXplained. * Seguridad criptográfica en IoT (I) * Seguridad criptográfica en IoT (II) * Seguridad criptográfica en IoT (III) * Seguridad criptográfica en IoT (IV) * Seguridad criptográfica en IoT (V) * Seguridad criptográfica en IoT (y VI) Jorge Rivera jorge.rivera@11paths.com Qué hemos presentado en el Security Day 2016 (III): Virtual Patching con Vamps, Faast & FortinetQué hemos presentado en el Security Day 2016 (V): SandaS
Telefónica Tech Boletín semanal de Ciberseguridad, 18 – 24 de marzo HinataBot: nueva botnet dedicada a ataques de DDoS El equipo de investigadores de Akamai ha publicado un informe en el que señala que han identificado una nueva botnet denominada HinataBot que dispondría...
Telefónica Tech Qué es el Esquema Nacional de Seguridad (ENS 2.0) La Ciberseguridad, la privacidad y la protección de los datos y de la información sensible son aspectos cada vez más importantes en la sociedad actual. Tanto para empresas y...
Nacho Palou 5G: cuatro casos de uso reales y prácticos El último informe “La Sociedad Digital en España 2022” [1] de Fundación Telefónica confirma la consolidación de los procesos de digitalización en la sociedad española. En este sentido, cabe...
Susana Alwasity Ciberseguridad: eventos “cisne negro” en un mundo conectado En la sociedad actual, la tecnología ha transformado la forma en que vivimos, trabajamos y nos relacionamos. Con el aumento del uso de dispositivos y redes conectados a internet,...
Telefónica Tech Boletín semanal de Ciberseguridad, 11 – 17 de marzo Nueva versión del troyano bancario Xenomorph Investigadores de ThreatFabric han detectado una nueva variante del troyano bancario para Android Xenomorph. Esta familia de malware fue detectada por primera vez en febrero...
Gonzalo Álvarez Marañón Matemáticas contra el cibercrimen: cómo detectar fraude, manipulaciones y ataques aplicando la Ley de Benford Cómo aplicar la ley de Benford para luchar contra el cibercrimen. La respuesta, en este post que utiliza las matemáticas para ayudar a la ciberseguridad.
Muy buena serie de tutoriales y documentación. Aprendí sobre muchos conceptos sobre criptografía. Muchas gracias! Responder