macOS Apps - Inspecting, debugging and Fuzzing
WhiteIntel je pretraživač pokretan dark-web-om koji nudi besplatne funkcionalnosti za proveru da li je kompanija ili njeni korisnici kompromitovani od strane malvera za krađu podataka.
Njihov primarni cilj WhiteIntel-a je borba protiv preuzimanja naloga i napada ransomware-a koji proizilaze iz malvera za krađu informacija.
Možete posetiti njihovu veb stranicu i isprobati njihovu mašinu za besplatno na:
Statistička Analiza
otool
objdump
jtool2
Ovaj alat može se koristiti kao zamena za codesign, otool i objdump, i pruža nekoliko dodatnih funkcija. Preuzmite ga ovde ili ga instalirajte pomoću brew
.
Codesign / ldid
Codesign
se može pronaći u macOS-u, dok se ldid
može pronaći u iOS-u
SuspiciousPackage
SuspiciousPackage je alat koristan za inspekciju .pkg fajlova (instalatera) i videti šta se nalazi unutra pre instalacije.
Ovi instalateri imaju preinstall
i postinstall
bash skripte koje zlonamerni autori obično zloupotrebljavaju da bi uporni malver.
hdiutil
Ovaj alat omogućava da se montiraju Apple disk slike (.dmg) fajlovi radi inspekcije pre pokretanja bilo čega:
Biće montiran u /Volumes
Objective-C
Metapodaci
Imajte na umu da programi napisani u Objective-C zadržavaju svoje deklaracije klasa kada se kompajliraju u Mach-O binarne datoteke. Takve deklaracije klasa uključuju ime i tip:
Klasu
Metode klase
Instance varijable klase
Ove informacije možete dobiti koristeći class-dump:
Pozivanje funkcija
Kada se funkcija pozove u binarnom fajlu koji koristi Objective-C, kompajlirani kod umesto pozivanja te funkcije, pozvaće objc_msgSend
. Što će pozvati 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 na koji se metod poziva. Ako je metod klasni metod, ovo će biti instanca objekta klase (u celini), dok će za instancu metoda, self pokazivati na instanciranu instancu klase kao objekat.
Drugi parametar, (op), je "selektor metoda koji obrađuje poruku". Ponovo, jednostavnije rečeno, ovo je samo ime metoda.
Preostali parametri su bilo vrednosti koje su potrebne metodu (op).
Pogledajte kako lako dobiti ove informacije sa lldb
u ARM64 na ovoj stranici:
x64:
Argument | Registar | (za) objc_msgSend |
1. argument | rdi | self: objekat na koji se metod poziva |
2. argument | rsi | op: ime metoda |
3. argument | rdx | 1. argument metodu |
4. argument | rcx | 2. argument metodu |
5. argument | r8 | 3. argument metodu |
6. argument | r9 | 4. argument metodu |
7. i više argumenata | rsp+ (na steku) | 5. i više argumenata metodu |
Swift
Sa Swift binarnim fajlovima, s obzirom da postoji Objective-C kompatibilnost, 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
:
Možete pronaći dodatne informacije o informacijama koje se čuvaju u ovim sekcijama u ovom blog postu.
Štaviše, Swift binarni fajlovi mogu imati simbole (na primer, biblioteke moraju čuvati simbole kako bi se njenim funkcijama moglo pristupiti). Simboli obično sadrže informacije o imenu funkcije i atributima na neuredan način, pa su veoma korisni, i postoje "demangleri" koji mogu dobiti originalno ime:
Pakovani binarnih fajlova
Provera visoke entropije
Provera stringova (da li postoji skoro nijedan razumljiv string, pakovan)
Paker UPX za MacOS generiše sekciju nazvanu "__XHDR"
Dinamička analiza
Imajte na umu da bi za debagovanje binarnih fajlova SIP trebao biti onemogućen (csrutil disable
ili csrutil enable --without debug
) ili kopirati binarne fajlove u privremenu fasciklu i ukloniti potpis sa codesign --remove-signature <putanja-do-binarnog-fajla>
ili dozvoliti debagovanje binarnog fajla (možete koristiti ovaj skript)
Imajte na umu da bi za instrumentiranje sistemskih binarnih fajlova (kao što je cloudconfigurationd
) na macOS-u, SIP mora biti onemogućen (samo uklanjanje potpisa neće raditi).
Unified Logs
MacOS generiše mnogo logova koji mogu biti veoma korisni prilikom pokretanja aplikacije pokušavajući da razumete šta radi.
Osim toga, postoje neki logovi koji će sadržati oznaku <private>
da bi sakrili neke korisničke ili računarske identifikacione informacije. Međutim, moguće je instalirati sertifikat da biste otkrili ove informacije. Pratite objašnjenja sa ovde.
Hopper
Leva tabla
Na levoj tabli Hoppera mogu se videti simboli (Oznake) binarnog fajla, lista procedura i funkcija (Proc) i stringovi (Str). To nisu svi stringovi, već oni definisani u nekoliko delova Mac-O fajla (kao što su cstring ili objc_methname
).
Srednja tabla
Na srednjoj tabli možete videti dizasemblovani kod. I možete ga videti kao sirov disasemblovani kod, kao grafikon, kao dekompilirani i kao binarni klikom na odgovarajuću ikonu:
Desnim klikom na objekat koda možete videti reference ka/od tog objekta ili čak promeniti njegovo ime (ovo ne funkcioniše u dekompiliranom pseudokodu):
Osim toga, u sredini dole možete pisati Python komande.
Desna tabla
Na desnoj tabli možete videti zanimljive informacije kao što su istorija navigacije (da znate kako ste stigli do trenutne situacije), pozivni grafikon gde možete videti sve funkcije koje pozivaju ovu funkciju i sve funkcije koje ova funkcija poziva, i informacije o lokalnim varijablama.
dtrace
Omogućava korisnicima pristup aplikacijama na izuzetno niskom nivou i pruža način korisnicima da prate programe i čak promene njihov tok izvršavanja. Dtrace koristi sonde koje su postavljene širom jezgra i nalaze se na lokacijama poput početka i kraja sistemskih poziva.
DTrace koristi funkciju dtrace_probe_create
za kreiranje sonde za svaki sistemski poziv. Ove sonde mogu biti aktivirane na ulaznoj i izlaznoj tački svakog sistemskog poziva. Interakcija sa DTrace-om se odvija preko /dev/dtrace koji je dostupan samo korisniku sa administratorskim privilegijama.
Da biste omogućili Dtrace bez potpune onemogućenosti SIP zaštite, možete izvršiti u režimu oporavka: csrutil enable --without dtrace
Takođe možete dtrace
ili dtruss
binarne fajlove koje ste kompajlirali.
Dostupne sonde dtrace-a mogu se dobiti sa:
Ime sonde se sastoji od četiri dela: provajdera, modula, funkcije i imena (fbt:mach_kernel:ptrace:entry
). Ako ne navedete neki deo imena, Dtrace će primeniti taj deo kao zamenski znak.
Da biste konfigurisali DTrace da aktivira sonde i da navedete koje radnje 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
skripta
dtruss
ktrace
Možete koristiti ovu čak i kada je SIP aktiviran
ProcessMonitor
ProcessMonitor je veoma koristan alat za proveru akcija povezanih sa procesom koje proces obavlja (na primer, praćenje novih procesa koje proces kreira).
SpriteTree
SpriteTree je alat koji prikazuje odnose između procesa.
Potrebno je pratiti vaš Mac pomoću komande poput sudo eslogger fork exec rename create > cap.json
(terminal koji pokreće ovo 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 sa datotekama (kao što su kreiranje, izmene i brisanje), pružajući detaljne informacije o tim događajima.
Crescendo
Crescendo je GUI alat sa izgledom i osećajem koji korisnici Windowsa mogu prepoznati iz Microsoft Sysinternal-ovog Procmon. Ovaj alat omogućava pokretanje i zaustavljanje snimanja različitih vrsta događaja, omogućava filtriranje ovih 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 Developer alata - koriste se za praćenje performansi aplikacija, identifikaciju curenja memorije i praćenje aktivnosti sistema datoteka.
fs_usage
Omogućava praćenje akcija koje obavljaju procesi:
TaskExplorer
Taskexplorer je koristan alat za pregled biblioteka koje koristi binarni fajl, datoteke koje koristi i mrežne veze. Takođe proverava binarne procese protiv virustotala i prikazuje informacije o binarnom fajlu.
PT_DENY_ATTACH
U ovom blog postu možete pronaći primer kako debugovati pokrenuti daemon koji koristi PT_DENY_ATTACH
kako bi sprečio debugovanje čak i ako je SIP onemogućen.
lldb
lldb je glavni alat za debugovanje binarnih fajlova na macOS-u.
Možete postaviti Intel ukus prilikom korišćenja lldb-a kreiranjem datoteke nazvane .lldbinit
u vašem matičnom folderu sa sledećom linijom:
Unutar lldb-a, izbaci proces sa process save-core
(lldb) Komanda | Opis |
run (r) | Pokretanje izvršenja, koje će se nastaviti dok se ne naiđe na prekid ili dok se proces ne završi. |
continue (c) | Nastavak izvršenja debugiranog procesa. |
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 nexti komande, ova komanda će ući u pozive funkcija. |
finish (f) | Izvršava preostale instrukcije u trenutnoj funkciji ("frame") i zaustavlja se. |
control + c | Pauzira izvršenje. 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 nazvana main b <ime_binarne_datoteke>`main #Glavna funkcija binarne datoteke b set -n main --shlib <ime_biblioteke> #Glavna funkcija naznačene binarne datoteke b -[NSDictionary objectForKey:] b -a 0x0000000100004bd9 br l #Lista tačaka prekida br e/dis <br_tačka> #Omogući/Onemogući tačku prekida breakpoint delete <br_tačka> |
help | help breakpoint #Dobijanje pomoći za komandu tačke prekida help memory write #Dobijanje pomoći za pisanje u memoriju |
reg | |
x/s <reg/adresa_memorije> | Prikazuje memoriju kao string završen nulom. |
x/i <reg/adresa_memorije> | Prikazuje memoriju kao asemblersku instrukciju. |
x/b <reg/adresa_memorije> | Prikazuje memoriju kao bajt. |
print object (po) | Ovo će ispisati objekat na koji se parametar odnosi po $raw
Imajte na umu da većina Apple-ovih Objective-C API-ja ili metoda vraća objekte, i stoga bi trebalo da se prikažu putem "print object" (po) komande. Ako po ne proizvodi 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 adresu |
disassembly | dis #Disasembli trenutne funkcije dis -n <ime_funkcije> #Disasembli funkcije dis -n <ime_funkcije> -b <ime_datoteke> #Disasembli funkcije dis -c 6 #Disasembli 6 linija dis -c 0x100003764 -e 0x100003768 # Od jedne adrese do druge dis -p -c 4 # Početak disasembliranja na trenutnoj adresi |
parray | parray 3 (char **)$x1 # Provera niza od 3 komponente u x1 registru |
Prilikom pozivanja funkcije objc_sendMsg
, registar rsi sadrži ime metode kao string završen 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:"
Anti-Dinamička Analiza
Detekcija virtuelne mašine
Komanda
sysctl hw.model
vraća "Mac" kada je domaćin MacOS, ali nešto drugo kada je virtuelna mašina.Igranje sa vrednostima
hw.logicalcpu
ihw.physicalcpu
neki malveri pokušavaju da detektuju da li je u pitanju virtuelna mašina.Neki malveri takođe mogu detektovati da li je mašina zasnovana na VMware-u na osnovu MAC adrese (00:50:56).
Moguće je otkriti da li se proces debuguje jednostavnim kodom poput:
if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proces se debuguje }
Takođe se može pozvati sistemski poziv
ptrace
sa zastavicomPT_DENY_ATTACH
. Ovo sprečava debager da se poveže i prati.Možete proveriti da li se funkcija
sysctl
iliptrace
uvozi (ali malver bi mogao da je uvozi dinamički)Kao što je navedeno u ovom tekstu, “Pobeda nad tehnikama protiv-debugiranja: macOS ptrace varijante” : “Poruka Proces # je završen sa statusom = 45 (0x0000002d) obično je znak da je cilj debugiranja koristi PT_DENY_ATTACH”
Fuzzing
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 pokretanja po korisniku, ReportCrash se izvršava kao LaunchAgent i čuva izveštaje o rušenju u ~/Library/Logs/DiagnosticReports/
korisnika.
Za demone, druge procese koji se izvršavaju u kontekstu pokretanja po sistemu i druge privilegovane procese, ReportCrash se izvršava kao LaunchDaemon i čuva izveštaje o rušenju u /Library/Logs/DiagnosticReports
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 određivanje načina na koji je server pao.
Spavanje
Prilikom izvođenja faziinga na MacOS-u važno je sprečiti Mac da spava:
systemsetup -setsleep Nikada
pmset, System Preferences
SSH prekid veze
Ako izvodite faziing putem SSH veze, važno je osigurati da sesija ne istekne. Promenite sshd_config datoteku sa:
TCPKeepAlive Da
ClientAliveInterval 0
ClientAliveCountMax 0
Interni rukovaoci
Proverite sledeću stranicu da biste saznali kako možete pronaći koja je aplikacija odgovorna za obradu određene šeme ili protokola:
pagemacOS File Extension & URL scheme app handlersEnumeracija mrežnih procesa
Ovo je interesantno za pronalaženje procesa koji upravljaju mrežnim podacima:
Ili koristite netstat
ili lsof
Libgmalloc
Fuzzeri
Radi za CLI alate
On "samo radi" sa macOS GUI alatima. Imajte na umu da neki macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena datoteka, ispravna ekstenzija, potreba da se čitaju datoteke iz peska (~/Library/Containers/com.apple.Safari/Data
)...
Primeri:
Više informacija o Fuzzing MacOS-u
Reference
WhiteIntel je pretraživač pokretan dark web-om koji nudi besplatne funkcionalnosti za proveru da li je kompanija ili njeni korisnici ugroženi od malvera koji krade informacije.
Njihov primarni cilj WhiteIntela je borba protiv preuzimanja naloga i napada ransomvera koji proizilaze iz malvera koji krade informacije.
Možete posetiti njihovu veb lokaciju i isprobati njihovu mašinu za besplatno na:
Last updated