macOS Files, Folders, Binaries & Memory

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

HackTricks का समर्थन करने के अन्य तरीके:

फ़ाइल व्यवस्था लेआउट

  • /Applications: स्थापित ऐप्स यहाँ होने चाहिए। सभी उपयोगकर्ता उन्हें एक्सेस कर सकेंगे।

  • /bin: कमांड लाइन बाइनरी

  • /cores: अगर मौजूद है, तो यह कोर डंप स्टोर करने के लिए उपयोग किया जाता है।

  • /dev: सब कुछ एक फ़ाइल के रूप में देखा जाता है, इसलिए आप हार्डवेयर डिवाइस यहाँ स्टोर किए गए देख सकते हैं।

  • /etc: कॉन्फ़िगरेशन फ़ाइलें

  • /Library: यहाँ प्राथमिकताएँ, कैश और लॉग्स से संबंधित कई उपनिर्देशिकाएँ और फ़ाइलें पाई जा सकती हैं। एक लाइब्रेरी फ़ोल्डर मूल और प्रत्येक उपयोगकर्ता के निर्देशिका में मौजूद है।

  • /private: अनसंदर्भित लेकिन उल्लिखित फ़ोल्डरों की बहुत सारी प्रतीकात्मक लिंक्स हैं।

  • /sbin: महत्वपूर्ण सिस्टम बाइनरी (प्रशासन से संबंधित)

  • /System: OS X को चलाने के लिए फ़ाइल। आपको यहाँ अधिकांशत: केवल Apple विशिष्ट फ़ाइलें मिलेंगी (तीसरे पक्षी नहीं)।

  • /tmp: फ़ाइलें 3 दिनों के बाद हटा दी जाती हैं (यह /private/tmp का एक सॉफ़्ट लिंक है)

  • /Users: उपयोगकर्ताओं के लिए होम निर्देशिका।

  • /usr: कॉन्फ़िग और सिस्टम बाइनरी

  • /var: लॉग फ़ाइलें

  • /Volumes: माउंट किए गए ड्राइव्स यहाँ दिखाई देंगे।

  • /.vol: stat a.txt चलाकर आप कुछ इस प्रकार कुछ प्राप्त करेंगे 16777223 7545753 -rw-r--r-- 1 username wheel ... जहाँ पहला नंबर वह वॉल्यूम का आईडी नंबर है जहाँ फ़ाइल मौजूद है और दूसरा एक इनोड नंबर है। आप इस फ़ाइल की सामग्री तक पहुंच सकते हैं /.vol/ के माध्यम से उस जानकारी के साथ चलाकर cat /.vol/16777223/7545753

एप्लिकेशन फ़ोल्डर

  • सिस्टम एप्लिकेशन /System/Applications के तहत स्थित हैं

  • स्थापित एप्लिकेशन आम तौर पर /Applications या ~/Applications में स्थापित होते हैं

  • एप्लिकेशन डेटा /Library/Application Support में पाया जा सकता है जो रूट के रूप में चल रहे एप्लिकेशनों के लिए और ~/Library/Application Support उपयोगकर्ता के रूप में चल रहे एप्लिकेशनों के लिए।

  • संयुक्त तृतीय-पक्ष एप्लिकेशन डेमन्स जो रूट के रूप में चलने की आवश्यकता हैं आम तौर पर /Library/PrivilegedHelperTools/ में स्थित होते हैं

  • सैंडबॉक्स एप्स को ~/Library/Containers फ़ोल्डर में मैप किया जाता है। प्रत्येक एप्लिकेशन के पास एक फ़ोल्डर होता है जिसका नाम एप्लिकेशन के बंडल आईडी (com.apple.Safari) के अनुसार होता है।

  • कर्नेल /System/Library/Kernels/kernel में स्थित है

  • Apple के कर्नेल एक्सटेंशन /System/Library/Extensions में स्थित हैं

  • तृतीय-पक्ष कर्नेल एक्सटेंशन /Library/Extensions में स्टोर होते हैं

संवेदनशील जानकारी वाली फ़ाइलें

MacOS जैसी जगहों पर पासवर्ड जैसी जानकारी स्टोर करता है:

pagemacOS Sensitive Locations & Interesting Daemons

वल्नरेबल पीकेज इंस्टॉलर्स

pagemacOS Installers Abuse

OS X विशेष एक्सटेंशन्स

  • .dmg: Apple Disk Image फ़ाइलें इंस्टॉलर्स के लिए बहुत आम हैं।

  • .kext: यह एक विशिष्ट संरचना का पालन करना चाहिए और यह ड्राइवर का OS X संस्करण है। (यह एक बंडल है)

  • .plist: XML या बाइनरी स्वरूप में जानकारी स्टोर करता है।

  • XML या बाइनरी हो सकता है। बाइनरी वाले को इस प्रकार से पढ़ा जा सकता है:

  • defaults read config.plist

  • /usr/libexec/PlistBuddy -c print config.plsit

  • plutil -p ~/Library/Preferences/com.apple.screensaver.plist

  • plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -

  • plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -

  • .app: एप्पल एप्लिकेशन जो निर्देशिका संरचना का पालन करते हैं (यह एक बंडल है)।

  • .dylib: डायनामिक लाइब्रेरीज (जैसे Windows DLL फ़ाइलें)

  • .pkg: xar (eXtensible Archive format) के समान हैं। इन फ़ाइलों के सामग्री को इंस्टॉल करने के लिए इंस्टॉलर कमांड का उपयोग किया जा सकता है।

  • .DS_Store: इस फ़ोल्डर में प्रत्येक डायरेक्टरी पर होती है, यह डायरेक्टरी की विशेषताएँ और कस्टमाइजेशन को सहेजती है।

  • .Spotlight-V100: यह फ़ोल्डर प्रत्येक वॉल्यूम के रूट डायरेक्टरी पर दिखाई देता है।

  • .metadata_never_index: अगर इस फ़ाइल को किसी वॉल्यूम के रूट में रखा गया है तो Spotlight उस वॉल्यूम को इंडेक्स नहीं करेगा।

  • .noindex: इस एक्सटेंशन वाली फ़ाइलें और फ़ोल्डर Spotlight द्वारा इंडेक्स नहीं की जाएंगी।

  • .sdef: बंडल्स के भीतर फ़ाइलें निर्दिष्ट करती हैं कि किस प्रकार से एप्लिकेशन के साथ AppleScript से बातचीत की जा सकती है।

macOS बंडल्स

एक बंडल एक डायरेक्टरी है जो फाइंडर में एक वस्तु की तरह दिखती है (एक बंडल उदाहरण हैं *.app फ़ाइलें)।

pagemacOS Bundles

Dyld Shared Library Cache (SLC)

macOS (और iOS) में सभी सिस्टम साझा लाइब्रेरी, जैसे फ़्रेमवर्क और dylibs, को एक एकल फ़ाइल में मिलाकर रखा गया है, जिसे **

# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e

# dyldextractor
dyldex -l [dyld_shared_cache_path] # List libraries
dyldex_all [dyld_shared_cache_path] # Extract all
# More options inside the readme

ध्यान दें कि यदि dyld_shared_cache_util टूल काम नहीं करता है, तो आप shared dyld binary को Hopper में पास कर सकते हैं और Hopper सभी पुस्तकालयों की पहचान करने में सक्षम होगा और आपको जिसे आप जांचना चाहते हैं उसे चुनने देगा:

कुछ निकालने वाले dylibs काम नहीं करेंगे क्योंकि dylibs पूर्व-लिंक होते हैं जिसके कारण वे अज्ञात पतों पर जा सकते हैं।

एक इम्युलेटर का उपयोग करके Xcode में *OS उपकरणों के साझा लाइब्रेरी कैश को डाउनलोड करना संभव है। वे इस प्रकार डाउनलोड किए जाएंगे: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/, जैसे:$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64

SLC को मैप करना

dyld यह जानने के लिए सिस्कॉल shared_region_check_np का उपयोग करता है कि क्या SLC को मैप किया गया है (जो पता देता है) और shared_region_map_and_slide_np का उपयोग करता है SLC को मैप करने के लिए।

ध्यान दें कि यदि SLC को पहली बार उपयोग किया जाता है, तो सभी प्रक्रियाएं एक ही प्रतिलिपि का उपयोग करती हैं, जो यदि हमलावार प्रक्रियाएं सिस्टम में चलाने में सक्षम होती हैं तो ASLR सुरक्षा को हटा देती है। यह वास्तव में पिछले में उत्पीड़ित किया गया था और साझा क्षेत्र पेजर के साथ सुधार किया गया था।

शाखा पूल छोटे Mach-O dylibs हैं जो छवि मैपिंग के बीच छोटे अंतरिक्ष बनाते हैं जिससे फ़ंक्शनों को अंतर्दाखिल करना असंभव हो जाता है।

SLC को ओवरराइड करें

इस्तेमाल करके यह एनवायरनमेंट वेरिएबल्स:

  • DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1 -> यह एक नया साझा लाइब्रेरी कैश लोड करने की अनुमति देगा

  • DYLD_SHARED_CACHE_DIR=avoid और मैन्युअली लाइब्रेरी को साझा कैश के साथ सिमलिंक्स के रूप में पुन: स्थापित करें (आपको उन्हें निकालने की आवश्यकता होगी)

विशेष फ़ाइल अनुमतियाँ

फ़ोल्डर अनुमतियाँ

एक फ़ोल्डर में, पढ़ने से उसे सूची बनाने की अनुमति होती है, लिखने से उसे हटाने और फ़ाइलें लिखने की अनुमति होती है, और क्रियान्वयन फ़ोल्डर को चलने की अनुमति देता है। इसलिए, उदाहरण के लिए, एक उपयोगकर्ता को फ़ाइल पर पढ़ने की अनुमति होने के बावजूद जब वह उस डायरेक्टरी में क्रियान्वयन की अनुमति नहीं है तो वह फ़ाइल पढ़ नहीं सकेगा

फ़्लैग संशोधक

कुछ फ़्लैग हैं जो फ़ाइल में सेट किए जा सकते हैं जो फ़ाइल का व्यवहार अलग बना देंगे। आप फ़ाइलों के फ़्लैग की जाँच कर सकते हैं जोड़ने के लिए ls -lO /path/directory

  • uchg: uchange फ़्लैग के रूप में जाना जाता है जो किसी भी क्रिया को बदलने या हटाने से रोकेगा। इसे सेट करने के लिए: chflags uchg file.txt

  • रूट उपयोगकर्ता फ़्लैग को हटा सकता है और फ़ाइल को संशोधित कर सकता है

  • restricted: यह फ़्लैग फ़ाइल को SIP द्वारा संरक्षित बना देता है (आप इस फ़्लैग को फ़ाइल में नहीं जोड़ सकते हैं)।

  • Sticky bit: यदि एक डायरेक्टरी में sticky bit है, केवल डायरेक्टरी के मालिक या रूट फ़ाइलों को नाम बदल सकते हैं या हटा सकते हैं। सामान्यत: यह /tmp डायरेक्टरी पर सेट किया जाता है ताकि साधारण उपयोगकर्ताएं अन्य उपयोगकर्ताओं की फ़ाइलों को हटाने या हटाने से रोक सकें।

सभी फ़्लैग फ़ाइल sys/stat.h में पाए जा सकते हैं (इसे mdfind stat.h | grep stat.h का उपयोग करके खोजें) और ये हैं:

  • UF_SETTABLE 0x0000ffff: मालिक परिवर्तनीय फ़्लैग का मास्क।

  • UF_NODUMP 0x00000001: फ़ाइल को डंप न करें।

  • UF_IMMUTABLE 0x00000002: फ़ाइल में परिवर्तन नहीं किया जा सकता।

  • UF_APPEND 0x00000004: फ़ाइल में लिखने केवल जोड़ सकते हैं।

  • UF_OPAQUE 0x00000008: डायरेक्टरी यूनियन के संबंध में अपारदर्शी है।

  • UF_COMPRESSED 0x00000020: फ़ाइल संकुचित है (कुछ फ़ाइल-सिस्टम)।

  • UF_TRACKED 0x00000040: इस सेट किए गए फ़ाइलों के लिए हटाने/नाम बदलने के लिए कोई सूचनाएँ नहीं।

  • UF_DATAVAULT 0x00000080: पढ़ने और लिखने के लिए अधिकार आवश्यक है।

  • UF_HIDDEN 0x00008000: इस आइटम को GUI में प्रदर्शित न करने की संकेत है।

  • SF_SUPPORTED 0x009f0000: सुपरयूजर समर्थित फ़्लैग का मास्क।

  • SF_SETTABLE 0x3fff0000: सुपरयूजर परिवर्तनीय फ़्लैग का मास्क।

  • SF_SYNTHETIC 0xc0000000: सिस्टम केवल पढ़ने योग्य सिंथेटिक फ़्लैग का मास्क।

  • SF_ARCHIVED 0x00010000: फ़ाइल संग्रहीत है।

  • SF_IMMUTABLE 0x00020000: फ़ाइल में परिवर्तन नहीं किया जा सकता।

  • SF_APPEND 0x00040000: फ़ाइल में लिखने केवल जोड़ सकते हैं।

  • SF_RESTRICTED 0x00080000: लिखने के लिए अधिकार आवश्यक है।

  • SF_NOUNLINK 0x00100000: आइटम को हटाया, नाम बदला या माउंट किया नहीं जा सकता।

  • SF_FIRMLINK 0x00800000: फ़ाइल एक फर्मलिंक है।

  • SF_DATALESS 0x40000000: फ़ाइल डेटालेस ऑब्जेक्ट है।

फ़ाइल ACLs

फ़ाइल ACLs में ACE (Access Control Entries) होते हैं जहां विभिन्न उपयोगकर्ताओं को अधिक सूक्ष्म अनुमतियाँ दी जा सकती हैं।

एक डायरेक्टरी को ये अनुमतियाँ प्रदान की जा सकती हैं: सूची, खोज, फ़ाइल जोड़ें, उप-डायरेक्टरी जोड़ें, बच्चे को हटाएं, बच्चे को हटाएं। और एक फ़ाइल को: पढ़ें, लिखें, जोड़ें, क्रियान्वयन

जब फ़ाइल में ACLs होते हैं तो आप अनुमतियों को सूचीबद्ध करते समय "+" को पाएंगे जैसे कि:

ls -ld Movies
drwx------+   7 username  staff     224 15 Apr 19:42 Movies

आप निम्नलिखित के साथ फ़ाइल की ACLs पढ़ सकते हैं:

ls -lde Movies
drwx------+ 7 username  staff  224 15 Apr 19:42 Movies
0: group:everyone deny delete

आप सभी फ़ाइलें एसीएल के साथ निम्नलिखित के साथ ढूंढ सकते हैं (यह बहुत ही धीमा है):

ls -RAle / 2>/dev/null | grep -E -B1 "\d: "

विस्तृत गुण

विस्तृत गुणों के पास एक नाम और इच्छित मान होता है, और ls -@ का उपयोग करके देखा जा सकता है और xattr कमांड का उपयोग करके परिवर्तित किया जा सकता है। कुछ सामान्य विस्तृत गुण हैं:

  • com.apple.resourceFork: संसाधन फोर्क संगतता। फ़ाइल/..namedfork/rsrc के रूप में भी दिखाई देता है

  • com.apple.quarantine: MacOS: गेटकीपर क्वारंटाइन तंत्र (III/6)

  • metadata:*: MacOS: विभिन्न मेटाडेटा, जैसे _backup_excludeItem, या kMD*

  • com.apple.lastuseddate (#PS): अंतिम फ़ाइल उपयोग तिथि

  • com.apple.FinderInfo: MacOS: फाइंडर सूचना (जैसे, रंग टैग)

  • com.apple.TextEncoding: ASCII टेक्स्ट फ़ाइलों की पाठ कोडिंग को निर्दिष्ट करता है

  • com.apple.logd.metadata: /var/db/diagnostics में फ़ाइलों पर logd द्वारा उपयोग किया जाता है

  • com.apple.genstore.*: पीढ़ीवादी संग्रहण (/.DocumentRevisions-V100 फ़ाइल सिस्टम के रूट में)

  • com.apple.rootless: MacOS: सिस्टम अखंडता संरक्षण द्वारा फ़ाइल को लेबल करने के लिए उपयोग किया जाता है (III/10)

  • com.apple.uuidb.boot-uuid: बूट युयुआईडी के साथ बूट युगों के logd चिह्नित करने के लिए उपयोग किया जाता है

  • com.apple.decmpfs: MacOS: पारदर्शी फ़ाइल संपीड़न (II/7)

  • com.apple.cprotect: *OS: प्रति-फ़ाइल एन्क्रिप्शन डेटा (III/11)

  • com.apple.installd.*: *OS: installd द्वारा उपयोग किए जाने वाले मेटाडेटा, जैसे, installType, uniqueInstallID

संसाधन फोर्क्स | macOS ADS

यह मैकओएस मशीनों में विभिन्न डेटा स्ट्रीम्स प्राप्त करने का एक तरीका है। आप एक फ़ाइल के अंदर com.apple.ResourceFork नामक विस्तृत गुण में सामग्री सहेज सकते हैं इसे file/..namedfork/rsrc में सहेजकर।

echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc

xattr -l a.txt #Read extended attributes
com.apple.ResourceFork: Hello Mac ADS

ls -l a.txt #The file length is still q
-rw-r--r--@ 1 username  wheel  6 17 Jul 01:15 a.txt

आप इस विस्तृत विशेषता को शामिल सभी फ़ाइलें खोज सकते हैं इसके साथ:

find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork"

decmpfs

विस्तारित विशेषता com.apple.decmpfs इसका संकेत देती है कि फ़ाइल एन्क्रिप्टेड रूप से स्टोर की गई है, ls -l एक आकार की 0 की रिपोर्ट करेगा और संपीड़ित डेटा इस विशेषता के अंदर है। जब भी फ़ाइल तक पहुँचा जाता है, तो यह मेमोरी में डिक्रिप्ट हो जाएगी।

यह विशेषता ls -lO के साथ देखी जा सकती है, जिसे संपीड़ित बताया जाता है क्योंकि संपीड़ित फ़ाइलें भी झंझट UF_COMPRESSED के ध्वज के साथ टैग की जाती हैं। यदि किसी संपीड़ित फ़ाइल को chflags nocompressed </path/to/file> के साथ हटाया जाता है, तो सिस्टम को पता नहीं चलेगा कि फ़ाइल संपीड़ित थी और इसलिए यह डिकंप्रेस और डेटा तक पहुँचने में सक्षम नहीं होगा (यह सोचेगा कि यह वास्तव में खाली है)।

उपकरण afscexpand का उपयोग एक डाइल को डिकंप्रेस करने के लिए किया जा सकता है।

सार्वभौमिक बाइनरी और Mach-o प्रारूप

Mac OS बाइनरी आम तौर पर सार्वभौमिक बाइनरी के रूप में कॉम्पाइल किए जाते हैं। एक सार्वभौमिक बाइनरी में एक ही फ़ाइल में कई वास्तुकलाएँ समर्थित कर सकता है।

pagemacOS Universal binaries & Mach-O Format

macOS मेमोरी डंपिंग

pagemacOS Memory Dumping

जोखिम श्रेणी फ़ाइलें Mac OS

निर्देशिका /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System जहाँ विभिन्न फ़ाइल एक्सटेंशन के साथ जुड़े जोखिम के बारे में जानकारी संग्रहित है। इस निर्देशिका में फ़ाइलों को विभिन्न जोखिम स्तरों में वर्गीकृत किया गया है, जो सफारी को डाउनलोड करने के बाद इन फ़ाइलों को कैसे हैंडल करना है इस पर प्रभाव डालता है। इन श्रेणियों में निम्नलिखित शामिल हैं:

  • LSRiskCategorySafe: इस श्रेणी में फ़ाइलें पूरी तरह सुरक्षित मानी जाती हैं। सफारी इन फ़ाइलों को डाउनलोड होने के बाद स्वचालित रूप से खोलेगा।

  • LSRiskCategoryNeutral: इन फ़ाइलों के साथ कोई चेतावनी नहीं होती है और सफारी द्वारा स्वचालित रूप से नहीं खोली जाती है।

  • LSRiskCategoryUnsafeExecutable: इस श्रेणी के तहत फ़ाइलें एक चेतावनी प्रेरित करती हैं जिसमें यह बताया जाता है कि फ़ाइल एक एप्लिकेशन है। यह उपयोगकर्ता को सूचित करने के लिए एक सुरक्षा उपाय के रूप में काम करता है।

  • LSRiskCategoryMayContainUnsafeExecutable: यह श्रेणी फ़ाइलों के लिए है, जैसे कि आर्काइव, जो एक एक्सीक्यूटेबल को समाहित कर सकते हैं। सफारी एक चेतावनी प्रेरित करेगा जब तक यह सत्यापित नहीं कर सकता कि सभी सामग्री सुरक्षित या न्यूट्रल है।

लॉग फ़ाइलें

  • $HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2: डाउनलोड की गई फ़ाइलों के बारे में जानकारी शामिल है, जैसे कि वहाँ से डाउनलोड की गई URL।

  • /var/log/system.log: OSX सिस्टम का मुख्य लॉग। com.apple.syslogd.plist सिस्टम लॉगिंग के निष्पादन के लिए जिम्मेदार है (आप "com.apple.syslogd" को launchctl list में खोजकर देख सकते हैं कि क्या यह अक्षम है)।

  • /private/var/log/asl/*.asl: ये एप्पल सिस्टम लॉग हैं जिनमें दिलचस्प जानकारी हो सकती है।

  • $HOME/Library/Preferences/com.apple.recentitems.plist: "फाइंडर" के माध्यम से हाल ही में एक्सेस की गई फ़ाइलें और एप्लिकेशन स्टोर करता है।

  • $HOME/Library/Preferences/com.apple.loginitems.plsit: सिस्टम स्टार्टअप पर लॉन्च करने के लिए आइटम स्टोर करता है।

  • $HOME/Library/Logs/DiskUtility.log: DiskUtility ऐप के लिए लॉग फ़ाइल (ड्राइव्स के बारे में जानकारी, इसमें USB भी शामिल हैं)।

  • /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist: वायरलेस एक्सेस पॉइंट्स के बारे में डेटा।

  • /private/var/db/launchd.db/com.apple.launchd/overrides.plist: निष्क्रिय किए गए डेमन्स की सूची।

Last updated