macOS Dirty NIB
Aby uzyskać więcej szczegółów na temat techniki, sprawdź oryginalny post z: https://blog.xpnsec.com/dirtynib/ oraz następujący post od https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/. Oto podsumowanie:
Czym są pliki Nib
Pliki Nib (skrót od NeXT Interface Builder), część ekosystemu deweloperskiego Apple, są przeznaczone do definiowania elementów UI i ich interakcji w aplikacjach. Zawierają zserializowane obiekty, takie jak okna i przyciski, i są ładowane w czasie wykonywania. Pomimo ich ciągłego użycia, Apple obecnie zaleca korzystanie z Storyboardów dla bardziej kompleksowej wizualizacji przepływu UI.
Główny plik Nib jest odniesiony w wartości NSMainNibFile
wewnątrz pliku Info.plist
aplikacji i jest ładowany przez funkcję NSApplicationMain
wykonywaną w funkcji main
aplikacji.
Proces wstrzykiwania Dirty Nib
Tworzenie i konfigurowanie pliku NIB
Wstępna konfiguracja:
Utwórz nowy plik NIB za pomocą XCode.
Dodaj obiekt do interfejsu, ustawiając jego klasę na
NSAppleScript
.Skonfiguruj początkową właściwość
source
za pomocą Atrybutów Czasu Wykonania Zdefiniowanych przez Użytkownika.
Gadżet do wykonywania kodu:
Konfiguracja umożliwia uruchamianie AppleScript na żądanie.
Zintegruj przycisk, aby aktywować obiekt
Apple Script
, wywołując selektorexecuteAndReturnError:
.
Testowanie:
Prosty skrypt Apple do celów testowych:
Testuj, uruchamiając w debuggerze XCode i klikając przycisk.
Celowanie w aplikację (przykład: Pages)
Przygotowanie:
Skopiuj docelową aplikację (np. Pages) do osobnego katalogu (np.
/tmp/
).Uruchom aplikację, aby obejść problemy z Gatekeeperem i zbuforować ją.
Nadpisywanie pliku NIB:
Zastąp istniejący plik NIB (np. NIB panelu "O programie") stworzonym plikiem DirtyNIB.
Wykonanie:
Wywołaj wykonanie, wchodząc w interakcję z aplikacją (np. wybierając element menu
O programie
).
Dowód koncepcji: Uzyskiwanie dostępu do danych użytkownika
Zmodyfikuj AppleScript, aby uzyskać dostęp i wyodrębnić dane użytkownika, takie jak zdjęcia, bez zgody użytkownika.
Przykład kodu: Złośliwy plik .xib
Uzyskaj dostęp i przeglądaj przykład złośliwego pliku .xib, który demonstruje wykonywanie dowolnego kodu.
Inny przykład
W poście https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/ możesz znaleźć samouczek na temat tworzenia dirty nib.
Rozwiązywanie ograniczeń uruchamiania
Ograniczenia uruchamiania utrudniają wykonywanie aplikacji z nieoczekiwanych lokalizacji (np.
/tmp
).Możliwe jest zidentyfikowanie aplikacji, które nie są chronione przez ograniczenia uruchamiania i celowanie w nie w celu wstrzyknięcia pliku NIB.
Dodatkowe zabezpieczenia macOS
Od macOS Sonoma wprowadzone zostały ograniczenia dotyczące modyfikacji wewnątrz pakietów aplikacji. Jednak wcześniejsze metody obejmowały:
Skopiowanie aplikacji do innej lokalizacji (np.
/tmp/
).Zmiana nazw katalogów w pakiecie aplikacji, aby obejść początkowe zabezpieczenia.
Po uruchomieniu aplikacji w celu zarejestrowania się w Gatekeeperze, modyfikacja pakietu aplikacji (np. zastąpienie MainMenu.nib plikiem Dirty.nib).
Przywrócenie nazw katalogów i ponowne uruchomienie aplikacji w celu wykonania wstrzykniętego pliku NIB.
Uwaga: Ostatnie aktualizacje macOS złagodziły ten exploit, uniemożliwiając modyfikacje plików w pakietach aplikacji po buforowaniu Gatekeepera, co czyni exploit nieskutecznym.
Last updated