El mes pasado, investigadores de ESET escribieron sobre un nuevo malware para OS X llamado OSX/Keydnap, diseñado para robar el contenido del depósito de claves de Mac OS X para mantener un backdoor permanente. En ese momento del análisis, no estaba claro cómo las víctimas quedaban expuestas a la amenaza, aunque se consideraba la posibilidad de que fuera a través de adjuntos en mensajes de spam o descargas desde sitios desconocidos.

Pero durante las últimas horas OSX/Keydnap se distribuyó en un sitio de confianza, a través de una versión recompilada de Transmission, una aplicación open source que es un cliente legítimo de BitTorrent; esta versión maliciosa se distribuye en su sitio oficial, cuyo repositorio de archivos fue comprometido.

Respuesta instantánea del equipo de Transmission

Literalmente minutos después de ser notificado por ESET, el equipo de Transmission removió el archivo malicioso de su servidor web e inició una investigación para averiguar cómo había pasado esto. ESET también notificó a Apple sobre la firma de código comprometida.

Al momento de escribir nuestro artículo, era imposible señalar con exactitud cuándo se había puesto disponible para descarga este archivo malicioso.

Según la firma, el bundle de la aplicación fue firmado el 28 de agosto de 2016, pero parece que comenzó a distribuirse el día siguiente. Por lo tanto, recomendamos a cualquiera que haya descargado Transmission v2.92 entre el 28 y el 29 de agosto inclusive que verifique si su sistema está comprometido, buscando la presencia de cualquiera de estos archivos o directorios:

  • /Applications/Transmission.app/Contents/Resources/License.rtf
  • /Volumes/Transmission/Transmission.app/Contents/Resources/License.rtf
  • $HOME/Library/Application Support/com.apple.iCloud.sync.daemon/icloudsyncd
  • $HOME/Library/Application Support/com.apple.iCloud.sync.daemon/process.id
  • $HOME/Library/LaunchAgents/com.apple.iCloud.sync.daemon.plist
  • /Library/Application Support/com.apple.iCloud.sync.daemon/
  • $HOME/Library/LaunchAgents/com.geticloud.icloud.photo.plist

Si alguno de ellos existe, significa que la aplicación maliciosa de Transmission se ejecutó y que Keydnap probablemente esté activo. Cabe destacar que la imagen de disco maliciosa se nombró Transmission2.92.dmg, mientras que la legítima es Transmission-2.92.dmg (nótese el guion).

Semejanza con KeRanger

Si este modus operandi te suena familiar, estás en lo correcto. En marzo de 2016 se reportó a KeRanger, un ransomware para Mac propagado vía Transmission. Palo Alto Networks publicó un artículo advirtiendo sobre esta amenaza y, efectivamente, Keydnap usó esta misma técnica para propagarse.

En ambos casos, se añade un bloque de código malicioso a la rutina principal de la aplicación de Transmission. Asombrosamente, este código, responsable de descargar y ejecutar el payload, es el mismo.

Función principal de Transmission descargando OSX/Keydnap

Rutina principal de Transmission descargando OSX/Keydnap

 

Función principal de Transmission descargando OSX/Keydnap

Rutina principal de Transmission descargando OSX/Keydnap

Tal como en el caso de KeRanger, se usó una clave legítima para firmar digitalmente el bundle malicioso de la aplicación Transmission. Es diferente del certificado legítimo de Transmission, pero también está firmado por Apple y evade la protección de Gatekeeper, diseñada para proteger a los equipos de aplicaciones maliciosas descargadas de Internet.

# Malicious Transmission.app
$ codesign -dvvv /Volumes/Transmission/Transmission.app
Executable=/Volumes/Transmission/Transmission.app/Contents/MacOS/Transmission
Identifier=org.m0k.transmission
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=6304 flags=0x0(none) hashes=308+3 location=embedded
Hash type=sha1 size=20
CandidateCDHash sha1=37ffe70260919ee70e9f2a601d5ad00e2dd5a011
Hash choices=sha1
CDHash=37ffe70260919ee70e9f2a601d5ad00e2dd5a011
Signature size=4255
Authority=Developer ID Application: Shaderkin Igor (836QJ8VMCQ)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Signed Time=Aug 28, 2016, 12:09:55 PM
Info.plist entries=38
TeamIdentifier=836QJ8VMCQ
Sealed Resources version=2 rules=12 files=331
Internal requirements count=1 size=212
# Clean Transmission.app
$ codesign -dvvv /Volumes/Transmission/Transmission.app
Executable=/Volumes/Transmission/Transmission.app/Contents/MacOS/Transmission
Identifier=org.m0k.transmission
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=6304 flags=0x0(none) hashes=308+3 location=embedded
Hash type=sha1 size=20
CandidateCDHash sha1=a68d09161742573b09a17b8aef05f918a1cebcac
Hash choices=sha1
CDHash=a68d09161742573b09a17b8aef05f918a1cebcac
Signature size=8561
Authority=Developer ID Application: Digital Ignition LLC
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Mar 6, 2016, 3:01:41 PM
Info.plist entries=38
TeamIdentifier=5DPYRBHEAR
Sealed Resources version=2 rules=12 files=328
Internal requirements count=1 size=180

Aparte del método de distribución, Keydnap y KeRanger tienen similitudes en su código, tal como la ruta de acceso en la URL del C&C y los parámetros enviados:

  • KeRanger: /osx/ping?user_id=%s&uuid=%s&model=%s
  • Keydnap: /api/osx?bot_id=%s&action=ping&data=%s (parámetros como POST, cifrados con RC4)

Keydnap, ahora en versión 1.5

Si bien reporta al servidor de C&C, Keydnap incluye una versión interna. El que observamos en el nuevo binario es 1.5.

Sigue estando empaquetado con una versión modificada de UPX, descrito en nuestro primer artículo sobre Keydnap, por lo que el parche que publicamos en Github para desempaquetar el archivo ejecutable todavía funciona con la nueva variante.

Un cambio significativo en la nueva versión es la presencia de un cliente de Tor autónomo. Esto le permite a Keydnap alcanzar su servidor de C&C alojado en un dominio .onion sin la necesidad de un relay Tor2Web como onion.to.

Dentro de Keydnap, el bucle está configurado para utilizar el cliente local Tor como un proxy

Dentro de Keydnap, el bucle está configurado para utilizar el cliente local Tor como un proxy.

Hay solo un comando adicional en compración con la versión anterior que analizamos. Este nuevo comando, con id 10, permite configurar al servidor de C&C en una URL diferente y guardarla en el disco.

La clave de RC4 es usada para cifrar los datos enviados a través de POST y descifrar la respuesta cambiada a “u-4&LpZ!6Kgu^=$a".

La URL del C&C, incluida en el código (hardcoded), es ahora hxxp://t4f2cocitdpqa7tv.onion/api/osx.

keydnap_v1.5_c2

Indicadores de sistemas comprometidos

Bundle de Transmission

SHA-1 Nombre del archivo Detección de ESET
1ce125d76f77485636ecea330acb038701ccc4ce Transmission2.92.dmg OSX/Keydnap.A

Dropper de OSX/Keydnap

SHA-1 Nombre del archivo Detección de ESET
e0ef6a5216748737f5a3c8d08bbdf204d039559e Transmission OSX/TrojanDropper.Agent.A

Backdoor de OSX/Keydnap

SHA-1 Detección de ESET C&C Versión
8ca03122ee73d3e522221832872b9ed0c9869ac4 OSX/Keydnap.C hxxp://t4f2cocitdpqa7tv.onion 1.5