macOS Lêers, Gidse, Binaries & Geheue
Reading time: 13 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Lêer hiërargie uitleg
- /Applications: Die geïnstalleerde toepassings behoort hier te wees. Alle gebruikers sal toegang tot hulle hê.
- /bin: Opdraglyn binaries
- /cores: As dit bestaan, word dit gebruik om kernaflaaie te stoor
- /dev: Alles word as 'n lêer behandel, so jy mag hardeware toestelle hier gestoor sien.
- /etc: Konfigurasielêers
- /Library: 'n Baie subgidse en lêers wat verband hou met voorkeure, caches en logs kan hier gevind word. 'n Biblioteek-gids bestaan in die wortel en op elke gebruiker se gids.
- /private: Ondokumenteer, maar baie van die genoemde gidse is simboliese skakels na die private gids.
- /sbin: Essensiële stelselbinaries (verwant aan administrasie)
- /System: Lêer om OS X te laat loop. Jy behoort meestal net Apple-spesifieke lêers hier te vind (nie derdeparty nie).
- /tmp: Lêers word na 3 dae verwyder (dit is 'n sagte skakel na /private/tmp)
- /Users: Tuisgids vir gebruikers.
- /usr: Konfig en stelselbinaries
- /var: Log lêers
- /Volumes: Die gemonteerde skywe sal hier verskyn.
- /.vol: Deur
stat a.txt
te loop, kry jy iets soos16777223 7545753 -rw-r--r-- 1 username wheel ...
waar die eerste nommer die id-nommer van die volume is waar die lêer bestaan en die tweede die inode-nommer is. Jy kan die inhoud van hierdie lêer deur /.vol/ met daardie inligting verkry deurcat /.vol/16777223/7545753
te loop.
Toepassings Gidse
- Stelsel toepassings is geleë onder
/System/Applications
- Geïnstalleerde toepassings word gewoonlik in
/Applications
of in~/Applications
geïnstalleer - Toepassing data kan gevind word in
/Library/Application Support
vir die toepassings wat as root loop en~/Library/Application Support
vir toepassings wat as die gebruiker loop. - Derdeparty toepassings daemons wat as root moet loop is gewoonlik geleë in
/Library/PrivilegedHelperTools/
- Sandboxed toepassings is in die
~/Library/Containers
gids gemap. Elke toepassing het 'n gids wat volgens die toepassing se bundel ID genoem word (com.apple.Safari
). - Die kernel is geleë in
/System/Library/Kernels/kernel
- Apple se kernel uitbreidings is geleë in
/System/Library/Extensions
- Derdeparty kernel uitbreidings word in
/Library/Extensions
gestoor
Lêers met Sensitiewe Inligting
MacOS stoor inligting soos wagwoorde op verskeie plekke:
macOS Sensitive Locations & Interesting Daemons
Kwetsbare pkg installers
OS X Spesifieke Uitbreidings
.dmg
: Apple Disk Image lêers is baie algemeen vir installers..kext
: Dit moet 'n spesifieke struktuur volg en dit is die OS X weergawe van 'n stuurprogram. (dit is 'n bundel).plist
: Ook bekend as eiendomlys wat inligting in XML of binêre formaat stoor.- Kan XML of binêr wees. Binêre kan gelees word met:
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 toepassings wat die gidsstruktuur volg (dit is 'n bundel)..dylib
: Dinamiese biblioteke (soos Windows DLL lêers).pkg
: Is dieselfde as xar (eXtensible Archive formaat). Die installer opdrag kan gebruik word om die inhoud van hierdie lêers te installeer..DS_Store
: Hierdie lêer is in elke gids, dit stoor die eienskappe en aanpassings van die gids..Spotlight-V100
: Hierdie gids verskyn op die wortelgids van elke volume op die stelsel..metadata_never_index
: As hierdie lêer op die wortel van 'n volume is, sal Spotlight daardie volume nie indekseer nie..noindex
: Lêers en gidse met hierdie uitbreiding sal nie deur Spotlight geïndekseer word nie..sdef
: Lêers binne bundels wat spesifiseer hoe dit moontlik is om met die toepassing van 'n AppleScript te kommunikeer.
macOS Bundels
'n Bundel is 'n gids wat soos 'n objek in Finder lyk (n Bundel voorbeeld is *.app
lêers).
Dyld Gedeelde Biblioteek Kas (SLC)
Op macOS (en iOS) is alle stelsel gedeelde biblioteke, soos raamwerke en dylibs, gecombineer in 'n enkele lêer, genoem die dyld gedeelde kas. Dit verbeter die prestasie, aangesien kode vinniger gelaai kan word.
Dit is geleë in macOS in /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
en in ouer weergawes mag jy die gedeelde kas in /System/Library/dyld/
vind.
In iOS kan jy dit in /System/Library/Caches/com.apple.dyld/
vind.
Soos die dyld gedeelde kas, is die kernel en die kernel uitbreidings ook saamgecompileer in 'n kernel kas, wat by opstarttyd gelaai word.
Om die biblioteke uit die enkele lêer dylib gedeelde kas te onttrek, was dit moontlik om die binêre dyld_shared_cache_util te gebruik wat dalk nie vandag werk nie, maar jy kan ook dyldextractor gebruik:
# 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
Let daarop dat selfs al werk die dyld_shared_cache_util
hulpmiddel nie, kan jy die gedeelde dyld-binary aan Hopper oorhandig en Hopper sal in staat wees om al die biblioteke te identifiseer en jou te laat kies watter een jy wil ondersoek:
.png)
Sommige ekstraktors sal nie werk nie, aangesien dylibs vooraf gekoppel is met hard-gecodeerde adresse, wat beteken dat hulle na onbekende adresse kan spring.
tip
Dit is ook moontlik om die Gedeelde Biblioteekkas van ander *OS toestelle in macos af te laai deur 'n emulator in Xcode te gebruik. Hulle sal afgelaai word binne: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, soos: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
Mapping SLC
dyld
gebruik die syscall shared_region_check_np
om te weet of die SLC gemap is (wat die adres teruggee) en shared_region_map_and_slide_np
om die SLC te map.
Let daarop dat selfs al is die SLC op die eerste gebruik geskuif, gebruik al die prosesse die dieselfde kopie, wat die ASLR beskerming uitgeskakel het as die aanvaller in staat was om prosesse in die stelsel te laat loop. Dit is eintlik in die verlede uitgebuit en reggestel met 'n gedeelde streek pager.
Branch pools is klein Mach-O dylibs wat klein ruimtes tussen beeldmappings skep, wat dit onmoontlik maak om die funksies te interpose.
Oorskry SLCs
Gebruik die omgewingsveranderlikes:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Dit sal toelaat om 'n nuwe gedeelde biblioteekkas te laai.DYLD_SHARED_CACHE_DIR=avoid
en vervang handmatig die biblioteke met symlinks na die gedeelde kas met die werklike een (jy sal dit moet ekstrak).
Spesiale Lêer Toestemmings
Gids toestemmings
In 'n gids, lees laat jou toe om dit te lys, skryf laat jou toe om te verwyder en te skryf lêers daarop, en uitvoer laat jou toe om die gids te deursoek. So, byvoorbeeld, 'n gebruiker met lees toestemming oor 'n lêer binne 'n gids waar hy nie uitvoer toestemming het nie, sal nie in staat wees om die lêer te lees nie.
Vlag modifiers
Daar is 'n paar vlag wat in die lêers gestel kan word wat die lêer anders kan laat optree. Jy kan die vlagte van die lêers binne 'n gids nagaan met ls -lO /path/directory
uchg
: Bekend as uchange vlag sal enige aksie wat die lêer verander of verwyder, voorkom. Om dit in te stel, doen:chflags uchg file.txt
- Die wortelgebruiker kan die vlag verwyder en die lêer wysig.
restricted
: Hierdie vlag maak die lêer beskerm deur SIP (jy kan nie hierdie vlag aan 'n lêer toevoeg nie).Sticky bit
: As 'n gids met 'n sticky bit, kan slegs die gids se eienaar of wortel lêers hernoem of verwyder. Tipies word dit op die /tmp gids ingestel om gewone gebruikers te verhoed om ander gebruikers se lêers te verwyder of te skuif.
Al die vlagte kan in die lêer sys/stat.h
gevind word (vind dit met mdfind stat.h | grep stat.h
) en is:
UF_SETTABLE
0x0000ffff: Masker van eienaar veranderbare vlag.UF_NODUMP
0x00000001: Moet nie lêer dump nie.UF_IMMUTABLE
0x00000002: Lêer mag nie verander word nie.UF_APPEND
0x00000004: Skrywe na lêer mag slegs byvoeg.UF_OPAQUE
0x00000008: Gids is ondoorgrondelik ten opsigte van. unie.UF_COMPRESSED
0x00000020: Lêer is gecomprimeer (sommige lêerstelsels).UF_TRACKED
0x00000040: Geen kennisgewings vir verwyderings/hernoemings vir lêers met hierdie ingestel nie.UF_DATAVAULT
0x00000080: Regte benodig vir lees en skryf.UF_HIDDEN
0x00008000: Wenke dat hierdie item nie in 'n GUI vertoon moet word nie.SF_SUPPORTED
0x009f0000: Masker van supergebruiker ondersteun vlag.SF_SETTABLE
0x3fff0000: Masker van supergebruiker veranderbare vlag.SF_SYNTHETIC
0xc0000000: Masker van stelsels lees-alleen sintetiese vlag.SF_ARCHIVED
0x00010000: Lêer is geargiveer.SF_IMMUTABLE
0x00020000: Lêer mag nie verander word nie.SF_APPEND
0x00040000: Skrywe na lêer mag slegs byvoeg.SF_RESTRICTED
0x00080000: Regte benodig vir skryf.SF_NOUNLINK
0x00100000: Item mag nie verwyder, hernoem of gemonteer word nie.SF_FIRMLINK
0x00800000: Lêer is 'n firmlink.SF_DATALESS
0x40000000: Lêer is 'n dataloos objek.
Lêer ACLs
Lêer ACLs bevat ACE (Toegang Beheer Inskrywings) waar meer fynere toestemmings aan verskillende gebruikers toegeken kan word.
Dit is moontlik om 'n gids hierdie toestemmings te gee: lys
, soek
, voeg_lêer_by
, voeg_subgids_by
, verwyder_kind
, verwyder_kind
.
En aan 'n lêer: lees
, skryf
, byvoeg
, uitvoer
.
Wanneer die lêer ACLs bevat, sal jy 'n "+" vind wanneer jy die toestemmings lys soos in:
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
Jy kan die ACLs van die lêer lees met:
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
U kan alle lêers met ACL's vind met (dit is baie stadig):
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
Uitgebreide Attribuut
Uitgebreide attribuut het 'n naam en enige gewenste waarde, en kan gesien word met ls -@
en gemanipuleer word met die xattr
opdrag. Sommige algemene uitgebreide attribuute is:
com.apple.resourceFork
: Hulpbronvork kompatibiliteit. Ook sigbaar asfilename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Gatekeeper kwarantynmeganisme (III/6)metadata:*
: MacOS: verskeie metadata, soos_backup_excludeItem
, ofkMD*
com.apple.lastuseddate
(#PS): Laaste lêer gebruik datumcom.apple.FinderInfo
: MacOS: Finder inligting (bv., kleur Tags)com.apple.TextEncoding
: Gee die tekskodering van ASCII tekslêers aancom.apple.logd.metadata
: Gebruik deur logd op lêers in/var/db/diagnostics
com.apple.genstore.*
: Generasionele berging (/.DocumentRevisions-V100
in die wortel van die lêerstelsel)com.apple.rootless
: MacOS: Gebruik deur Stelselintegriteitbeskerming om lêer te merk (III/10)com.apple.uuidb.boot-uuid
: logd merkings van opstartepoch met unieke UUIDcom.apple.decmpfs
: MacOS: Deursigtige lêerkompressie (II/7)com.apple.cprotect
: *OS: Per-lêer versleuteling data (III/11)com.apple.installd.*
: *OS: Metadata gebruik deur installd, bv.,installType
,uniqueInstallID
Hulpbronvorke | macOS ADS
Dit is 'n manier om Alternatiewe Data Strome in MacOS masjiene te verkry. Jy kan inhoud binne 'n uitgebreide attribuut genaamd com.apple.ResourceFork binne 'n lêer stoor deur dit in file/..namedfork/rsrc te stoor.
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
U kan alle lêers wat hierdie uitgebreide attribuut bevat vind met:
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
Die uitgebreide attribuut com.apple.decmpfs
dui aan dat die lêer versleuteld gestoor is, ls -l
sal 'n grootte van 0 rapporteer en die gecomprimeerde data is binne hierdie attribuut. Wanneer die lêer toegang verkry, sal dit in geheue ontsleutel word.
Hierdie attribuut kan gesien word met ls -lO
wat as gecomprimeerd aangedui word omdat gecomprimeerde lêers ook met die vlag UF_COMPRESSED
gemerk is. As 'n gecomprimeerde lêer verwyder word met chflags nocompressed </path/to/file>
, sal die stelsel nie weet dat die lêer gecomprimeerd was nie en daarom sal dit nie in staat wees om die data te ontsleutel en toegang te verkry nie (dit sal dink dat dit eintlik leeg is).
Die hulpmiddel afscexpand kan gebruik word om 'n lêer te dwing om te ontsleutel.
Universal binaries & Mach-o Formaat
Mac OS lêers word gewoonlik gecompileer as universal binaries. 'n universal binary kan meerdere argitekture in dieselfde lêer ondersteun.
macOS Universal binaries & Mach-O Format
macOS Proses Geheue
macOS geheue dumping
Risiko Kategoriefêrels Mac OS
Die gids /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
is waar inligting oor die risiko geassosieer met verskillende lêer extensies gestoor word. Hierdie gids kategoriseer lêers in verskillende risikoniveaus, wat beïnvloed hoe Safari hierdie lêers hanteer wanneer hulle afgelaai word. Die kategorieë is soos volg:
- LSRiskCategorySafe: Lêers in hierdie kategorie word beskou as heeltemal veilig. Safari sal hierdie lêers outomaties oopmaak nadat hulle afgelaai is.
- LSRiskCategoryNeutral: Hierdie lêers kom sonder waarskuwings en word nie outomaties oopgemaak deur Safari nie.
- LSRiskCategoryUnsafeExecutable: Lêers onder hierdie kategorie aktiveer 'n waarskuwing wat aandui dat die lêer 'n toepassing is. Dit dien as 'n sekuriteitsmaatreël om die gebruiker te waarsku.
- LSRiskCategoryMayContainUnsafeExecutable: Hierdie kategorie is vir lêers, soos argiewe, wat 'n uitvoerbare lêer mag bevat. Safari sal 'n waarskuwing aktiveer tensy dit kan verifieer dat alle inhoud veilig of neutraal is.
Log lêers
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Bevat inligting oor afgelaaide lêers, soos die URL waarvandaan hulle afgelaai is./var/log/system.log
: Hooflog van OSX stelsels. com.apple.syslogd.plist is verantwoordelik vir die uitvoering van syslogging (jy kan kyk of dit gedeaktiveer is deur te soek na "com.apple.syslogd" inlaunchctl list
)./private/var/log/asl/*.asl
: Dit is die Apple Stelsellogs wat interessante inligting kan bevat.$HOME/Library/Preferences/com.apple.recentitems.plist
: Stoor onlangs toeganklike lêers en toepassings deur "Finder".$HOME/Library/Preferences/com.apple.loginitems.plsit
: Stoor items om te begin by stelselaanvang.$HOME/Library/Logs/DiskUtility.log
: Log lêer vir die DiskUtility App (inligting oor skywe, insluitend USB's)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Data oor draadlose toegangspunte./private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Lys van gedeaktiveerde daemons.
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.