Dieron a conocer un método para clonar claves de tokens en chips NXP
Investigadores de seguridad de NinjaLab han desarrollado un nuevo ataque de canal lateral (CVE-2021-3011) para clonar claves ECDSA almacenadas en tokens USB basados en chips NXP.
El ataque se demostró para los tokens de autenticación de dos factores de Google Titan basados en el chip NXP A700X, pero teóricamente se aplica a los tokens criptográficos Yubico y Feitian que usan el mismo chip.
El método propuesto permite a un atacante recrear las claves ECDSA almacenadas en el token basándose en los datos obtenidos a través del análisis de la señal electromagnética emitida por el token durante la generación de firmas digitales.
Los investigadores han demostrado que la señal electromagnética se correlaciona con la información de clave efímera de ECDSA, que es suficiente para recuperar la clave secreta mediante técnicas de aprendizaje automático.
En particular, la naturaleza del cambio de señal permite extraer información sobre bits individuales durante la multiplicación por un escalar en operaciones con una curva elíptica.
Para ECDSA, definir incluso unos pocos bits con información sobre el vector de inicialización (nonce) es suficiente para realizar un ataque y recuperar secuencialmente toda la clave privada. Para recuperar la clave secreta en el token de Google Titan, es suficiente analizar unas 6.000 operaciones de firma digital basadas en la clave ECDSA utilizada para la autenticación de dos factores FIDO U2F al conectarse a una cuenta de Google.
Para encontrar debilidades en la implementación del algoritmo ECDSA en chips NXP ECDSA, se utilizó una plataforma abierta para la creación de tarjetas inteligentes NXP J3D081 (JavaCard), que es muy similar a los chips NXP A700X y utiliza una biblioteca criptográfica idéntica, pero al mismo tiempo brinda más oportunidades para estudiar el funcionamiento del motor ECDSA. Para recuperar la clave de JavaCard, fue suficiente analizar unas 4000 operaciones.
Para llevar a cabo un ataque, se debe tener acceso físico al token, es decir el token debe estar disponible para que el atacante lo investigue durante mucho tiempo. Además, el chip está blindado con una pantalla de aluminio, por lo que la carcasa debe ser desmontada, lo que dificulta ocultar los rastros del ataque, por ejemplo, los tokens de Google Titan están sellados en plástico y no se pueden desmontar sin rastros visibles (como opción, se propone imprimir en una impresora 3D de la nueva carcasa).
Se necesitan aproximadamente 6 horas para recuperar la clave de una cuenta FIDO U2F y se requieren aproximadamente 4 horas más para desmontar y ensamblar el token.
El ataque también requiere equipos bastante costosos, que cuestan alrededor de 10 mil euros, habilidades en ingeniería inversa de microcircuitos y software especial que no se distribuye públicamente (la posibilidad del ataque está confirmada por Google y NXP).
Durante el ataque, se utilizó el complejo de medición Langer ICR HH 500-6 utilizado para probar microcircuitos para la compatibilidad electromagnética, el amplificador Langer BT 706, el micromanipulador Thorlabs PT3/M con una resolución de 10 μm y el osciloscopio de cuatro canales PicoScope 6404D.
Como método implementado en el lado del servidor para la protección parcial contra el uso de tokens clonados para la autenticación de dos factores, se propone utilizar el mecanismo contador descrito en la especificación FIDO U2F.
El estándar FIDO U2F implica inicialmente la presencia de un solo conjunto de claves, lo que se debe al hecho de que el protocolo admite solo dos operaciones básicas: registro y autenticación.
En la etapa de registro, se genera un nuevo par de claves, la clave privada se almacena en un token y la clave pública se transmite al servidor.
La operación de autenticación del lado del token crea una firma digital ECDSA para los datos transmitidos por el servidor, que luego se pueden verificar en el servidor utilizando la clave pública. La clave privada siempre permanece en el token y no se puede copiar, por lo que si es necesario vincular un nuevo token, se crea un nuevo par de claves y la clave anterior se coloca en la lista de claves revocadas.
Fuente: https://ninjalab.io