From 2d30e1edf66f8f362b0332d04fddcdbc844b2fa8 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 18 Aug 2025 14:44:29 +0000 Subject: [PATCH] Translated ['src/macos-hardening/macos-security-and-privilege-escalation --- .../macos-gatekeeper.md | 192 ++++++++++++------ 1 file changed, 135 insertions(+), 57 deletions(-) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md index 3ca8b7eb9..67fa1647e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md @@ -2,6 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} + ## Gatekeeper **Gatekeeper** is 'n sekuriteitskenmerk wat ontwikkel is vir Mac-bedryfstelsels, ontwerp om te verseker dat gebruikers **slegs vertroude sagteware** op hul stelsels uitvoer. Dit funksioneer deur **sagteware te verifieer** wat 'n gebruiker aflaai en probeer om te open vanaf **bronne buite die App Store**, soos 'n app, 'n plug-in, of 'n installer-pakket. @@ -16,17 +17,17 @@ Toepassing handtekeninge, ook bekend as kodehandtekeninge, is 'n kritieke kompon Hier is hoe dit werk: -1. **Ondertekening van die Toepassing:** Wanneer 'n ontwikkelaar gereed is om hul toepassing te versprei, **onderteken hulle die toepassing met 'n private sleutel**. Hierdie private sleutel is geassosieer met 'n **sertifikaat wat Apple aan die ontwikkelaar uitreik** wanneer hulle in die Apple Developer Program inskryf. Die ondertekeningsproses behels die skep van 'n kriptografiese hash van al die dele van die app en die versleuteling van hierdie hash met die ontwikkelaar se private sleutel. +1. **Ondertekening van die Toepassing:** Wanneer 'n ontwikkelaar gereed is om hul toepassing te versprei, **onderteken hulle die toepassing met 'n private sleutel**. Hierdie private sleutel is geassosieer met 'n **sertifikaat wat Apple aan die ontwikkelaar uitreik** wanneer hulle in die Apple Developer Program inskryf. Die ondertekeningsproses behels die skep van 'n kriptografiese hash van alle dele van die app en die versleuteling van hierdie hash met die ontwikkelaar se private sleutel. 2. **Verspreiding van die Toepassing:** Die ondertekende toepassing word dan aan gebruikers versprei saam met die ontwikkelaar se sertifikaat, wat die ooreenstemmende publieke sleutel bevat. 3. **Verifikasie van die Toepassing:** Wanneer 'n gebruiker die toepassing aflaai en probeer om dit uit te voer, gebruik hul Mac-bedryfstelsel die publieke sleutel van die ontwikkelaar se sertifikaat om die hash te ontsleutel. Dit bereken dan die hash weer op grond van die huidige toestand van die toepassing en vergelyk dit met die ontsleutelde hash. As hulle ooreenstem, beteken dit **die toepassing is nie gewysig nie** sedert die ontwikkelaar dit onderteken het, en die stelsel laat die toepassing toe om uit te voer. Toepassing handtekeninge is 'n noodsaaklike deel van Apple se Gatekeeper-tegnologie. Wanneer 'n gebruiker probeer om **'n toepassing wat van die internet afgelaai is, te open**, verifieer Gatekeeper die toepassing handtekening. As dit onderteken is met 'n sertifikaat wat deur Apple aan 'n bekende ontwikkelaar uitgereik is en die kode nie gewysig is nie, laat Gatekeeper die toepassing toe om uit te voer. Andersins blokkeer dit die toepassing en waarsku die gebruiker. -Vanaf macOS Catalina, **kontroleer Gatekeeper ook of die toepassing notarised is** deur Apple, wat 'n ekstra laag van sekuriteit toevoeg. Die notarisation proses kontroleer die toepassing vir bekende sekuriteitskwessies en kwaadwillige kode, en as hierdie kontroles slaag, voeg Apple 'n kaartjie by die toepassing wat Gatekeeper kan verifieer. +Vanaf macOS Catalina, **kontroleer Gatekeeper ook of die toepassing notarised is** deur Apple, wat 'n ekstra laag sekuriteit toevoeg. Die notarisation proses kontroleer die toepassing vir bekende sekuriteitskwessies en kwaadwillige kode, en as hierdie kontroles slaag, voeg Apple 'n kaartjie by die toepassing wat Gatekeeper kan verifieer. #### Kontroleer Handtekeninge -Wanneer jy 'n **malware monster** kontroleer, moet jy altyd die **handtekening** van die binêre kontroleer, aangesien die **ontwikkelaar** wat dit onderteken het dalk reeds **verbonde** is met **malware.** +Wanneer jy 'n **kwaadwillige monster** kontroleer, moet jy altyd die **handtekening** van die binêre kontroleer, aangesien die **ontwikkelaar** wat dit onderteken het dalk reeds **verbonde** is met **kwaadwillige kode.** ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -43,20 +44,20 @@ spctl --assess --verbose /Applications/Safari.app # Sign a binary codesign -s toolsdemo ``` -### Notarization +### Notarisering -Apple se notarization proses dien as 'n addisionele beskerming om gebruikers te beskerm teen potensieel skadelike sagteware. Dit behels die **ontwikkelaar wat hul aansoek indien vir ondersoek** deur **Apple se Notary Service**, wat nie verwar moet word met App Review nie. Hierdie diens is 'n **geoutomatiseerde stelsel** wat die ingediende sagteware ondersoek vir die teenwoordigheid van **skadelike inhoud** en enige potensiële probleme met kode-handtekening. +Apple se notarisering proses dien as 'n addisionele beskerming om gebruikers te beskerm teen potensieel skadelike sagteware. Dit behels die **ontwikkelaar wat hul aansoek indien vir ondersoek** deur **Apple se Notary Service**, wat nie verwar moet word met App Review nie. Hierdie diens is 'n **geoutomatiseerde stelsel** wat die ingediende sagteware ondersoek op die teenwoordigheid van **kwaadaardige inhoud** en enige potensiële probleme met kode-handtekening. -As die sagteware **slaag** vir hierdie inspeksie sonder om enige bekommernisse te wek, genereer die Notary Service 'n notarization kaartjie. Die ontwikkelaar moet dan **hierdie kaartjie aan hul sagteware heg**, 'n proses bekend as 'stapling.' Verder word die notarization kaartjie ook aanlyn gepubliseer waar Gatekeeper, Apple se sekuriteitstegnologie, dit kan toegang. +As die sagteware **slaag** vir hierdie inspeksie sonder om enige bekommernisse te wek, genereer die Notary Service 'n notariseringsticket. Die ontwikkelaar moet dan **hierdie ticket aan hul sagteware heg**, 'n proses bekend as 'stapling.' Verder word die notariseringsticket ook aanlyn gepubliseer waar Gatekeeper, Apple se sekuriteitstegnologie, dit kan toegang. -By die gebruiker se eerste installasie of uitvoering van die sagteware, **informeer die bestaan van die notarization kaartjie - of dit aan die uitvoerbare geheg is of aanlyn gevind word - Gatekeeper dat die sagteware deur Apple genotariseer is**. As gevolg hiervan vertoon Gatekeeper 'n beskrywende boodskap in die aanvanklike lanseringsdialoog, wat aandui dat die sagteware onderhewig was aan kontrole vir skadelike inhoud deur Apple. Hierdie proses verbeter dus die gebruiker se vertroue in die sekuriteit van die sagteware wat hulle op hul stelsels installeer of uitvoer. +By die gebruiker se eerste installasie of uitvoering van die sagteware, **informeer die bestaan van die notariseringsticket - of dit aan die uitvoerbare geheg is of aanlyn gevind word - Gatekeeper dat die sagteware deur Apple genotarieer is**. As gevolg hiervan vertoon Gatekeeper 'n beskrywende boodskap in die aanvanklike lanseringsdialoog, wat aandui dat die sagteware deur Apple op kwaadaardige inhoud nagegaan is. Hierdie proses verbeter dus die gebruiker se vertroue in die sekuriteit van die sagteware wat hulle op hul stelsels installeer of uitvoer. ### spctl & syspolicyd > [!CAUTION] > Let daarop dat vanaf Sequoia weergawe, **`spctl`** nie meer toelaat om Gatekeeper konfigurasie te wysig nie. -**`spctl`** is die CLI-gereedskap om te tel en te kommunikeer met Gatekeeper (met die `syspolicyd` daemon via XPC boodskappe). Byvoorbeeld, dit is moontlik om die **status** van GateKeeper te sien met: +**`spctl`** is die CLI-gereedskap om te tel en te kommunikeer met Gatekeeper (met die `syspolicyd` daemon via XPC-boodskappe). Byvoorbeeld, dit is moontlik om die **status** van GateKeeper te sien met: ```bash # Check the status spctl --status @@ -64,11 +65,11 @@ spctl --status > [!CAUTION] > Let daarop dat GateKeeper-handtekeningkontroles slegs uitgevoer word op **lêers met die Quarantine-attribuut**, nie op elke lêer nie. -GateKeeper sal nagaan of 'n binêre volgens die **voorkeure & die handtekening** uitgevoer kan word: +GateKeeper sal nagaan of volgens die **voorkeure & die handtekening** 'n binêre uitgevoer kan word:
-**`syspolicyd`** is die hoofdaemon wat verantwoordelik is vir die afdwinging van Gatekeeper. Dit hou 'n databasis in `/var/db/SystemPolicy` en dit is moontlik om die kode te vind om die [databasis hier te ondersteun](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) en die [SQL-sjabloon hier](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Let daarop dat die databasis nie deur SIP beperk is nie en skryfbaar is deur root, en die databasis `/var/db/.SystemPolicy-default` word as 'n oorspronklike rugsteun gebruik in die geval dat die ander beskadig raak. +**`syspolicyd`** is die hoofdaemon wat verantwoordelik is vir die afdwinging van Gatekeeper. Dit hou 'n databasis in `/var/db/SystemPolicy` en dit is moontlik om die kode te vind om die [databasis hier](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) te ondersteun en die [SQL-sjabloon hier](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Let daarop dat die databasis nie deur SIP beperk is nie en skryfbaar is deur root, en die databasis `/var/db/.SystemPolicy-default` word as 'n oorspronklike rugsteun gebruik in die geval dat die ander beskadig raak. Boonop bevat die bundels **`/var/db/gke.bundle`** en **`/var/db/gkopaque.bundle`** lêers met reëls wat in die databasis ingevoeg word. Jy kan hierdie databasis as root nagaan met: ```bash @@ -84,9 +85,9 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID [...] ``` -**`syspolicyd`** stel ook 'n XPC-bediener bloot met verskillende operasies soos `assess`, `update`, `record` en `cancel` wat ook bereik kan word met **`Security.framework` se `SecAssessment*`** API's en **`xpctl`** praat eintlik met **`syspolicyd`** via XPC. +**`syspolicyd`** stel ook 'n XPC-bediener bloot met verskillende operasies soos `assess`, `update`, `record` en `cancel` wat ook bereik kan word met **`Security.framework` se `SecAssessment*`** APIs en **`spctl`** praat eintlik met **`syspolicyd`** via XPC. -Let op hoe die eerste reël eindig in "**App Store**" en die tweede een in "**Developer ID**" en dat dit in die vorige beeld **geaktiveer was om aansoeke van die App Store en geïdentifiseerde ontwikkelaars** uit te voer.\ +Let op hoe die eerste reël eindig in "**App Store**" en die tweede een in "**Developer ID**" en dat dit in die vorige beeld **geaktiveer was om programme van die App Store en geïdentifiseerde ontwikkelaars** uit te voer.\ As jy daardie instelling na App Store **wysig**, sal die "**Notarized Developer ID" reëls verdwyn**. Daar is ook duisende reëls van **type GKE** : @@ -118,7 +119,7 @@ spctl --master-disable spctl --global-enable spctl --master-enable ``` -Wanneer dit heeltemal geaktiveer is, sal 'n nuwe opsie verskyn: +Wanneer dit volledig geaktiveer is, sal 'n nuwe opsie verskyn:
@@ -143,26 +144,62 @@ spctl --assess -v /Applications/App.app ``` Betreffende **kernel uitbreidings**, die gids `/var/db/SystemPolicyConfiguration` bevat lêers met lyste van kexts wat toegelaat word om gelaai te word. Boonop het `spctl` die regte `com.apple.private.iokit.nvram-csr` omdat dit in staat is om nuwe vooraf-goedgekeurde kernel uitbreidings by te voeg wat ook in NVRAM in 'n `kext-allowed-teams` sleutel gestoor moet word. -### Karantyn Lêers +#### Bestuur van Gatekeeper op macOS 15 (Sequoia) en later -By **aflaai** van 'n toepassing of lêer, heg spesifieke macOS **toepassings** soos webblaaiers of e-pos kliënte **'n uitgebreide lêer eienskap** aan, algemeen bekend as die "**karantyn vlag**," aan die afgelaaide lêer. Hierdie eienskap dien as 'n sekuriteitsmaatreël om die **lêer te merk** as afkomstig van 'n onbetroubare bron (die internet), en potensieel risiko's dra. egter, nie alle toepassings heg hierdie eienskap aan nie, byvoorbeeld, algemene BitTorrent kliënt sagteware omseil gewoonlik hierdie proses. +Begin in macOS 15 Sequoia, kan eindgebruikers nie meer die Gatekeeper-beleid van `spctl` af skakel nie. Bestuur word uitgevoer via Stelselsinstellings of deur 'n MDM-konfigurasieprofiel met die `com.apple.systempolicy.control` payload te ontplooi. Voorbeeld profiel-snippet om App Store en geïdentifiseerde ontwikkelaars toe te laat (maar nie "Orals" nie): +```xml + + + + +PayloadContent + + +PayloadType +com.apple.systempolicy.control +PayloadVersion +1 +PayloadIdentifier +com.example.gatekeeper +EnableAssessment + +AllowIdentifiedDevelopers + + + +PayloadType +Configuration +PayloadIdentifier +com.example.profile.gatekeeper +PayloadUUID +00000000-0000-0000-0000-000000000000 +PayloadVersion +1 +PayloadDisplayName +Gatekeeper + + +``` +### Quarantine Files -**Die teenwoordigheid van 'n karantyn vlag dui op macOS se Gatekeeper sekuriteitskenmerk wanneer 'n gebruiker probeer om die lêer uit te voer**. +Wanneer 'n **toepassing** of lêer afgelaai word, heg spesifieke macOS **toepassings** soos webblaaiers of e-pos kliënte 'n **verlengde lêer eienskap** aan die afgelaaide lêer, algemeen bekend as die "**quarantine flag**." Hierdie eienskap dien as 'n sekuriteitsmaatreël om die **lêer** te **merk** as afkomstig van 'n onbetroubare bron (die internet), en moontlik risiko's dra. egter, nie alle toepassings heg hierdie eienskap aan nie, byvoorbeeld, algemene BitTorrent kliënt sagteware omseil gewoonlik hierdie proses. -In die geval waar die **karantyn vlag nie teenwoordig is nie** (soos met lêers afgelaai via sommige BitTorrent kliënte), mag Gatekeeper se **kontroles nie uitgevoer word nie**. Dus, gebruikers moet versigtig wees wanneer hulle lêers van minder veilige of onbekende bronne oopmaak. +**Die teenwoordigheid van 'n quarantine flag dui die macOS se Gatekeeper sekuriteitskenmerk aan wanneer 'n gebruiker probeer om die lêer uit te voer**. -> [!NOTE] > **Kontroleer** die **geldigheid** van kode handtekeninge is 'n **hulpbron-intensiewe** proses wat die generering van kriptografiese **hashes** van die kode en al sy saamgebonde hulpbronne insluit. Verder behels die kontrole van sertifikaat geldigheid 'n **aanlyn kontrole** teen Apple se bedieners om te sien of dit herroep is nadat dit uitgereik is. Om hierdie redes is 'n volledige kode handtekening en notarization kontrole **onprakties om elke keer uit te voer wanneer 'n app gelaai word**. +In die geval waar die **quarantine flag nie teenwoordig is nie** (soos met lêers afgelaai via sommige BitTorrent kliënte), mag Gatekeeper se **kontroles nie uitgevoer word nie**. Dus, gebruikers moet versigtig wees wanneer hulle lêers oopmaak wat afgelaai is van minder veilige of onbekende bronne. + +> [!NOTE] > **Kontroleer** die **geldigheid** van kodehandtekeninge is 'n **hulpbron-intensiewe** proses wat die generering van kriptografiese **hashes** van die kode en al sy saamgebonde hulpbronne insluit. Verder behels die kontrole van sertifikaatgeldigheid 'n **aanlyn kontrole** teen Apple se bedieners om te sien of dit herroep is nadat dit uitgereik is. Om hierdie redes is 'n volledige kodehandtekening en notariseringskontrole **onprakties om elke keer uit te voer wanneer 'n app gelaai word**. > -> Daarom word hierdie kontroles **slegs uitgevoer wanneer toepassings met die karantyn eienskap uitgevoer word.** +> Daarom word hierdie kontroles **slegs uitgevoer wanneer toepassings met die quarantined eienskap uitgevoer word.** > [!WARNING] > Hierdie eienskap moet **gestel word deur die toepassing wat die lêer skep/aflaai**. > -> egter, lêers wat in 'n sandbox is, sal hierdie eienskap op elke lêer wat hulle skep, stel. En nie-sandboxed toepassings kan dit self stel, of die [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) sleutel in die **Info.plist** spesifiseer wat die stelsel sal laat die `com.apple.quarantine` uitgebreide eienskap op die geskepte lêers stel, +> egter, lêers wat in 'n sandbox is, sal hierdie eienskap aan elke lêer wat hulle skep, heg. En nie-sandboxed toepassings kan dit self stel, of die [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) sleutel in die **Info.plist** spesifiseer wat die stelsel sal laat die `com.apple.quarantine` verlengde eienskap op die geskepte lêers stel, -Boonop is alle lêers wat deur 'n proses wat **`qtn_proc_apply_to_self`** aanroep, in karantyn. Of die API **`qtn_file_apply_to_path`** voeg die karantyn eienskap by 'n gespesifiseerde lêer pad. +Boonop is alle lêers wat deur 'n proses wat **`qtn_proc_apply_to_self`** aanroep, in kwarantyn. Of die API **`qtn_file_apply_to_path`** voeg die kwarantyn eienskap by 'n gespesifiseerde lêer pad. -Dit is moontlik om **sy status te kontroleer en in/uit te skakel** (root benodig) met: +Dit is moontlik om die **status te kontroleer en in/uit te skakel** (root benodig) met: ```bash spctl --status assessments enabled @@ -171,7 +208,7 @@ spctl --enable spctl --disable #You can also allow nee identifies to execute code using the binary "spctl" ``` -Jy kan ook **vind of 'n lêer die kwarantyn-uitgebreide attribuut het** met: +U kan ook **vind of 'n lêer die kwarantyn-uitgebreide attribuut het** met: ```bash xattr file.png com.apple.macl @@ -193,11 +230,11 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5 # Brave -- App # F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded ``` -Werklik kan 'n proses "kwarantynvlagte op die lêers wat dit skep, stel" (Ek het reeds probeer om die USER_APPROVED-vlag in 'n geskepte lêer toe te pas, maar dit sal nie toegepas word nie): +Werklik kan 'n proses "karantynvlagte aan die lêers wat dit skep, stel" (Ek het al probeer om die USER_APPROVED-vlag in 'n geskepte lêer toe te pas, maar dit sal nie toegepas word nie):
-Bronkode pas kwarantynvlagte toe +Bronkode toepas karantynvlagte ```c #include #include @@ -269,34 +306,52 @@ En vind al die karantynlêers met: ```bash find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine" ``` -Quarantynasie-inligting word ook in 'n sentrale databasis gestoor wat deur LaunchServices bestuur word in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, wat die GUI toelaat om data oor die lêer oorspronge te verkry. Boonop kan dit oorgeskryf word deur toepassings wat dalk belangstel om sy oorspronge te verberg. Boonop kan dit vanaf LaunchServices APIS gedoen word. +Quarantaine-inligting word ook in 'n sentrale databasis gestoor wat deur LaunchServices bestuur word in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, wat die GUI in staat stel om data oor die lêer oorspronge te verkry. Boonop kan dit oorgeskryf word deur toepassings wat dalk belangstel om sy oorspronge te verberg. Dit kan ook vanaf LaunchServices APIS gedoen word. -#### **libquarantine.dylb** +#### **libquarantine.dylib** Hierdie biblioteek voer verskeie funksies uit wat toelaat om die uitgebreide attribuut velde te manipuleer. -Die `qtn_file_*` APIs handel met lêer quarantynbeleid, die `qtn_proc_*` APIs word toegepas op prosesse (lêers geskep deur die proses). Die nie-uitgevoerde `__qtn_syscall_quarantine*` funksies is diegene wat die beleid toepas wat `mac_syscall` met "Quarantine" as eerste argument aanroep wat die versoeke na `Quarantine.kext` stuur. +Die `qtn_file_*` APIs handel met lêer quarantainebeleide, die `qtn_proc_*` APIs word toegepas op prosesse (lêers geskep deur die proses). Die nie-uitgevoerde `__qtn_syscall_quarantine*` funksies is diegene wat die beleide toepas wat `mac_syscall` met "Quarantine" as eerste argument aanroep wat die versoeke na `Quarantine.kext` stuur. #### **Quarantine.kext** -Die kernuitbreiding is slegs beskikbaar deur die **kernkas op die stelsel**; egter, jy _kan_ die **Kernel Debug Kit van** [**https://developer.apple.com/**](https://developer.apple.com/) aflaai, wat 'n gesimboliseerde weergawe van die uitbreiding sal bevat. +Die kernuitbreiding is slegs beskikbaar deur die **kernkas op die stelsel**; egter, jy _kan_ die **Kernel Debug Kit aflaai van** [**https://developer.apple.com/**](https://developer.apple.com/), wat 'n gesimboliseerde weergawe van die uitbreiding sal bevat. -Hierdie Kext sal via MACF verskeie oproepe haak om alle lêer lewensiklus gebeurtenisse te vang: Skepping, opening, hernoeming, hard-koppeling... selfs `setxattr` om te voorkom dat dit die `com.apple.quarantine` uitgebreide attribuut stel. +Hierdie Kext sal via MACF verskeie oproepe haak om alle lêer lewensiklusgebeurtenisse te vang: Skepping, opening, hernoeming, hard-koppeling... selfs `setxattr` om te voorkom dat dit die `com.apple.quarantine` uitgebreide attribuut stel. Dit gebruik ook 'n paar MIBs: -- `security.mac.qtn.sandbox_enforce`: Handhaaf quarantyn langs Sandbox -- `security.mac.qtn.user_approved_exec`: Quarantined prosesse kan slegs goedgekeurde lêers uitvoer +- `security.mac.qtn.sandbox_enforce`: Handhaaf quarantaine langs Sandbox +- `security.mac.qtn.user_approved_exec`: Quarantaine prosesse kan slegs goedgekeurde lêers uitvoer +#### Provenance xattr (Ventura en later) + +macOS 13 Ventura het 'n aparte oorsprong meganisme bekendgestel wat die eerste keer ingevul word wanneer 'n quarantaine toepassing toegelaat word om te loop. Twee artefakte word geskep: + +- Die `com.apple.provenance` xattr op die `.app` bundel gids (vaste grootte binêre waarde wat 'n primêre sleutel en vlae bevat). +- 'n Ry in die `provenance_tracking` tabel binne die ExecPolicy databasis by `/var/db/SystemPolicyConfiguration/ExecPolicy/` wat die toepassing se cdhash en metadata stoor. + +Praktiese gebruik: +```bash +# Inspect provenance xattr (if present) +xattr -p com.apple.provenance /Applications/Some.app | hexdump -C + +# Observe Gatekeeper/provenance events in real time +log stream --style syslog --predicate 'process == "syspolicyd"' + +# Retrieve historical Gatekeeper decisions for a specific bundle +log show --last 2d --style syslog --predicate 'process == "syspolicyd" && eventMessage CONTAINS[cd] "GK scan"' +``` ### XProtect -XProtect is 'n ingeboude **anti-malware** kenmerk in macOS. XProtect **kontroleer enige toepassing wanneer dit eerste keer gelaai of gewysig word teen sy databasis** van bekende malware en onveilige lêertipes. Wanneer jy 'n lêer aflaai deur sekere toepassings, soos Safari, Mail, of Messages, skandeer XProtect outomaties die lêer. As dit ooreenstem met enige bekende malware in sy databasis, sal XProtect **verhoed dat die lêer loop** en jou waarsku oor die bedreiging. +XProtect is 'n ingeboude **anti-malware** kenmerk in macOS. XProtect **kontroleer enige toepassing wanneer dit vir die eerste keer gelaai of gewysig word teen sy databasis** van bekende malware en onveilige lêertipes. Wanneer jy 'n lêer aflaai deur sekere toepassings, soos Safari, Mail, of Messages, skandeer XProtect outomaties die lêer. As dit ooreenstem met enige bekende malware in sy databasis, sal XProtect **verhoed dat die lêer loop** en jou waarsku oor die bedreiging. -Die XProtect databasis word **gereeld opgedateer** deur Apple met nuwe malware definisies, en hierdie opdaterings word outomaties afgelaai en op jou Mac geïnstalleer. Dit verseker dat XProtect altyd op datum is met die nuutste bekende bedreigings. +Die XProtect-databasis word **gereeld opgedateer** deur Apple met nuwe malware-definisies, en hierdie opdaterings word outomaties afgelaai en op jou Mac geïnstalleer. Dit verseker dat XProtect altyd op datum is met die nuutste bekende bedreigings. -Dit is egter die moeite werd om te noem dat **XProtect nie 'n volwaardige antivirusoplossing is nie**. Dit kontroleer slegs vir 'n spesifieke lys van bekende bedreigings en voer nie op-toegang skandering uit soos die meeste antivirusprogrammatuur nie. +Dit is egter die moeite werd om te noem dat **XProtect nie 'n volwaardige antivirusoplossing is nie**. Dit kontroleer slegs vir 'n spesifieke lys van bekende bedreigings en voer nie toegangskandering uit soos die meeste antivirusprogrammatuur nie. -Jy kan inligting oor die nuutste XProtect-opdatering verkry deur: +Jy kan inligting oor die nuutste XProtect-opdatering kry deur: ```bash system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5 ``` @@ -307,7 +362,13 @@ XProtect is geleë op. SIP beskermde ligging by **/Library/Apple/System/Library/ - **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Yara reëls om malware te detecteer. - **`XProtect.bundle/Contents/Resources/gk.db`**: SQLite3 databasis met hashes van geblokkeerde toepassings en TeamIDs. -Let daarop dat daar 'n ander App in **`/Library/Apple/System/Library/CoreServices/XProtect.app`** is wat verband hou met XProtect wat nie betrokke is by die Gatekeeper-proses nie. +Let daarop dat daar 'n ander App in **`/Library/Apple/System/Library/CoreServices/XProtect.app`** is wat verband hou met XProtect, wat nie betrokke is by die Gatekeeper proses nie. + +> XProtect Remediator: Op moderne macOS, Apple verskaf op aanvraag skandeerders (XProtect Remediator) wat periodiek via launchd loop om families van malware te detecteer en te herstel. Jy kan hierdie skanderings in verenigde logs waarneem: +> +> ```bash +> log show --last 2h --predicate 'subsystem == "com.apple.XProtectFramework" || category CONTAINS "XProtect"' --style syslog +> ``` ### Nie Gatekeeper nie @@ -316,21 +377,21 @@ Let daarop dat daar 'n ander App in **`/Library/Apple/System/Library/CoreService Daarom was dit voorheen moontlik om 'n app uit te voer om dit met Gatekeeper te kas, dan **nie-uitvoerbare lêers van die toepassing te wysig** (soos Electron asar of NIB lêers) en as daar geen ander beskermings in plek was nie, is die toepassing **uitgevoer** met die **kwaadwillige** toevoegings. -Nou is dit egter nie meer moontlik nie omdat macOS **wysig lêers** binne toepassingsbundels voorkom. So, as jy die [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) aanval probeer, sal jy vind dat dit nie meer moontlik is om dit te misbruik nie omdat jy, nadat jy die app uitgevoer het om dit met Gatekeeper te kas, nie die bundel kan wysig nie. En as jy byvoorbeeld die naam van die Contents-gids na NotCon verander (soos aangedui in die exploit), en dan die hoof binêre van die app uitvoer om dit met Gatekeeper te kas, sal dit 'n fout veroorsaak en nie uitvoer nie. +Nou is dit egter nie meer moontlik nie omdat macOS **veranderings aan lêers** binne toepassingsbundels voorkom. So, as jy die [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) aanval probeer, sal jy vind dat dit nie meer moontlik is om dit te misbruik nie omdat jy, nadat jy die app uitgevoer het om dit met Gatekeeper te kas, nie die bundel kan wysig nie. En as jy byvoorbeeld die naam van die Contents gids na NotCon verander (soos in die uitbuiting aangedui), en dan die hoof binêre van die app uitvoer om dit met Gatekeeper te kas, sal dit 'n fout veroorsaak en nie uitvoer nie. ## Gatekeeper Omseilings -Enige manier om Gatekeeper te omseil (om te regverdig dat die gebruiker iets aflaai en dit uitvoer wanneer Gatekeeper dit sou verhoed) word beskou as 'n kwesbaarheid in macOS. Dit is 'n paar CVE's wat aan tegnieke toegeken is wat in die verlede toegelaat het om Gatekeeper te omseil: +Enige manier om Gatekeeper te omseil (om te regverdig dat die gebruiker iets aflaai en dit uitvoer wanneer Gatekeeper dit moet verbied) word beskou as 'n kwesbaarheid in macOS. Dit is 'n paar CVE's wat aan tegnieke toegeken is wat in die verlede toegelaat het om Gatekeeper te omseil: ### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) -Daar is waargeneem dat as die **Archive Utility** vir ekstraksie gebruik word, lêers met **pade wat 886 karakters oorskry** nie die com.apple.quarantine uitgebreide attribuut ontvang nie. Hierdie situasie laat onbedoeld toe dat daardie lêers **Gatekeeper se** sekuriteitskontroles omseil. +Daar is waargeneem dat as die **Archive Utility** vir ekstraksie gebruik word, lêers met **pade wat 886 karakters oorskry** nie die com.apple.quarantine uitgebreide eienskap ontvang nie. Hierdie situasie laat daardie lêers per ongeluk toe om **Gatekeeper se** sekuriteitskontroles te omseil. Kyk na die [**oorspronklike verslag**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) vir meer inligting. ### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper) -Wanneer 'n toepassing geskep word met **Automator**, is die inligting oor wat dit benodig om uit te voer binne `application.app/Contents/document.wflow` en nie in die uitvoerbare nie. Die uitvoerbare is net 'n generiese Automator binêre genaamd **Automator Application Stub**. +Wanneer 'n toepassing met **Automator** geskep word, is die inligting oor wat dit benodig om uit te voer binne `application.app/Contents/document.wflow` en nie in die uitvoerbare nie. Die uitvoerbare is net 'n generiese Automator binêre genaamd **Automator Application Stub**. Daarom kon jy `application.app/Contents/MacOS/Automator\ Application\ Stub` **met 'n simboliese skakel na 'n ander Automator Application Stub binne die stelsel laat wys** en dit sal uitvoer wat binne `document.wflow` (jou skrip) is **sonder om Gatekeeper te aktiveer** omdat die werklike uitvoerbare nie die kwarantyn xattr het nie. @@ -340,15 +401,15 @@ Kyk na die [**oorspronklike verslag**](https://ronmasas.com/posts/bypass-macos-g ### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) -In hierdie omseiling is 'n zip-lêer geskep met 'n toepassing wat begin om te komprimeer vanaf `application.app/Contents` in plaas van `application.app`. Daarom is die **kwarantyn attribuut** op al die **lêers van `application.app/Contents`** toegepas maar **nie op `application.app` nie**, wat was wat Gatekeeper nagegaan het, so Gatekeeper is omseil omdat wanneer `application.app` geaktiveer is, dit **nie die kwarantyn attribuut gehad het nie.** +In hierdie omseiling is 'n zip-lêer geskep met 'n toepassing wat begin om te komprimeer vanaf `application.app/Contents` in plaas van `application.app`. Daarom is die **kwarantyn eienskap** op al die **lêers van `application.app/Contents`** toegepas maar **nie op `application.app` nie**, wat was wat Gatekeeper nagegaan het, so Gatekeeper is omseil omdat wanneer `application.app` geaktiveer is, dit **nie die kwarantyn eienskap gehad het nie.** ```bash zip -r test.app/Contents test.zip ``` -Kontroleer die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) vir meer inligting. +Kontrollering die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) vir meer inligting. ### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910) -Selfs al is die komponente verskillend, is die uitbuiting van hierdie kwesbaarheid baie soortgelyk aan die vorige een. In hierdie geval sal ons 'n Apple-argief genereer vanaf **`application.app/Contents`** sodat **`application.app` nie die kwarantyn-attribuut** sal ontvang wanneer dit deur **Archive Utility** uitgepak word. +Selfs al is die komponente verskillend, is die uitbuiting van hierdie kwesbaarheid baie soortgelyk aan die vorige een. In hierdie geval sal ons 'n Apple-argief genereer vanaf **`application.app/Contents`** sodat **`application.app` nie die kwarantyn-attribuut sal ontvang** wanneer dit deur **Archive Utility** uitgepak word. ```bash aa archive -d test.app/Contents -o test.app.aar ``` @@ -356,16 +417,16 @@ Kontroleer die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat ### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) -Die ACL **`writeextattr`** kan gebruik word om te verhoed dat iemand 'n attribuut in 'n lêer skryf: +Die ACL **`writeextattr`** kan gebruik word om te voorkom dat enigiemand 'n attribuut in 'n lêer skryf: ```bash touch /tmp/no-attr chmod +a "everyone deny writeextattr" /tmp/no-attr xattr -w attrname vale /tmp/no-attr xattr: [Errno 13] Permission denied: '/tmp/no-attr' ``` -Boonop, **AppleDouble** lêerformaat kopieer 'n lêer insluitend sy ACEs. +Boonop, **AppleDouble** lêerformaat kopieer 'n lêer insluitend sy ACE's. -In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor is, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat gekompresseer het met 'n ACL wat voorkom dat ander xattrs daarin geskryf word... was die kwarantyn xattr nie in die toepassing gestel nie: +In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor is, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat saamgepers het met 'n ACL wat voorkom dat ander xattrs daarin geskryf kan word... was die kwarantyn xattr nie in die toepassing gestel nie: ```bash chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test ditto -c -k test test.zip @@ -383,11 +444,11 @@ aa archive -d app -o test.aar ``` ### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/) -Daar is ontdek dat **Google Chrome nie die kwarantyn-attribuut** aan afgelaaide lêers toegeken het nie weens sommige macOS interne probleme. +Daar is ontdek dat **Google Chrome nie die kwarantyn-attribuut** aan afgelaaide lêers gestel het nie weens sommige macOS interne probleme. ### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/) -AppleDouble lêerformate stoor die attribuut van 'n lêer in 'n aparte lêer wat begin met `._`, dit help om lêerattribuut **oor macOS masjiene** te kopieer. Dit is egter opgemerk dat na die dekompressie van 'n AppleDouble lêer, die lêer wat met `._` begin **nie die kwarantyn-attribuut** ontvang het nie. +AppleDouble lêerformate stoor die attribuut van 'n lêer in 'n aparte lêer wat begin met `._`, dit help om lêer-attribuut **oor macOS masjiene** te kopieer. Dit is egter opgemerk dat na die dekompressie van 'n AppleDouble lêer, die lêer wat met `._` begin **nie die kwarantyn-attribuut** ontvang het nie. ```bash mkdir test echo a > test/a @@ -397,7 +458,7 @@ aa archive -d test/ -o test.aar # If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute ``` -Die vermoë om 'n lêer te skep wat nie die kwarantyn-attribuut sal hê nie, het dit **moontlik gemaak om Gatekeeper te omseil.** Die truuk was om **'n DMG-lêer toepassing** te skep met die AppleDouble naam konvensie (begin dit met `._`) en 'n **sigbare lêer as 'n sim link na hierdie versteekte** lêer te skep sonder die kwarantyn-attribuut.\ +Deur 'n lêer te kan skep wat nie die kwarantyn-attribuut sal hê nie, was dit **moontlik om Gatekeeper te omseil.** Die truuk was om 'n **DMG-lêertoepassing** te skep met die AppleDouble naamkonvensie (begin dit met `._`) en 'n **sigbare lêer as 'n simlink na hierdie versteekte** lêer te skep sonder die kwarantyn-attribuut.\ Wanneer die **dmg-lêer uitgevoer word**, sal dit, aangesien dit nie 'n kwarantyn-attribuut het nie, **Gatekeeper omseil.** ```bash # Create an app bundle with the backdoor an call it app.app @@ -414,18 +475,35 @@ ln -s ._app.dmg s/app/app.dmg echo "[+] compressing files" aa archive -d s/ -o app.aar ``` +### [CVE-2023-41067] + +'n Gatekeeper omseiling wat in macOS Sonoma 14.0 reggestel is, het toegelaat dat vervaardigde toepassings sonder waarskuwing loop. Besonderhede is publiek bekend gemaak na die regstelling en die probleem is aktief in die natuur uitgebuit voor die regstelling. Verseker dat Sonoma 14.0 of later geïnstalleer is. + +### [CVE-2024-27853] + +'n Gatekeeper omseiling in macOS 14.4 (vrygestel Maart 2024) wat spruit uit `libarchive` se hantering van kwaadwillige ZIPs, het toegelaat dat toepassings die assessering ontwyk. Opdateer na 14.4 of later waar Apple die probleem aangespreek het. + +### Derdeparty ontdoeners wat kwarantyn verkeerd versprei (2023–2024) + +Verskeie kwesbaarhede in gewilde onttrekkingshulpmiddels (bv. The Unarchiver) het veroorsaak dat lêers wat uit argiewe onttrek is, die `com.apple.quarantine` xattr mis, wat Gatekeeper omseiling moontlik gemaak het. Vertrou altyd op macOS Archive Utility of reggestelde hulpmiddels wanneer jy toets, en valideer xattrs na onttrekking. + ### uchg (uit hierdie [praatjie](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf)) -- Skep 'n gids wat 'n app bevat. -- Voeg uchg by die app. -- Komprimeer die app na 'n tar.gz-lêer. +- Skep 'n gids wat 'n toepassing bevat. +- Voeg uchg by die toepassing. +- Komprimeer die toepassing na 'n tar.gz-lêer. - Stuur die tar.gz-lêer na 'n slagoffer. -- Die slagoffer open die tar.gz-lêer en voer die app uit. -- Gatekeeper kontroleer nie die app nie. +- Die slagoffer open die tar.gz-lêer en loop die toepassing. +- Gatekeeper kontroleer nie die toepassing nie. -### Voorkom Quarantine xattr +### Voorkom Kwarantyn xattr -In 'n ".app" bundel, as die quarantine xattr nie daaraan bygevoeg word nie, wanneer dit uitgevoer word **sal Gatekeeper nie geaktiveer word**. +In 'n ".app" bundel, as die kwarantyn xattr nie daaraan bygevoeg word nie, wanneer dit uitgevoer word **sal Gatekeeper nie geaktiveer word**. +## References + +- Apple Platform Security: About the security content of macOS Sonoma 14.4 (includes CVE-2024-27853) – [https://support.apple.com/en-us/HT214084](https://support.apple.com/en-us/HT214084) +- Eclectic Light: How macOS now tracks the provenance of apps – [https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/](https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/) + {{#include ../../../banners/hacktricks-training.md}}