Версія цієї історії поширюється в матеріалах безпеки, деякі з них тепер створені помічниками штучного інтелекту: демон фонового індексування macOS, mdworker, нібито отримує віддалені зображення всередині будь-якого HTML-файлу, який ви завантажуєте, тому файл, який ви ніколи не відкриваєте, все одно може повідомити вашу IP-адресу тому, хто його надіслав. Це гарна історія. Це також тип заяви, який слід перевірити, перш ніж повторювати, тому ми перевірили її.
З новим файлом відбуваються три різні речі
Претензія розмиває три окремі механізми. Коли файл потрапляє на диск, сервер метаданих Spotlight передає його плагіну імпортера, що виконується всередині процесу mdworker_shared, який витягує текст і атрибути, щоб файл став доступним для пошуку (mdimport і MDLS є вікнами командного рядка для цього). Окремо, коли Finder потрібна піктограма, Швидкий перегляд мініатюр відтворює невелику мініатюру. І тільки коли ви вибираєте файл і натискаєте пробіл, Швидкий погляд виконує повний попередній перегляд. Кожне з них може поводитися по-різному, тому кожному потрібен окремий тест.
Тест
Ми запустили крихітний HTTP-слухач на петлевій адресі, який реєструє кожен запит за допомогою свого агента користувача, а потім створили два файли в ~/Downloads, які вказують на нього: HTML-сторінку з однопіксельним зображенням і зовнішньою таблицею стилів, а також SVG із вбудованим зовнішнім зображенням. Loopback зберігає експеримент самодостатнім; віддалений сервер відстеження отримуватиме ті самі запити, а також вашу публічну IP-адресу.
<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><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 їх проіндексував. Слухач нічого не отримав.
mdls -name kMDItemContentType ~/Downloads/fireai-lab-test/q3-report.html
kMDItemContentType = "public.html"
# listener log: empty2. Примусове імпортування Spotlight
Щоб виключити час, ми запустили імпортер вручну. Він використовував імпортер Apple RichText, витягнув 37 атрибутів і не зробив жодного запиту.
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 empty3. Піктограма Finder: мініатюра швидкого перегляду
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 empty4. Пробіл: попередній перегляд швидкого перегляду
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| Що зробив користувач | Механізм | Віддалений запит? |
|---|---|---|
| Нічого (файл завантажено) | Імпортер Spotlight у mdworker_shared | немає |
| Нічого (примусовий імпорт) | mdimport, імпортер RichText | немає |
| Подивилася на папку | Ескіз швидкого перегляду (піктограма Finder) | немає |
| Вибрав файл, натиснув пробіл | Попередній перегляд Quick Look (WebKit) | Так: зображення, таблиця стилів, зображення SVG |
Що це означає
Версія з «нульовим клацанням» — це не те, що ми вимірювали: файл, який знаходиться у завантаженнях, індексується Spotlight і відображається як піктограма, яка не відображається. Це має значення, тому що захист, побудований на неправильній моделі, витрачає зусилля не в тому місці. Наприклад, блокування mdworker у мережі нічого не змінило б у цьому тесті.
Версія з одним ключем реальна. Функція попереднього перегляду Quick Look відтворює HTML і SVG за допомогою WebKit і завантажує їхні віддалені ресурси, тому одне натискання клавіші «Пробіл» у вкладеному «звіті» повідомляє відправнику, що файл було переглянуто, коли та з якої IP-адреси. Це веб-маяк, той самий трюк, який використовують пікселі відстеження електронної пошти та Захист конфіденційності пошти від Apple, щоб притупити в Mail; він просто не охоплюється, коли той самий вміст надходить у вигляді файлу. З точки зору зловмисників, це розвідка, а не компроміс: MITRE ATT&CK T1598 каталогізує такий тип збору інформації перед справжньою атакою.
Межі цього тесту
- Одна версія macOS (26.7) і один запуск на випадок. Поведінка може відрізнятися в інших версіях; перезапустіть його на своєму, файли вище – усе, що вам потрібно.
- Ми використали петлеву адресу. Загальнодоступна URL-адреса поводиться так само для WebKit, але ми не вимірювали це тут.
- Ми протестували HTML і SVG. Інші типи з віддаленими посиланнями (наприклад,
.webarchive, документи Office із пов’язаними зображеннями або сторонні розширення Quick Look) не тестувалися та можуть поводитися по-різному в обох напрямках. qlmanage -p— інтерфейс налагодження Apple для попереднього перегляду; Попередній перегляд Finder з пробілом використовує ту саму структуру, але ми не інструментували сам Finder.
Що робити
- Вважайте Quick Look на ненадійному файлі HTML або SVG як його відкриття. Якщо ви хочете перевірити його безпечно, прочитайте його як текст:
cat file.htmlабо відкрийте його в редакторі звичайного тексту. - Перед попереднім переглядом перевірте тип файлу:
mdls -name kMDItemContentType fileповідомляє, як Quick Look відобразить його, незалежно від того, що підказує його піктограма. - Слідкуйте за тим, який процес створює з’єднання, а не лише те, чи воно відбувається. Тут був попередній перегляд 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.
