macOS Dirty NIB

Support HackTricks

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

  1. 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.

  1. Gadżet do wykonywania kodu:

  • Konfiguracja umożliwia uruchamianie AppleScript na żądanie.

  • Zintegruj przycisk, aby aktywować obiekt Apple Script, wywołując selektor executeAndReturnError:.

  1. Testowanie:

  • Prosty skrypt Apple do celów testowych:

set theDialogText to "PWND"
display dialog theDialogText
  • Testuj, uruchamiając w debuggerze XCode i klikając przycisk.

Celowanie w aplikację (przykład: Pages)

  1. Przygotowanie:

  • Skopiuj docelową aplikację (np. Pages) do osobnego katalogu (np. /tmp/).

  • Uruchom aplikację, aby obejść problemy z Gatekeeperem i zbuforować ją.

  1. Nadpisywanie pliku NIB:

  • Zastąp istniejący plik NIB (np. NIB panelu "O programie") stworzonym plikiem DirtyNIB.

  1. 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

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:

  1. Skopiowanie aplikacji do innej lokalizacji (np. /tmp/).

  2. Zmiana nazw katalogów w pakiecie aplikacji, aby obejść początkowe zabezpieczenia.

  3. Po uruchomieniu aplikacji w celu zarejestrowania się w Gatekeeperze, modyfikacja pakietu aplikacji (np. zastąpienie MainMenu.nib plikiem Dirty.nib).

  4. 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.

Support HackTricks

Last updated