viernes, 27 de diciembre de 2013

Cómo se ha robado un cajero automático electrónicamente

En esta charla, tw y sb muestran cómo se ha utilizado malware para robar cajeros electrónicos.
Básicamente el proceso es que los ladrones hacen un agujero en el cajero automático, conectan una memoria USB en el puerto de la impresora, y vuelven más tarde para recoger el dinero. Tw y sb se vieron implicados en esto porque un banco se encontró con muchos cajeros vacíos, reforzó sus medidas de vigilancia y consiguió atrapar a un ladrón con una memoria USB. Con esa memoria, hicieron la ingeniería inversa de cómo fue posible robar con ese malware.
Para poder entenderlo han comenzado explicando cómo es un cajero automático: es simplemente un ordenador que ejecuta Windows (XP en los casos analizados), con una cajafuerte adjunta y unos cuantas piezas de hardware adicionales. Sólo la caja fuerte está blindada, y por eso los ladrones pudieron hacer un agujero en el cajero por el cual accedieron a conectar la memoria USB al puerto de la impresora del cajero.
No es la primera vez que ha habido cajeros automáticos que han sido hackeados, pero esta parece que es la primera vez que se utilizan estos métodos para robar:
  • Barnaby Jack hizo una demostración en el Black Hat de 2010.
  • Ha habido muchos tipos de malware orientado a los terminales de caja de las tiendas (POS).
  • El malware Plotus descubierto en México y Colombia en 2013 funciona de manera parecida al aquí demostrado, aunque funciona con un CD.
El USB capturado tiene una imagen de Windows arrancable que copia cosas del disco duro del cajero y tiene un directorio con programas que se arrancan automáticamente al rearrancar el cajero. He entendido que los ladrones no pueden forzar la ejecución automática del software y esperan uno o dos días a que un rearranque del cajero complete la infección.
Luego los ladrones se llevan el dinero y el USB, que contiene múltiples datos extraídos de los cajeros (datos del sistema, de los billetes, de las tarjetas y las transacciones).
El hack.bat que se autoarranca es muy refinado y amigable, con muchas opciones, y está basado en un ejecutable llamado atm.exe. Controla que no se reinfecte el sistema y es capaz de limpiar todas sus trazas del sistema infectado.
El programa está empaquetado con UPX y tiene unos recursos cifrados de Windows, cifrados con XOR y una clave que a su vez es un XOR del Número de serie del Volumen y el número 0xaf73c521, por lo que el malware se personaliza para cada cajero. Todavía no se sabe cómo el malware consigue el número serie del volumen del disco duro del cajero, que es particular de cada cajero. También comprueba de que una vez descifrado el checksum es correcto. La infección se hace a base de copiar una DLL en el directorio del sistema.
Esa DLL además registra lo que va haciendo en el disco USB. En el USB capturado había un registro de tres infecciones previas, en el que se puede ver que los cajeros usan Windows XP.
La DLL tiene siete recursos adicionales:
  • 6 imágenes que luego veremos que se utilizan como base de un segundo desktop.
  • La herramienta sdelete para borrar de manera segura los ficheros de la infección.
Para recargarse en caso de rearranque, se añade la DLL a la variable AppInit_DLL, de modo que se añade a todos los procesos del sistema. Por ello, la DLL lo primero que hace comprobar el proceso al que se ha adjuntado, y en función del proceso ejecuta una funcionalidad u otra (hay diferentes programas de entrega de dinero según los diferentes modelos de cajeros).
La DLL escucha todos los eventos del teclado y procesa las teclas numéricas. En particular, presta atención a un número mágico de 12 dígitos que activa el menú secreto que permite controlar el cajero (000507607999). Para independizarse del programa normal, el malware arranca un segundo desktop y cambia la pantalla principal de uno a otro en función de si está se accediendo normalmente o no.
Para sacar dinero, además del número de 12 dígitos hay que dar una segunda clave dependiente del cajero mediante un proceso de desafío y respuesta de modo que sólo los propietarios del software son capaces de acceder al menú secreto. Esto es así porque las personas que retiran el dinero no son las que han hecho y controlan el software, y típicamente no llevan la clave que permite el acceso, sino que tienen que llamar por teléfono para que se lo den, por lo que han dado a entender que el código que calcula la respuesta está en otro programa que no ha sido capturado.
Hay dos trozos de código que han sido especialmente protegidos para dificultar su comprensión e ingeniería inversa:
  1. El código de pregunta y respuesta para controlar el acceso al cajero
  2. El código de extracción del dinero.
La protección del código funciona a base de ofuscar el control del código mediante una máquina de estados que recibe como entrada un buffer estático y calcula el siguiente tramo de código en función del estado, además de tener mucho código embarullado para que no se pueda entender bien. Pero se ha conseguido hacer la ingeniería inversa poniendo breakpoints adecuadamente, ya que la máquina de estados está en un rango de direcciones diferente que el código ejecutado.

Demostración del malware

Como debe ser, la charla ha acabado con una demostración del funcionamiento del malware. Tras arrancarlo lo primero que hace es presentar el desafío mencionado (y la opción de salir). Una vez superado el desafío (simulado saltando el código que comprueba si es correcto, el malware muestra el saldo de cada tipo de billete del cajero, de modo que el cobrador puede enfocarse en los billetes que le van a dar más dinero.
Ejecutando la opción de de retirar el dinero, se llega a una pantalla que muestra que el terminal está indisponible, pero simplemente requiere el mismo código de antes. Esto lleva a una pantalla
Las opciones de 1 a 4 sirven para sacar un tipo diferente de billete.
Las opciones 7 y 8 sirven para desconectar el cajero del sistema mediante la activación o deshabilitación de los interfaces de red. Esto impide que el sistema pueda avisar de la retirada o la activación del cajero.
La opción 5 se denomina formatear el sistema y después de pedir resolver otro desafío, lo que hace es eliminar el malware, eliminando toda traza del software.
El código permite deducir que la banda de ladrones tiene mucho conocimiento de los cajeros, tanto de de la plataforma como del software de cliente de efectivo, quieren conseguir mucho dinero y tienen diferentes roles dentro del proceso de robo. El código tiene muchas partes para eliminar las trazas y no dejar huellas.
La charla ha terminado con otro código: el que permite indicar la desinstalación directa del malware (000507607999000753951000).
En la sección de preguntas y respuestas, han aclarado que el software no capturaba PINs de las tarjetas que usaban el cajero, pero lo podrían haber hecho.
Me ha llamado la atención la firma del malware: atmh4ck m0dul0

No hay comentarios:

Publicar un comentario