macOS Datoteke, Fascikle, Binarni & Memorija
Reading time: 12 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Raspored hijerarhije datoteka
- /Applications: Instalirane aplikacije bi trebale biti ovde. Svi korisnici će moći da im pristupe.
- /bin: Binarne datoteke komandne linije
- /cores: Ako postoji, koristi se za čuvanje core dump-ova
- /dev: Sve se tretira kao datoteka, tako da ovde možete videti hardverske uređaje.
- /etc: Konfiguracione datoteke
- /Library: Ovdje se može naći mnogo poddirektorijuma i datoteka povezanih sa preferencama, kešom i logovima. Fascikla Library postoji u root-u i u direktorijumu svakog korisnika.
- /private: Nedokumentovano, ali mnoge od pomenutih fascikala su simboličke veze ka privatnom direktorijumu.
- /sbin: Osnovne sistemske binarne datoteke (vezane za administraciju)
- /System: Datoteka za pokretanje OS X-a. Ovde bi trebali pronaći uglavnom samo Apple specifične datoteke (ne treće strane).
- /tmp: Datoteke se brišu nakon 3 dana (to je softverska veza ka /private/tmp)
- /Users: Kućni direktorijum za korisnike.
- /usr: Konfiguracione i sistemske binarne datoteke
- /var: Log datoteke
- /Volumes: Montirani diskovi će se ovde pojaviti.
- /.vol: Pokretanjem
stat a.txt
dobijate nešto poput16777223 7545753 -rw-r--r-- 1 username wheel ...
gde je prvi broj ID broj volumena gde datoteka postoji, a drugi je inode broj. Možete pristupiti sadržaju ove datoteke kroz /.vol/ sa tom informacijom pokretanjemcat /.vol/16777223/7545753
Fascikle aplikacija
- Sistemske aplikacije se nalaze pod
/System/Applications
- Instalirane aplikacije se obično instaliraju u
/Applications
ili u~/Applications
- Podaci aplikacija mogu se naći u
/Library/Application Support
za aplikacije koje se pokreću kao root i~/Library/Application Support
za aplikacije koje se pokreću kao korisnik. - Daemons trećih strana koji moraju da se pokreću kao root obično se nalaze u
/Library/PrivilegedHelperTools/
- Sandboxed aplikacije su mapirane u fasciklu
~/Library/Containers
. Svaka aplikacija ima fasciklu nazvanu prema ID-u paketa aplikacije (com.apple.Safari
). - Kernel se nalazi u
/System/Library/Kernels/kernel
- Apple-ove kernel ekstenzije se nalaze u
/System/Library/Extensions
- Kernel ekstenzije trećih strana se čuvaju u
/Library/Extensions
Datoteke sa osetljivim informacijama
MacOS čuva informacije kao što su lozinke na nekoliko mesta:
macOS Sensitive Locations & Interesting Daemons
Ranjivi pkg instalateri
OS X Specifične Ekstenzije
.dmg
: Apple Disk Image datoteke su vrlo česte za instalatere..kext
: Mora da prati specifičnu strukturu i to je OS X verzija drajvera. (to je paket).plist
: Takođe poznat kao property list, čuva informacije u XML ili binarnom formatu.- Može biti XML ili binarni. Binarne se mogu čitati sa:
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
: Apple aplikacije koje prate strukturu direktorijuma (to je paket)..dylib
: Dinamičke biblioteke (kao Windows DLL datoteke).pkg
: Iste su kao xar (eXtensible Archive format). Komanda za instalaciju može se koristiti za instalaciju sadržaja ovih datoteka..DS_Store
: Ova datoteka se nalazi u svakoj fascikli, čuva atribute i prilagođavanja fascikle..Spotlight-V100
: Ova fascikla se pojavljuje u root direktorijumu svakog volumena na sistemu..metadata_never_index
: Ako se ova datoteka nalazi u root-u volumena, Spotlight neće indeksirati taj volumen..noindex
: Datoteke i fascikle sa ovom ekstenzijom neće biti indeksirane od strane Spotlight-a..sdef
: Datoteke unutar paketa koje specificiraju kako je moguće interagovati sa aplikacijom iz AppleScript-a.
macOS Paketi
Paket je direktorijum koji izgleda kao objekat u Finder-u (primer paketa su *.app
datoteke).
Dyld Shared Library Cache (SLC)
Na macOS-u (i iOS-u) sve sistemske deljene biblioteke, kao što su framework-i i dylibs, su kombinovane u jednu datoteku, nazvanu dyld shared cache. Ovo poboljšava performanse, jer se kod može učitati brže.
Ovo se nalazi u macOS-u u /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
i u starijim verzijama možda ćete moći da pronađete deljenu keš memoriju u /System/Library/dyld/
.
U iOS-u ih možete pronaći u /System/Library/Caches/com.apple.dyld/
.
Slično dyld shared cache-u, kernel i kernel ekstenzije su takođe kompajlirani u kernel keš, koji se učitava prilikom pokretanja.
Da biste izvukli biblioteke iz jedne datoteke dylib shared cache, bilo je moguće koristiti binarni dyld_shared_cache_util koji možda više ne radi, ali možete koristiti i dyldextractor:
# 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
tip
Imajte na umu da čak i ako dyld_shared_cache_util
alat ne radi, možete proslediti deljeni dyld binarni fajl Hopper-u i Hopper će moći da identifikuje sve biblioteke i omogućiti vam da izaberete koju želite da istražujete:
.png)
Neki ekstraktori neće raditi jer su dylibs prelinkovani sa hardkodiranim adresama, pa bi mogli skakati na nepoznate adrese.
tip
Takođe je moguće preuzeti Shared Library Cache drugih *OS uređaja u macos-u koristeći emulator u Xcode-u. Biće preuzeti unutar: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, kao: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
Mapping SLC
dyld
koristi syscall shared_region_check_np
da zna da li je SLC mapiran (što vraća adresu) i shared_region_map_and_slide_np
da mapira SLC.
Imajte na umu da čak i ako je SLC pomeren pri prvom korišćenju, svi procesi koriste istu kopiju, što eliminiše ASLR zaštitu ako je napadač mogao da pokrene procese u sistemu. Ovo je zapravo iskorišćeno u prošlosti i ispravljeno sa shared region pager-om.
Branch pools su mali Mach-O dylibs koji kreiraju male prostore između mapiranja slika, što onemogućava interpoziciju funkcija.
Override SLCs
Korišćenjem env varijabli:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Ovo će omogućiti učitavanje novog shared library cache-a.DYLD_SHARED_CACHE_DIR=avoid
i ručno zameniti biblioteke sa symlinkovima na shared cache sa pravim (biće potrebno da ih ekstraktujete).
Special File Permissions
Folder permissions
U folderu, read omogućava listanje, write omogućava brisanje i pisanje fajlova u njemu, a execute omogućava prolazak kroz direktorijum. Dakle, na primer, korisnik sa read dozvolom nad fajlom unutar direktorijuma gde nema execute dozvolu neće moći da pročita fajl.
Flag modifiers
Postoje neki flagovi koji se mogu postaviti na fajlovima koji će učiniti da se fajl ponaša drugačije. Možete proveriti flagove fajlova unutar direktorijuma sa ls -lO /path/directory
uchg
: Poznat kao uchange flag će sprečiti bilo koju akciju promene ili brisanja fajla. Da biste ga postavili, uradite:chflags uchg file.txt
- Root korisnik može ukloniti flag i izmeniti fajl.
restricted
: Ovaj flag čini da fajl bude zaštićen SIP-om (ne možete dodati ovaj flag na fajl).Sticky bit
: Ako direktorijum ima sticky bit, samo vlasnik direktorijuma ili root može preimenovati ili obrisati fajlove. Obično se postavlja na /tmp direktorijum da bi se sprečilo običnim korisnicima da brišu ili premeste fajlove drugih korisnika.
Svi flagovi se mogu naći u fajlu sys/stat.h
(pronađite ga koristeći mdfind stat.h | grep stat.h
) i su:
UF_SETTABLE
0x0000ffff: Mask of owner changeable flags.UF_NODUMP
0x00000001: Do not dump file.UF_IMMUTABLE
0x00000002: File may not be changed.UF_APPEND
0x00000004: Writes to file may only append.UF_OPAQUE
0x00000008: Directory is opaque wrt. union.UF_COMPRESSED
0x00000020: File is compressed (some file-systems).UF_TRACKED
0x00000040: No notifications for deletes/renames for files with this set.UF_DATAVAULT
0x00000080: Entitlement required for reading and writing.UF_HIDDEN
0x00008000: Hint that this item should not be displayed in a GUI.SF_SUPPORTED
0x009f0000: Mask of superuser supported flags.SF_SETTABLE
0x3fff0000: Mask of superuser changeable flags.SF_SYNTHETIC
0xc0000000: Mask of system read-only synthetic flags.SF_ARCHIVED
0x00010000: File is archived.SF_IMMUTABLE
0x00020000: File may not be changed.SF_APPEND
0x00040000: Writes to file may only append.SF_RESTRICTED
0x00080000: Entitlement required for writing.SF_NOUNLINK
0x00100000: Item may not be removed, renamed or mounted on.SF_FIRMLINK
0x00800000: File is a firmlink.SF_DATALESS
0x40000000: File is dataless object.
File ACLs
File ACLs sadrže ACE (Access Control Entries) gde se mogu dodeliti granularne dozvole različitim korisnicima.
Moguće je dodeliti direktorijumu ove dozvole: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
A za fajl: read
, write
, append
, execute
.
Kada fajl sadrži ACLs, naći ćete "+" kada listate dozvole kao u:
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
Možete pročitati ACL-ove datoteke sa:
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
Možete pronaći sve datoteke sa ACL-ovima sa (ovo je veoma sporo):
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
Proširene Atributi
Prošireni atributi imaju ime i bilo koju željenu vrednost, a mogu se videti koristeći ls -@
i manipulisati koristeći komandu xattr
. Neki uobičajeni prošireni atributi su:
com.apple.resourceFork
: Kompatibilnost sa resursnim fork-ovima. Takođe vidljivo kaofilename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Mehanizam karantina Gatekeeper-a (III/6)metadata:*
: MacOS: razni metapodaci, kao što su_backup_excludeItem
, ilikMD*
com.apple.lastuseddate
(#PS): Datum poslednje upotrebe datotekecom.apple.FinderInfo
: MacOS: Informacije o Finder-u (npr., boje oznaka)com.apple.TextEncoding
: Određuje kodiranje teksta ASCII datotekacom.apple.logd.metadata
: Koristi se od strane logd na datotekama u/var/db/diagnostics
com.apple.genstore.*
: Generacijsko skladištenje (/.DocumentRevisions-V100
u korenu datotečnog sistema)com.apple.rootless
: MacOS: Koristi se od strane System Integrity Protection za označavanje datoteke (III/10)com.apple.uuidb.boot-uuid
: logd oznake boot epoha sa jedinstvenim UUIDcom.apple.decmpfs
: MacOS: Transparentna kompresija datoteka (II/7)com.apple.cprotect
: *OS: Podaci o enkripciji po datoteci (III/11)com.apple.installd.*
: *OS: Metapodaci koje koristi installd, npr.,installType
,uniqueInstallID
Resursni Fork-ovi | macOS ADS
Ovo je način da se dobiju Alternativni Podaci Strimovi u MacOS mašinama. Možete sačuvati sadržaj unutar proširenog atributa pod nazivom com.apple.ResourceFork unutar datoteke tako što ćete ga sačuvati u 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
Možete pronaći sve datoteke koje sadrže ovu proširenu atribut sa:
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
Proširena atribut com.apple.decmpfs
označava da je datoteka pohranjena enkriptovana, ls -l
će prijaviti veličinu 0 i kompresovani podaci su unutar ovog atributa. Kada god se datoteka pristupi, biće dekriptovana u memoriji.
Ovaj atribut se može videti sa ls -lO
označen kao kompresovan jer su kompresovane datoteke takođe označene oznakom UF_COMPRESSED
. Ako se kompresovana datoteka ukloni sa ovom oznakom chflags nocompressed </path/to/file>
, sistem neće znati da je datoteka bila kompresovana i stoga neće moći da dekompresuje i pristupi podacima (misliće da je zapravo prazna).
Alat afscexpand može se koristiti za prisilno dekompresovanje datoteke.
Univerzalne binarne datoteke & Mach-o Format
Mac OS binarne datoteke obično se kompajliraju kao univerzalne binarne datoteke. Univerzalna binarna datoteka može podržavati više arhitektura u istoj datoteci.
macOS Universal binaries & Mach-O Format
macOS Procesna Memorija
macOS iskopavanje memorije
Kategorija Rizika Datoteka Mac OS
Direktorij /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
je mesto gde se čuva informacija o riziku povezanom sa različitim ekstenzijama datoteka. Ovaj direktorij kategorizuje datoteke u različite nivoe rizika, utičući na to kako Safari obrađuje ove datoteke prilikom preuzimanja. Kategorije su sledeće:
- LSRiskCategorySafe: Datoteke u ovoj kategoriji se smatraju potpuno sigurnim. Safari će automatski otvoriti ove datoteke nakon što budu preuzete.
- LSRiskCategoryNeutral: Ove datoteke dolaze bez upozorenja i ne otvaraju se automatski od strane Safarija.
- LSRiskCategoryUnsafeExecutable: Datoteke pod ovom kategorijom pokreću upozorenje koje ukazuje da je datoteka aplikacija. Ovo služi kao mera bezbednosti da upozori korisnika.
- LSRiskCategoryMayContainUnsafeExecutable: Ova kategorija je za datoteke, kao što su arhive, koje mogu sadržati izvršnu datoteku. Safari će pokrenuti upozorenje osim ako ne može da potvrdi da su svi sadržaji sigurni ili neutralni.
Log datoteke
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Sadrži informacije o preuzetim datotekama, kao što je URL sa kojeg su preuzete./var/log/system.log
: Glavni log OSX sistema. com.apple.syslogd.plist je odgovoran za izvršavanje syslogging-a (možete proveriti da li je on onemogućen tražeći "com.apple.syslogd" ulaunchctl list
)./private/var/log/asl/*.asl
: Ovo su Apple sistemski logovi koji mogu sadržati zanimljive informacije.$HOME/Library/Preferences/com.apple.recentitems.plist
: Čuva nedavno pristupane datoteke i aplikacije kroz "Finder".$HOME/Library/Preferences/com.apple.loginitems.plsit
: Čuva stavke koje se pokreću prilikom pokretanja sistema.$HOME/Library/Logs/DiskUtility.log
: Log datoteka za DiskUtility aplikaciju (informacije o diskovima, uključujući USB)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Podaci o bežičnim pristupnim tačkama./private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Lista deaktiviranih demona.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.