El pasado viernes, último día de la quinceava edición de Ekoparty, tuvo lugar la que luego sería galardonada como mejor charla del evento: Free rides! SUBE, RED BUS, SATBUS and others, a cargo de Dan Borgogno, la cual estaba centrada en exponer diferentes ataques que son capaces de romper la seguridad en diversas tarjetas NFC utilizadas para el transporte público argentino.
Borgogno, quien es investigador en seguridad y además trabaja como desarrollador en Mercado Libre, es oriundo de la provincia argentina de Córdoba, por lo que no sorprendió a la audiencia cuando comenzó su exposición refiriéndose a fallos en tarjetas propias del lugar, para finalmente acabar su recorrido exponiendo nuevas vulnerabilidades de seguridad en el sistema SUBE utilizado en la Ciudad Autónoma de Buenos Aires.
Sobre los fallos en las tarjetas MIFARE
Las tarjetas MIFARE Classic 1K, utilizadas para el transporte público en una gran cantidad de países a lo largo de todo el mundo, son dispositivos de almacenamiento frecuentemente utilizadas como monederos electrónicos para guardar datos sin necesidad de sincronizar constantemente con un backend. En ellas, los datos se guardan en un conjunto de celdas de memoria protegidas por claves. Además, estas tarjetas funcionan a base de un sistema operativo que se encarga de la autenticación y la comunicación con el lector.
Dado que estas tarjetas poseen un identificador único, muchos desarrolladores cometen errores de implementación basados en la presunción de que no es posible alterar el identificador. No obstante, esto no es así para ciertas tarjetas genéricas de origen asiático que pueden ser utilizadas como base para un ataque.
En el caso de las tarjetas de SATBUS, el orador logró explotar vulnerabilidades conocidas con un lector ACR122U y MFCUK para hallar las claves que protegían la información interna de las tarjetas ejecutando un ataque de diccionario de claves estándar. Tras obtener las claves, logró identificar el sector que almacenaba la información de saldo disponible para poder modificarlo, o bien guardar una snapshot para restaurarla luego de cada viaje. Las tarjetas LEP BUS e INTERCÓRDOBA eran susceptibles al mismo ataque.
En el caso de las tarjetas RED BUS, Borgogno descubrió que MFCUK –el cual permite obtener una clave del sector que se le indique sin conocimiento previo de otra clave– no funcionaba dado que las nuevas tarjetas eran de tipo MIFARE Plus, que ofrece métodos de autenticación alternativos. Sin embargo, tras lograr conseguir tarjetas viejas que sí eran susceptibles a este ataque, el investigador descubrió que las claves de protección de RED BUS nunca habían sido cambiadas y funcionaban en las tarjetas recientemente emitidas.
Identificando los sectores donde se almacenan las marcas temporales y los sectores donde se almacena el saldo, creó una aplicación como prueba de concepto para modificar la información almacenada en la tarjeta de forma consistente.
Vulnerabilidades en tarjetas SUBE
Por su parte, las tarjetas SUBE no han estado libres de vulnerabilidades en el pasado. Fue igualmente en Ekoparty que algunos años antes se presentó la charla Hacking RFID Billing Schemes For Fun and Free Rides¸ donde se ejemplificaron algunos ataques sencillos que vulneraban la seguridad de las tarjetas con NFC para transporte público.
Por suerte para SUBE, las claves utilizadas en las viejas tarjetas que eran vulnerables a MFOC, MFCUK y sniffing, y que permitían restaurar snapshots anteriores de la tarjeta luego de cada viaje, fueron cambiadas en las nuevas versiones del sistema. Sin embargo, el gobierno publicó una aplicación que permite la carga de la tarjeta utilizando directamente el NFC del teléfono del usuario, lo cual permitió a Borgogno entender mejor el funcionamiento del sistema e identificar nuevos métodos que podrían utilizarse para obtener viajes gratis.
Haciendo ingeniería reversa de la aplicación y utilizando un nuevo ataque MFOC –hardnested attack– que permite adivinar las claves de los sectores de la tarjeta partiendo de una clave conocida, el investigador logró acceder a la información almacenada para analizar el proceso de carga y descarga de saldo. Como resultado, descubrió que los datos almacenados se cifran utilizado el UID, el saldo actual, varios contadores y una clave privada. El valor del sector 0 es un contador que decrementa con cada viaje realizado. Es interesante destacar también que cada tarjeta tiene sus propias claves.
Sin embargo, el sistema no es invulnerable. Entonces, ¿qué ataques pueden realizarse sobre esta nueva SUBE? Existen tres alternativas:
- Realizar un rely attack: dado que las tarjetas no tienen proximity check, es posible realizar un proxy que bloquee la operación de decremento y restaure una snapshot previa, lo que permitiría al atacante tener siempre el mismo saldo en su tarjeta.
- Con la misma lógica, el segundo ataque se basa en editar el APK de la app “Carga SUBE” para bloquear el contador cada vez que se procesa un pago y restaurar una snapshot al estado anterior.
- El tercer ataque posible consta de un ataque DoS: decrementar el contador a cero para así inutilizar la tarjeta.
Hackear el sistema de transporte argentino… ¿vale la pena?
Si entraste a este post buscando formas de viajar sin pagar, tengo malas noticias para ti. A pesar de que es posible realizar ataques a las tarjetas manipulando la información en ellas almacenada y restaurando snapshots anteriores, Borgogno nos explica que este comportamiento anómalo eventualmente será percibido en el sistema, por lo que no está exento de ser identificado por las autoridades dedicadas a controlar el fraude en el sistema de transporte.
Dado que este tipo de conducta cae dentro de la tipificación de fraude, la cantidad de dinero que se necesita invertir en herramientas para manipular las tarjetas y el mismo riesgo asociado a que logren identificar al perpetrador del fraude, resultan factores disuasorios para cualquier atacante que aprecie su libertad. Parece que, a fin de cuentas, los viajes gratis ilimitados permanecerán todavía en la imaginación argentina.