macOS Installers Abuse
Pkg Podstawowe Informacje
Pakiet instalacyjny macOS (znany również jako plik .pkg
) to format pliku używany przez macOS do dystrybucji oprogramowania. Te pliki są jak pudełko, które zawiera wszystko, co potrzebne do poprawnej instalacji i uruchomienia oprogramowania.
Sam plik pakietu jest archiwum, które zawiera hierarchię plików i katalogów, które będą instalowane na docelowym komputerze. Może również zawierać skrypty do wykonywania zadań przed i po instalacji, takie jak konfigurowanie plików konfiguracyjnych lub usuwanie starych wersji oprogramowania.
Hierarchia
Dystrybucja (xml): Dostosowania (tytuł, tekst powitalny…) oraz kontrole skryptów/instalacji
PackageInfo (xml): Informacje, wymagania instalacyjne, lokalizacja instalacji, ścieżki do skryptów do uruchomienia
Bill of materials (bom): Lista plików do zainstalowania, zaktualizowania lub usunięcia z uprawnieniami do plików
Payload (archiwum CPIO skompresowane gzip): Pliki do zainstalowania w
install-location
z PackageInfoSkrypty (archiwum CPIO skompresowane gzip): Skrypty przed i po instalacji oraz inne zasoby wyodrębnione do katalogu tymczasowego do wykonania.
Decompress
Aby zobaczyć zawartość instalatora bez ręcznego dekompresowania, możesz również użyć darmowego narzędzia Suspicious Package.
Podstawowe informacje o DMG
Pliki DMG, czyli obrazy dysków Apple, to format plików używany przez macOS firmy Apple do obrazów dysków. Plik DMG to zasadniczo montowalny obraz dysku (zawiera własny system plików), który zawiera surowe dane blokowe, zazwyczaj skompresowane, a czasami szyfrowane. Gdy otwierasz plik DMG, macOS montuje go tak, jakby był fizycznym dyskiem, co pozwala na dostęp do jego zawartości.
Zauważ, że instalatory .dmg
obsługują tak wiele formatów, że w przeszłości niektóre z nich zawierające luki były wykorzystywane do uzyskania wykonania kodu jądra.
Hierarchia
Hierarchia pliku DMG może być różna w zależności od zawartości. Jednak w przypadku DMG aplikacji zazwyczaj ma tę strukturę:
Poziom główny: To jest korzeń obrazu dysku. Często zawiera aplikację i być może link do folderu Aplikacje.
Aplikacja (.app): To jest właściwa aplikacja. W macOS aplikacja to zazwyczaj pakiet, który zawiera wiele pojedynczych plików i folderów, które tworzą aplikację.
Link do Aplikacji: To jest skrót do folderu Aplikacje w macOS. Celem tego jest ułatwienie instalacji aplikacji. Możesz przeciągnąć plik .app do tego skrótu, aby zainstalować aplikację.
Privesc poprzez nadużycie pkg
Wykonanie z publicznych katalogów
Jeśli skrypt przed lub po instalacji na przykład wykonuje się z /var/tmp/Installerutil
, a atakujący mógłby kontrolować ten skrypt, mógłby eskalować uprawnienia za każdym razem, gdy jest on wykonywany. Lub inny podobny przykład:
AuthorizationExecuteWithPrivileges
To jest publiczna funkcja, którą kilka instalatorów i aktualizatorów wywoła, aby wykonać coś jako root. Ta funkcja akceptuje ścieżkę do pliku, który ma być wykonany jako parametr, jednak jeśli atakujący mógłby zmodyfikować ten plik, będzie w stanie nadużyć jego wykonania z uprawnieniami roota, aby eskalować uprawnienia.
For more info check this talk: https://www.youtube.com/watch?v=lTOItyjTTkw
Wykonanie przez montowanie
Jeśli instalator zapisuje do /tmp/fixedname/bla/bla
, możliwe jest utworzenie montażu nad /tmp/fixedname
bez właścicieli, aby móc zmodyfikować dowolny plik podczas instalacji, aby nadużyć proces instalacji.
Przykładem tego jest CVE-2021-26089, które udało się nadpisać skrypt okresowy, aby uzyskać wykonanie jako root. Aby uzyskać więcej informacji, zapoznaj się z wykładem: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl
pkg jako złośliwe oprogramowanie
Pusty ładunek
Możliwe jest po prostu wygenerowanie pliku .pkg
z skryptami przed i po instalacji bez żadnego rzeczywistego ładunku poza złośliwym oprogramowaniem w skryptach.
JS w pliku xml dystrybucji
Możliwe jest dodanie tagów <script>
w pliku xml dystrybucji pakietu, a ten kod zostanie wykonany i może wykonywać polecenia za pomocą system.run
:
Instalator z tylnym wejściem
Złośliwy instalator używający skryptu i kodu JS wewnątrz dist.xml
References
Last updated