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

This commit is contained in:
Translator 2024-04-23 19:38:24 +00:00
parent 548599634c
commit 9bc3c15c03
4 changed files with 250 additions and 46 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 @@
# Zaštita libc biblioteke
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
## Prinudno poravnanje delova
**Malloc** dodeljuje memoriju u grupama od **8 bajtova (32-bitni) ili 16 bajtova (64-bitni)**. To znači da bi kraj delova u 32-bitnim sistemima trebalo da se poravna sa **0x8**, a u 64-bitnim sistemima sa **0x0**. Bezbednosna funkcija proverava da li se svaki deo **pravilno poravna** na ovim specifičnim lokacijama pre korišćenja pokazivača iz bin-a.
### Bezbednosne prednosti
Prinudno poravnanje delova u 64-bitnim sistemima značajno poboljšava bezbednost Malloc-a tako što **ograničava postavljanje lažnih delova na samo 1 od svakih 16 adresa**. Ovo otežava napore za eksploataciju, posebno u scenarijima gde korisnik ima ograničenu kontrolu nad ulaznim vrednostima, čineći napade složenijim i težim za uspešno izvršavanje.
* **Napad na Fastbin preko \_\_malloc\_hook**
Nove pravila poravnanja u Malloc-u takođe sprečavaju klasičan napad koji uključuje `__malloc_hook`. Prethodno, napadači su mogli manipulisati veličinom dela da bi **prepisali ovaj pokazivač funkcije** i stekli **izvršavanje koda**. Sada, stroga zahtevnost poravnanja osigurava da takve manipulacije više nisu izvodljive, zatvarajući uobičajenu rutu eksploatacije i poboljšavajući ukupnu bezbednost.
## Mutilacija pokazivača na fastbin-ovima i tcache-u
**Mutilacija pokazivača** je bezbednosno unapređenje koje se koristi za zaštitu **fastbin i tcache Fd pokazivača** u operacijama upravljanja memorijom. Ova tehnika pomaže u sprečavanju određenih vrsta taktika eksploatacije memorije, posebno onih koje ne zahtevaju procurele informacije o memoriji ili koje direktno manipulišu lokacijama memorije u odnosu na poznate pozicije (relativno **prepisivanje**).
Srce ove tehnike je formula za zamagljivanje:
**`Novi_Ptr = (L >> 12) XOR P`**
* **L** je **Lokacija Skladištenja** pokazivača.
* **P** je stvarni **fastbin/tcache Fd Pokazivač**.
Razlog za bitovno pomeranje lokacije skladištenja (L) za 12 bitova udesno pre XOR operacije je ključan. Ova manipulacija rešava ranjivost inherentnu u determinističkoj prirodi najmanje značajnih 12 bitova adresa memorije, koji su obično predvidljivi zbog ograničenja arhitekture sistema. Pomeranjem bitova, predvidljivi deo se izbacuje iz jednačine, poboljšavajući nasumičnost novog, mutiliranog pokazivača i time štiteći se od eksploatacija koje se oslanjaju na predvidljivost ovih bitova.
Ovaj mutilirani pokazivač koristi postojeću nasumičnost koju pruža **Randomizacija Izgleda Adresnog Prostora (ASLR)**, koja nasumično raspoređuje adrese koje koriste programi kako bi otežala napadačima da predvide raspored memorije procesa.
**Demutilacija** pokazivača radi povratka originalne adrese uključuje korišćenje iste XOR operacije. Ovde se mutilirani pokazivač tretira kao P u formuli, i kada se XOR-uje sa nepromenjenom lokacijom skladištenja (L), rezultira otkrivanjem originalnog pokazivača. Ova simetrija u mutilaciji i demutilaciji osigurava da sistem može efikasno enkodirati i dekodirati pokazivače bez značajnog opterećenja, dok istovremeno značajno povećava bezbednost protiv napada koji manipulišu pokazivačima memorije.
### Bezbednosne prednosti
Mutilacija pokazivača ima za cilj da **spreči delimično i potpuno prepisivanje pokazivača u heap** upravljanju, što je značajno unapređenje u bezbednosti. Ova funkcija utiče na tehnike eksploatacije na nekoliko načina:
1. **Sprečavanje Prepisivanja Relativnih Bajtova**: Prethodno, napadači su mogli promeniti deo pokazivača da bi **preusmerili delove heap-a na različite lokacije bez poznavanja tačnih adresa**, tehnika vidljiva u eksploataciji **House of Roman** bez procurele informacije. Sa mutilacijom pokazivača, takva relativna prepisivanja **bez procurele heap-a sada zahtevaju grubu silu**, značajno smanjujući verovatnoću uspeha.
2. **Povećana Težina Napada na Tcache Bin/Fastbin**: Uobičajeni napadi koji prepisuju pokazivače funkcija (poput `__malloc_hook`) manipulacijom unosa fastbin-a ili tcache-a su otežani. Na primer, napad može uključivati procurelu LibC adrese, oslobađanje dela u tcache bin, a zatim prepisivanje Fd pokazivača da bi ga preusmerio na `__malloc_hook` za izvršavanje proizvoljnog koda. Sa mutilacijom pokazivača, ovi pokazivači moraju biti pravilno mutilirani, **zahtevajući procurelu heap-a za tačnu manipulaciju**, čime se podiže barijera eksploatacije.
3. **Potreba za Procurenim Heap Adresama na Ne-Heap Lokacijama**: Kreiranje lažnog dela na ne-heap lokacijama (kao što su stek, .bss sekcija ili PLT/GOT) sada takođe **zahteva procurelu heap-a** zbog potrebe za mutilacijom pokazivača. Ovo povećava složenost eksploatisanja ovih oblasti, slično zahtevu za manipulisanjem LibC adresa.
4. **Procurenje Adresa Heap-a Postaje Izazovnije**: Mutilacija pokazivača ograničava korisnost Fd pokazivača u fastbin i tcache bin-ovima kao izvora za procurene adrese heap-a. Međutim, pokazivači u nesortiranim, malim i velikim bin-ovima ostaju nemutilirani, i dalje korisni za procurene adrese. Ova promena tera napadače da istraže ove bin-ove za iskoristive informacije, iako neke tehnike i dalje mogu omogućiti demutilaciju pokazivača pre procure, iako uz određena ograničenja.
### **Demutilacija pokazivača sa procurelom heap-a**
{% hint style="danger" %}
Za bolje objašnjenje procesa [**proverite originalni post ovde**](https://maxwelldulin.com/BlogPost?post=5445977088).
{% endhint %}
### Pregled Algoritma
Formula korišćena za mutilaciju i demutilaciju pokazivača je:&#x20;
**`Novi_Ptr = (L >> 12) XOR P`**
Gde je **L** lokacija skladištenja, a **P** je Fd pokazivač. Kada se **L** pomeri udesno za 12 bitova, otkrivaju se najznačajniji bitovi **P**, zbog prirode **XOR**, koji daje 0 kada se bitovi XOR-uju sa samim sobom.
**Ključni Koraci u Algoritmu:**
1. **Početna Procena Najznačajnijih Bitova**: XOR-ovanjem pomerene **L** sa **P**, efikasno dobijate gornjih 12 bitova **P** jer će pomerena deo **L** biti nula, ostavljajući odgovarajuće bitove **P** nepromenjene.
2. **Obnova Bitova Pokazivača**: Pošto je XOR reverzibilan, znajući rezultat i jedan od operanada vam omogućava da izračunate drugi operand. Ova osobina se koristi za zaključivanje celog skupa bitova za **P** sukcesivnim XOR-ovanjem poznatih setova bitova sa delovima mutiliranog pokazivača.
3. **Iterativna Demutilacija**: Proces se ponavlja, svaki put koristeći novo otkrivene bitove **P** iz prethodnog koraka za dekodiranje sledećeg segmenta mutiliranog pokazivača, dok se ne oporave svi bitovi.
4. **Rukovanje Determinističkim Bitovima**: Poslednjih 12 bitova **L** su izgubljeni zbog pomeranja, ali su deterministički i mogu se rekonstruisati nakon procesa.
Implementaciju ovog algoritma možete pronaći ovde: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
## Zaštita pokazivača
Zaštita pokazivača je tehnika zaštite od eksploatacije koja se koristi u glibc-u kako bi se zaštitili uskladišteni pokazivači funkcija, posebno oni registrovani pozivima biblioteke poput `atexit()`. Ova zaštita uključuje mešanje pokazivača XOR operacijom sa tajnom uskladištenom u podacima niti (`fs:0x30`) i primenom bitovske rotacije. Ovaj mehanizam ima za cilj da spreči napadače da preuzmu kontrolu toka izvršavanja preko prepisivanja pokazivača funkcija.
### **Bajpasovanje zaštite pokazivača pomoću curenja informacija**
1. **Razumevanje operacija zaštite pokazivača:** Mešanje pokazivača se vrši korišćenjem makroa `PTR_MANGLE` koji XOR-uje pokazivač sa 64-bitnom tajnom, a zatim vrši levu rotaciju za 0x11 bitova. Obrnuta operacija za vraćanje originalnog pokazivača se obavlja pomoću `PTR_DEMANGLE`.
2. **Strategija napada:** Napad se zasniva na pristupu poznatog teksta, gde napadač mora znati kako izgledaju originalna i mešana verzija pokazivača kako bi zaključio tajnu koja se koristi za mešanje.
3. **Eksploatisanje poznatih tekstova:**
* **Identifikacija fiksnih pokazivača funkcija:** Proučavanjem izvornog koda glibc-a ili inicijalizovanih tabela pokazivača funkcija (kao što su `__libc_pthread_functions`), napadač može pronaći predvidljive pokazivače funkcija.
* **Računanje tajne:** Korišćenjem poznatog pokazivača funkcije poput `__pthread_attr_destroy` i njegove mešane verzije iz tabele pokazivača funkcija, tajna se može izračunati vraćanjem rotacije (desna rotacija) mešanog pokazivača, a zatim XOR-ovanjem sa adresom funkcije.
4. **Alternativni poznati tekstovi:** Napadač takođe može eksperimentisati sa mešanjem pokazivača poznatim vrednostima poput 0 ili -1 kako bi videli da li ove vrednosti proizvode prepoznatljive obrasce u memoriji, potencijalno otkrivajući tajnu kada se ovi obrasci pronađu u isecima memorije.
5. **Praktična primena:** Nakon što se izračuna tajna, napadač može manipulisati pokazivačima na kontrolisan način, suštinski zaobilazeći zaštitu pokazivača u višenitnoj aplikaciji sa znanjem o baznoj adresi libc-a i sposobnošću čitanja proizvoljnih lokacija u memoriji.
## Reference
* [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

@ -6,9 +6,9 @@
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
@ -46,13 +46,17 @@ cpio -i < Scripts
```
## Osnovne informacije o DMG-u
DMG datoteke, ili Apple Disk Images, su format datoteka koji koristi macOS kompanije Apple za disk slike. DMG datoteka je suštinski **montabilna disk slika** (sadrži svoj sopstveni fajl sistem) koja sadrži sirove blok podatke obično kompresovane i ponekad enkriptovane. Kada otvorite DMG datoteku, macOS je **montira kao da je fizički disk**, omogućavajući vam pristup njenom sadržaju.
DMG datoteke, ili Apple Disk Images, su format datoteka koji koristi macOS kompanije Apple za disk slike. DMG datoteka je suštinski **montabilna disk slika** (sadrži sopstveni fajl sistem) koja sadrži sirove blok podatke obično kompresovane i ponekad enkriptovane. Kada otvorite DMG datoteku, macOS je **montira kao da je fizički disk**, omogućavajući vam pristup njenom sadržaju.
{% hint style="danger" %}
Imajte na umu da **`.dmg`** instalateri podržavaju **toliko formata** da su u prošlosti neki od njih koji su sadržavali ranjivosti zloupotrebljeni kako bi se dobio **izvršni kod kernela**.
{% endhint %}
### Hijerarhija
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međutim, za aplikacije u DMG formatu, obično prati ovu strukturu:
Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međutim, za aplikativne DMG-ove, obično prati ovu strukturu:
- Gornji nivo: Ovo je koren disk slike. Često sadrži aplikaciju i možda link ka folderu Aplikacije.
- Aplikacija (.app): Ovo je stvarna aplikacija. U macOS-u, aplikacija je obično paket koji sadrži mnogo pojedinačnih fajlova i foldera koji čine aplikaciju.
@ -62,13 +66,13 @@ Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međut
### Izvršavanje iz javnih direktorijuma
Ako se skript za pre ili post instalaciju na primer izvršava iz **`/var/tmp/Installerutil`**, napadač može kontrolisati tu skriptu kako bi eskalirao privilegije svaki put kada se izvrši. Ili još jedan sličan primer:
Ako se skript za pre ili post instalaciju na primer izvršava iz **`/var/tmp/Installerutil`**, a napadač može da kontroliše tu skriptu, može da eskalira privilegije svaki put kada se izvrši. Ili još jedan sličan primer:
<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
Ovo je [javna funkcija](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) koju će nekoliko instalatera i ažuriranja pozvati da **izvrše nešto kao root**. Ova funkcija prihvata **putanju** **fajla** koji se **izvršava** kao parametar, međutim, ako napadač može **modifikovati** ovaj fajl, biće u mogućnosti da **zloupotrebi** njegovo izvršavanje sa root privilegijama kako bi **eskaliro privilegije**.
Ovo je [javna funkcija](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) koju će nekoliko instalatera i ažuriranja pozvati da **izvrše nešto kao root**. Ova funkcija prihvata **putanju** **fajla** koji se **izvršava** kao parametar, međutim, ako napadač može da **modifikuje** ovaj fajl, moći će da **zloupotrebi** njegovo izvršavanje sa root privilegijama da bi **eskaliro privilegije**.
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
@ -76,15 +80,15 @@ Ovo je [javna funkcija](https://developer.apple.com/documentation/security/15400
```
### Izvršenje putem montiranja
Ako instalater piše u `/tmp/fixedname/bla/bla`, moguće je **napraviti montiranje** preko `/tmp/fixedname` bez vlasnika tako da možete **izmeniti bilo koji fajl tokom instalacije** kako biste zloupotrebili proces instalacije.
Ako instalater piše u `/tmp/fixedname/bla/bla`, moguće je **napraviti montiranje** preko `/tmp/fixedname` bez vlasnika tako da možete **modifikovati bilo koji fajl tokom instalacije** kako biste zloupotrijebili proces instalacije.
Primer za ovo je **CVE-2021-26089** koji je uspeo da **prepiše periodični skript** kako bi dobio izvršenje kao root. Za više informacija pogledajte ovaj razgovor: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
Primer za ovo je **CVE-2021-26089** koji je uspeo da **prepiše periodični skript** kako bi dobio izvršenje kao root. Za više informacija pogledajte ovaj talk: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg kao zlonamerni softver
### Prazan Payload
Moguće je jednostavno generisati **`.pkg`** fajl sa **pre i post-install skriptama** bez ikakvog payload-a.
Moguće je generisati **`.pkg`** fajl sa **pre i post-install skriptama** bez ikakvog payload-a.
### JS u Distribution xml
@ -96,3 +100,4 @@ Moguće je dodati **`<script>`** tagove u **distribution xml** fajl paketa i taj
* [**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)
* [**DEF CON 27 - Unpacking Pkgs A Look Inside MacOS Installer Packages**](https://www.youtube.com/watch?v=kCXhIYtODBg)

View file

@ -6,9 +6,9 @@
Drugi načini podrške HackTricks-u:
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
@ -20,8 +20,8 @@ Dozvole u **direktorijumu**:
* **čitanje** - možete **izlistati** unose u direktorijumu
* **pisanje** - možete **brisati/pisati** **fajlove** u direktorijumu i možete **brisati prazne foldere**.
* Ali **ne možete obrisati/izmeniti neprazne foldere** osim ako imate dozvole za pisanje nad njima.
* Ne možete **izmeniti ime foldera** osim ako ste vlasnik.
* Ali ne možete **brisati/modifikovati neprazne foldere** osim ako imate dozvole za pisanje nad njima.
* Ne možete modifikovati ime foldera osim ako ga posedujete.
* **izvršavanje** - dozvoljeno vam je **traverzovati** direktorijum - ako nemate ovu dozvolu, ne možete pristupiti bilo kojim fajlovima unutra, ili u bilo kojim poddirektorijumima.
### Opasne Kombinacije
@ -32,23 +32,23 @@ Dozvole u **direktorijumu**:
* Jedan roditeljski **direktorijum vlasnik** u putanji je **grupa korisnika** sa **pristupom pisanju**
* Grupa korisnika ima **pristup pisanju** fajlu
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** simboličnu ili tvrdu vezu na očekivanu putanju kako bi dobio privilegovanu proizvoljnu izmenu.
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** simbolički ili tvrdi **link** na očekivanu putanju kako bi dobio privilegovano proizvoljno pisanje.
### Poseban slučaj Folder root R+X
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, oni nisu **dostupni nikome drugom**. Dakle, ranjivost koja omogućava **pomeranje fajla koji je čitljiv za korisnika**, a koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može biti zloupotrebljena da bi se pročitali ti fajlovi.
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, ti fajlovi **nisu dostupni nikome drugom**. Dakle, ranjivost koja omogućava **pomeranje fajla koji je čitljiv za korisnika**, a koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može biti zloupotrebljena da bi se pročitali ti fajlovi.
Primer u: [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)
## Simbolična veza / Tvrda veza
## Simbolički Link / Tvrdi Link
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **manje privilegovanog korisnika**, ili koji bi mogao biti **prethodno kreiran** od strane manje privilegovanog korisnika. Korisnik jednostavno može **usmeriti** na drugi fajl putem simbolične ili tvrde veze, i privilegovani proces će pisati na taj fajl.
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **korisnika sa manje privilegija**, ili koji bi mogao biti **prethodno kreiran** od strane korisnika sa manje privilegija. Korisnik jednostavno može **usmeriti** na drugi fajl putem Simboličkog ili Tvrdog linka, i privilegovani proces će pisati na taj fajl.
Proverite u drugim sekcijama gde napadač može **zloupotrebiti proizvoljno pisanje da bi eskalirao privilegije**.
## .fileloc
Fajlovi sa **`.fileloc`** ekstenzijom mogu pokazivati na druge aplikacije ili binarne fajlove tako da kada se otvore, aplikacija/binarni fajl će biti izvršen.\
Fajlovi sa ekstenzijom **`.fileloc`** mogu pokazivati na druge aplikacije ili binarne fajlove tako da kada se otvore, aplikacija/binarni fajl će biti izvršen.\
Primer:
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -68,15 +68,15 @@ Ako možete naterati **proces da otvori datoteku ili fasciklu sa visokim privile
Na primer: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
## Izbegavajte trikove sa xattrs karantenom
## Trikovi za izbegavanje xattrs karantina
### Uklonite je
### Uklonite ga
```bash
xattr -d com.apple.quarantine /path/to/file_or_app
```
### uchg / uchange / uimmutable flag
### uchg / uchange / uimmutable zastava
Ako datoteka/folder ima ovaj nepromenljivi atribut, neće biti moguće staviti xattr na nju.
Ako datoteka/folder ima ovaj atribut nepromenljivosti, neće biti moguće staviti xattr na nju.
```bash
echo asd > /tmp/asd
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
@ -99,7 +99,7 @@ xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
```
### writeextattr ACL
Ova ACL sprečava dodavanje `xattrs` datoteci
Ova ACL sprečava dodavanje `xattrs` datoteci.
```bash
rm -rf /tmp/test*
echo test >/tmp/test
@ -122,13 +122,13 @@ ls -le /tmp/test
```
### **com.apple.acl.text xattr + AppleDouble**
**AppleDouble** format datoteka kopira datoteku zajedno sa njenim ACE-ovima.
**AppleDouble** format datoteke kopira datoteku zajedno sa svojim ACE-ovima.
U [**izvornom kodu**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) moguće je videti da se ACL tekstualna reprezentacija čuva unutar xattr-a nazvanog **`com.apple.acl.text`** i postavlja se kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-ova u nju... karantinski xattr nije postavljen u aplikaciju:
Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija.
Da biste replicirali ovo, prvo morate dobiti tačan ACL string:
Da biste replicirali ovo, prvo moramo dobiti tačan ACL string:
```bash
# Everything will be happening here
mkdir /tmp/temp_xattrs
@ -146,9 +146,9 @@ ditto -c -k del test.zip
ditto -x -k --rsrc test.zip .
ls -le test
```
(Napomena da čak i ako ovo radi, sandbox upisuje karantin xattr pre)
(Notea da čak i ako ovo funkcioniše, sandbox upisuje karantinski xattr pre)
Nije baš potrebno, ali ostavljam to tamo, samo u slučaju:
Nije baš potrebno, ali ostavljam to tamo samo u slučaju:
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
@ -156,9 +156,9 @@ Nije baš potrebno, ali ostavljam to tamo, samo u slučaju:
## Zaobilaženje Koda Potpisa
Bundles sadrže datoteku **`_CodeSignature/CodeResources`** koja sadrži **hash** svake pojedinačne **datoteke** u **bundle**-u. Napomena da je hash CodeResources-a takođe **ugrađen u izvršnu datoteku**, tako da s tim ne možemo manipulisati.
Bundles sadrže datoteku **`_CodeSignature/CodeResources`** koja sadrži **hash** svake pojedinačne **datoteke** u **bundle**-u. Imajte na umu da je hash CodeResources-a takođe **ugrađen u izvršnu datoteku**, tako da s tim ne možemo manipulisati.
Međutim, postoje neke datoteke čiji potpis neće biti proveren, one imaju ključ omit u plist-u, kao što su:
Međutim, postoje neke datoteke čji potpis neće biti proveren, one imaju ključ za izostavljanje u plist-u, kao što je:
```xml
<dict>
...
@ -208,7 +208,7 @@ openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/
```
## Montiranje dmg datoteka
Korisnik može montirati prilagođenu dmg datoteku čak i preko nekih postojećih fascikli. Evo kako biste mogli kreirati prilagođeni dmg paket sa prilagođenim sadržajem:
Korisnik može montirati prilagođenu dmg datoteku čak i preko nekih postojećih fascikli. Evo kako možete kreirati prilagođeni dmg paket sa prilagođenim sadržajem:
```bash
# Create the volume
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
@ -231,20 +231,20 @@ hdiutil create -srcfolder justsome.app justsome.dmg
```
{% endcode %}
Obično macOS montira disk razgovarajući sa `com.apple.DiskArbitrarion.diskarbitrariond` Mach servisom (koji pruža `/usr/libexec/diskarbitrationd`). Ako dodate parametar `-d` u LaunchDaemons plist datoteku i ponovo pokrenete, ona će čuvati logove u `/var/log/diskarbitrationd.log`.\
Međutim, moguće je koristiti alate poput `hdik` i `hdiutil` za direktnu komunikaciju sa `com.apple.driver.DiskImages` kextom.
Obično macOS montira disk razgovarajući sa `com.apple.DiskArbitrarion.diskarbitrariond` Mach servisom (koji pruža `/usr/libexec/diskarbitrationd`). Ako dodate parametar `-d` u LaunchDaemons plist fajl i ponovo pokrenete, on će čuvati logove u `/var/log/diskarbitrationd.log`.\
Međutim, moguće je koristiti alate poput `hdik` i `hdiutil` da komunicirate direktno sa `com.apple.driver.DiskImages` kextom.
## Proizvoljni upisi
### Periodični sh skriptovi
Ako vaša skripta može biti interpretirana kao **shell skripta** možete prepisati **`/etc/periodic/daily/999.local`** shell skriptu koja će biti pokrenuta svakog dana.
Ako vaša skripta može biti tumačena kao **shell skripta** možete prebrisati **`/etc/periodic/daily/999.local`** shell skriptu koja će biti pokrenuta svakog dana.
Možete **falsifikovati** izvršenje ove skripte sa: **`sudo periodic daily`**
### Demoni
Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** sa plist datotekom koja izvršava proizvoljnu skriptu poput:
Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** sa plist-om koji izvršava proizvoljnu skriptu kao:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -261,21 +261,19 @@ Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hackt
</dict>
</plist>
```
### Generisanje skripte `/Applications/Scripts/privesc.sh` sa **komandama** koje želite da pokrenete kao root.
### Sudoers File
### Datoteka Sudoers
Ako imate **proizvoljan zapis**, možete kreirati fajl unutar foldera **`/etc/sudoers.d/`** dodeljujući sebi **sudo** privilegije.
Ako imate **proizvoljan zapis**, možete kreirati datoteku unutar fascikle **`/etc/sudoers.d/`** koja vam dodeljuje **sudo** privilegije.
### PATH fajlovi
### Putanje datoteka
Fajl **`/etc/paths`** je jedno od glavnih mesta koje popunjava PATH env promenljivu. Morate biti root da biste ga prepisali, ali ako skripta iz **privilegovanog procesa** izvršava neku **komandu bez punog puta**, možda ćete moći da je **preuzmete** modifikujući ovaj fajl.
Datoteka **`/etc/paths`** je jedno od glavnih mesta koje popunjava promenljivu okruženja PATH. Morate biti root da biste je prepisali, ali ako skripta iz **privilegovanog procesa** izvršava neku **komandu bez punog puta**, možda ćete moći da je **preuzmete** modifikujući ovu datoteku.
Takođe možete pisati fajlove u **`/etc/paths.d`** da učitate nove foldere u `PATH` env promenljivu.
Takođe možete pisati datoteke u **`/etc/paths.d`** da učitate nove fascikle u promenljivu okruženja `PATH`.
## Generišite fajlove sa dozvolom pisanja kao drugi korisnici
## Generisanje datoteka sa dozvolom pisanja kao drugi korisnici
Ovo će generisati datoteku koja pripada root-u i koju mogu da pišem ja ([**kod odavde**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Ovo takođe može raditi kao privesc:
Ovo će generisati fajl koji pripada root-u koji je moguće pisati od strane mene ([**kod odavde**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Ovo takođe može raditi kao privesc:
```bash
DIRNAME=/usr/local/etc/periodic/daily
@ -287,6 +285,112 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
FILENAME=$(ls "$DIRNAME")
echo $FILENAME
```
## POSIX Deljena memorija
**POSIX deljena memorija** omogućava procesima u operativnim sistemima koji su u skladu sa POSIX standardom da pristupe zajedničkom memorijskom prostoru, olakšavajući bržu komunikaciju u poređenju sa drugim metodama međuprocesne komunikacije. Uključuje kreiranje ili otvaranje objekta deljene memorije pomoću `shm_open()`, postavljanje njegove veličine pomoću `ftruncate()`, i mapiranje u prostor adresa procesa pomoću `mmap()`. Procesi mogu direktno čitati i pisati u ovaj memorijski prostor. Za upravljanje konkurentnim pristupom i sprečavanje korupcije podataka, često se koriste mehanizmi sinhronizacije poput meksičkih bravica ili semafora. Na kraju, procesi odjavljuju i zatvaraju deljenu memoriju pomoću `munmap()` i `close()`, i opciono uklanjaju objekat memorije pomoću `shm_unlink()`. Ovaj sistem je posebno efikasan za efikasnu, brzu IPC u okruženjima gde više procesa treba brzo pristupiti deljenim podacima.
<details>
<summary>Primer koda proizvođača</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>Primer potrošačkog koda</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 Čuvani deskriptori
**macOS čuvani deskriptori** su sigurnosna funkcija uvedena u macOS-u kako bi se poboljšala sigurnost i pouzdanost operacija sa **deskriptorima datoteka** u korisničkim aplikacijama. Ovi čuvani deskriptori pružaju način da se povežu određena ograničenja ili "čuvari" sa deskriptorima datoteka, koje sprovodi jezgro.
Ova funkcija je posebno korisna za sprečavanje određenih klasa sigurnosnih ranjivosti kao što su **neovlašćen pristup datotekama** ili **trke uslova**. Ove ranjivosti se javljaju kada na primer jedna nit pristupa deskripciji datoteke dajući **drugoj ranjivoj niti pristup nad njom** ili kada deskriptor datoteke **nasleđuje** ranjiv deteći proces. Neke funkcije povezane sa ovom funkcionalnošću su:
* `guarded_open_np`: Otvori FD sa čuvarom
* `guarded_close_np`: Zatvori ga
* `change_fdguard_np`: Promeni čuvarske zastave na deskriptoru (čak i uklanjanje zaštite čuvara)
## Reference
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
@ -295,9 +399,9 @@ echo $FILENAME
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
Drugi načini da podržite HackTricks:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**