31 KiB
macOS Aplikacije - Inspekcija, debagovanje i Faziranje
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu Proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Statička Analiza
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
Ovaj alat se može koristiti kao zamena za codesign, otool i objdump, i pruža nekoliko dodatnih funkcija. Preuzmite ga ovde ili ga instalirajte pomoću brew
komande.
# 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
se može pronaći u macOS-u, dok se ldid
može pronaći u iOS-u.
{% 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 je alat koji je koristan za inspekciju .pkg fajlova (instalera) i pregled sadržaja pre nego što se instalira.
Ovi instalateri imaju preinstall
i postinstall
bash skripte koje autori malvera obično zloupotrebljavaju kako bi trajno instalirali malver.
hdiutil
Ovaj alat omogućava montiranje Apple disk slika (.dmg) fajlova kako bi se pregledali pre pokretanja bilo čega:
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
Biće montirano u /Volumes
Objective-C
Metapodaci
{% hint style="danger" %} Imajte na umu da programi napisani u Objective-C zadržavaju svoje deklaracije klasa kada kompiliraju u Mach-O binarne datoteke. Takve deklaracije klasa uključuju ime i tip: {% endhint %}
- Klasa
- Metode klase
- Instancne varijable klase
Ove informacije možete dobiti koristeći class-dump:
class-dump Kindle.app
Pozivanje funkcija
Kada se funkcija poziva u binarnom fajlu koji koristi Objective-C, kompajlirani kod umesto pozivanja te funkcije, poziva objc_msgSend
. Ova funkcija zatim poziva konačnu funkciju:
Parametri koje ova funkcija očekuje su:
- Prvi parametar (self) je "pokazivač koji pokazuje na instancu klase koja treba da primi poruku". Jednostavnije rečeno, to je objekat nad kojim se poziva metoda. Ako je metoda klasna metoda, ovo će biti instanca objekta klase (u celini), dok će za instancnu metodu, self pokazivati na instanciranu instancu klase kao objekat.
- Drugi parametar (op) je "selektor metode koja obrađuje poruku". Ponovo, jednostavnije rečeno, ovo je samo ime metode.
- Preostali parametri su bilo koje vrednosti koje su potrebne metodi (op).
Argument | Registar | (za) objc_msgSend |
---|---|---|
1. argument | rdi | self: objekat nad kojim se poziva metoda |
2. argument | rsi | op: ime metode |
3. argument | rdx | 1. argument metode |
4. argument | rcx | 2. argument metode |
5. argument | r8 | 3. argument metode |
6. argument | r9 | 4. argument metode |
7.+ argument | rsp+ |
5.+ argument metode |
Swift
Sa Swift binarnim fajlovima, s obzirom da postoji kompatibilnost sa Objective-C, ponekad možete izvući deklaracije koristeći class-dump, ali ne uvek.
Pomoću komandne linije jtool -l
ili otool -l
moguće je pronaći nekoliko sekcija koje počinju sa prefiksom __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
[...]
Možete pronaći dodatne informacije o informacijama koje se čuvaju u ovim sekcijama u ovom blog postu.
Osim toga, Swift binarni fajlovi mogu imati simbole (na primer, biblioteke moraju čuvati simbole kako bi se funkcije mogle pozvati). Simboli obično sadrže informacije o imenu funkcije i atributima na ružan način, pa su vrlo korisni i postoje "demangleri" koji mogu dobiti originalno ime:
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
# Swift cli
swift demangle
Pakovani binarnih fajlova
- Proverite visoku entropiju
- Proverite stringove (ako nema razumljivih stringova, pakovan je)
- UPX paket za MacOS generise sekciju nazvanu "__XHDR"
Dinamicka analiza
{% hint style="warning" %}
Napomena da bi se debagovale binarne datoteke, SIP mora biti onemogucen (csrutil disable
ili csrutil enable --without debug
) ili kopirati binarne datoteke u privremeni folder i ukloniti potpis sa codesign --remove-signature <putanja-do-binarnog-fajla>
ili dozvoliti debagovanje binarnog fajla (mozete koristiti ovaj skript)
{% endhint %}
{% hint style="warning" %}
Napomena da bi se instrumentirale sistemski binarni fajlovi (kao sto je cloudconfigurationd
) na macOS-u, SIP mora biti onemogucen (samo uklanjanje potpisa nece raditi).
{% endhint %}
Unified Logs
MacOS generise mnogo logova koji mogu biti veoma korisni prilikom pokretanja aplikacije i pokusaja razumevanja sta radi.
Osim toga, postoje neki logovi koji ce sadrzati oznaku <private>
da bi sakrili neke identifikacione informacije korisnika ili racunara. Medjutim, moguce je instalirati sertifikat da bi se ove informacije otkrile. Pratite objasnjenja sa ovde.
Hopper
Leva tabla
U levoj tabli hoppera mogu se videti simboli (Oznake) binarnog fajla, lista procedura i funkcija (Proc) i stringovi (Str). To nisu svi stringovi, vec oni definisani u nekoliko delova Mac-O fajla (kao sto su _cstring ili objc_methname
).
Srednja tabla
U srednjoj tabli mozete videti rasclanjenu kod. I mozete ga videti kao sirovi disasembl, kao graf, kao dekompajlirani i kao binarni klikom na odgovarajucu ikonu:
Desnim klikom na kodni objekat mozete videti reference ka/tom objektu ili cak promeniti njegovo ime (ovo ne radi u dekompajliranom pseudokodu):
Osim toga, u sredini dole mozete pisati python komande.
Desna tabla
U desnoj tabli mozete videti interesantne informacije kao sto su istorija navigacije (tako da znate kako ste dosli do trenutne situacije), graf poziva gde mozete videti sve funkcije koje pozivaju ovu funkciju i sve funkcije koje ova funkcija poziva, i informacije o lokalnim varijablama.
dtrace
Omogucava korisnicima pristup aplikacijama na izuzetno niskom nivou i pruza nacin korisnicima da prate programe i cak promene njihov tok izvrsavanja. Dtrace koristi probe koje su postavljene u celom kernelu i nalaze se na mestima kao sto su pocetak i kraj sistemskih poziva.
DTrace koristi funkciju dtrace_probe_create
za kreiranje sonde za svaki sistemski poziv. Ove sonde mogu biti aktivirane na ulaznoj i izlaznoj tacki svakog sistemskog poziva. Interakcija sa DTrace se odvija preko /dev/dtrace koji je dostupan samo root korisniku.
{% hint style="success" %}
Da biste omogucili Dtrace bez potpune onemogucenosti SIP zastite, mozete izvrsiti na recovery modu: csrutil enable --without dtrace
Takodje mozete koristiti dtrace
ili dtruss
binarne fajlove koje ste kompajlirali.
{% endhint %}
Dostupne sonde dtrace-a mogu se dobiti sa:
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
Ime sonde se sastoji od četiri dela: pružalac, modul, funkcija i ime (fbt:mach_kernel:ptrace:entry
). Ako ne navedete neki deo imena, Dtrace će ga primeniti kao džoker.
Da biste konfigurisali DTrace da aktivira sonde i da odredite koje radnje treba izvršiti kada se aktiviraju, moraćemo koristiti D jezik.
Detaljnije objašnjenje i više primera možete pronaći na https://illumos.org/books/dtrace/chp-intro.html
Primeri
Pokrenite man -k dtrace
da biste videli dostupne DTrace skripte. Primer: sudo dtruss -n binary
- Na liniji
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
Inspekcija, debagovanje i faziiranje macOS aplikacija
Ovaj direktorijum sadrži informacije i tehnike koje se odnose na inspekciju, debagovanje i faziiranje macOS aplikacija.
Inspekcija aplikacija
Osnovne informacije o aplikaciji
Da biste dobili osnovne informacije o macOS aplikaciji, možete koristiti sledeće alate:
codesign
: Koristi se za proveru digitalnog potpisa aplikacije.otool
: Omogućava pregled informacija o objektima u izvršnom fajlu aplikacije.spctl
: Koristi se za proveru potpisa aplikacije i njenog porekla.
Analiza aplikacije
Za detaljniju analizu macOS aplikacija, možete koristiti sledeće alate:
class-dump
: Omogućava izdvajanje deklaracija klasa iz izvršnog fajla aplikacije.Hopper Disassembler
: Napredni disasembler koji vam omogućava da analizirate izvršni fajl aplikacije.IDA Pro
: Profesionalni disasembler i debager koji vam omogućava da analizirate izvršni fajl aplikacije.
Debagovanje aplikacija
Da biste debagovali macOS aplikaciju, možete koristiti sledeće alate:
lldb
: Debager koji je ugrađen u Xcode i omogućava vam da debagovali izvršni fajl aplikacije.gdb
: Univerzalni debager koji može biti korišćen za debagovanje izvršnih fajlova aplikacija.
Faziiranje aplikacija
Faziiranje aplikacija je proces testiranja aplikacija na greške i ranjivosti. Za faziiranje macOS aplikacija, možete koristiti sledeće alate:
AFL
: Fuzzer koji koristi tehnike generisanja mutacija za pronalaženje grešaka u aplikacijama.honggfuzz
: Efikasan fuzzer koji koristi tehnike generisanja mutacija i heuristike za pronalaženje grešaka u aplikacijama.
Dodatni resursi
Ovde možete pronaći dodatne resurse i informacije o inspekciji, debagovanju i faziiranju macOS aplikacija:
- macOS Security and Privacy Guide: Vodič koji pruža informacije o bezbednosti i privatnosti na macOS platformi.
- Awesome Mac Security: Lista resursa i alata za macOS bezbednost.
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
je alatka koja se koristi za inspekciju i debagovanje aplikacija na macOS operativnom sistemu. Ova alatka pruža mogućnost praćenja sistema poziva (system calls) koje aplikacija izvršava tokom svog izvršavanja.
Korišćenje dtruss
alatke omogućava vam da pratite i analizirate interakciju između aplikacije i operativnog sistema. Možete videti koje sistemske pozive aplikacija koristi, kao i argumente koje šalje tim pozivima. Ovo može biti korisno za pronalaženje grešaka, otkrivanje sigurnosnih propusta ili razumevanje kako aplikacija funkcioniše.
Da biste koristili dtruss
, jednostavno pokrenite komandu dtruss
sa putanjom do izvršne datoteke aplikacije koju želite da pratite. Alatka će zatim prikazati sve sistemske pozive koje aplikacija izvršava, zajedno sa njihovim argumentima i povratnim vrednostima.
Na primer, možete pokrenuti sledeću komandu da biste pratili sistemske pozive aplikacije myapp
:
dtruss /putanja/do/myapp
Ovo će prikazati sve sistemske pozive koje myapp
izvršava tokom svog izvršavanja. Možete koristiti ove informacije za analizu i debagovanje aplikacije, kao i za pronalaženje potencijalnih sigurnosnih propusta.
Važno je napomenuti da dtruss
zahteva privilegije root korisnika kako bi pratio sistemske pozive drugih aplikacija. Takođe, budite oprezni prilikom korišćenja ove alatke, jer nepravilna upotreba može dovesti do nestabilnosti sistema ili ometanja normalnog rada aplikacija.
dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000
ktrace
Možete koristiti ovu metodu čak i kada je SIP aktiviran.
ktrace trace -s -S -t c -c ls | grep "ls("
ProcessMonitor
ProcessMonitor je veoma koristan alat za proveru akcija koje proces izvršava (na primer, praćenje novih procesa koje proces kreira).
SpriteTree
SpriteTree je alat koji prikazuje odnose između procesa.
Treba da pratite vaš Mac pomoću komande kao što je sudo eslogger fork exec rename create > cap.json
(terminal koji pokreće ovu komandu zahteva FDA). Zatim možete učitati json datoteku u ovaj alat da biste videli sve odnose:
FileMonitor
FileMonitor omogućava praćenje događaja vezanih za datoteke (kao što su kreiranje, izmene i brisanje), pružajući detaljne informacije o tim događajima.
Crescendo
Crescendo je GUI alat koji korisnicima Windows-a može biti poznat po izgledu i osećaju Microsoft Sysinternal's Procmon. Ovaj alat omogućava pokretanje i zaustavljanje snimanja različitih vrsta događaja, filtriranje tih događaja po kategorijama kao što su datoteka, proces, mreža itd., i pruža funkcionalnost za čuvanje snimljenih događaja u json formatu.
Apple Instruments
Apple Instruments su deo Xcode-ovih razvojnih alata - koriste se za praćenje performansi aplikacija, identifikaciju curenja memorije i praćenje aktivnosti na fajl sistemu.
fs_usage
Omogućava praćenje akcija koje procesi izvršavaju:
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 je koristan alat za pregledanje biblioteka koje koristi binarna datoteka, datoteke koje koristi i mrežne veze koje uspostavlja.
Takođe proverava binarne procese na virustotalu i prikazuje informacije o binarnoj datoteci.
PT_DENY_ATTACH
U ovom blog postu možete pronaći primer kako debugovati pokrenuti daemon koji koristi PT_DENY_ATTACH
da bi sprečio debugovanje čak i ako je SIP onemogućen.
lldb
lldb je de facto alat za debugovanje binarnih datoteka na macOS-u.
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
Možete postaviti Intel stil kada koristite lldb tako što ćete kreirati datoteku nazvanu .lldbinit
u vašem matičnom folderu sa sledećom linijom:
settings set target.x86-disassembly-flavor intel
{% hint style="warning" %}
Unutar lldb-a, izvršite dump procesa pomoću process save-core
{% endhint %}
(lldb) Komanda | Opis |
run (r) | Pokretanje izvršavanja, koje će se nastaviti dok se ne naiđe na prekidnu tačku ili dok se proces ne završi. |
continue (c) | Nastavak izvršavanja procesa u debug modu. |
nexti (n / ni) | Izvršava sledeću instrukciju. Ova komanda će preskočiti pozive funkcija. |
stepi (s / si) | Izvršava sledeću instrukciju. Za razliku od komande nexti, ova komanda će ući u pozive funkcija. |
finish (f) | Izvršava preostale instrukcije u trenutnoj funkciji ("okviru") i zaustavlja se. |
control + c | Pauzira izvršavanje. Ako je proces pokrenut (r) ili nastavljen (c), ovo će uzrokovati zaustavljanje procesa ... gde god se trenutno izvršava. |
breakpoint (b) | b main #Bilo koja funkcija koja se zove main b <ime_binarnog_fajla>`main #Main funkcija binarnog fajla b set -n main --shlib <ime_biblioteke> #Main funkcija određenog binarnog fajla b -[NSDictionary objectForKey:] b -a 0x0000000100004bd9 br l #Lista prekidnih tačaka br e/dis <broj> #Omogući/Onemogući prekidnu tačku breakpoint delete <broj> |
help | help breakpoint #Dobijanje pomoći za komandu breakpoint help memory write #Dobijanje pomoći za pisanje u memoriju |
reg | reg read reg read $rax reg read $rax --format <format> reg write $rip 0x100035cc0 |
x/s <adresa_registra/memorije> | Prikazuje memoriju kao string sa nulama na kraju. |
x/i <adresa_registra/memorije> | Prikazuje memoriju kao asemblersku instrukciju. |
x/b <adresa_registra/memorije> | Prikazuje memoriju kao bajt. |
print object (po) | Ovo će ispisati objekat na koji se parametar odnosi po $raw
Napomena: Većina Apple-ovih Objective-C API-ja ili metoda vraća objekte i treba ih prikazati putem "print object" (po) komande. Ako po ne daje smislene rezultate, koristite |
memory | memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #Upisuje AAAA na tu adresu memory write -f s $rip+0x11f+7 "AAAA" #Upisuje AAAA na tu adresu |
disassembly | dis #Disasembler trenutne funkcije dis -n <ime_funkcije> #Disasembler funkcije dis -n <ime_funkcije> -b <ime_binarnog_fajla> #Disasembler funkcije |
parray | parray 3 (char **)$x1 #Proverava niz od 3 komponente u registru x1 |
{% hint style="info" %}
Prilikom pozivanja funkcije objc_sendMsg
, registar rsi sadrži ime metode kao string završen sa nulom ("C"). Da biste ispisali ime putem lldb-a, uradite sledeće:
(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 %}
Anti-Dinamička Analiza
Detekcija virtuelne mašine
- Komanda
sysctl hw.model
vraća "Mac" kada je host MacOS, ali nešto drugo kada je virtuelna mašina. - Igrajući se sa vrednostima
hw.logicalcpu
ihw.physicalcpu
, neki malveri pokušavaju da otkriju da li je u pitanju virtuelna mašina. - Neki malveri takođe mogu detektovati da li je mašina bazirana na VMware-u na osnovu MAC adrese (00:50:56).
- Takođe je moguće utvrditi da li se proces debuguje pomoću jednostavnog koda kao što je:
if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proces se debuguje }
- Može se takođe pozvati sistemski poziv
ptrace
sa zastavicomPT_DENY_ATTACH
. Ovo onemogućava debageru da se poveže i prati. - Možete proveriti da li se funkcija
sysctl
iliptrace
uvozi (ali malver bi mogao da je uveze dinamički) - Kao što je navedeno u ovom članku, “Defeating Anti-Debug Techniques: macOS ptrace variants” :
“Poruka Process # exited with status = 45 (0x0000002d) obično je jasan znak da je cilj debugovanja koristio PT_DENY_ATTACH”
Fuzziranje
ReportCrash
ReportCrash analizira procese koji se ruše i čuva izveštaj o rušenju na disku. Izveštaj o rušenju sadrži informacije koje mogu pomoći programeru da dijagnostikuje uzrok rušenja.
Za aplikacije i druge procese koji se izvršavaju u kontekstu pokretača specifičnog za korisnika, ReportCrash se pokreće kao LaunchAgent i čuva izveštaje o rušenju u direktorijumu ~/Library/Logs/DiagnosticReports/
korisnika.
Za demone, druge procese koji se izvršavaju u kontekstu sistema pokretača i druge privilegovane procese, ReportCrash se pokreće kao LaunchDaemon i čuva izveštaje o rušenju u direktorijumu /Library/Logs/DiagnosticReports
sistema.
Ako vas brine slanje izveštaja o rušenju Apple-u, možete ih onemogućiti. U suprotnom, izveštaji o rušenju mogu biti korisni za utvrđivanje načina na koji je server pao.
#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
Spavanje
Prilikom izvođenja fuziranja na MacOS-u važno je sprečiti Mac da zaspi:
- systemsetup -setsleep Never
- pmset, System Preferences
- KeepingYouAwake
Prekid SSH veze
Ako izvodite fuziranje putem SSH veze, važno je osigurati da se sesija ne prekida. Promenite sshd_config datoteku na sledeći način:
- TCPKeepAlive Yes
- ClientAliveInterval 0
- ClientAliveCountMax 0
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Interni rukovaoci
Pogledajte sledeću stranicu da biste saznali kako možete pronaći koja aplikacija je odgovorna za obradu određene šeme ili protokola:
{% content-ref url="../macos-file-extension-apps.md" %} macos-file-extension-apps.md {% endcontent-ref %}
Enumeracija mrežnih procesa
Ovo je interesantno za pronalaženje procesa koji upravljaju mrežnim podacima:
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
Ili koristite netstat
ili 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 %}
Fuzzeri
AFL++
Radi za CLI alate
Litefuzz
Radi sa macOS GUI alatima. Napomena: neki macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena fajlova, odgovarajuća ekstenzija, potreba za čitanjem fajlova iz sandbox-a (~/Library/Containers/com.apple.Safari/Data
)...
Primeri:
# 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 %}
Više informacija o Fuzzing-u na MacOS-u
- 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
Reference
- 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
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.