Blog o bezpieczeństwie FireAI

Autor FireAI Security & Research Team · Opublikowano

Czy pobrany plik dzwoni do domu? Przetestowaliśmy Spotlight i Quick Look na macOS 26

Czy pobrany plik dzwoni do domu? Przetestowaliśmy Spotlight i Quick Look na macOS 26

Wersja tej historii krąży w artykułach na temat bezpieczeństwa, niektóre z nich są obecnie generowane przez asystentów AI: demon indeksowania w tle systemu macOS, mdworker, rzekomo pobiera zdalne obrazy z dowolnego pobieranego pliku HTML, więc plik, którego nigdy nie otwierasz, może mimo to zgłosić Twój adres IP każdemu, kto go wysłał. To dobra historia. Jest to również rodzaj twierdzenia, które należy sprawdzić, zanim zostanie powtórzone, dlatego je przetestowaliśmy.

Z nowym plikiem dzieją się trzy różne rzeczy

Twierdzenie to zaciera trzy odrębne mechanizmy. Kiedy plik ląduje na dysku, serwer metadanych Spotlight przekazuje go wtyczce importera, która uruchamia proces mdworker_shared, który wyodrębnia tekst i atrybuty, dzięki czemu plik staje się możliwy do przeszukiwania. (mdimport i mdl to okna wiersza poleceń). Oddzielnie, gdy Finder potrzebuje ikony, Miniaturka szybkiego podglądu renderuje małą miniaturę. Dopiero po wybraniu pliku i naciśnięciu spacji Szybkie spojrzenie renderuje pełny podgląd. Każdy z nich może zachowywać się inaczej, więc każdy potrzebuje własnego testu.

Test

Uruchomiliśmy mały odbiornik HTTP na adresie pętli zwrotnej, który rejestruje każde żądanie za pomocą jego agenta użytkownika, a następnie utworzyliśmy dwa pliki w ~/Downloads wskazujące na niego: stronę HTML z jednopikselowym obrazem i zewnętrznym arkuszem stylów oraz SVG z osadzonym obrazem zewnętrznym. Funkcja Loopback zapewnia niezależność eksperymentu; zdalny serwer śledzący otrzyma te same żądania oraz Twój publiczny adres IP.

q3-report.html (przynęta)
<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>
odznaka.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. Wystarczy pobrać: indeksowanie Spotlight

Po utworzeniu plików odczekaliśmy 40 sekund, a następnie potwierdziliśmy, że Spotlight je zaindeksował. Słuchacz nie otrzymał nic.

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

2. Wymuszenie importera Spotlight

Aby wykluczyć czas, uruchomiliśmy importera ręcznie. Użył importera RichText firmy Apple, wyodrębnił 37 atrybutów i nie wysłał żadnego żądania.

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. Ikona Findera: Miniaturka szybkiego podglądu

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. Naciśnięcie spacji: podgląd szybkiego podglądu

qlmanage -p otwiera ten sam panel podglądu, co wybranie pliku w Finderze i naciśnięcie spacji (zarządzaj). Tym razem słuchacz zapalił się natychmiast, w przypadku obu plików:

dziennik słuchacza
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
Test HisnLabs, macOS 26.7, Apple krzem, 25 września 2026 r. Słuchacz pętli zwrotnej; jeden bieg na przypadek.
Co zrobił użytkownikMechanizmZdalne żądanie?
Nic (plik pobrany)Importer reflektorów w mdworker_sharedNIE
Nic (import wymuszony)mdimport, importer RichTextNIE
Spojrzałem na folderMiniaturka szybkiego podglądu (ikona Findera)NIE
Wybrano plik, naciśnięto spacjęSzybki podgląd (WebKit)Tak: obraz, arkusz stylów, obraz SVG

Co to oznacza

