Apocalipsis

Hackeando el Sistema de Transporte Metropolitano II

Photo from Hans Eiskonen

Originalmente publicado el 11 de Setiembre de 2018

Esto es una obra de ficción, cualquier parecido con la realidad es pura coincidencia...


Disclaimer

Este es un reportaje técnico con el propósito de entender piezas móviles que afectan al público en general. Todo lo encontrado fue intentado reportar a los involucrados en tiempo y forma.

Como en ocasiones anteriores, la idea de esta publicación es poder discutir la seguridad de manera transparente con la intención de proteger a los usuarios de la misma.


Apocalipsis, del latín: Revelación

Tregua

Mi intención con la publicación original Hackeando el Sistema de Transporte Metropolitano siempre fue puramente técnica. Fue generar un impacto volcando luz sobre un tema que premeditadamete estaba en las sombras.

Pero como todo en el universo para cada acción hay una reacción, igual y opuesta.

Calma, solamente calma fue lo que encontré después de publicarlo, tanta calma que me asustó. Había logrado lo que me había propuesto, había seguido el proceso que creía apropiado, todo estaba bien, todo estaba en calma.

Pero no soy un hombre que sepa vivir en calma.

Hambre

Durante semanas mi cabeza solo podía estar en ese comentario…

Ya conozco esa hambre, ese apetito interminable. No importa cuanto intente luchar la curiosidad siempre va a ser más que yo.

Quise ser algo que no era, quedarme quieto pero la picazón siempre va a terminar ganando.

Incógnita

No sabía nada mas que ese comentario (y aunque no era la primera vez que lo escuchaba) no tenía manera de comprobarlo. Especialmente porque no uso tarjeta STM.

Evalué todas las opciones tecnicas que me pude imaginar pero partí de dos premisas básicas:

Y así surgió mi primer error: presuponer. Técnicamente en mi cabeza solo podía haber una opción:

Pero los prejuicios en todas sus formas son contraproducentes, es la experiencia lo valioso.

Tomé mucho tiempo pensando en que haría yo en lugar de pensar cual es el camino de menor resistencia…

Y el camino de menor resistencia era publicar la aplicación de control a todo el mundo en el Google Play Store.

Los caminos cortos obviamente tienen sus beneficios ya que es fundamental para avanzar rápido pero este particularmente me parece muy gracioso.

No porque se tomaron el tiempo de liberarla públicamente, ni siquiera por agregar fotos de la aplicación cual Candy Crush criollo.

Sino por la descripción:

Ese pedido de no descargar, esa invitación a curiosear, a saber mas. No había manera de parar ahora.

Adaptarse

Habiendo aprendido de mis errores del pasado no iba a dar nada por sentado así que recurrí al siempre observante ojo de Google por más información.

Original Mirror

Un dejá vú fue lo que sentí al ver que como la vez anterior googlear me dió mucha mas información de la que hubiera esperado.

Y ahí radican las filtraciones. Dejar expuesta mas información de la que uno esperaría.

Todo con la idea de perpetuar una tarea no necesaria de controlar los pasajes que ya sucede en la propia expendedora de boletos.

Estas reglas de juego son diferentes, no es una tarjeta lo que necesitaba ser hackeado sino una aplicación.

Hay varios enfoques para obtener respuestas siendo los mas populares la intercepción de interacciones con la web (MITM) o la decompilación de código.

La primera supone medir una interacción entre una aplicación y una web pero esta vez me daba mas curiosidad que guardaba adentro ya que si encontré un diagrama interno de la STM en un pdf quién sabe que mas voy a poder encontrar.

Las herramientas de decompilación de una aplicación son bastante populares, en este caso particular me tomó 3 herramientas para poder tener una visión de pájaro de todas las piezas móviles.

Tuve que adaptarme o morir.

Santo Grial

Y ahí estaba, esperandome, todo el código de la aplicación, todos sus miedos y secretos prontos para ser diseccionados.

Obviamente con todo lo aprendido de la STM la primera pregunta que quise responder es sobre la interaccion NFC de la aplicación. Más allá del control, que se supone que hacía.

Empecemos por partes dijo Jack… Lo interesante de esta línea es que usa ese identificador para corroborar la validez de una tarjeta. Si el UID (identificador único) de la tarjeta equivale a ese valor el programa sigue ejecutandose…

Eso significa que existe una Tarjeta Inspectora con caracteristicas únicas pero compartidas con la STM populares

Eso! más allá de verificar que el identificador sea el dado se checkea un bloque de la tarjeta en busca de un valor particular para marcar a ciencia cierta esta tarjeta como de inspección.

Entonces podemos concluir que la maquina expendedora interactua con la Tarjeta Inspectora y luego la aplicación móvil interactua con dicha tarjeta.

No sólo sabemos que existe una tarjeta inspectora, también sabemos que controla un viaje dado… y donde guarda esa información.

Pero no solamente eso, también podemos saber aprender más aún de la STM como que formato se usa (y en que bloques se guarda) la información de tiempo en la tarjeta.

Seamos inspectores por un dia, repitamos la jornada de trabajo:

Entonces, la conclusión sería la siguiente:

