Блог о безопасности FireAI

Автор FireAI Security & Research Team · Опубликовано

Звонит ли скачанный файл «домой»? Мы протестировали Spotlight и Quick Look в macOS 26

Звонит ли скачанный файл «домой»? Мы протестировали Spotlight и Quick Look в macOS 26

Одна из версий этой истории ходит по разборам безопасности, часть из которых теперь генерируется ИИ-ассистентами: фоновый демон индексации macOS, mdworker, якобы загружает удалённые изображения внутри любого скачанного HTML-файла, так что даже никогда не открытый файл может сообщить ваш IP-адрес тому, кто его прислал. Это хорошая история. Это также вид утверждения, которое стоит проверить, прежде чем повторять — поэтому мы его проверили.

С новым файлом происходят три разные вещи

Утверждение смешивает три отдельных механизма. Когда файл появляется на диске, сервер метаданных Spotlight передаёт его плагину-импортёру, запускаемому внутри процесса mdworker_shared, который извлекает текст и атрибуты, чтобы файл стал доступен для поиска (mdimport и mdls — это окна командной строки в этот процесс). Отдельно, когда Finder нужна иконка, Quick Look Thumbnailing рендерит небольшую миниатюру. И только когда вы выбираете файл и нажимаете пробел, Quick Look рендерит полный предпросмотр. Каждый из них может вести себя по-разному, поэтому каждый требует отдельного теста.

Тест

Мы запустили крошечный HTTP-слушатель на loopback-адресе, который логирует каждый запрос вместе с его User-Agent, а затем создали в ~/Downloads два файла, указывающих на него: HTML-страницу с изображением размером в один пиксель и внешней таблицей стилей, и SVG со встроенным внешним изображением. Loopback делает эксперимент самодостаточным; реальный сервер трекинга получил бы те же запросы плюс ваш публичный IP-адрес.

q3-report.html (приманка)
<html><head><title>Q3 Financial Report</title></head><body>
  <h1>Financial Summary</h1>
  <img src="http://127.0.0.1:8765/html-img.png" width="1" height="1">
  <link rel="stylesheet" href="http://127.0.0.1:8765/html-css.css">
</body></html>
badge.svg
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
  <image xlink:href="http://127.0.0.1:8765/svg-image.png" width="100" height="100"/>
</svg>

1. Просто скачать: индексация Spotlight

Мы подождали 40 секунд после создания файлов, затем убедились, что Spotlight их проиндексировал. Слушатель не получил ничего.

Terminal
mdls -name kMDItemContentType ~/Downloads/fireai-lab-test/q3-report.html
kMDItemContentType = "public.html"
# listener log: empty

2. Принудительный запуск импортёра Spotlight

Чтобы исключить фактор времени, мы запустили импортёр вручную. Он использовал импортёр RichText от Apple, извлёк 37 атрибутов и не сделал ни одного запроса.

Terminal
mdimport -t -d1 ~/Downloads/fireai-lab-test/q3-report.html
Imported '…/q3-report.html' of type 'public.html' with plugIn /System/Library/Spotlight/RichText.mdimporter.
37 attributes returned
# listener log: still empty

3. Иконка в Finder: миниатюра Quick Look

Terminal
qlmanage -t -s 256 -o /tmp ~/Downloads/fireai-lab-test/q3-report.html ~/Downloads/fireai-lab-test/badge.svg
* …/q3-report.html produced one thumbnail
Done producing thumbnails
# listener log: still empty

4. Нажатие пробела: предпросмотр Quick Look

qlmanage -p открывает ту же панель предпросмотра, что и выбор файла в Finder с нажатием пробела (qlmanage). На этот раз слушатель сразу «загорелся» для обоих файлов:

