Translated ['binary-exploitation/common-binary-protections-and-bypasses/

This commit is contained in:
Translator 2024-04-23 19:37:29 +00:00
parent 08d0451619
commit bfb5e09b65
4 changed files with 241 additions and 55 deletions

View file

@ -725,6 +725,7 @@
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
* [Ret2ret & Reo2pop](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md)
* [CET & Shadow Stack](binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md)
* [Libc Protections](binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md)
* [Memory Tagging Extension (MTE)](binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md)
* [No-exec / NX](binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md)
* [PIE](binary-exploitation/common-binary-protections-and-bypasses/pie/README.md)

View file

@ -0,0 +1,94 @@
# Libc Beskerming
<details>
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Stuk Uitlynhandhawing
**Malloc** ken geheue toe in **8-byte (32-bit) of 16-byte (64-bit) groeperings**. Dit beteken die einde van stukke in 32-bit stelsels moet belyn met **0x8**, en in 64-bit stelsels met **0x0**. Die sekuriteitsfunksie kontroleer dat elke stuk **korrek belyn** is by hierdie spesifieke plekke voordat 'n aanwyser van 'n bak gebruik word.
### Sekuriteitsvoordele
Die handhawing van stuk uitlyn in 64-bit stelsels verbeter Malloc se sekuriteit aansienlik deur die **plaas van valse stukke te beperk tot slegs 1 uit elke 16 adresse**. Dit bemoeilik uitbuitingspogings aansienlik, veral in scenario's waar die gebruiker beperkte beheer oor insetwaardes het, wat aanvalle meer kompleks en moeiliker maak om suksesvol uit te voer.
* **Fastbin Aanval op \_\_malloc\_hook**
Die nuwe uitlynreëls in Malloc keer ook 'n klassieke aanval met betrekking tot die `__malloc_hook`. Voorheen kon aanvallers stukgroottes manipuleer om hierdie funksieaanwyser te **oorheers** en **kode-uitvoering** te verkry. Nou verseker die streng uitlynvereiste dat sulke manipulasies nie meer lewensvatbaar is nie, wat 'n algemene uitbuitingsroete sluit en die algehele sekuriteit verbeter.
## Aanwyserverminking op fastbins en tcache
**Aanwyserverminking** is 'n sekuriteitsverbetering wat gebruik word om **fastbin en tcache Fd aanwysers** in geheuebestuurhandelinge te beskerm. Hierdie tegniek help om sekere tipes geheue-uitbuitingstaktieke te voorkom, spesifiek dié wat nie gelekte geheue-inligting vereis nie of wat geheueposisies direk relatief tot bekende posisies manipuleer (relatiewe **oorheersing**).
Die kern van hierdie tegniek is 'n verduisteringsformule:
**`Nuwe_Aanwyser = (L >> 12) XOR P`**
* **L** is die **Stoorplek** van die aanwyser.
* **P** is die werklike **fastbin/tcache Fd Aanwyser**.
Die rede vir die bietjieverskuiwing van die stoorplek (L) met 12 bietjies na regs voor die XOR-operasie is krities. Hierdie manipulasie spreek 'n kwesbaarheid aan wat inherent is aan die bepaalde aard van die minst betekenisvolle 12 bietjies van geheueadresse, wat tipies voorspelbaar is as gevolg van stelselargitektuurbeperkings. Deur die bietjies te skuif, word die voorspelbare gedeelte uit die vergelyking verwyder, wat die willekeurigheid van die nuwe, verminkte aanwyser verbeter en sodoende teen uitbuitings beskerm wat op die voorspelbaarheid van hierdie bietjies staatmaak.
Hierdie verminkte aanwyser maak gebruik van die bestaande willekeurigheid wat deur **Adresruimte-uitlegverandering (ASLR)** voorsien word, wat adresse wat deur programme gebruik word, willekeurig maak om dit moeilik vir aanvallers te maak om die geheuelêer van 'n proses te voorspel.
**Aanwyserontverminking** om die oorspronklike adres te herwin behels die gebruik van dieselfde XOR-operasie. Hier word die verminkte aanwyser as P in die formule behandel, en wanneer dit met die onveranderde stoorplek (L) XOR is, lei dit daartoe dat die oorspronklike aanwyser onthul word. Hierdie simmetrie in verminking en ontverminking verseker dat die stelsel aanwysers doeltreffend kan kodeer en ontkodeer sonder beduidende oorhoofse, terwyl dit die sekuriteit teen aanvalle wat geheueaanwysers manipuleer, aansienlik verhoog.
### Sekuriteitsvoordele
Aanwyserverminking beoog om **gedeeltelike en volledige aanwyseroorheersing in die hoop** bestuur, 'n beduidende verbetering in sekuriteit. Hierdie kenmerk beïnvloed uitbuitingstegnieke op verskeie maniere:
1. **Voorkoming van Bye Byte Relatiewe Oorheersing**: Voorheen kon aanvallers 'n deel van 'n aanwyser verander om **geheuestukke na verskillende plekke om te lei sonder om die presiese adresse te ken**, 'n tegniek wat duidelik is in die leklose **House of Roman**-uitbuiting. Met aanwyserverminking vereis sulke relatiewe oorheersing **sonder 'n geheuelek nou brute force**, wat hul suksesmoontlikheid drasties verminder.
2. **Verhoogde Moeilikheid van Tcache Bin/Fastbin Aanvalle**: Gewone aanvalle wat funksieaanwysers oorskryf (soos `__malloc_hook`) deur fastbin of tcache inskrywings te manipuleer, word gehinder. Byvoorbeeld, 'n aanval kan 'n LibC-adres lek, 'n stuk in die tcache-bin vrymaak, en dan die Fd-aanwyser oorskryf om dit na `__malloc_hook` te stuur vir willekeurige kode-uitvoering. Met aanwyserverminking moet hierdie aanwysers korrek vermink word, **wat 'n geheuelek vir akkurate manipulasie noodsaak**, en verhoog dus die uitbuitingsdrempel.
3. **Vereiste vir Geheuelekke in Nie-Geheuelposisies**: Die skep van 'n valse stuk in nie-geheue-areas (soos die stok, .bss-afdeling, of PLT/GOT) vereis nou ook 'n geheuelek weens die behoefte aan aanwyserverminking. Dit verleng die kompleksiteit van die uitbuiting van hierdie areas, soortgelyk aan die vereiste vir die manipulasie van LibC-adresse.
4. **Die lek van Geheueadresse word meer uitdagend**: Aanwyserverminking beperk die bruikbaarheid van Fd-aanwysers in fastbin en tcache-bakke as bronne vir geheueadreslekkasies. Tog bly aanwysers in ongesorteerde, klein, en groot bakke onvermink, dus steeds bruikbaar vir die lek van adresse. Hierdie skuif dwing aanvallers om hierdie bakke te ondersoek vir uitbuitbare inligting, alhoewel sommige tegnieke steeds mag toelaat om aanwysers te ontvermink voordat 'n lek plaasvind, alhoewel met beperkings.
### **Ontverminking van Aanwysers met 'n Geheuelek**
{% hint style="danger" %}
Vir 'n beter verduideliking van die proses [**kyk na die oorspronklike pos vanaf hier**](https://maxwelldulin.com/BlogPost?post=5445977088).
{% endhint %}
### Algoritme-oorsig
Die formule wat gebruik word vir die verminking en ontverminking van aanwysers is:&#x20;
**`Nuwe_Aanwyser = (L >> 12) XOR P`**
Waar **L** die stoorplek is en **P** die Fd-aanwyser is. Wanneer **L** regs verskuif word met 12 bietjies, kry jy effektief die boonste 12 bietjies van **P** omdat die verskuifde gedeelte van **L** nul sal wees, wat **P** se ooreenstemmende bietjies onveranderd laat.
**Belangrike Stappe in die Algoritme:**
1. **Aanvanklike Lek van die Mees Betekenisvolle Bietjies**: Deur die verskuifde **L** met **P** te XOR, kry jy effektief die boonste 12 bietjies van **P** omdat die verskuifde gedeelte van **L** nul sal wees, wat **P** se ooreenstemmende bietjies onveranderd laat.
2. **Herwinning van Aanwyserbietjies**: Aangesien XOR omkeerbaar is, laat die kennis van die resultaat en een van die operandes jou toe om die ander operand te bereken. Hierdie eienskap word gebruik om die hele stel bietjies vir **P** af te lei deur bekende stelle bietjies suksesvol met dele van die verminkte aanwyser te XOR.
3. **Iteratiewe Ontverminking**: Die proses word herhaal, elke keer met die nuut ontdekte bietjies van **P** van die vorige stap om die volgende segment van die verminkte aanwyser te ontsluit, totdat alle bietjies herwin is.
4. **Hantering van Bepaalde Bietjies**: Die finale 12 bietjies van **L** gaan verlore weens die verskuif, maar hulle is bepaal en kan na die proses herkonstrueer word.
Jy kan 'n implementering van hierdie algoritme hier vind: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
## Pointer Wagtwoord
Pointer wagtwoord is 'n uitbuitingstegniek wat gebruik word in glibc om gestoorde funksie-aanwysers te beskerm, veral dié wat geregistreer is deur biblioteekoproepe soos `atexit()`. Hierdie beskerming behels die deurmekaarklits van die aanwysers deur hulle met 'n geheim wat gestoor word in die draaddata (`fs:0x30`) te XOR en 'n bitwyses rotasie toe te pas. Hierdie meganisme is daarop gemik om aanvallers te verhoed om beheervloei te kap nie deur funksie-aanwysers te oorskryf nie.
### **Bypassing Pointer Wagtwoord met 'n lek**
1. **Begrip van Pointer Wagtwoord Operasies:** Die deurmekaarklits (mangling) van aanwysers word gedoen met behulp van die `PTR_MANGLE` makro wat die aanwyser met 'n 64-bis geheim XOR en dan 'n linkse rotasie van 0x11-bits uitvoer. Die omgekeerde operasie om die oorspronklike aanwyser te herwin, word hanteer deur `PTR_DEMANGLE`.
2. **Aanvalstrategie:** Die aanval is gebaseer op 'n bekende-teksbenadering, waar die aanvaller beide die oorspronklike en die deurmekaargemaakte weergawes van 'n aanwyser moet ken om die geheim wat gebruik word vir deurmekaarklitting af te lei.
3. **Uitbuiting van Bekende Teks:**
* **Identifisering van Vaste Funksie-Aanwysers:** Deur glibc-bronkode te ondersoek of geïnisialiseerde funksie-aanwyser-tabelle (soos `__libc_pthread_functions`) te ondersoek, kan 'n aanvaller voorspelbare funksie-aanwysers vind.
* **Berekening van die Geheim:** Deur 'n bekende funksie-aanwyser soos `__pthread_attr_destroy` te gebruik en sy deurmekaargemaakte weergawe van die funksie-aanwyser-tabel, kan die geheim bereken word deur die deurmekaargemaakte aanwyser omgekeerd te roteer (regs rotasie) en dit dan met die adres van die funksie te XOR.
4. **Alternatiewe Teks:** Die aanvaller kan ook eksperimenteer met die deurmekaarklitting van aanwysers met bekende waardes soos 0 of -1 om te sien of hierdie identifiseerbare patrone in geheue produseer, wat moontlik die geheim kan onthul wanneer hierdie patrone in geheue-afleidings gevind word.
5. **Praktiese Toepassing:** Na die berekening van die geheim kan 'n aanvaller aanwysers op 'n beheerde wyse manipuleer, wat in wese die Pointer Wagtwoordbeskerming in 'n multidraadtoepassing kan omseil met kennis van die libc-basisadres en die vermoë om willekeurige geheue-plekke te lees.
## Verwysings
* [https://maxwelldulin.com/BlogPost?post=5445977088](https://maxwelldulin.com/BlogPost?post=5445977088)
* [https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1](https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1)

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
@ -10,25 +10,25 @@ Ander maniere om HackTricks te ondersteun:
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou hakwerktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Pkg Basiese Inligting
'n macOS **installeerpakket** (ook bekend as 'n `.pkg` lêer) is 'n lêerformaat wat deur macOS gebruik word om **sagteware te versprei**. Hierdie lêers is soos 'n **kas wat alles bevat wat 'n stuk sagteware** nodig het om korrek te installeer en te hardloop.
'n macOS **installeerderpakkie** (ook bekend as 'n `.pkg` lêer) is 'n lêerformaat wat deur macOS gebruik word om **sagteware te versprei**. Hierdie lêers is soos 'n **kas wat alles bevat wat 'n stuk sagteware** nodig het om korrek te installeer en te hardloop.
Die pakketlêer self is 'n argief wat 'n **hiërargie van lêers en gide wat op die teikenrekenaar geïnstalleer sal word** bevat. Dit kan ook **skripte** insluit om take voor en na die installasie uit te voer, soos die opstel van konfigurasie lêers of die skoonmaak van ou weergawes van die sagteware.
Die pakkie-lêer self is 'n argief wat 'n **hiërargie van lêers en gideons bevat wat op die teikenrekenaar geïnstalleer sal word**. Dit kan ook **skripte** insluit om take voor en na die installasie uit te voer, soos die opstel van konfigurasie lêers of die opruiming van ou weergawes van die sagteware.
### Hiërargie
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
* **Verspreiding (xml)**: Aanpassings (titel, welkomsteks...) en skrip/installasie kontroles
* **PackageInfo (xml)**: Inligting, installeer vereistes, installeer ligging, paaie na skripte om uit te voer
* **Distribusie (xml)**: Aanpassings (titel, welkomsteks...) en skrip/installasie kontroles
* **PackageInfo (xml)**: Inligting, installeer vereistes, installeerligging, paaie na skripte om uit te voer
* **Materiaalstaat (bom)**: Lys van lêers om te installeer, op te dateer of te verwyder met lêerregte
* **Vrag (CPIO argief gzip saamgedruk)**: Lêers om te installeer in die `installeer-ligging` vanaf PackageInfo
* **Skripte (CPIO argief gzip saamgedruk)**: Voor en na installasie skripte en meer bronne wat na 'n tydelike gids onttrek word vir uitvoering.
* **Vrag (CPIO argief gzip saamgedruk)**: Lêers om te installeer in die `installeerligging` vanaf PackageInfo
* **Skripte (CPIO argief gzip saamgedruk)**: Voor en na installasie skripte en meer bronne wat onttrek word na 'n tydlike gids vir uitvoering.
### Ontsaam
```bash
@ -46,43 +46,45 @@ cpio -i < Scripts
```
## DMG Basiese Inligting
DMG-lêers, of Apple Skyfafbeeldings, is 'n lêerformaat wat deur Apple se macOS vir skyfafbeeldings gebruik word. 'n DMG-lêer is essensieel 'n **monteerbare skyfafbeelding** (dit bevat sy eie lêersisteem) wat gewoonlik saamgepers en soms versleutelde rou blokdata bevat. Wanneer jy 'n DMG-lêer oopmaak, **monteer macOS dit asof dit 'n fisiese skyf** is, wat jou in staat stel om by sy inhoud te kom.
DMG-lêers, of Apple Skyfafbeeldings, is 'n lêerformaat wat deur Apple se macOS vir skyfafbeeldings gebruik word. 'n DMG-lêer is essensieel 'n **monteerbare skyfafbeelding** (dit bevat sy eie lêersisteem) wat gewoonlik saamgepers en soms versleutelde rou blokdata bevat. Wanneer jy 'n DMG-lêer oopmaak, **monteer macOS dit asof dit 'n fisiese skyf was**, wat jou in staat stel om by sy inhoud te kom.
{% hint style="danger" %}
Let daarop dat **`.dmg`** installateurs **so baie formate** ondersteun dat in die verlede sommige van hulle wat kwesbaarhede bevat het, misbruik is om **kernel-kode-uitvoering** te verkry.
{% endhint %}
### Hiërargie
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
Die hiërargie van 'n DMG-lêer kan verskil op grond van die inhoud. Vir aansoek DMGs volg dit gewoonlik hierdie struktuur:
Die hiërargie van 'n DMG-lêer kan verskil op grond van die inhoud. Vir aansoek-DMGs volg dit gewoonlik hierdie struktuur:
- Bo-vlak: Dit is die wortel van die skyfafbeelding. Dit bevat dikwels die aansoek en moontlik 'n skakel na die Toepassings-vouer.
- Aansoek (.app): Dit is die werklike aansoek. In macOS is 'n aansoek tipies 'n pakkie wat baie individuele lêers en vouers bevat wat die aansoek uitmaak.
- Toepassingskakel: Dit is 'n kortpad na die Toepassings-vouer in macOS. Die doel hiervan is om dit vir jou maklik te maak om die aansoek te installeer. Jy kan die .app-lêer na hierdie kortpad sleep om die aansoek te installeer.
## Privesc via pkg misbruik
## Privesc via pkg-misbruik
### Uitvoering vanaf openbare gids
As 'n voor- of na-installasieskrip byvoorbeeld uitvoer vanaf **`/var/tmp/Installerutil`**, en 'n aanvaller kan daardie skrip beheer sodat hy voorregte kan eskaleer wanneer dit uitgevoer word. Of 'n ander soortgelyke voorbeeld:
As 'n voor- of na-installasieskrip byvoorbeeld vanaf **`/var/tmp/Installerutil`** uitgevoer word, en 'n aanvaller daardie skrip kan beheer, kan hy voorregte eskaleer wanneer dit uitgevoer word. Of 'n ander soortgelyke voorbeeld:
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption><p><a href="https://www.youtube.com/watch?v=kCXhIYtODBg">https://www.youtube.com/watch?v=kCXhIYtODBg</a></p></figcaption></figure>
### AuthorizationExecuteWithPrivileges
Dit is 'n [openbare funksie](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) wat verskeie installeerders en opdateerders sal aanroep om iets as root uit te voer. Hierdie funksie aanvaar die **pad** van die **lêer** om as parameter **uit te voer**, maar as 'n aanvaller hierdie lêer kon **verander**, sal hy in staat wees om sy uitvoering met root te **misbruik** om voorregte te **eskaleer**.
Dit is 'n [openbare funksie](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) wat verskeie installateurs en opdateraars sal aanroep om iets as root uit te voer. Hierdie funksie aanvaar die **pad** van die **lêer** om as parameter **uit te voer**, maar as 'n aanvaller hierdie lêer kon **verander**, sal hy in staat wees om sy uitvoering met root te **misbruik** om voorregte te **eskaleer**.
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
```
Vir meer inligting, kyk na hierdie aanbieding: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
### Uitvoering deur te koppel
### Uitvoering deur montering
As 'n installeerder skryf na `/tmp/fixedname/bla/bla`, is dit moontlik om **'n montering te skep** oor `/tmp/fixedname` met geen eienaars, sodat jy **enige lêer tydens die installasie kan wysig** om die installasieproses te misbruik.
Indien 'n installeerder skryf na `/tmp/fixedname/bla/bla`, is dit moontlik om **'n koppeling te skep** oor `/tmp/fixedname` met geen eienaars, sodat jy **enige lêer tydens die installasie kan wysig** om die installasieproses te misbruik.
'n Voorbeeld hiervan is **CVE-2021-26089** wat daarin geslaag het om 'n periodieke skripsie te **oorwryf om uitvoering as root te kry**. Vir meer inligting, kyk na die aanbieding: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg as malware
## pkg as skadelike sagteware
### Leë Vrag
@ -98,17 +100,4 @@ Dit is moontlik om **`<script>`** etikette by die **verspreidings-xml** lêer va
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
* [**DEF CON 27 - Unpacking Pkgs A Look Inside MacOS Installer Packages**](https://www.youtube.com/watch?v=kCXhIYtODBg)

View file

@ -8,7 +8,7 @@ Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
@ -22,7 +22,7 @@ Toestemmings in 'n **gids**:
* **skryf** - jy kan **lêers skryf/verwyder** in die gids en jy kan **leë mappe verwyder**.
* Maar jy **kan nie nie-leë mappe verwyder/wysig** tensy jy skryftoestemmings daaroor het nie.
* Jy **kan nie die naam van 'n map wysig** tensy jy die eienaar daarvan is nie.
* **uitvoer** - jy is **toegelaat om deur** die gids te beweeg - as jy nie hierdie reg het nie, kan jy nie enige lêers daarin, of in enige subgidse, toegang nie.
* **uitvoer** - jy is **toegelaat om deur** die gids te beweeg - as jy nie hierdie reg het nie, kan jy nie enige lêers daarin, of in enige subdossiers, bereik nie.
### Gevaarlike Kombinasies
@ -32,23 +32,23 @@ Toestemmings in 'n **gids**:
* Een ouer **gids eienaar** in die pad is 'n **gebruikersgroep** met **skryftoegang**
* 'n Gebruikers **groep** het **skryf** toegang tot die **lêer**
Met enige van die vorige kombinasies kan 'n aanvaller 'n **sym/hard skakel** inspuit na die verwagte pad om 'n bevoorregte willekeurige skryf te verkry.
Met enige van die vorige kombinasies kan 'n aanvaller 'n **sym/harde skakel inspuit** na die verwagte pad om 'n bevoorregte willekeurige skryf te verkry.
### Gidsroet R+X Spesiale geval
As daar lêers in 'n **gids** is waar **slegs root R+X-toegang** het, is daardie lêers **nie toeganklik vir enigiemand anders nie**. Dus kan 'n kwesbaarheid wat toelaat om 'n lêer leesbaar deur 'n gebruiker te **skuif**, wat nie gelees kan word as gevolg van daardie **beperking**, van hierdie gids **na 'n ander een**, misbruik word om hierdie lêers te lees.
As daar lêers in 'n **gids** is waar **slegs root R+X-toegang het**, is daardie lêers **nie toeganklik vir enigiemand anders nie**. Dus kan 'n kwesbaarheid wat toelaat om 'n lêer leesbaar deur 'n gebruiker te **skuif**, wat nie gelees kan word as gevolg van daardie **beperking**, van hierdie gids **na 'n ander een**, misbruik word om hierdie lêers te lees.
Voorbeeld in: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
## Simboliese Skakel / Harde Skakel
As 'n bevoorregte proses data skryf in 'n **lêer** wat deur 'n **laer bevoorregte gebruiker beheer** kan word, of wat voorheen deur 'n laer bevoorregte gebruiker geskep kon word. Die gebruiker kan dit net **na 'n ander lêer wys** deur 'n Simboliese of Harde skakel, en die bevoorregte proses sal op daardie lêer skryf.
As 'n bevoorregte proses data skryf in 'n **lêer** wat deur 'n **laer bevoorregte gebruiker beheer** kan word, of wat **vooraf geskep** kan word deur 'n laer bevoorregte gebruiker. Die gebruiker kan dit net **na 'n ander lêer wys** deur 'n Simboliese of Harde skakel, en die bevoorregte proses sal op daardie lêer skryf.
Kyk na die ander afdelings waar 'n aanvaller 'n willekeurige skryf kan misbruik om voorregte te eskaleer.
Kyk na die ander afdelings waar 'n aanvaller 'n **willekeurige skryf kan misbruik om voorregte te eskaleer**.
## .fileloc
Lêers met die **`.fileloc`** uitbreiding kan na ander toepassings of binêre lêers wys sodat wanneer hulle oopgemaak word, die toepassing/binêre lêer uitgevoer sal word.\
Lêers met die **`.fileloc`** uitbreiding kan na ander toepassings of binêre lêers wys sodat wanneer hulle oopgemaak word, die toepassing/binêre lêer die een sal wees wat uitgevoer word.\
Voorbeeld:
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -122,9 +122,9 @@ ls -le /tmp/test
```
### **com.apple.acl.text xattr + AppleDouble**
**AppleDouble**-lêerformaat kopieer 'n lêer saam met sy ACE's.
**AppleDouble** lêerformaat kopieer 'n lêer saam met sy ACEs.
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 word, as ACL in die gedekomprimeerde lêer ingestel gaan word. Dus, as jy 'n aansoek in 'n zip-lêer met die **AppleDouble**-lêerformaat saam met 'n ACL wat voorkom dat ander xattrs daaraan geskryf word, saamgedruk het... die karantyn-xattr is nie in die aansoek ingestel 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-teksvoorstelling wat binne die xattr genoem word **`com.apple.acl.text`** gestoor word, as ACL in die gedekomprimeerde lêer ingestel gaan word. Dus, as jy 'n aansoek in 'n zip-lêer met die **AppleDouble** lêerformaat saam met 'n ACL wat voorkom dat ander xattrs daarin geskryf kan word, saamgedruk het... die karantyn xattr was nie in die aansoek ingestel nie:
Kyk na die [**oorspronklike verslag**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) vir meer inligting.
@ -146,7 +146,7 @@ ditto -c -k del test.zip
ditto -x -k --rsrc test.zip .
ls -le test
```
(Moenie vergeet dat selfs as dit werk die sandboks skryf die karantyn xattr voor)
(Note that selfs as dit werk die sandboks skryf die karantyn xattr voor)
Nie regtig nodig nie, maar ek los dit daar net in geval:
@ -211,8 +211,6 @@ openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/
## Monteer dmgs
'n Gebruiker kan 'n aangepaste dmg selfs bo-op bestaande lêers monteer. Dit is hoe jy 'n aangepaste dmg-pakket met aangepaste inhoud kan skep:
{% code overflow="wrap" %}
```bash
# Create the volume
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
@ -238,7 +236,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg
Gewoonlik koppel macOS skyf deur met die `com.apple.DiskArbitrarion.diskarbitrariond` Mach-diens te praat (verskaf deur `/usr/libexec/diskarbitrationd`). As die parameter `-d` by die LaunchDaemons plist-lêer gevoeg word en herlaai word, sal dit logboeke stoor in `/var/log/diskarbitrationd.log`.\
Dit is egter moontlik om gereedskap soos `hdik` en `hdiutil` te gebruik om direk met die `com.apple.driver.DiskImages` kext te kommunikeer.
## Willekeurige Skrywings
## Willekeurige Skrywes
### Periodieke sh-skripte
@ -265,21 +263,19 @@ Skryf 'n willekeurige **LaunchDaemon** soos **`/Library/LaunchDaemons/xyz.hacktr
</dict>
</plist>
```
### Genereer die skrip `/Applications/Scripts/privesc.sh` met die **opdragte** wat jy as root wil hardloop.
### Sudoers-lêer
As jy **willekeurige skryfregte** het, kan jy 'n lêer binne die gids **`/etc/sudoers.d/`** skep wat jou **sudo**-bevoegdhede toeken.
Indien jy **willekeurige skryfregte** het, kan jy 'n lêer binne die **`/etc/sudoers.d/`**-map skep wat jou **sudo**-bevoegdhede toeken.
### PAD-lêers
Die lêer **`/etc/paths`** is een van die belangrikste plekke wat die PAD-omgewingsveranderlike populeer. Jy moet root wees om dit te oorskryf, maar as 'n skrip van 'n **bevoorregte proses** 'n **opdrag sonder die volledige pad** uitvoer, kan jy dit dalk **kaap** deur hierdie lêer te wysig.
Die lêer **`/etc/paths`** is een van die hoofplekke wat die PAD-omgewingsveranderlike populeer. Jy moet 'n hoofgebruiker wees om dit te oorskryf, maar as 'n skriffie van 'n **bevoorregte proses** 'n paar **opdragte sonder die volledige pad** uitvoer, kan jy dit dalk **kaap** deur hierdie lêer te wysig.
Jy kan ook lêers skryf in **`/etc/paths.d`** om nuwe gids in die `PAD`-omgewingsveranderlike te laai.
Jy kan ook lêers skryf in **`/etc/paths.d`** om nuwe vouers in die `PAD`-omgewingsveranderlike te laai.
## Genereer skryfbare lêers as ander gebruikers
## Skep skryfbare lêers as ander gebruikers
Dit sal 'n lêer genereer wat aan root behoort en deur my geskryf kan word ([**kode vanaf hier**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Dit kan ook werk as 'n privesc:
Dit sal 'n lêer genereer wat aan root behoort en deur my oorskryf kan word ([**kode vanaf hier**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Dit mag ook werk vir bevoorregte eskalasie:
```bash
DIRNAME=/usr/local/etc/periodic/daily
@ -291,13 +287,119 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
FILENAME=$(ls "$DIRNAME")
echo $FILENAME
```
## POSIX Gedeelde Geheue
**POSIX gedeelde geheue** maak dit vir prosesse in POSIX-samewerkende bedryfstelsels moontlik om 'n gemeenskaplike geheue-areas te benader, wat vinniger kommunikasie fasiliteer in vergelyking met ander interproses kommunikasiemetodes. Dit behels die skep of oopmaak van 'n gedeelde geheue-object met `shm_open()`, die instelling van sy grootte met `ftruncate()`, en die koppel dit in die proses se adresruimte met `mmap()`. Prosesse kan dan direk van hierdie geheue-area lees en daarnaartoe skryf. Om gelyktydige toegang te bestuur en datakorrupsie te voorkom, word sinchronisasie meganismes soos mutexes of semafore dikwels gebruik. Laastens, prosesse maak die gedeelde geheue ongedaan en sluit dit met `munmap()` en `close()`, en verwyder opsioneel die geheue-object met `shm_unlink()`. Hierdie stelsel is veral doeltreffend vir doeltreffende, vinnige IPC in omgewings waar meervoudige prosesse vinnig toegang tot gedeelde data benodig.
<details>
<summary>Vervaardiger Kode Voorbeeld</summary>
```c
// gcc producer.c -o producer -lrt
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *name = "/my_shared_memory";
const int SIZE = 4096; // Size of the shared memory object
// Create the shared memory object
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
if (shm_fd == -1) {
perror("shm_open");
return EXIT_FAILURE;
}
// Configure the size of the shared memory object
if (ftruncate(shm_fd, SIZE) == -1) {
perror("ftruncate");
return EXIT_FAILURE;
}
// Memory map the shared memory
void *ptr = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
return EXIT_FAILURE;
}
// Write to the shared memory
sprintf(ptr, "Hello from Producer!");
// Unmap and close, but do not unlink
munmap(ptr, SIZE);
close(shm_fd);
return 0;
}
```
</details>
<details>
<summary>Verbruikerskodevoorbeeld</summary>
```c
// gcc consumer.c -o consumer -lrt
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *name = "/my_shared_memory";
const int SIZE = 4096; // Size of the shared memory object
// Open the shared memory object
int shm_fd = shm_open(name, O_RDONLY, 0666);
if (shm_fd == -1) {
perror("shm_open");
return EXIT_FAILURE;
}
// Memory map the shared memory
void *ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
return EXIT_FAILURE;
}
// Read from the shared memory
printf("Consumer received: %s\n", (char *)ptr);
// Cleanup
munmap(ptr, SIZE);
close(shm_fd);
shm_unlink(name); // Optionally unlink
return 0;
}
```
</details>
## macOS Bewaakte Beskrywers
**macOS bewaakte beskrywers** is 'n veiligheidskenmerk wat in macOS ingevoer is om die veiligheid en betroubaarheid van **lêerbeskrywer-operasies** in gebruikersprogramme te verbeter. Hierdie bewaakte beskrywers bied 'n manier om spesifieke beperkings of "wagte" te assosieer met lêerbeskrywers, wat deur die kernel afgedwing word.
Hierdie kenmerk is veral nuttig om sekere klasse van veiligheidskwesbaarhede soos **onbevoegde lêertoegang** of **wedloopvoorwaardes** te voorkom. Hierdie kwesbaarhede kom voor wanneer byvoorbeeld 'n draad 'n lêerbeskrywing benader wat **'n ander kwesbare draad toegang daartoe gee** of wanneer 'n lêerbeskrywer **oorerf** word deur 'n kwesbare kinderproses. Sommige funksies wat verband hou met hierdie funksionaliteit is:
* `guarded_open_np`: Maak 'n FD oop met 'n wag
* `guarded_close_np`: Maak dit toe
* `change_fdguard_np`: Verander wagvlaggies op 'n beskrywer (selfs om die wagbeskerming te verwyder)
## Verwysings
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
@ -305,6 +407,6 @@ Ander maniere om HackTricks te ondersteun:
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>