Wersja „zero kliknięć” nie jest tym, co zmierzyliśmy: plik znajdujący się w sekcji Pobrane jest indeksowany przez Spotlight i wyświetlany jako ikona, która nie wywołuje wywołania. To ma znaczenie, ponieważ obrona zbudowana na niewłaściwym modelu marnuje wysiłek w niewłaściwym miejscu. Na przykład zablokowanie mdworker w sieci nie zmieniłoby niczego w tym teście.

Wersja z jednym kluczem jest prawdziwa. Podgląd Quick Look renderuje HTML i SVG za pomocą WebKit i ładuje ich zdalne zasoby, więc pojedyncze naciśnięcie spacji na załączonym „raporcie” informuje nadawcę, że plik był przeglądany, kiedy i z jakiego adresu IP. To jest sygnalizator sieciowy, ta sama sztuczka, której używają piksele śledzące w wiadomościach e-mail i które Ochrona prywatności poczty firmy Apple istnieje po to, by stępić je w Mail; po prostu nie jest to objęte, gdy ta sama treść przychodzi jako plik. W kategoriach atakującego jest to rozpoznanie, a nie kompromis: ATUT&CK T1598 kataloguje tego rodzaju gromadzenie informacji przed prawdziwym atakiem.

Granice tego testu

  • Jedna wersja systemu macOS (26.7) i jedno uruchomienie na obudowę. Zachowanie może się różnić w innych wersjach; uruchom go ponownie na swoim, powyższe pliki wystarczą.
  • Użyliśmy adresu zwrotnego. Publiczny adres URL zachowuje się tak samo w przypadku WebKit, ale tutaj go nie mierzyliśmy.
  • Przetestowaliśmy HTML i SVG. Inne typy ze zdalnymi odniesieniami (na przykład .webarchive, dokumenty pakietu Office z połączonymi obrazami lub rozszerzenia Quick Look innych firm) nie zostały przetestowane i mogą zachowywać się inaczej w obu kierunkach.
  • qlmanage -p to interfejs debugowania Apple dla podglądu; Podgląd Findera ze spacją wykorzystuje ten sam framework, ale nie oprzyrządowaliśmy samego Findera.

Co robić

  1. Traktuj Szybki przegląd niezaufanego pliku HTML lub SVG jako jego otwarcie. Jeśli chcesz bezpiecznie sprawdzić, przeczytaj go jako tekst: cat file.html lub otwórz w edytorze zwykłego tekstu.
  2. Sprawdź typ pliku przed podglądem: mdls -name kMDItemContentType file informuje, jak Quick Look go wyrenderuje, niezależnie od tego, co sugeruje jego ikona.
  3. Obserwuj, który proces nawiązuje połączenie, a nie tylko to, czy tak się stanie. Tutaj był to podgląd WebKit działający w imieniu Apple, dlatego pomijają go reguły, które ufają lub nie ufają „zainstalowanym aplikacjom”.

Szersza lekcja dotyczy metody. Dramatyczna wersja tej historii została napisana z dużą pewnością siebie i łatwo byłoby ją opublikować. Dwadzieścia minut ze słuchaczem i cztery komendy pokazały, gdzie jest błąd, a gdzie jest realne, mniejsze ryzyko.

Jaką rolę odgrywają FireAI i 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 to własny produkt HisnLabs: zapora sieciowa z AI działająca bezpośrednio na Macu. Pokazuje prostym językiem każde połączenie nawiązywane przez twoje aplikacje i pozwala ci decydować, co opuszcza twojego Maca — jej AI działa lokalnie, więc twój ruch nigdy nie jest wysyłany do nas ani do nikogo innego. Zespół badań nad bezpieczeństwem HisnLabs dba o to, by te decyzje pozostały trafne: kataloguje, które domeny to zwykła telemetria, a które prawdziwa usługa, śledzi kraj i sieć stojące za połączeniem oraz trenuje lokalny model (funkcję Autopilot) na rzeczywistych wzorcach ruchu — a nic z tego nie opuszcza twojego Maca.

Możesz przeczytać o decyzjach technicznych, które za tym stoją, albo wypróbować FireAI przez 17 dni na FireAI od HisnLabs.

Źródła