лог слушателя
qlmanage -p ~/Downloads/fireai-lab-test/q3-report.html
13:40:22.408 GET /html-img.png   UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
13:40:22.408 GET /html-css.css   UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
qlmanage -p ~/Downloads/fireai-lab-test/badge.svg
13:40:30.035 GET /svg-image.png  UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
Тест HisnLabs, macOS 26.7, Apple silicon, 25 сентября 2026 года. Слушатель на loopback; один прогон на случай.
Что сделал пользовательМеханизмУдалённый запрос?
Ничего (файл скачан)Импортёр Spotlight в mdworker_sharedНет
Ничего (принудительный импорт)mdimport, импортёр RichTextНет
Посмотрел на папкуМиниатюра Quick Look (иконка в Finder)Нет
Выбрал файл, нажал пробелПредпросмотр Quick Look (WebKit)Да: изображение, таблица стилей, SVG-изображение

Что это значит

Версия «без клика» — это не то, что мы измерили: файл, который просто лежит в Downloads, проиндексирован Spotlight и показан как иконка, никуда не обратился. Это важно, потому что защита, построенная на неверной модели, тратит усилия не там, где нужно. Например, блокировка mdworker от сети ничего бы не изменила в этом тесте.

Версия «одна клавиша» реальна. Предпросмотр Quick Look рендерит HTML и SVG через WebKit и загружает их удалённые ресурсы, так что одно нажатие пробела на прикреплённом «отчёте» сообщает отправителю, что файл посмотрели, когда и с какого IP-адреса. Это веб-маяк — тот же приём, что используют трекинг-пиксели в почте и который призвана притупить функция Apple Mail Privacy Protection в Mail; просто она не покрывает случай, когда тот же контент приходит в виде файла. С точки зрения атакующего это разведка, а не компрометация: MITRE ATT&CK T1598 каталогизирует именно такой сбор информации перед реальной атакой.

Ограничения этого теста

  • Одна версия macOS (26.7) и один прогон на случай. Поведение может отличаться на других версиях; повторите тест на своей — файлов выше для этого достаточно.
  • Мы использовали loopback-адрес. Публичный URL ведёт себя для WebKit так же, но мы это здесь не измеряли.
  • Мы тестировали HTML и SVG. Другие типы с удалёнными ссылками (например, .webarchive, документы Office со связанными изображениями или сторонние расширения Quick Look) не тестировались и могут вести себя иначе в любую сторону.
  • qlmanage -p — это отладочный интерфейс Apple для предпросмотра; предпросмотр по пробелу в Finder использует тот же фреймворк, но сам Finder мы отдельно не инструментировали.

Что делать

  1. Относитесь к открытию Quick Look для недоверенного HTML- или SVG-файла как к его открытию. Если хотите безопасно изучить файл, прочитайте его как текст: cat file.html, или откройте в обычном текстовом редакторе.
  2. Проверьте тип файла перед предпросмотром: mdls -name kMDItemContentType file покажет, чем именно Quick Look его отрендерит, независимо от того, что подсказывает иконка.
  3. Следите за тем, какой процесс устанавливает соединение, а не только за тем, произошло ли оно. В нашем случае это был предпросмотр WebKit, действующий от имени Apple — именно поэтому правила, доверяющие или не доверяющие только «установленным вами приложениям», это пропускают.

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

Какое место здесь занимают FireAI и HisnLabs

The fetch in this test came from a WebKit preview running on Apple’s behalf, not from an app you installed, which is exactly the kind of connection a per-app firewall exists to show you: FireAI lists the process, the destination and the country, and lets you deny it.

FireAI — это собственный продукт HisnLabs: ИИ-файрвол, работающий прямо на вашем Mac. Он показывает простым языком каждое соединение, которое устанавливают ваши приложения, и позволяет вам решать, что покидает ваш Mac, — его ИИ работает локально, поэтому ваш трафик никогда не отправляется ни нам, ни кому-либо ещё. Команда исследователей безопасности HisnLabs — это те, кто поддерживает точность этих решений: они каталогизируют, какие домены являются обычной телеметрией, а какие — реальным сервисом, отслеживают страну и сеть, стоящие за соединением, и обучают локальную модель (функцию Autopilot) на реальных шаблонах трафика — и ничего из этого не покидает ваш Mac.

Вы можете прочитать о технических решениях, лежащих в его основе, или попробовать FireAI в течение 17 дней на странице FireAI от HisnLabs.

Источники