mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 06:00:40 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
912582e7d4
commit
8843b7a6a5
2 changed files with 236 additions and 83 deletions
|
@ -1,8 +1,8 @@
|
|||
# macOS Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,20 +17,22 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## Basic Information
|
||||
|
||||
MacOS Sandbox (aanvanklik Seatbelt genoem) **beperk toepassings** wat binne die sandbox loop tot die **toegelate aksies gespesifiseer in die Sandbox-profiel** waarmee die toepassing loop. Dit help om te verseker dat **die toepassing slegs verwagte hulpbronne sal benader**.
|
||||
MacOS Sandbox (aanvanklik Seatbelt genoem) **beperk toepassings** wat binne die sandbox loop na die **toegelate aksies wat in die Sandbox-profiel gespesifiseer is** waarmee die app loop. Dit help om te verseker dat **die toepassing slegs verwagte hulpbronne sal benader**.
|
||||
|
||||
Enige toepassing met die **regte** **`com.apple.security.app-sandbox`** sal binne die sandbox uitgevoer word. **Apple-binaries** word gewoonlik binne 'n Sandbox uitgevoer en om in die **App Store** te publiseer, is **hierdie regte verpligtend**. So die meeste toepassings sal binne die sandbox uitgevoer word.
|
||||
Enige app met die **regte** **`com.apple.security.app-sandbox`** sal binne die sandbox uitgevoer word. **Apple-binaries** word gewoonlik binne 'n Sandbox uitgevoer, en alle toepassings van die **App Store het daardie regte**. Dus sal verskeie toepassings binne die sandbox uitgevoer word.
|
||||
|
||||
Om te beheer wat 'n proses kan of nie kan doen nie, het die **Sandbox haakplekke** in alle **syscalls** regdeur die kern. **Afhangende** van die **regte** van die toepassing, sal die Sandbox sekere aksies **toelaat**.
|
||||
Om te beheer wat 'n proses kan of nie kan doen nie, het die **Sandbox haakplekke** in byna enige operasie wat 'n proses mag probeer (insluitend die meeste syscalls) met behulp van **MACF**. egter, d**epending** op die **regte** van die app kan die Sandbox meer toelaatbaar wees met die proses.
|
||||
|
||||
Sommige belangrike komponente van die Sandbox is:
|
||||
|
||||
* Die **kernuitbreiding** `/System/Library/Extensions/Sandbox.kext`
|
||||
* Die **kernel-uitbreiding** `/System/Library/Extensions/Sandbox.kext`
|
||||
* Die **privaat raamwerk** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
||||
* 'n **daemon** wat in userland loop `/usr/libexec/sandboxd`
|
||||
* Die **houers** `~/Library/Containers`
|
||||
|
||||
Binne die houers-gids kan jy **'n gids vir elke toepassing wat sandboxed uitgevoer word** vind met die naam van die bundel-id:
|
||||
### Containers
|
||||
|
||||
Elke sandboxed toepassing sal sy eie houer hê in `~/Library/Containers/{CFBundleIdentifier}` :
|
||||
```bash
|
||||
ls -l ~/Library/Containers
|
||||
total 0
|
||||
|
@ -41,7 +43,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings
|
|||
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
||||
[...]
|
||||
```
|
||||
Binne elke bundel-id-gids kan jy die **plist** en die **Data-gids** van die App vind:
|
||||
Binne elke bundel-id gids kan jy die **plist** en die **Data-gids** van die App vind met 'n struktuur wat die Huisgids naboots:
|
||||
```bash
|
||||
cd /Users/username/Library/Containers/com.apple.Safari
|
||||
ls -la
|
||||
|
@ -65,10 +67,13 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData
|
|||
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Let daarop dat selfs al is die symlinks daar om te "ontsnap" uit die Sandbox en ander mappen te benader, moet die App steeds **toestemming hê** om toegang daartoe te verkry. Hierdie toestemmings is binne die **`.plist`**.
|
||||
Let daarop dat selfs al is die symlinks daar om te "ontsnap" uit die Sandbox en ander vouers te benader, moet die App steeds **toestemmings hê** om toegang daartoe te verkry. Hierdie toestemmings is binne die **`.plist`** in die `RedirectablePaths`.
|
||||
{% endhint %}
|
||||
|
||||
Die **`SandboxProfileData`** is die gecompileerde sandbox-profiel CFData wat na B64 ontsnap is.
|
||||
```bash
|
||||
# Get permissions
|
||||
# Get container config
|
||||
## You need FDA to access the file, not even just root can read it
|
||||
plutil -convert xml1 .com.apple.containermanagerd.metadata.plist -o -
|
||||
|
||||
# Binary sandbox profile
|
||||
|
@ -115,12 +120,12 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
|||
[...]
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Alles wat deur 'n Sandboxed toepassing geskep/gewysig word, sal die **kwarantyn-attribuut** ontvang. Dit sal 'n sandbox ruimte voorkom deur Gatekeeper te aktiveer as die sandbox toepassing probeer om iets met **`open`** uit te voer.
|
||||
Alles wat deur 'n Sandboxed-toepassing geskep/gewysig word, sal die **kwarantynattribuut** ontvang. Dit sal 'n sandbox ruimte voorkom deur Gatekeeper te aktiveer as die sandbox-toepassing probeer om iets met **`open`** uit te voer.
|
||||
{% endhint %}
|
||||
|
||||
### Sandbox Profiele
|
||||
## Sandbox Profiele
|
||||
|
||||
Die Sandbox profiele is konfigurasie lêers wat aandui wat in daardie **Sandbox** **toegelaat/verbode** gaan word. Dit gebruik die **Sandbox Profiel Taal (SBPL)**, wat die [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)) programmeertaal gebruik.
|
||||
Die Sandbox profiele is konfigurasie lêers wat aandui wat in daardie **Sandbox** **toegelaat/verbode** gaan wees. Dit gebruik die **Sandbox Profile Language (SBPL)**, wat die [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)) programmeertaal gebruik.
|
||||
|
||||
Hier kan jy 'n voorbeeld vind:
|
||||
```scheme
|
||||
|
@ -141,22 +146,24 @@ Hier kan jy 'n voorbeeld vind:
|
|||
)
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Kontroleer hierdie [**navorsing**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **om meer aksies te kontroleer wat toegelaat of geweier kan word.**
|
||||
Kontrollere hierdie [**navorsing**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **om meer aksies te kontroleer wat toegelaat of geweier kan word.**
|
||||
|
||||
Let daarop dat in die saamgestelde weergawe van 'n profiel die name van die operasies vervang word deur hul inskrywings in 'n array wat deur die dylib en die kext bekend is, wat die saamgestelde weergawe korter en moeiliker leesbaar maak.
|
||||
{% endhint %}
|
||||
|
||||
Belangrike **stelseldienste** loop ook binne hul eie pasgemaakte **sandbox** soos die `mdnsresponder` diens. Jy kan hierdie pasgemaakte **sandbox-profiele** binne kyk:
|
||||
Belangrike **stelseldienste** loop ook binne hul eie pasgemaakte **sandbox** soos die `mdnsresponder` diens. Jy kan hierdie pasgemaakte **sandbox profiele** binne kyk:
|
||||
|
||||
* **`/usr/share/sandbox`**
|
||||
* **`/System/Library/Sandbox/Profiles`** 
|
||||
* Ander sandbox-profiele kan nagegaan word in [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
|
||||
* **`/System/Library/Sandbox/Profiles`**
|
||||
* Ander sandbox profiele kan nagegaan word in [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
|
||||
|
||||
**App Store** toepassings gebruik die **profiel** **`/System/Library/Sandbox/Profiles/application.sb`**. Jy kan in hierdie profiel kyk hoe regte soos **`com.apple.security.network.server`** 'n proses toelaat om die netwerk te gebruik.
|
||||
**App Store** programme gebruik die **profiel** **`/System/Library/Sandbox/Profiles/application.sb`**. Jy kan in hierdie profiel kyk hoe regte soos **`com.apple.security.network.server`** 'n proses toelaat om die netwerk te gebruik.
|
||||
|
||||
SIP is 'n Sandbox-profiel genaamd platform\_profile in /System/Library/Sandbox/rootless.conf
|
||||
|
||||
### Sandbox Profiel Voorbeelde
|
||||
|
||||
Om 'n toepassing met 'n **spesifieke sandbox-profiel** te begin, kan jy gebruik:
|
||||
Om 'n toepassing met 'n **spesifieke sandbox profiel** te begin, kan jy gebruik maak van:
|
||||
```bash
|
||||
sandbox-exec -f example.sb /Path/To/The/Application
|
||||
```
|
||||
|
@ -211,7 +218,7 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Let daarop dat die **Apple-geskrewe** **programmatuur** wat op **Windows** loop **nie addisionele sekuriteitsmaatreëls** het nie, soos toepassingsandboxing.
|
||||
Let daarop dat die **Apple-geskrewe** **programmatuur** wat op **Windows** loop, **nie addisionele sekuriteitsmaatreëls** het nie, soos toepassingsandboxing.
|
||||
{% endhint %}
|
||||
|
||||
Bypasses voorbeelde:
|
||||
|
@ -219,40 +226,47 @@ Bypasses voorbeelde:
|
|||
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
||||
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (hulle kan lêers buite die sandbox skryf waarvan die naam met `~$` begin).
|
||||
|
||||
### MacOS Sandbox Profiele
|
||||
### Sandbox Tracing
|
||||
|
||||
macOS stoor stelselsandboxprofiele in twee plekke: **/usr/share/sandbox/** en **/System/Library/Sandbox/Profiles**.
|
||||
#### Via profiel
|
||||
|
||||
En as 'n derdeparty-toepassing die _**com.apple.security.app-sandbox**_ regte het, pas die stelsel die **/System/Library/Sandbox/Profiles/application.sb** profiel op daardie proses toe.
|
||||
Dit is moontlik om al die kontroles wat die sandbox elke keer wanneer 'n aksie nagegaan word, uit te spoor. Skep net die volgende profiel:
|
||||
|
||||
### **iOS Sandbox Profiel**
|
||||
|
||||
Die standaardprofiel word **container** genoem en ons het nie die SBPL teksverteenwoordiging nie. In geheue word hierdie sandbox verteenwoordig as 'n Toestaan/Weier binaire boom vir elke toestemming van die sandbox.
|
||||
|
||||
### Debug & Bypass Sandbox
|
||||
|
||||
Op macOS, anders as iOS waar prosesse vanaf die begin deur die kern in 'n sandbox geplaas word, **moet prosesse self in die sandbox optree**. Dit beteken op macOS is 'n proses nie deur die sandbox beperk nie totdat dit aktief besluit om daarin te gaan.
|
||||
|
||||
Prosesse word outomaties in 'n sandbox geplaas vanaf gebruikersland wanneer hulle begin as hulle die regte het: `com.apple.security.app-sandbox`. Vir 'n gedetailleerde verduideliking van hierdie proses kyk:
|
||||
|
||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **Kontroleer PID Regte**
|
||||
|
||||
[**Volgens hierdie**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), kan die **`sandbox_check`** (dit is 'n `__mac_syscall`), **kontroleer of 'n operasie toegelaat word of nie** deur die sandbox in 'n sekere PID.
|
||||
|
||||
Die [**instrument sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) kan kontroleer of 'n PID 'n sekere aksie kan uitvoer:
|
||||
```bash
|
||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||
sbtool <pid> file /tmp #Check file access
|
||||
sbtool <pid> inspect #Gives you an explaination of the sandbox profile
|
||||
sbtool <pid> all
|
||||
{% code title="trace.sb" %}
|
||||
```scheme
|
||||
(version 1)
|
||||
(trace /tmp/trace.out)
|
||||
```
|
||||
### Custom SBPL in App Store apps
|
||||
{% endcode %}
|
||||
|
||||
Dit kan moontlik wees vir maatskappye om hul toepassings te laat werk **met pasgemaakte Sandbox-profiele** (in plaas van met die standaard een). Hulle moet die regte **`com.apple.security.temporary-exception.sbpl`** gebruik wat deur Apple goedgekeur moet word.
|
||||
En voer dan net iets uit met daardie profiel:
|
||||
```bash
|
||||
sandbox-exec -f /tmp/trace.sb /bin/ls
|
||||
```
|
||||
In `/tmp/trace.out` sal jy in staat wees om elke sandbox kontrole te sien wat uitgevoer is elke keer dit aangeroep is (dus, baie duplikate).
|
||||
|
||||
Dit is ook moontlik om die sandbox te volg met die **`-t`** parameter: `sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls`
|
||||
|
||||
#### Via API
|
||||
|
||||
Die funksie `sandbox_set_trace_path` wat deur `libsystem_sandbox.dylib` uitgevoer word, laat jou toe om 'n trace lêernaam te spesifiseer waar sandbox kontroles geskryf sal word.\
|
||||
Dit is ook moontlik om iets soortgelyks te doen deur `sandbox_vtrace_enable()` aan te roep en dan die logs fout van die buffer te verkry deur `sandbox_vtrace_report()` aan te roep.
|
||||
|
||||
### Sandbox Inspeksie
|
||||
|
||||
`libsandbox.dylib` voer 'n funksie genaamd sandbox\_inspect\_pid uit wat 'n lys van die sandbox toestand van 'n proses gee (insluitend uitbreidings). Maar, slegs platform binêre kan hierdie funksie gebruik.
|
||||
|
||||
### MacOS & iOS Sandbox Profiele
|
||||
|
||||
MacOS stoor stelselsandbox profiele in twee plekke: **/usr/share/sandbox/** en **/System/Library/Sandbox/Profiles**.
|
||||
|
||||
En as 'n derdeparty toepassing die _**com.apple.security.app-sandbox**_ regte het, pas die stelsel die **/System/Library/Sandbox/Profiles/application.sb** profiel op daardie proses toe.
|
||||
|
||||
In iOS, word die standaard profiel **container** genoem en ons het nie die SBPL teks voorstelling nie. In geheue, word hierdie sandbox voorgestel as 'n Toelaat/Weier binêre boom vir elke toestemming van die sandbox.
|
||||
|
||||
### Pasgemaakte SBPL in App Store toepassings
|
||||
|
||||
Dit kan moontlik wees vir maatskappye om hul toepassings te laat loop **met pasgemaakte Sandbox profiele** (in plaas van met die standaard een). Hulle moet die regte **`com.apple.security.temporary-exception.sbpl`** gebruik wat deur Apple goedgekeur moet word.
|
||||
|
||||
Dit is moontlik om die definisie van hierdie regte in **`/System/Library/Sandbox/Profiles/application.sb:`** te kontroleer.
|
||||
```scheme
|
||||
|
@ -262,19 +276,142 @@ Dit is moontlik om die definisie van hierdie regte in **`/System/Library/Sandbox
|
|||
(let* ((port (open-input-string string)) (sbpl (read port)))
|
||||
(with-transparent-redirection (eval sbpl)))))
|
||||
```
|
||||
Dit sal **die string na hierdie regte** as 'n Sandbox-profiel evaluer.
|
||||
This will **eval die string na hierdie regte** as 'n Sandbox-profiel.
|
||||
|
||||
### Kompilerings- & dekompileringsproses van 'n Sandbox-profiel
|
||||
|
||||
Die **`sandbox-exec`** hulpmiddel gebruik die funksies `sandbox_compile_*` van `libsandbox.dylib`. Die hooffunksies wat uitgevoer word, is: `sandbox_compile_file` (verwag 'n lêer pad, param `-f`), `sandbox_compile_string` (verwag 'n string, param `-p`), `sandbox_compile_name` (verwag 'n naam van 'n houer, param `-n`), `sandbox_compile_entitlements` (verwag regte plist).
|
||||
|
||||
Hierdie omgekeerde en [**oopbron weergawe van die hulpmiddel sandbox-exec**](https://newosxbook.com/src.jl?tree=listings\&file=/sandbox\_exec.c) laat toe dat **`sandbox-exec`** in 'n lêer die gecompileerde sandbox-profiel skryf.
|
||||
|
||||
Boonop, om 'n proses binne 'n houer te beperk, kan dit `sandbox_spawnattrs_set[container/profilename]` aanroep en 'n houer of voorafbestaande profiel deurgee.
|
||||
|
||||
## Foutopsporing & Omseiling van Sandbox
|
||||
|
||||
Op macOS, anders as iOS waar prosesse vanaf die begin deur die kern in 'n sandbox geplaas word, **moet prosesse self in die sandbox opt-in**. Dit beteken op macOS, 'n proses is nie deur die sandbox beperk totdat dit aktief besluit om daarin te gaan nie, alhoewel App Store-apps altyd in 'n sandbox is.
|
||||
|
||||
Prosesse word outomaties in 'n sandbox geplaas vanaf die gebruikersvlak wanneer hulle begin as hulle die regte het: `com.apple.security.app-sandbox`. Vir 'n gedetailleerde verduideliking van hierdie proses, kyk:
|
||||
|
||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Sandbox-uitbreidings**
|
||||
|
||||
Uitbreidings laat toe om verdere voorregte aan 'n objek te gee en word verkry deur een van die funksies aan te roep:
|
||||
|
||||
* `sandbox_issue_extension`
|
||||
* `sandbox_extension_issue_file[_with_new_type]`
|
||||
* `sandbox_extension_issue_mach`
|
||||
* `sandbox_extension_issue_iokit_user_client_class`
|
||||
* `sandbox_extension_issue_iokit_registry_rentry_class`
|
||||
* `sandbox_extension_issue_generic`
|
||||
* `sandbox_extension_issue_posix_ipc`
|
||||
|
||||
Die uitbreidings word in die tweede MACF etiketgleuf gestoor wat toeganklik is vanaf die proses se geloofsbriewe. Die volgende **`sbtool`** kan toegang tot hierdie inligting verkry.
|
||||
|
||||
Let daarop dat uitbreidings gewoonlik deur toegelate prosesse toegestaan word, byvoorbeeld, `tccd` sal die uitbreidings-token van `com.apple.tcc.kTCCServicePhotos` toeken wanneer 'n proses probeer om toegang tot die foto's te verkry en in 'n XPC-boodskap toegelaat is. Dan sal die proses die uitbreidings-token moet verbruik sodat dit daaraan bygevoeg word.\
|
||||
Let daarop dat die uitbreidings-token lang heksadesimale is wat die toegepaste toestemmings kodeer. Hulle het egter nie die toegelate PID hardgecodeer nie, wat beteken dat enige proses met toegang tot die token **deur verskeie prosesse verbruik kan word**.
|
||||
|
||||
Let daarop dat uitbreidings baie verwant is aan regte, so om sekere regte te hê, kan outomaties sekere uitbreidings toeken.
|
||||
|
||||
### **Kontroleer PID Voorregte**
|
||||
|
||||
[**Volgens hierdie**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), kan die **`sandbox_check`** funksies (dit is 'n `__mac_syscall`), **kontroleer of 'n operasie toegelaat word of nie** deur die sandbox in 'n sekere PID, oudit-token of unieke ID.
|
||||
|
||||
Die [**hulpmiddel sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) (vind dit [gecompileer hier](https://newosxbook.com/articles/hitsb.html)) kan kontroleer of 'n PID sekere aksies kan uitvoer:
|
||||
```bash
|
||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||
sbtool <pid> file /tmp #Check file access
|
||||
sbtool <pid> inspect #Gives you an explanation of the sandbox profile and extensions
|
||||
sbtool <pid> all
|
||||
```
|
||||
### \[un]suspend
|
||||
|
||||
Dit is ook moontlik om die sandbox te suspend en te unsuspend met die funksies `sandbox_suspend` en `sandbox_unsuspend` van `libsystem_sandbox.dylib`.
|
||||
|
||||
Let daarop dat om die suspend-funksie aan te roep, sommige regte nagegaan word om die oproeper te magtig om dit aan te roep soos:
|
||||
|
||||
* com.apple.private.security.sandbox-manager
|
||||
* com.apple.security.print
|
||||
* com.apple.security.temporary-exception.audio-unit-host
|
||||
|
||||
## mac\_syscall
|
||||
|
||||
Hierdie stelselaanroep (#381) verwag een string eerste argument wat die module sal aandui om te loop, en dan 'n kode in die tweede argument wat die funksie sal aandui om te loop. Dan sal die derde argument afhang van die funksie wat uitgevoer word.
|
||||
|
||||
Die funksie `___sandbox_ms` oproep verpak `mac_syscall` wat in die eerste argument `"Sandbox"` aandui, net soos `___sandbox_msp` 'n wrapper van `mac_set_proc` (#387) is. Dan kan sommige van die ondersteunde kodes deur `___sandbox_ms` in hierdie tabel gevind word:
|
||||
|
||||
* **set\_profile (#0)**: Pas 'n gecompileerde of benoemde profiel op 'n proses toe.
|
||||
* **platform\_policy (#1)**: Handhaaf platform-spesifieke beleidskontroles (verskil tussen macOS en iOS).
|
||||
* **check\_sandbox (#2)**: Voer 'n handmatige kontrole van 'n spesifieke sandbox-operasie uit.
|
||||
* **note (#3)**: Voeg 'n annotasie by 'n Sandbox
|
||||
* **container (#4)**: Koppel 'n annotasie aan 'n sandbox, tipies vir debugging of identifikasie.
|
||||
* **extension\_issue (#5)**: Genereer 'n nuwe uitbreiding vir 'n proses.
|
||||
* **extension\_consume (#6)**: Verbruik 'n gegewe uitbreiding.
|
||||
* **extension\_release (#7)**: Vry die geheue wat aan 'n verbruikte uitbreiding gekoppel is.
|
||||
* **extension\_update\_file (#8)**: Wysig parameters van 'n bestaande lêer uitbreiding binne die sandbox.
|
||||
* **extension\_twiddle (#9)**: Pas 'n bestaande lêer uitbreiding aan of wysig (bv. TextEdit, rtf, rtfd).
|
||||
* **suspend (#10)**: Tydelik alle sandbox kontroles suspend (vereis toepaslike regte).
|
||||
* **unsuspend (#11)**: Herbegin alle voorheen gesuspendeerde sandbox kontroles.
|
||||
* **passthrough\_access (#12)**: Laat direkte passthrough toegang tot 'n hulpbron toe, wat sandbox kontroles omseil.
|
||||
* **set\_container\_path (#13)**: (slegs iOS) Stel 'n houer pad vir 'n app-groep of onderteken ID in.
|
||||
* **container\_map (#14)**: (slegs iOS) Verkry 'n houer pad van `containermanagerd`.
|
||||
* **sandbox\_user\_state\_item\_buffer\_send (#15)**: (iOS 10+) Stel gebruikersmodus metadata in die sandbox.
|
||||
* **inspect (#16)**: Verskaf debug-inligting oor 'n sandboxed proses.
|
||||
* **dump (#18)**: (macOS 11) Dump die huidige profiel van 'n sandbox vir analise.
|
||||
* **vtrace (#19)**: Volg sandbox operasies vir monitering of debugging.
|
||||
* **builtin\_profile\_deactivate (#20)**: (macOS < 11) Deaktiveer benoemde profiele (bv. `pe_i_can_has_debugger`).
|
||||
* **check\_bulk (#21)**: Voer verskeie `sandbox_check` operasies in 'n enkele oproep uit.
|
||||
* **reference\_retain\_by\_audit\_token (#28)**: Skep 'n verwysing vir 'n oudit-token vir gebruik in sandbox kontroles.
|
||||
* **reference\_release (#29)**: Vry 'n voorheen behoue oudit-token verwysing.
|
||||
* **rootless\_allows\_task\_for\_pid (#30)**: Verifieer of `task_for_pid` toegelaat word (soortgelyk aan `csr` kontroles).
|
||||
* **rootless\_whitelist\_push (#31)**: (macOS) Pas 'n Stelselintegriteitbeskerming (SIP) manifestlêer toe.
|
||||
* **rootless\_whitelist\_check (preflight) (#32)**: Kontroleer die SIP manifestlêer voor uitvoering.
|
||||
* **rootless\_protected\_volume (#33)**: (macOS) Pas SIP beskerming toe op 'n skyf of partisie.
|
||||
* **rootless\_mkdir\_protected (#34)**: Pas SIP/DataVault beskerming toe op 'n gids skep proses.
|
||||
|
||||
## Sandbox.kext
|
||||
|
||||
Let daarop dat in iOS die kernuitbreiding **hardcoded al die profiele** binne die `__TEXT.__const` segment bevat om te verhoed dat hulle gewysig word. Die volgende is 'n paar interessante funksies van die kernuitbreiding:
|
||||
|
||||
* **`hook_policy_init`**: Dit haak `mpo_policy_init` en dit word genoem na `mac_policy_register`. Dit voer die meeste van die inisialisasies van die Sandbox uit. Dit inisialiseer ook SIP.
|
||||
* **`hook_policy_initbsd`**: Dit stel die sysctl-koppelvlak op wat `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` en `security.mac.sandbox.debug_mode` registreer (as dit met `PE_i_can_has_debugger` geboot is).
|
||||
* **`hook_policy_syscall`**: Dit word deur `mac_syscall` aangeroep met "Sandbox" as eerste argument en kode wat die operasie in die tweede aandui. 'n Skakel word gebruik om die kode te vind wat volgens die aangevraagde kode uitgevoer moet word.
|
||||
|
||||
### MACF Hooks
|
||||
|
||||
**`Sandbox.kext`** gebruik meer as 'n honderd haakies via MACF. Meeste van die haakies sal net sommige triviale gevalle kontroleer wat die aksie toelaat as dit nie, sal hulle **`cred_sb_evalutate`** met die **akkrediteer** van MACF en 'n nommer wat ooreenstem met die **operasie** wat uitgevoer moet word en 'n **buffer** vir die uitvoer aanroep.
|
||||
|
||||
'n Goeie voorbeeld hiervan is die funksie **`_mpo_file_check_mmap`** wat **`mmap`** gehaak het en wat sal begin om te kontroleer of die nuwe geheue skryfbaar gaan wees (en as dit nie is, die uitvoering toelaat), dan sal dit kontroleer of dit vir die dyld gedeelde kas gebruik word en as dit so is, die uitvoering toelaat, en uiteindelik sal dit **`cred_sb_evalutate`** aanroep om verdere toelaatbaarheid kontroles uit te voer.
|
||||
|
||||
Boonop, uit die honderd(s) haakies wat Sandbox gebruik, is daar 3 in die besonder wat baie interessant is:
|
||||
|
||||
* `mpo_proc_check_for`: Dit pas die profiel toe indien nodig en as dit nie voorheen toegepas is nie.
|
||||
* `mpo_vnode_check_exec`: Geroep wanneer 'n proses die geassosieerde binêre laai, dan word 'n profielkontrole uitgevoer en ook 'n kontrole wat SUID/SGID uitvoerings verbied.
|
||||
* `mpo_cred_label_update_execve`: Dit word aangeroep wanneer die etiket toegeken word. Dit is die langste een aangesien dit aangeroep word wanneer die binêre ten volle gelaai is, maar dit nog nie uitgevoer is nie. Dit sal aksies uitvoer soos om die sandbox objek te skep, die sandbox struktuur aan die kauth akkrediteer te heg, toegang tot mach-poorte te verwyder...
|
||||
|
||||
Let daarop dat **`cred_sb_evalutate`** 'n wrapper oor **`sb_evaluate`** is en hierdie funksie kry die akkrediteer wat oorgedra word en voer dan die evaluering uit met behulp van die **`eval`** funksie wat gewoonlik die **platform profiel** evalueer wat standaard op alle prosesse toegepas word en dan die **spesifieke proses profiel**. Let daarop dat die platform profiel een van die hoofkomponente van **SIP** in macOS is.
|
||||
|
||||
## Sandboxd
|
||||
|
||||
Sandbox het ook 'n gebruikersdemon wat die XPC Mach diens `com.apple.sandboxd` blootstel en die spesiale poort 14 (`HOST_SEATBELT_PORT`) bind wat die kernuitbreiding gebruik om met dit te kommunikeer. Dit blootstel sommige funksies met behulp van MIG.
|
||||
|
||||
## References
|
||||
|
||||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# macOS SIP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,10 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
## **Basiese Inligting**
|
||||
|
||||
**Sisteem Integriteit Beskerming (SIP)** in macOS is 'n mechanisme wat ontwerp is om selfs die mees bevoorregte gebruikers te verhoed om ongeoorloofde veranderinge aan sleutel sisteem vouers te maak. Hierdie funksie speel 'n belangrike rol in die handhawing van die integriteit van die stelsel deur aksies soos die toevoeging, wysiging of verwydering van lêers in beskermde areas te beperk. Die primêre vouers wat deur SIP beskerm word, sluit in:
|
||||
**Sisteem Integriteit Beskerming (SIP)** in macOS is 'n meganisme wat ontwerp is om selfs die mees bevoorregte gebruikers te verhoed om ongeoorloofde veranderinge aan sleutel sisteem vouers te maak. Hierdie funksie speel 'n belangrike rol in die handhawing van die integriteit van die stelsel deur aksies soos die toevoeging, wysiging of verwydering van lêers in beskermde areas te beperk. Die primêre vouers wat deur SIP beskerm word, sluit in:
|
||||
|
||||
* **/System**
|
||||
* **/bin**
|
||||
|
@ -27,7 +26,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
Die reëls wat SIP se gedrag regeer, word gedefinieer in die konfigurasie lêer geleë by **`/System/Library/Sandbox/rootless.conf`**. Binne hierdie lêer word paaie wat met 'n asterisk (\*) voorafgegaan word, as uitsonderings op die andersins streng SIP beperkings aangedui.
|
||||
|
||||
Overweeg die onderstaande voorbeeld:
|
||||
Overweeg die voorbeeld hieronder:
|
||||
```javascript
|
||||
/usr
|
||||
* /usr/libexec/cups
|
||||
|
@ -52,6 +51,10 @@ Hierdie **`restricted`** vlag dui aan dat die `/usr/libexec` gids deur SIP beske
|
|||
|
||||
Boonop, as 'n lêer die attribuut **`com.apple.rootless`** uitgebreide **attribuut** bevat, sal daardie lêer ook **deur SIP beskerm word**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Let daarop dat die **Sandbox** haak **`hook_vnode_check_setextattr`** enige poging om die uitgebreide attribuut **`com.apple.rootless`** te wysig, voorkom.
|
||||
{% endhint %}
|
||||
|
||||
**SIP beperk ook ander wortel aksies** soos:
|
||||
|
||||
* Laai onbetroubare kernuitbreidings
|
||||
|
@ -59,7 +62,7 @@ Boonop, as 'n lêer die attribuut **`com.apple.rootless`** uitgebreide **attribu
|
|||
* Wysig NVRAM veranderlikes
|
||||
* Laat kernfoutopsporing toe
|
||||
|
||||
Opsies word in die nvram veranderlike as 'n bitvlag (`csr-active-config` op Intel en `lp-sip0` word gelees vanaf die gebootte Toestelboom vir ARM) gehandhaaf. Jy kan die vlae in die XNU bronskode in `csr.sh` vind:
|
||||
Opsies word in die nvram veranderlike as 'n bitflag gehou (`csr-active-config` op Intel en `lp-sip0` word van die gebootte toestelboom vir ARM gelees). Jy kan die vlae in die XNU bronskode in `csr.sh` vind:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1192).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -85,13 +88,27 @@ csrutil enable --without debug
|
|||
|
||||
[**Leer meer oor SIP-inligting in hierdie praatjie**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||||
|
||||
### **SIP-verwante Regte**
|
||||
|
||||
* `com.apple.rootless.xpc.bootstrap`: Beheer launchd
|
||||
* `com.apple.rootless.install[.heritable]`: Toegang tot lêerstelsel
|
||||
* `com.apple.rootless.kext-management`: `kext_request`
|
||||
* `com.apple.rootless.datavault.controller`: Bestuur UF\_DATAVAULT
|
||||
* `com.apple.rootless.xpc.bootstrap`: XPC-opstelling vermoëns
|
||||
* `com.apple.rootless.xpc.effective-root`: Root via launchd XPC
|
||||
* `com.apple.rootless.restricted-block-devices`: Toegang tot rou bloktoestelle
|
||||
* `com.apple.rootless.internal.installer-equivalent`: Onbeperkte lêerstelseloegang
|
||||
* `com.apple.rootless.restricted-nvram-variables[.heritable]`: Volledige toegang tot NVRAM
|
||||
* `com.apple.rootless.storage.label`: Wysig lêers wat deur com.apple.rootless xattr met die ooreenstemmende etiket beperk is
|
||||
* `com.apple.rootless.volume.VM.label`: Onderhou VM-swap op volume
|
||||
|
||||
## SIP Omseilings
|
||||
|
||||
Om SIP te omseil stel 'n aanvaller in staat om:
|
||||
|
||||
* **Toegang tot Gebruikersdata**: Lees sensitiewe gebruikersdata soos pos, boodskappe en Safari-geskiedenis van alle gebruikersrekeninge.
|
||||
* **TCC Omseiling**: Direk die TCC (Deursigtigheid, Toestemming, en Beheer) databasis manipuleer om ongemagtigde toegang tot die webkamera, mikrofoon, en ander hulpbronne te verleen.
|
||||
* **Vestiging van Volharding**: Plaas malware in SIP-beskermde plekke, wat dit bestand maak teen verwydering, selfs deur wortelregte. Dit sluit ook die potensiaal in om die Malware Removal Tool (MRT) te manipuleer.
|
||||
* **TCC Omseiling**: Direk die TCC (Deursigtigheid, Toestemming en Beheer) databasis manipuleer om ongemagtigde toegang tot die webcam, mikrofoon en ander hulpbronne te verleen.
|
||||
* **Vestiging van Volharding**: Plaas malware in SIP-beskermde plekke, wat dit bestand maak teen verwydering, selfs deur wortelregte. Dit sluit ook die potensiaal in om met die Malware Removal Tool (MRT) te sloop.
|
||||
* **Laai Kernuitbreidings**: Alhoewel daar addisionele beskermings is, vereenvoudig die omseiling van SIP die proses om ongetekende kernuitbreidings te laai.
|
||||
|
||||
### Installer Pakkette
|
||||
|
@ -105,34 +122,34 @@ Een potensiële leemte is dat as 'n lêer in **`rootless.conf` gespesifiseer wor
|
|||
### com.apple.rootless.install.heritable
|
||||
|
||||
{% hint style="danger" %}
|
||||
Die regte **`com.apple.rootless.install.heritable`** laat toe om SIP te omseil
|
||||
Die reg **`com.apple.rootless.install.heritable`** stel in staat om SIP te omseil
|
||||
{% endhint %}
|
||||
|
||||
#### [CVE-2019-8561](https://objective-see.org/blog/blog\_0x42.html) <a href="#cve" id="cve"></a>
|
||||
|
||||
Daar is ontdek dat dit moontlik was om **die installer pakket te ruil nadat die stelsel sy kode** handtekening geverifieer het en dan sou die stelsel die kwaadwillige pakket in plaas van die oorspronklike installeer. Aangesien hierdie aksies deur **`system_installd`** uitgevoer is, sou dit SIP omseil.
|
||||
Dit is ontdek dat dit moontlik was om **die installer-pakket te ruil nadat die stelsel sy kode** handtekening geverifieer het en dan sou die stelsel die kwaadwillige pakket in plaas van die oorspronklike installeer. Aangesien hierdie aksies deur **`system_installd`** uitgevoer is, sou dit SIP omseil.
|
||||
|
||||
#### [CVE-2020–9854](https://objective-see.org/blog/blog\_0x4D.html) <a href="#cve-unauthd-chain" id="cve-unauthd-chain"></a>
|
||||
|
||||
As 'n pakket van 'n gemonteerde beeld of eksterne skyf geïnstalleer is, sou die **installer** die binêre van **daardie lêerstelsel** uitvoer (in plaas van 'n SIP-beskermde plek), wat **`system_installd`** dwing om 'n arbitrêre binêre uit te voer.
|
||||
As 'n pakket van 'n gemonteerde beeld of eksterne skyf geïnstalleer is, sou die **installer** die binêre van **daardie lêerstelsel** **uitvoer** (in plaas van van 'n SIP-beskermde plek), wat **`system_installd`** dwing om 'n arbitrêre binêre uit te voer.
|
||||
|
||||
#### CVE-2021-30892 - Shrootless
|
||||
|
||||
[**Navorsers van hierdie blogpos**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) het 'n kwesbaarheid in macOS se Stelselintegriteitsbeskerming (SIP) meganisme ontdek, wat die 'Shrootless' kwesbaarheid genoem word. Hierdie kwesbaarheid sentreer rondom die **`system_installd`** daemon, wat 'n regte het, **`com.apple.rootless.install.heritable`**, wat enige van sy kindprosesse toelaat om SIP se lêerstelselbeperkings te omseil.
|
||||
[**Navorsers van hierdie blogpos**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) het 'n kwesbaarheid in macOS se Stelselintegriteitsbeskerming (SIP) meganisme ontdek, wat die 'Shrootless' kwesbaarheid genoem word. Hierdie kwesbaarheid sentreer rondom die **`system_installd`** daemon, wat 'n reg het, **`com.apple.rootless.install.heritable`**, wat enige van sy kindprosesse in staat stel om SIP se lêerstelselbeperkings te omseil.
|
||||
|
||||
**`system_installd`** daemon sal pakkette installeer wat deur **Apple** geteken is.
|
||||
|
||||
Navorsers het gevind dat tydens die installasie van 'n Apple-getekende pakket (.pkg-lêer), **`system_installd`** **die** enige **post-install** skripte wat in die pakket ingesluit is, **uitvoer**. Hierdie skripte word deur die standaard skulp, **`zsh`**, uitgevoer, wat outomaties **opdragte** van die **`/etc/zshenv`** lêer uitvoer, indien dit bestaan, selfs in nie-interaktiewe modus. Hierdie gedrag kan deur aanvallers benut word: deur 'n kwaadwillige `/etc/zshenv` lêer te skep en te wag vir **`system_installd` om `zsh`** aan te roep, kan hulle arbitrêre operasies op die toestel uitvoer.
|
||||
Navorsers het gevind dat tydens die installasie van 'n Apple-getekende pakket (.pkg-lêer), **`system_installd`** **uitvoer** enige **post-install** skripte wat in die pakket ingesluit is. Hierdie skripte word deur die standaard skulp, **`zsh`**, uitgevoer, wat outomaties **opdragte** van die **`/etc/zshenv`** lêer uitvoer, indien dit bestaan, selfs in nie-interaktiewe modus. Hierdie gedrag kan deur aanvallers benut word: deur 'n kwaadwillige `/etc/zshenv` lêer te skep en te wag vir **`system_installd` om `zsh`** aan te roep, kan hulle arbitrêre operasies op die toestel uitvoer.
|
||||
|
||||
Boonop is daar ontdek dat **`/etc/zshenv` as 'n algemene aanvalstegniek gebruik kan word**, nie net vir 'n SIP-omseiling nie. Elke gebruikersprofiel het 'n `~/.zshenv` lêer, wat dieselfde gedrag as `/etc/zshenv` vertoon, maar nie wortelregte vereis nie. Hierdie lêer kan as 'n volhardingsmeganisme gebruik word, wat elke keer wat `zsh` begin, geaktiveer word, of as 'n verhoging van regte meganisme. As 'n admin gebruiker tot wortel verhoog met `sudo -s` of `sudo <opdrag>`, sal die `~/.zshenv` lêer geaktiveer word, wat effektief tot wortel verhoog.
|
||||
Boonop is ontdek dat **`/etc/zshenv` as 'n algemene aanvalstegniek** gebruik kan word, nie net vir 'n SIP-omseiling nie. Elke gebruikersprofiel het 'n `~/.zshenv` lêer, wat dieselfde gedrag as `/etc/zshenv` vertoon, maar nie wortelregte vereis nie. Hierdie lêer kan as 'n volhardingsmeganisme gebruik word, wat elke keer wat `zsh` begin, geaktiveer word, of as 'n verhoging van regte meganisme. As 'n admin-gebruiker tot wortel verhoog met `sudo -s` of `sudo <opdrag>`, sal die `~/.zshenv` lêer geaktiveer word, wat effektief tot wortel verhoog.
|
||||
|
||||
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
||||
|
||||
In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) is daar ontdek dat dieselfde **`system_installd`** proses steeds misbruik kon word omdat dit die **post-install skrip in 'n random genaamde gids wat deur SIP beskerm word binne `/tmp`** geplaas het. Die ding is dat **`/tmp` self nie deur SIP beskerm word nie**, so dit was moontlik om 'n **virtuele beeld daarop te monteer**, dan sou die **installer** die **post-install skrip** daar plaas, **ontmonteer** die virtuele beeld, **herstel** al die **gidse** en **voeg** die **post-installasie** skrip met die **payload** om uit te voer.
|
||||
In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) is ontdek dat dieselfde **`system_installd`** proses steeds misbruik kon word omdat dit die **post-install skrip in 'n random naamgegewe gids wat deur SIP beskerm word binne `/tmp`** geplaas het. Die ding is dat **`/tmp` self nie deur SIP beskerm word nie**, so dit was moontlik om 'n **virtuele beeld daarop te monteer**, dan sou die **installer** die **post-install skrip** daar plaas, **ontmonteer** die virtuele beeld, **herstel** al die **gidse** en **voeg** die **post-installasie** skrip met die **payload** om uit te voer.
|
||||
|
||||
#### [fsck\_cs nut](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
||||
|
||||
'n Kwesbaarheid is geïdentifiseer waar **`fsck_cs`** mislei is om 'n belangrike lêer te korrupteer, as gevolg van sy vermoë om **simboliese skakels** te volg. Spesifiek het aanvallers 'n skakel van _`/dev/diskX`_ na die lêer `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` geskep. Die uitvoering van **`fsck_cs`** op _`/dev/diskX`_ het gelei tot die korrupsie van `Info.plist`. Die integriteit van hierdie lêer is van kardinale belang vir die bedryfstelsel se SIP (Stelselintegriteitsbeskerming), wat die laai van kernuitbreidings beheer. Sodra dit gekorrumpeer is, is SIP se vermoë om kernuitsluitings te bestuur, gecompromitteer.
|
||||
'n Kwesbaarheid is geïdentifiseer waar **`fsck_cs`** mislei is om 'n belangrike lêer te korrupteer, as gevolg van sy vermoë om **simboliese skakels** te volg. Spesifiek het aanvallers 'n skakel van _`/dev/diskX`_ na die lêer `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` geskep. Die uitvoering van **`fsck_cs`** op _`/dev/diskX`_ het gelei tot die korrupsie van `Info.plist`. Die integriteit van hierdie lêer is noodsaaklik vir die bedryfstelsel se SIP (Stelselintegriteitsbeskerming), wat die laai van kernuitbreidings beheer. Sodra dit gekorrumpeer is, is SIP se vermoë om kernuitsluitings te bestuur, gecompromitteer.
|
||||
|
||||
Die opdragte om hierdie kwesbaarheid te benut is:
|
||||
```bash
|
||||
|
@ -154,13 +171,13 @@ hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
|
|||
```
|
||||
#### [Opgradering omseiling (2016)](https://objective-see.org/blog/blog\_0x14.html)
|
||||
|
||||
Die stelsel is ingestel om te boot vanaf 'n ingebedde installer skyfbeeld binne die `Install macOS Sierra.app` om die OS op te gradeer, met die `bless` nut. Die opdrag wat gebruik word is soos volg:
|
||||
Die stelsel is ingestel om te boot vanaf 'n ingebedde installer skyfbeeld binne die `Install macOS Sierra.app` om die OS op te gradeer, met die gebruik van die `bless` nut. Die opdrag wat gebruik word is soos volg:
|
||||
```bash
|
||||
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
|
||||
```
|
||||
Die sekuriteit van hierdie proses kan gecompromitteer word as 'n aanvaller die opgradering beeld (`InstallESD.dmg`) voor die opstart verander. Die strategie behels die vervanging van 'n dinamiese laaier (dyld) met 'n kwaadwillige weergawe (`libBaseIA.dylib`). Hierdie vervanging lei tot die uitvoering van die aanvaller se kode wanneer die installeerder geaktiveer word.
|
||||
|
||||
Die aanvaller se kode verkry beheer tydens die opgraderingsproses, wat die stelsel se vertroue in die installeerder benut. Die aanval vorder deur die `InstallESD.dmg` beeld te verander via metode swizzling, met spesifieke fokus op die `extractBootBits` metode. Dit stel die inspuiting van kwaadwillige kode in staat voordat die skyfbeeld gebruik word.
|
||||
Die aanvaller se kode verkry beheer tydens die opgraderingsproses, wat die stelsel se vertroue in die installeerder benut. Die aanval vorder deur die `InstallESD.dmg` beeld te verander via metode swizzling, met spesifieke fokus op die `extractBootBits` metode. Dit stel die inspuiting van kwaadwillige kode voor die gebruik van die skyfbeeld in staat.
|
||||
|
||||
Boonop, binne die `InstallESD.dmg`, is daar 'n `BaseSystem.dmg`, wat as die wortel lêer stelsel van die opgradering kode dien. Die inspuiting van 'n dinamiese biblioteek hierin stel die kwaadwillige kode in staat om binne 'n proses te werk wat in staat is om OS-vlak lêers te verander, wat die potensiaal vir stelselskompromie aansienlik verhoog.
|
||||
|
||||
|
@ -184,7 +201,7 @@ Die regte **`com.apple.rootless.install`** maak dit moontlik om SIP te omseil
|
|||
|
||||
Die regte `com.apple.rootless.install` is bekend om die Stelsels Integriteit Beskerming (SIP) op macOS te omseil. Dit is veral genoem in verband met [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/).
|
||||
|
||||
In hierdie spesifieke geval het die stelsel XPC-diens geleë by `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` hierdie regte. Dit stel die verwante proses in staat om SIP-beperkings te omseil. Verder bied hierdie diens 'n metode aan wat die beweging van lêers toelaat sonder om enige sekuriteitsmaatreëls af te dwing.
|
||||
In hierdie spesifieke geval het die stelsel XPC-diens geleë by `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` hierdie regte. Dit stel die verwante proses in staat om SIP-beperkings te omseil. Verder bied hierdie diens 'n metode wat die beweging van lêers toelaat sonder om enige sekuriteitsmaatreëls af te dwing.
|
||||
|
||||
## Geseëlde Stelsel Snapshot
|
||||
|
||||
|
@ -194,9 +211,9 @@ Hier is 'n meer gedetailleerde kyk:
|
|||
|
||||
1. **Onveranderlike Stelsel**: Geseëlde Stelsel Snapshots maak die macOS stelselvolume "onveranderlik", wat beteken dat dit nie gewysig kan word nie. Dit voorkom enige ongeoorloofde of toevallige veranderinge aan die stelsel wat sekuriteit of stelsels stabiliteit kan benadeel.
|
||||
2. **Stelsel Sagteware Opdaterings**: Wanneer jy macOS-opdaterings of opgraderings installeer, skep macOS 'n nuwe stelselsnapshot. Die macOS opstartvolume gebruik dan **APFS (Apple File System)** om na hierdie nuwe snapshot oor te skakel. Die hele proses van die toepas van opdaterings word veiliger en meer betroubaar aangesien die stelsel altyd na die vorige snapshot kan terugkeer as iets verkeerd gaan tydens die opdatering.
|
||||
3. **Data Skeiding**: In samewerking met die konsep van Data en Stelsel volume skeiding wat in macOS Catalina bekendgestel is, maak die Geseëlde Stelsel Snapshot kenmerk seker dat al jou data en instellings op 'n aparte "**Data**" volume gestoor word. Hierdie skeiding maak jou data onafhanklik van die stelsel, wat die proses van stelsels opdaterings vereenvoudig en stelsels sekuriteit verbeter.
|
||||
3. **Data Skeiding**: In samewerking met die konsep van Data en Stelsel volume skeiding wat in macOS Catalina bekendgestel is, maak die Geseëlde Stelsel Snapshot kenmerk seker dat al jou data en instellings op 'n aparte "**Data**" volume gestoor word. Hierdie skeiding maak jou data onafhanklik van die stelsel, wat die proses van stelselsopdaterings vereenvoudig en stelsels sekuriteit verbeter.
|
||||
|
||||
Onthou dat hierdie snapshots outomaties deur macOS bestuur word en nie addisionele spasie op jou skyf opneem nie, danksy die spasie deel vermoëns van APFS. Dit is ook belangrik om op te let dat hierdie snapshots verskillend is van **Time Machine snapshots**, wat gebruikers-toeganklike rugsteun van die hele stelsel is.
|
||||
Onthou dat hierdie snapshots outomaties deur macOS bestuur word en nie addisionele spasie op jou skyf opneem nie, danksy die spasie deel vermoëns van APFS. Dit is ook belangrik om te noem dat hierdie snapshots verskillend is van **Time Machine snapshots**, wat gebruikers-toeganklike rugsteun van die hele stelsel is.
|
||||
|
||||
### Kontroleer Snapshots
|
||||
|
||||
|
@ -248,23 +265,22 @@ Dit is ook moontlik om te **verifieer dat die seël geaktiveer is** deur te loop
|
|||
csrutil authenticated-root status
|
||||
Authenticated Root status: enabled
|
||||
```
|
||||
Boonop, die snapshot skyf is ook as **lees-slegs** gemonteer:
|
||||
Boonop is die snapshot skyf ook as **slegs-lees** gemonteer:
|
||||
```bash
|
||||
mount
|
||||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue