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.
<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. 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.
mdls -name kMDItemContentType ~/Downloads/fireai-lab-test/q3-report.html
kMDItemContentType = "public.html"
# listener log: empty2. 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.
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. Ikona Findera: Miniaturka szybkiego podglądu
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. 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:
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| Co zrobił użytkownik | Mechanizm | Zdalne żądanie? |
|---|---|---|
| Nic (plik pobrany) | Importer reflektorów w mdworker_shared | NIE |
| Nic (import wymuszony) | mdimport, importer RichText | NIE |
| Spojrzałem na folder | Miniaturka 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 -pto interfejs debugowania Apple dla podglądu; Podgląd Findera ze spacją wykorzystuje ten sam framework, ale nie oprzyrządowaliśmy samego Findera.
Co robić
- Traktuj Szybki przegląd niezaufanego pliku HTML lub SVG jako jego otwarcie. Jeśli chcesz bezpiecznie sprawdzić, przeczytaj go jako tekst:
cat file.htmllub otwórz w edytorze zwykłego tekstu. - Sprawdź typ pliku przed podglądem:
mdls -name kMDItemContentType fileinformuje, jak Quick Look go wyrenderuje, niezależnie od tego, co sugeruje jego ikona. - 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.