Hay varios problemas con este circuito siendo el primero que sabemos que los UID pueden ser trackeados hasta un individuo en particular ya que cada identificador tiene una CI relacionada.

Pero aún hay más!

Dentro de la aplicación hay código de respuesta de ejemplo así que podemos saber que información hay en el servidor sin tener que interactuar con él.

Todos los datos son enviados a un servidor externo luego de cada checkeo de viaje. No sólo eso sino que también nos permite aprender mucho sobre los diferentes tipos de STM que hay ahí afuera.

"Corriente"
"Estudiante A"
"Estudiante B"
"Estudiante Gratuito"
"Jubilado A"
"Jubilado B"
"Escuelas Especiales ANEP"
"Discapacidad I.M"
"nominado al Organismo con cupo"
"nominado al Funcionario con cupo"
"nominado al Organismo sin cupo"
"nominado al Funcionario sin cupo"
"Prepago nominado"
"Trabajador Transporte"
"Jubilado Transporte"
"Accionista Transporte"
"Familiar Transporte"
"Turistico"

Cada una tiene un identificador particular con el que es diferenciado, pero no solamente de tarjetas STM vive el hombre. También tenemos información sobre todos los posibles tipos de viaje que se pueden hacer:

"Sin viaje"
"Comun"
"1 hora"
"Zonal"
"Diferencial"
"2 horas"
"Met. entrante"
"Met. saliente"
"Gratuito"
"Testigo"
"Dif. metro 1"
"Local Metro 1"
"Centrico"
"Donacion A"
"Donacion B"
"Donacion C"
"Turistico 24 horas"
"Turistico 48 horas"
"1 tramo dep."

Me pregunto realmente la necesidad de una identificación tan profunda por parte de esta aplicación enviando donde y cuando se encuentra un pasajero.

Ya que tanto nos mirá la STM ya era hora de que devolvieramos el favor.

Terror

Se completó el circulo y la STM me sigue mostrando más información de la que podía imaginarme.

Hay mucha mas información en la aplicación y se podría armar una especificación del protocolo de la STM dedicandole el tiempo suficiente.

Todo este tipo de cosas me recuerdan a una anecdota de una caja fuerte “segura” que con la idea de ser millenial agregó un puerto USB tirando por borda toda la seguridad mecánica que ya tenía.

Aumentar la superficie de una aplicación aumenta necesariamente los vectores de ataque.

La STM permite una identificación bastante preocupante desde su principio y con esta aplicación se agrega mucha granularidad a la ya amplia información que queda registrada.

Horror

Lo he dicho mil y una veces, hay procesos para seguir y creo fervientemente que el contralor es necesario para evitar catastrofes.

Me decido a reportar lo que encontré directamente al mail responsable de la aplicación en Google Store porque más allá de todo es lo correcto.

Mail 1

De: "elcuervo" <[email protected]>
Para: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Enviado: 30/7/2018 04:32:20 p.m.
Asunto: Reporte de vulnerabilidad

Buenas,
Quisiera reportar un vulnerabilidad en la aplicacion.
Podrian facilitarme clave gpg para enviar el reporte?

Gracias.

Respuesta 1

De: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Para: "elcuervo" 
Enviado: 30/7/2018 05:36:20 p.m.
Asunto: Reporte de vulnerabilidad

Mail 2

De: "elcuervo" <[email protected]>
Para: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Enviado: 30/7/2018 05:38:12 p.m.
Asunto: Reporte de vulnerabilidad

Si este no es el mail adecuado te puedo pedir a donde enviarlo?

Muchas gracias

No es una exageración, esa fue la respuesta, sin texto, sin explicaciones, solo un meme. Y frente a la ultima pregunta aún estoy esperando respuesta.

No voy a mentir, me decepcioné, mucho. Esperaba un mínimo de interés.

Si bien no hubo una filtración de datos de usuario sí una exposición innecesaria de una arquitectura ya de por sí frágil.

Ofrecer medios de comunicación para el reporte de vulerabilidades y/o fallas es fundamental para sacarle trascendencia a dichas fallas.

Nunca más

Acción y reacción, la regla fundamental del universo. Una regla de la cual no estoy exento. No soy la misma persona que escribió la primera parte de la STM así como ahora no soy la misma persona que terminó la segunda.

Mucha gente me ha contactado con curiosidad sobre como funciona un sistema que muchos de nosotros usamos todo el tiempo. No es un sistema infalible aunque siendo honesto ninguno lo es.

Esta publicación como tantas otras antes y tantas otras que vendrán cumplen simplemente un propósito técnico e informativo. Como con cualquier herramienta lo importante es el uso que se le dé.

Lo dije antes y lo digo ahora, lo vulnerable de la STM es el sistema que lo rodea y siendo consientes y responsables podemos tomar decisiones informadas.

Quiero poder investigar mas abiertamente y que tal vez un día lo que comunique a afectados pueda ser tomado en serio. Ya que al final del día sólo colectivamente podemos hacer que las cosas estén mejor.

En el mientras tanto puede que este sea la última vez que escribo sobre la STM. Pero ya saben lo que dicen… nunca digas nunca: