.. | ||
arm64-basic-assembly.md | ||
introduction-to-x64.md | ||
README.md |
macOS Apps - निरीक्षण, डीबगिंग और फजिंग
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में PRs सबमिट करके।
स्थैतिक विश्लेषण
otool
otool -L /bin/ls #List dynamically linked libraries
otool -tv /bin/ps #Decompile application
objdump
{% code overflow="wrap" %}
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
objdump -m --syms /bin/ls # Check if the symbol table exists to get function names
objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
{% endcode %}
jtool2
यह टूल codesign, otool, और objdump के लिए एक प्रतिस्थापन के रूप में उपयोग किया जा सकता है, और कुछ अतिरिक्त सुविधाएँ प्रदान करता है। यहाँ से डाउनलोड करें या brew
के साथ इंस्टॉल करें।
# Install
brew install --cask jtool2
jtool2 -l /bin/ls # Get commands (headers)
jtool2 -L /bin/ls # Get libraries
jtool2 -S /bin/ls # Get symbol info
jtool2 -d /bin/ls # Dump binary
jtool2 -D /bin/ls # Decompile binary
# Get signature information
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator
# Get MIG information
jtool2 -d __DATA.__const myipc_server | grep MIG
Codesign / ldid
{% hint style="danger" %}
Codesign
मैकओएस में पाया जा सकता है जबकि ldid
आईओएस में पाया जा सकता है।
{% endhint %}
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app
# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms
# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
# Get signature info
ldid -h <binary>
# Get entitlements
ldid -e <binary>
# Change entilements
## /tmp/entl.xml is a XML file with the new entitlements to add
ldid -S/tmp/entl.xml <binary>
SuspiciousPackage
SuspiciousPackage एक उपकरण है जो .pkg फ़ाइलें (इंस्टॉलर) की जांच करने के लिए उपयोगी है और इंस्टॉल करने से पहले देखने की सुविधा प्रदान करता है।
इन इंस्टॉलर में preinstall
और postinstall
बैश स्क्रिप्ट होते हैं जिन्हें मैलवेयर लेखक सामान्यत: दुरुपयोग करते हैं ताकि मैलवेयर को टिकाऊ बना सकें।
hdiutil
यह उपकरण Apple डिस्क छवियों (.dmg) फ़ाइलों को माउंट करने की अनुमति देता है ताकि इन्हें कुछ चलाने से पहले जांच सकें:
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
यह /Volumes
में माउंट किया जाएगा।
Objective-C
मेटाडेटा
{% hint style="danger" %} ध्यान दें कि Objective-C में लिखे गए कार्यक्रम Mach-O binaries में कॉम्पाइल होने पर अपनी क्लास घोषणाएं बनाए रखते हैं। ऐसी क्लास घोषणाएं निम्नलिखित का नाम और प्रकार शामिल होता है: {% endhint %}
- कक्षा
- कक्षा के विधियाँ
- कक्षा के उदाहरण संदर्भ
आप class-dump का उपयोग करके इस जानकारी को प्राप्त कर सकते हैं:
class-dump Kindle.app
कार्य को बुलाना
जब एक फ़ंक्शन को कॉल किया जाता है जो एक Objective-C का उपयोग करने वाले बाइनरी में है, तो कॉम्पाइल कोड उस फ़ंक्शन को बुलाने की बजाय, objc_msgSend
को बुलाएगा। जो अंतिम फ़ंक्शन को बुलाएगा:
इस फ़ंक्शन की उम्मीद की जाने वाली पैरामीटर हैं:
- पहला पैरामीटर (self) "एक पॉइंटर है जो संदेश प्राप्त करने वाली कक्षा के उदाहरण की ओर पॉइंट करता है"। या और सरल शब्दों में कहें, यह वस्तु है जिस पर विधि को आमंत्रित किया जा रहा है। यदि विधि एक कक्षा विधि है, तो यह कक्षा वस्तु का एक उदाहरण होगा (सम्पूर्ण रूप से), जबकि एक उदाहरण विधि के लिए, self कक्षा के एक उदाहरण को एक वस्तु के रूप में संकेत करेगा।
- दूसरा पैरामीटर, (op), "संदेश का संभालने वाली विधि का चयनकर्ता" है। फिर भी, और सरल शब्दों में कहें, यह बस विधि का नाम है।
- शेष पैरामीटर वह कोई मान हैं जो विधि के द्वारा आवश्यक हैं (op)।
इस जानकारी को lldb
में ARM64 के साथ आसानी से कैसे प्राप्त किया जा सकता है देखें:
{% content-ref url="arm64-basic-assembly.md" %} arm64-basic-assembly.md {% endcontent-ref %}
x64:
विधि | रजिस्टर | (के लिए) objc_msgSend |
---|---|---|
1वां पैरामीटर | rdi | self: वस्तु जिस पर विधि को आमंत्रित किया जा रहा है |
2वां पैरामीटर | rsi | op: विधि का नाम |
3वां पैरामीटर | rdx | विधि के लिए 1वां पैरामीटर |
4वां पैरामीटर | rcx | विधि के लिए 2वां पैरामीटर |
5वां पैरामीटर | r8 | विधि के लिए 3वां पैरामीटर |
6वां पैरामीटर | r9 | विधि के लिए 4वां पैरामीटर |
7वां+ पैरामीटर | rsp+ |
विधि के लिए 5वां+ पैरामीटर |
स्विफ्ट
स्विफ्ट बाइनरी के साथ, क्योंकि यहाँ Objective-C संगतता है, कभी-कभी आप class-dump का उपयोग करके घोषणाएँ निकाल सकते हैं लेकिन हमेशा नहीं।
jtool -l
या otool -l
कमांड लाइन के साथ कई खंड खोजना संभव है जो __swift5
उपसर्ग से शुरू होते हैं:
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
LC 01: LC_SEGMENT_64 Mem: 0x100000000-0x100028000 __TEXT
[...]
Mem: 0x100026630-0x100026d54 __TEXT.__swift5_typeref
Mem: 0x100026d60-0x100027061 __TEXT.__swift5_reflstr
Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
आप इस ब्लॉग पोस्ट में इन सेक्शन में संग्रहित जानकारी के बारे में अधिक जानकारी पा सकते हैं।
इसके अतिरिक्त, स्विफ्ट बाइनरी में प्रतीक हो सकते हैं (उदाहरण के लिए पुस्तकालयों को प्रतीक संग्रहित करने की आवश्यकता होती है ताकि उनके कार्य को बुलाया जा सके)। **प्रतीकों में सामान्यत: फ़ंक्शन के नाम और एट्रिब्यूट की जानकारी होती है और यह एक बेहद अद्भुत तरीके से होती है, इसलिए वे बहुत उपयोगी होते हैं और वहाँ "डीमैंगलर्स" होते हैं जो मूल नाम प्राप्त कर सकते हैं:
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
# Swift cli
swift demangle
पैक किए गए बाइनरी
- उच्च एंट्रोपी की जांच करें
- स्ट्रिंग की जांच करें (क्या कोई समझने योग्य स्ट्रिंग है, पैक किया गया है)
- MacOS के लिए UPX पैकर एक धारा उत्पन्न करता है जिसे "__XHDR" कहा जाता है
गतिशील विश्लेषण
{% hint style="warning" %}
ध्यान दें कि बाइनरी को डीबग करने के लिए SIP को अक्षम करना आवश्यक है (csrutil disable
या csrutil enable --without debug
) या बाइनरी को एक अस्थायी फ़ोल्डर में कॉपी करना और codesign --remove-signature <binary-path>
के साथ सिग्नेचर को हटाना या बाइनरी का डीबगिंग अनुमति देना (आप इस स्क्रिप्ट का उपयोग कर सकते हैं)
{% endhint %}
{% hint style="warning" %}
ध्यान दें कि सिस्टम बाइनरी (जैसे cloudconfigurationd
) को इंस्ट्रुमेंट करने के लिए macOS पर, SIP को अक्षम किया जाना चाहिए (सिग्नेचर को बस हटाना काम नहीं करेगा)।
{% endhint %}
एकीकृत लॉग
MacOS बहुत सारे लॉग उत्पन्न करता है जो एक एप्लिकेशन चलाने पर उसके कार्य को समझने में बहुत उपयोगी हो सकते हैं।
इसके अतिरिक्त, कुछ लॉग होंगे जिनमें <private>
टैग होगा ताकि कुछ उपयोगकर्ता या कंप्यूटर संदर्भीय पहचाननीय जानकारी छुपाई जा सके। हालांकि, इस जानकारी को खोलने के लिए एक प्रमाणपत्र स्थापित करना संभव है। यहां से विवरणों का पालन करें।
हॉपर
बाएं पैनल
हॉपर के बाएं पैनल में बाइनरी के प्रतीक (लेबल), प्रक्रियाएँ और कार्य (प्रोसेड्यूर्स) की सूची और स्ट्रिंग (स्ट्र) देखना संभव है। ये सभी स्ट्रिंग नहीं हैं लेकिन वे मैक-ओ फ़ाइल के कई हिस्सों में परिभाषित हैं (जैसे cstring या objc_methname
की तरह)।
मध्य पैनल
मध्य पैनल में आप डिसएंबल कोड देख सकते हैं। और आप इसे रॉ डिसएंबल, ग्राफ, डीकंपाइल्ड और बाइनरी के रूप में देख सकते हैं जिसके लिए आपको संबंधित आइकन पर क्लिक करना होगा:
किसी कोड ऑब्जेक्ट पर राइट क्लिक करके आप उस ऑब्जेक्ट से/के लिए संदर्भ देख सकते हैं या उसका नाम बदल सकते हैं (यह डिकंपाइल्ड प्यूडोकोड में काम नहीं करता):
इसके अतिरिक्त, नीचे मध्य में आप पायथन कमांड लिख सकते हैं।
दाएं पैनल
दाएं पैनल में आप नेविगेशन हिस्ट्री (ताकि आप जानें कि आप वर्तमान स्थिति तक कैसे पहुंचे), कॉल ग्राफ जहां आप सभी कार्यों को देख सकते हैं जो इस कार्य को कॉल करते हैं और सभी कार्यों को यह कार्य किसे कॉल करता है, और स्थानीय चर जानकारी देख सकते हैं।
dtrace
यह उपयोगकर्ताओं को एक अत्यधिक निचले स्तर पर एप्लिकेशन तक पहुंचने और उनके निष्पादन फ्लो को बदलने का एक तरीका प्रदान करता है। Dtrace प्रोब्स का उपयोग करता है जो कर्नेल के भीतर विभिन्न स्थानों पर रखे गए होते हैं और ऐसे स्थानों पर होते हैं जैसे सिस्टम कॉल के आरंभ और समापन।
DTrace उपयोगकर्ताओं को प्रत्येक सिस्टम कॉल के प्रवेश और निकास स्थान में प्रोब बनाने के लिए dtrace_probe_create
फ़ंक्शन का उपयोग करता है। ये प्रोब्स प्रत्येक सिस्टम कॉल के प्रवेश और निकास स्थान में फायर किए जा सकते हैं। DTrace के साथ बातचीत /dev/dtrace के माध्यम से होती है जो केवल रूट उपयोगकर्ता के लिए ही उपलब्ध है।
{% hint style="success" %}
SIP सुरक्षा को पूरी तरह से अक्षम किए बिना Dtrace को सक्षम करने के लिए आप रिकवरी मोड पर निम्नलिखित को कार्यान्वित कर सकते हैं: csrutil enable --without dtrace
आप उन बाइनरी को भी dtrace
या dtruss
कर सकते हैं जो आपने कंपाइल किया है।
{% endhint %}
dtrace के उपलब्ध प्रोब्स को प्राप्त करने के लिए निम्नलिखित के साथ कार्यान्वित किया जा सकता ह।
dtrace -l | head
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
43 profile profile-97
44 profile profile-199
प्रोब नाम चार भागों से मिलकर बनता है: प्रदाता, मॉड्यूल, कार्य, और नाम (fbt:mach_kernel:ptrace:entry
). यदि आप नाम के किसी भाग को निर्दिष्ट नहीं करते हैं, तो Dtrace उस भाग को वाइल्डकार्ड के रूप में लागू करेगा।
प्रोब्स को सक्रिय करने और जब वे फायर होते हैं तो क्या क्रियाएँ करनी है, इसे कॉन्फ़िगर करने के लिए हमें डी भाषा का उपयोग करना होगा।
एक और विस्तृत व्याख्या और अधिक उदाहरण https://illumos.org/books/dtrace/chp-intro.html में देखा जा सकता है।
उदाहरण
man -k dtrace
चलाकर उपलब्ध DTrace स्क्रिप्ट की सूची देखें। उदाहरण: sudo dtruss -n binary
- लाइन में
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
- स्क्रिप्ट
syscall:::entry
/pid == $1/
{
}
#Log every syscall of a PID
sudo dtrace -s script.d 1234
syscall::open:entry
{
printf("%s(%s)", probefunc, copyinstr(arg0));
}
syscall::close:entry
{
printf("%s(%d)\n", probefunc, arg0);
}
#Log files opened and closed by a process
sudo dtrace -s b.d -c "cat /etc/hosts"
syscall:::entry
{
;
}
syscall:::return
{
printf("=%d\n", arg1);
}
#Log sys calls with values
sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
dtruss
dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000
ktrace
आप इसे SIP सक्रिय होने पर भी उपयोग कर सकते हैं
ktrace trace -s -S -t c -c ls | grep "ls("
ProcessMonitor
ProcessMonitor एक बहुत ही उपयोगी उपकरण है जो यह जांचने के लिए उपयोगी है कि कोई प्रक्रिया किस प्रकार की क्रियाएँ कर रही है (उदाहरण के लिए, देखें कि कोई प्रक्रिया कौन से नए प्रक्रियाएँ बना रही है)।
SpriteTree
SpriteTree एक उपकरण है जो प्रक्रियाओं के बीच संबंधों को प्रिंट करता है।
आपको अपने मैक को एक ऐसे कमांड के साथ मॉनिटर करने की आवश्यकता है जैसे sudo eslogger fork exec rename create > cap.json
(इसे लॉन्च करने के लिए टर्मिनल में FDA की आवश्यकता है)। और फिर आप इस उपकरण में JSON लोड कर सकते हैं ताकि आप सभी संबंधों को देख सकें:
FileMonitor
FileMonitor फाइल घटनाओं (जैसे निर्माण, संशोधन और हटाने) का मॉनिटर करने की अनुमति देता है जो इन घटनाओं के बारे में विस्तृत जानकारी प्रदान करता है।
Crescendo
Crescendo एक GUI उपकरण है जिसका लुक और फ़ील Windows उपयोगकर्ता जान सकते हैं Microsoft Sysinternal’s Procmon से। यह उपकरण विभिन्न घटना प्रकारों को शुरू और बंद करने की अनुमति देता है, इन घटनाओं को फ़ाइल, प्रक्रिया, नेटवर्क आदि जैसे श्रेणियों द्वारा फ़िल्टर करने की अनुमति देता है, और जो घटनाएँ जोड़ी गई हैं उन्हें एक JSON प्रारूप में सहेजने की क्षमता प्रदान करता है।
Apple Instruments
Apple Instruments Xcode के डेवलपर उपकरणों का हिस्सा हैं - जो अनुप्रयोग के प्रदर्शन को मॉनिटर करने, मेमोरी लीक्स की पहचान करने और फ़ाइल सिस्टम गतिविधि को ट्रैक करने के लिए उपयोग किया जाता है।
fs_usage
प्रक्रियाओं द्वारा किए गए कार्रवाई का पालन करने की अनुमति देता है:
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions
TaskExplorer
Taskexplorer किसी बाइनरी द्वारा उपयोग की जाने वाली लाइब्रेरी, उसके द्वारा उपयोग की जा रही फ़ाइलें और नेटवर्क कनेक्शन देखने के लिए उपयोगी है।
यह बाइनरी प्रक्रियाओं को virustotal के खिलाफ जांचता है और बाइनरी के बारे में जानकारी दिखाता है।
PT_DENY_ATTACH
इस ब्लॉग पोस्ट में आपको एक उदाहरण मिलेगा कि कैसे PT_DENY_ATTACH
का उपयोग करके चल रहे डेमन को डीबग किया जा सकता है, जिसने डीबगिंग को रोकने के लिए SIP भी अक्षम किया था।
lldb
lldb macOS बाइनरी डीबगिंग के लिए डी फैक्टो टूल है।
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
जब आप lldb का उपयोग कर रहे हो तो आप इंटेल फ्लेवर सेट कर सकते हैं अपने होम फ़ोल्डर में निम्नलिखित लाइन के साथ फ़ाइल बनाकर .lldbinit
कहा जाता है:
settings set target.x86-disassembly-flavor intel
{% hint style="warning" %}
ल्लडब में, process save-core
के साथ एक प्रक्रिया को डंप करें।
{% endhint %}
(lldb) कमांड | विवरण |
run (r) | एक्सिक्यूशन शुरू करें, जो एक ब्रेकपॉइंट हिट होने या प्रक्रिया समाप्त होने तक जारी रहेगा। |
continue (c) | डीबग की गई प्रक्रिया का एक्सिक्यूशन जारी रखें। |
nexti (n / ni) | अगले इंस्ट्रक्शन को एक्सीक्यूट करें। यह कमांड फंक्शन कॉल को छोड़ देगा। |
stepi (s / si) | अगले इंस्ट्रक्शन को एक्सीक्यूट करें। nexti कमांड की तरह, यह कमांड फंक्शन कॉल में स्टेप करेगा। |
finish (f) | वर्तमान फंक्शन ("फ्रेम") में शेष इंस्ट्रक्शन को एक्सीक्यूट करें और रोकें। |
control + c | एक्सीक्यूशन को रोकें। अगर प्रक्रिया को चलाया गया है (r) या जारी रखा गया है (c), तो यह प्रक्रिया को वर्तमान में कहीं भी रोक देगा। |
breakpoint (b) | b main #कोई फंक्शन जिसे मेन कहा गया है b <binname>`main #बिन का मुख्य फंक्शन b set -n main --shlib <lib_name> #निर्दिष्ट बिन का मुख्य फंक्शन b -[NSDictionary objectForKey:] b -a 0x0000000100004bd9 br l #ब्रेकपॉइंट सूची br e/dis <num> #ब्रेकपॉइंट को सक्षम/अक्षम करें breakpoint delete <num> |
help | help breakpoint #ब्रेकपॉइंट कमांड की मदद प्राप्त करें help memory write #मेमोरी में लिखने की मदद प्राप्त करें |
reg | reg read reg read $rax reg read $rax --format <format> reg write $rip 0x100035cc0 |
x/s <reg/memory address> | मेमोरी को एक नल-समाप्त स्ट्रिंग के रूप में प्रदर्शित करें। |
x/i <reg/memory address> | मेमोरी को एसेम्बली इंस्ट्रक्शन के रूप में प्रदर्शित करें। |
x/b <reg/memory address> | मेमोरी को बाइट के रूप में प्रदर्शित करें। |
print object (po) | यह पैरामीटर द्वारा संदर्भित ऑब्जेक्ट प्रिंट करेगा po $raw
ध्यान दें कि अधिकांश Apple के Objective-C API या मेथड्स ऑब्जेक्ट वापस करते हैं, और इसलिए "प्रिंट ऑब्जेक्ट" (po) कमांड के माध्यम से प्रदर्शित किए जाना चाहिए। यदि po से कोई अर्थपूर्ण आउटपुट नहीं निकालता है, तो |
memory | memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #उस पते में AAAA लिखें memory write -f s $rip+0x11f+7 "AAAA" #उस पते में AAAA लिखें |
disassembly | dis #वर्तमान फंक्शन को डिसैसेंबल करें dis -n <funcname> #फंक्शन को डिसैसेंबल करें dis -n <funcname> -b <basename> #फंक्शन को डिसैसेंबल करें |
parray | parray 3 (char **)$x1 # x1 रेजिस्टर में 3 घटकों के एरे की जाँच करें |
{% hint style="info" %}
objc_sendMsg
फंक्शन को कॉल करते समय, rsi रजिस्टर में मेथड का नाम एक नल-समाप्त (“सी”) स्ट्रिंग के रूप में होता है। lldb के माध्यम से नाम प्रिंट करने के लिए:
(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"
(lldb) print (char*)$rsi:
(char *) $1 = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"
(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"
{% endhint %}
एंटी-डायनामिक विश्लेषण
वीएम पता लगाना
sysctl hw.model
कमांड "Mac" लौटाता है जब होस्ट एक MacOS होता है, लेकिन कुछ अलग होता है जब यह एक वीएम होता है।hw.logicalcpu
औरhw.physicalcpu
के मानों के साथ खेलने से कुछ मैलवेयर यह जांचने की कोशिश करते हैं कि यह एक वीएम है या नहीं।- कुछ मैलवेयर यह भी पता लगा सकते हैं कि मशीन VMware पर आधारित है MAC पते (00:50:56) के आधार पर।
- यह भी संभव है कि एक प्रक्रिया की डीबगिंग हो रही है या नहीं इसे एक सरल कोड के साथ जैसे:
if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //प्रक्रिया डीबग हो रही है }
- यह भी
ptrace
सिस्टम कॉल कोPT_DENY_ATTACH
फ्लैग के साथ आवंटित कर सकता है। यह एक डेबगर को जोड़ने और ट्रेसिंग करने से रोकता है। - आप यह जांच सकते हैं कि क्या
sysctl
याptrace
फ़ंक्शन आयात किया जा रहा है (लेकिन मैलवेयर इसे गतिशील रूप से आयात कर सकता है) - जैसा कि इस लेखन में दर्शाया गया है, “एंटी-डीबग तकनीकों को पराजित करना: macOS ptrace variants” :
“संदेश प्रक्रिया # के साथ बाहर निकल गई जिसकी स्थिति = 45 (0x0000002d) है आम तौर पर एक संकेत है कि डीबग लक्ष्य PT_DENY_ATTACH का उपयोग कर रहा है”
Fuzzing
ReportCrash
ReportCrash क्रैश हो रहे प्रक्रियाओं का विश्लेषण करता है और एक क्रैश रिपोर्ट को डिस्क पर सहेजता है। एक क्रैश रिपोर्ट में जानकारी होती है जो एक डिवेलपर को क्रैश के कारण का निदान करने में मदद कर सकती है।
एप्लिकेशनों और अन्य प्रक्रियाओं के लिए प्रति-उपयोगकर्ता लॉन्चडी संदर्भ में चल रहे, ReportCrash एक लॉन्चएजेंट के रूप में चलता है और क्रैश रिपोर्ट को उपयोगकर्ता के ~/Library/Logs/DiagnosticReports/
में सहेजता है।
डेमन्स, अन्य प्रक्रियाएं सिस्टम लॉन्चडी संदर्भ में चल रही हैं और अन्य प्रिविलेज्ड प्रक्रियाएं के लिए, ReportCrash एक लॉन्चडेमन के रूप में चलता है और क्रैश रिपोर्ट को सिस्टम के /Library/Logs/DiagnosticReports
में सहेजता है।
अगर आप क्रैश रिपोर्ट को एप्पल को भेजने की चिंता कर रहे हैं तो आप इन्हें अक्षम कर सकते हैं। अगर नहीं, तो क्रैश रिपोर्ट सर्वर क्रैश कैसे हुआ पता लगाने में उपयोगी हो सकते हैं।
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
#To re-enable crash reporting:
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
नींद
MacOS में फज़िंग करते समय, Mac को सोने नहीं देने का महत्वपूर्ण है:
- systemsetup -setsleep Never
- pmset, सिस्टम प्राथमिकताएँ
- KeepingYouAwake
SSH डिस्कनेक्ट
यदि आप SSH कनेक्शन के माध्यम से फज़िंग कर रहे हैं, तो सुनिश्चित करें कि सत्र दिन भर नहीं जा रहा है। इसलिए sshd_config फ़ाइल को निम्नलिखित से बदलें:
- TCPKeepAlive Yes
- ClientAliveInterval 0
- ClientAliveCountMax 0
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
आंतरिक हैंडलर
निम्नलिखित पृष्ठ की जाँच करें ताकि आप पता लगा सकें कि निर्दिष्ट स्कीम या प्रोटोकॉल का हैंडलिंग कौन सा ऐप जिम्मेदार है:
{% content-ref url="../macos-file-extension-apps.md" %} macos-file-extension-apps.md {% endcontent-ref %}
नेटवर्क प्रक्रियाओं की गणना
यह दिलचस्प है कि नेटवर्क डेटा का प्रबंधन कर रही प्रक्रियाएं खोजना:
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
sort -u recv.log > procs.txt
cat procs.txt
या netstat
या lsof
का उपयोग करें
Libgmalloc
{% code overflow="wrap" %}
lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib" -o "run arg1 arg2" -o "bt" -o "reg read" -o "dis -s \$pc-32 -c 24 -m -F intel" -o "quit"
{% endcode %}
फज़र्स
AFL++
CLI टूल्स के लिए काम करता है
Litefuzz
यह macOS GUI टूल्स के साथ "बस काम करता है"। कृपया ध्यान दें कि कुछ macOS ऐप्स के कुछ विशेष आवश्यकताएं हो सकती हैं जैसे अद्वितीय फ़ाइल नाम, सही एक्सटेंशन, सैंडबॉक्स से फ़ाइलों को पढ़ने की आवश्यकता (~/Library/Containers/com.apple.Safari/Data
)...
कुछ उदाहरण:
{% code overflow="wrap" %}
# iBooks
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez
# -l : Local
# -c : cmdline with FUZZ word (if not stdin is used)
# -i : input directory or file
# -o : Dir to output crashes
# -t : Dir to output runtime fuzzing artifacts
# -x : Tmeout for the run (default is 1)
# -n : Num of fuzzing iterations (default is 1)
# -e : enable second round fuzzing where any crashes found are reused as inputs
# -z : enable malloc debug helpers
# Font Book
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez
# smbutil (using pcap capture)
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z
# screensharingd (using pcap capture)
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000
{% endcode %}
अधिक Fuzzing MacOS जानकारी
- https://www.youtube.com/watch?v=T5xfL9tEg44
- https://github.com/bnagy/slides/blob/master/OSXScale.pdf
- https://github.com/bnagy/francis/tree/master/exploitaben
- https://github.com/ant4g0nist/crashwrangler
संदर्भ
- OS X Incident Response: Scripting and Analysis
- https://www.youtube.com/watch?v=T5xfL9tEg44
- https://taomm.org/vol1/analysis.html
- The Art of Mac Malware: The Guide to Analyzing Malicious Software
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- जुड़ें 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह में या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।