mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/nfs-no_root_squash
This commit is contained in:
parent
565f1f2b8c
commit
43f227d73f
@ -2,10 +2,10 @@
|
||||
|
||||
# Osnovne informacije o squashingu
|
||||
|
||||
NFS obično (posebno u linuxu) veruje u navedeni `uid` i `gid` od strane klijenta koji se povezuje za pristup datotekama (ako se ne koristi kerberos). Međutim, postoje neka podešavanja koja se mogu postaviti na serveru da **promene ovo ponašanje**:
|
||||
NFS obično (posebno na linuxu) veruje u navedeni `uid` i `gid` od strane klijenta koji se povezuje za pristup datotekama (ako se ne koristi kerberos). Međutim, postoje neka podešavanja koja se mogu postaviti na serveru da **promene ovo ponašanje**:
|
||||
|
||||
- **`all_squash`**: Squashuje sve pristupe mapirajući svakog korisnika i grupu na **`nobody`** (65534 unsigned / -2 signed). Stoga, svako je `nobody` i nijedan korisnik se ne koristi.
|
||||
- **`root_squash`/`no_all_squash`**: Ovo je podrazumevano na Linuxu i **samo squashuje pristup sa uid 0 (root)**. Stoga, svaki `UID` i `GID` se smatraju pouzdanim, ali `0` se squashuje na `nobody` (tako da nije moguća root impersonacija).
|
||||
- **`root_squash`/`no_all_squash`**: Ovo je podrazumevano na Linuxu i **samo squashuje pristup sa uid 0 (root)**. Stoga, svaki `UID` i `GID` se veruje, ali `0` se squashuje na `nobody` (tako da nije moguća root impersonacija).
|
||||
- **`no_root_squash`**: Ova konfiguracija, ako je omogućena, čak ni ne squashuje root korisnika. To znači da ako montirate direktorijum sa ovom konfiguracijom, možete mu pristupiti kao root.
|
||||
|
||||
U **/etc/exports** datoteci, ako pronađete neki direktorijum koji je konfigurisan kao **no_root_squash**, tada možete **pristupiti** njemu **kao klijent** i **pisati unutar** tog direktorijuma **kao** da ste lokalni **root** mašine.
|
||||
@ -13,7 +13,7 @@ U **/etc/exports** datoteci, ako pronađete neki direktorijum koji je konfiguris
|
||||
Za više informacija o **NFS** proverite:
|
||||
|
||||
{{#ref}}
|
||||
/network-services-pentesting/nfs-service-pentesting.md
|
||||
../../network-services-pentesting/nfs-service-pentesting.md
|
||||
{{#endref}}
|
||||
|
||||
# Eskalacija privilegija
|
||||
@ -23,7 +23,7 @@ Za više informacija o **NFS** proverite:
|
||||
Opcija 1 koristeći bash:
|
||||
- **Montiranje tog direktorijuma** na klijentskoj mašini, i **kao root kopiranje** unutar montirane fascikle **/bin/bash** binarnog fajla i davanje mu **SUID** prava, i **izvršavanje** tog bash binarnog fajla sa žrtvinske mašine.
|
||||
- Imajte na umu da da biste bili root unutar NFS deljenja, **`no_root_squash`** mora biti konfigurisan na serveru.
|
||||
- Međutim, ako nije omogućeno, mogli biste eskalirati na drugog korisnika kopirajući binarni fajl na NFS deljenje i dajući mu SUID dozvolu kao korisniku na kojeg želite da se eskalirate.
|
||||
- Međutim, ako nije omogućeno, mogli biste eskalirati na drugog korisnika kopirajući binarni fajl na NFS deljenje i dajući mu SUID dozvolu kao korisniku na koji želite da se eskalirate.
|
||||
```bash
|
||||
#Attacker, as root user
|
||||
mkdir /tmp/pe
|
||||
@ -36,8 +36,8 @@ chmod +s bash
|
||||
cd <SHAREDD_FOLDER>
|
||||
./bash -p #ROOT shell
|
||||
```
|
||||
Option 2 koristeći c kompajlirani kod:
|
||||
- **Montiranje te direktorije** na klijentskoj mašini, i **kao root kopiranje** unutar montirane fascikle našeg kompajliranog payload-a koji će zloupotrebiti SUID dozvolu, dati mu **SUID** prava, i **izvršiti sa žrtvovane** mašine taj binarni fajl (možete pronaći ovde neke [C SUID payload-e](payloads-to-execute.md#c)).
|
||||
Opcija 2 koristeći C kompajlirani kod:
|
||||
- **Montiranje te direktorije** na klijentskoj mašini, i **kao root kopiranje** unutar montirane fascikle našeg kompajliranog payload-a koji će zloupotrebiti SUID dozvolu, dati mu **SUID** prava, i **izvršiti sa žrtvinske** mašine taj binarni fajl (ovde možete pronaći neke [C SUID payload-e](payloads-to-execute.md#c)).
|
||||
- Iste restrikcije kao pre
|
||||
```bash
|
||||
#Attacker, as root user
|
||||
@ -56,13 +56,13 @@ cd <SHAREDD_FOLDER>
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da ako možete da kreirate **tunel sa vašeg računara na računar žrtve, još uvek možete koristiti Remote verziju da iskoristite ovu eskalaciju privilegija tunelovanjem potrebnih portova**.\
|
||||
> Sledeći trik se koristi u slučaju da datoteka `/etc/exports` **ukazuje na IP**. U ovom slučaju **nećete moći da koristite** u bilo kom slučaju **daljinski eksploit** i biće potrebno da **zloupotrebite ovaj trik**.\
|
||||
> Još jedan neophodan uslov za rad eksploita je da **izvoz unutar `/etc/export`** **mora koristiti `insecure` flag**.\
|
||||
> Sledeći trik se koristi u slučaju da datoteka `/etc/exports` **ukazuje na IP**. U ovom slučaju **nećete moći da koristite** u bilo kom slučaju **remote exploit** i biće potrebno da **zloupotrebite ovaj trik**.\
|
||||
> Još jedan neophodan uslov za rad eksploata je da **izvoz unutar `/etc/export`** **mora koristiti `insecure` flag**.\
|
||||
> --_Nisam siguran da li će ovaj trik raditi ako `/etc/export` ukazuje na IP adresu_--
|
||||
|
||||
## Osnovne Informacije
|
||||
|
||||
Scenario uključuje iskorišćavanje montiranog NFS dela na lokalnom računaru, koristeći grešku u NFSv3 specifikaciji koja omogućava klijentu da specificira svoj uid/gid, potencijalno omogućavajući neovlašćen pristup. Iskorišćavanje uključuje korišćenje [libnfs](https://github.com/sahlberg/libnfs), biblioteke koja omogućava falsifikovanje NFS RPC poziva.
|
||||
Scenario uključuje eksploataciju montiranog NFS dela na lokalnom računaru, koristeći grešku u NFSv3 specifikaciji koja omogućava klijentu da specificira svoj uid/gid, potencijalno omogućavajući neovlašćen pristup. Eksploatacija uključuje korišćenje [libnfs](https://github.com/sahlberg/libnfs), biblioteke koja omogućava falsifikovanje NFS RPC poziva.
|
||||
|
||||
### Kompilacija Biblioteke
|
||||
|
||||
@ -97,7 +97,7 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/
|
||||
```
|
||||
## Bonus: NFShell za prikriveni pristup datotekama
|
||||
|
||||
Kada se dobije root pristup, za interakciju sa NFS deljenjem bez promene vlasništva (da bi se izbegli tragovi), koristi se Python skripta (nfsh.py). Ova skripta prilagođava uid da odgovara onom datoteke koja se pristupa, omogućavajući interakciju sa datotekama na deljenju bez problema sa dozvolama:
|
||||
Kada se dobije root pristup, za interakciju sa NFS deljenjem bez promene vlasništva (da bi se izbegli tragovi), koristi se Python skripta (nfsh.py). Ova skripta podešava uid da odgovara onom datoteke koja se pristupa, omogućavajući interakciju sa datotekama na deljenju bez problema sa dozvolama:
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
# script from https://www.errno.fr/nfs_privesc.html
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
Značajan aspekt ovog protokola je obično nedostatak ugrađenih **mehanizama autentifikacije** ili **autorizacije**. Umesto toga, autorizacija se oslanja na **informacije o fajl sistemu**, pri čemu je server zadužen za tačno prevođenje **informacija o korisniku koje pruža klijent** u potrebni **format autorizacije** fajl sistema, prvenstveno prateći **UNIX sintaksu**.
|
||||
|
||||
Autentifikacija se obično oslanja na **UNIX `UID`/`GID` identifikatore i članstva u grupama**. Međutim, izazov nastaje zbog potencijalnog nesklada u **`UID`/`GID` mapiranjima** između klijenata i servera, ostavljajući bez prostora za dodatnu verifikaciju od strane servera. Štaviše, ovi detalji se šalju od strane klijenta i server im veruje, tako da zlonameran klijent može potencijalno **pretvarati se da je drugi korisnik šaljući privilegovanije `uid` i `gid`.
|
||||
Autentifikacija se obično oslanja na **UNIX `UID`/`GID` identifikatore i članstva u grupama**. Međutim, izazov nastaje zbog potencijalnog nesklada u **`UID`/`GID` mapiranjima** između klijenata i servera, ostavljajući bez prostora za dodatnu verifikaciju od strane servera. Štaviše, ovi detalji se šalju od strane klijenta i poveravaju serveru, tako da bi zlonameran klijent mogao potencijalno **pretvarati se da je drugi korisnik šaljući privilegovanije `uid` i `gid`.
|
||||
|
||||
**Međutim, imajte na umu da po defaultu nije moguće pretvarati se u `UID` 0 (root) koristeći NFS. Više o ovome u sekciji o squashing-u.**
|
||||
|
||||
@ -25,41 +25,41 @@ Za bolju (ili neku) autorizaciju, možete odrediti **hostove** koji mogu pristup
|
||||
/PATH/TO/EXPORT CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ...
|
||||
/media/disk/share 192.168.2.123(rw,sec=krb5p:krb5i)
|
||||
```
|
||||
As you can see, it allows to configure a specific **IP** or **hostname** to access the share. Only that address will be able to access the share.
|
||||
Kao što možete videti, omogućava konfiguraciju specifične **IP** adrese ili **hostname** za pristup deljenju. Samo ta adresa će moći da pristupi deljenju.
|
||||
|
||||
### Verzije
|
||||
|
||||
- **NFSv2**: Ova verzija je prepoznata po svojoj širokoj kompatibilnosti sa raznim sistemima, označavajući njen značaj sa početnim operacijama pretežno preko UDP-a. Kao **najstarija** u seriji, postavila je temelje za budući razvoj.
|
||||
- **NFSv2**: Ova verzija je prepoznata po širokoj kompatibilnosti sa raznim sistemima, označavajući njen značaj sa početnim operacijama pretežno preko UDP-a. Kao **najstarija** u seriji, postavila je temelje za budući razvoj.
|
||||
|
||||
- **NFSv3**: Uvedena sa nizom poboljšanja, NFSv3 je proširila svog prethodnika podržavajući promenljive veličine datoteka i nudeći poboljšane mehanizme izveštavanja o greškama. I pored svojih napredaka, suočila se sa ograničenjima u punoj unazadnoj kompatibilnosti sa NFSv2 klijentima.
|
||||
|
||||
- **NFSv4**: Prelomna verzija u NFS seriji, NFSv4 je donela niz funkcija dizajniranih da modernizuju deljenje datoteka preko mreža. Značajna poboljšanja uključuju integraciju Kerberosa za **visoku sigurnost**, mogućnost prolaska kroz vatrozide i rad preko Interneta bez potrebe za portmappers, podršku za liste kontrole pristupa (ACL), i uvođenje operacija zasnovanih na stanju. Njegova poboljšanja u performansama i usvajanje protokola sa stanjem izdvajaju NFSv4 kao ključni napredak u tehnologijama deljenja mrežnih datoteka.
|
||||
- **NFSv4**: Prelomna verzija u NFS seriji, NFSv4 je donela niz funkcija dizajniranih da modernizuju deljenje datoteka preko mreža. Značajna poboljšanja uključuju integraciju Kerberos-a za **visoku sigurnost**, mogućnost prolaska kroz vatrozidove i rad preko Interneta bez potrebe za portmape-ima, podršku za Liste Kontrole Pristupa (ACL), i uvođenje operacija zasnovanih na stanju. Njegova poboljšanja u performansama i usvajanje protokola zasnovanog na stanju izdvajaju NFSv4 kao ključni napredak u tehnologijama deljenja mrežnih datoteka.
|
||||
- Imajte na umu da je veoma čudno pronaći Linux host NFS koji podržava kerberos autentifikaciju.
|
||||
|
||||
Svaka verzija NFS-a je razvijena sa namerom da odgovori na evoluirajuće potrebe mrežnih okruženja, postepeno poboljšavajući sigurnost, kompatibilnost i performanse.
|
||||
|
||||
### Squashing
|
||||
|
||||
Kao što je ranije pomenuto, NFS obično veruje `uid` i `gid` klijenta za pristup datotekama (ako se kerberos ne koristi). Međutim, postoje neka podešavanja koja se mogu postaviti na serveru da **promene ovo ponašanje**:
|
||||
Kao što je ranije pomenuto, NFS obično veruje `uid` i `gid` klijenta za pristup datotekama (ako se ne koristi kerberos). Međutim, postoje neka podešavanja koja se mogu postaviti na serveru da **promene ovo ponašanje**:
|
||||
|
||||
- **all_squash**: Smanjuje sve pristupe mapirajući svakog korisnika i grupu na **`nobody`** (65534 unsigned / -2 signed). Stoga, svako je `nobody` i nijedan korisnik se ne koristi.
|
||||
- **root_squash/no_all_squash**: Ovo je podrazumevano na Linuxu i **smanjuje samo pristup sa uid 0 (root)**. Stoga, svaki `UID` i `GID` su povereni, ali `0` se smanjuje na `nobody` (tako da nije moguća root impersonacija).
|
||||
- **root_squash/no_all_squash**: Ovo je podrazumevano na Linux-u i **smanjuje pristup samo sa uid 0 (root)**. Stoga, svaki `UID` i `GID` su povereni, ali `0` se smanjuje na `nobody` (tako da nije moguća root impersonacija).
|
||||
- **no_root_squash**: Ova konfiguracija, ako je omogućena, čak ne smanjuje ni root korisnika. To znači da ako montirate direktorijum sa ovom konfiguracijom, možete mu pristupiti kao root.
|
||||
|
||||
### Provera podstabla
|
||||
### Subtree check
|
||||
|
||||
Dostupno samo na Linuxu. man(5) exports kaže: "Ako je poddirektorijum datotečnog sistema izvezen, ali ceo datotečni sistem nije, onda kada stigne NFS zahtev, server mora proveriti ne samo da li je pristupna datoteka u odgovarajućem datotečnom sistemu (što je lako) već i da li je u izvezenom stablu (što je teže). Ova provera se naziva provera podstabla."
|
||||
Dostupno samo na Linux-u. man(5) exports kaže: "Ako je poddirektorijum datotečnog sistema izvezen, ali ceo datotečni sistem nije, onda svaki put kada NFS zahtev stigne, server mora da proveri ne samo da li je pristupna datoteka u odgovarajućem datotečnom sistemu (što je lako) već i da li je u izvezenom stablu (što je teže). Ova provera se naziva provera podstabla."
|
||||
|
||||
Na Linuxu je **`subtree_check` funkcija onemogućena** po defaultu.
|
||||
Na Linux-u je **`subtree_check` funkcija onemogućena** po defaultu.
|
||||
|
||||
## Enumeracija
|
||||
|
||||
### Showmount
|
||||
|
||||
Ovo se može koristiti za **dobijanje informacija sa NFSv3 servera**, kao što su lista **izvozâ**, ko je **dozvoljen da pristupi** tim izvozima, i koji klijenti su povezani (što može biti netačno ako se klijent isključi bez obaveštavanja servera).
|
||||
U **NFSv4 klijenti jednostavno direktno pristupaju / export** i pokušavaju da pristupe izvozima odatle, neuspešno ako je nevažeće ili neautorizovano iz bilo kog razloga.
|
||||
Ovo se može koristiti za **dobijanje informacija sa NFSv3 servera**, kao što su lista **izvozâ**, ko ima **dozvolu za pristup** tim izvozima, i koji klijenti su povezani (što može biti netačno ako se klijent isključi bez obaveštavanja servera).
|
||||
U **NFSv4 klijenti direktno pristupaju / export** i pokušavaju da pristupe izvozima odatle, neuspešno ako je nevažeće ili neautorizovano iz bilo kog razloga.
|
||||
|
||||
Ako alatke poput `showmount` ili Metasploit moduli ne prikazuju informacije sa NFS porta, to je potencijalno NFSv4 server koji ne podržava verziju 3.
|
||||
Ako alati poput `showmount` ili Metasploit modula ne prikazuju informacije sa NFS porta, to je potencijalno NFSv4 server koji ne podržava verziju 3.
|
||||
```bash
|
||||
showmount -e <IP>
|
||||
```
|
||||
@ -108,7 +108,7 @@ Naravno, jedini problem ovde je što po defaultu nije moguće imitirati root (`U
|
||||
Proverite stranicu:
|
||||
|
||||
{{#ref}}
|
||||
/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
|
||||
../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
|
||||
{{#endref}}
|
||||
|
||||
### Bekstvo iz eksportovanih foldera
|
||||
@ -119,7 +119,7 @@ Dakle, ako je eksportovan folder koji je **podfolder** **celog fajl sistema**, m
|
||||
|
||||
Na primer, ako NFS server eksportuje `/srv/` i `/var/` je u istom fajl sistemu, moguće je čitati logove iz `/var/log/` ili smestiti webshell u `/var/www/`.
|
||||
|
||||
Štaviše, imajte na umu da je po defaultu samo root (0) korisnik zaštićen od imitacije (proverite odeljak Squash). Međutim, ako je fajl **u vlasništvu roota, ali grupa nije 0, moguće je pristupiti mu**. Na primer, fajl `/etc/shadow` je u vlasništvu roota, ali grupa je `shadow` (gid 42 na Debijanu). Dakle, moguće je pročitati ga po defaultu!
|
||||
Štaviše, imajte na umu da je po defaultu samo root (0) korisnik zaštićen od imitacije (proverite odeljak Squash). Međutim, ako je fajl **u vlasništvu root-a, ali grupa nije 0, moguće je pristupiti mu**. Na primer, fajl `/etc/shadow` je u vlasništvu root-a, ali grupa je `shadow` (gid 42 na Debijanu). Dakle, moguće je pročitati ga po defaultu!
|
||||
|
||||
Alat **`nfs_analyze`** sa [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) je napravljen da podrži ovaj napad protiv fajl sistema ext4, xfs, btrfs u verziji 3 (takođe bi trebalo da bude moguće u v4).
|
||||
|
||||
@ -136,13 +136,13 @@ Da biste lako listali, montirali i menjali UID i GID kako biste imali pristup fa
|
||||
```
|
||||
## Opasne postavke
|
||||
|
||||
- **Dozvole za čitanje i pisanje (`rw`):** Ova postavka omogućava i čitanje i pisanje na datotečnom sistemu. Važno je razmotriti posledice davanja tako širokog pristupa.
|
||||
- **Dozvole za čitanje i pisanje (`rw`):** Ova postavka omogućava i čitanje i pisanje u fajl sistem. Važno je razmotriti posledice davanja tako širokog pristupa.
|
||||
|
||||
- **Korišćenje nesigurnih portova (`insecure`):** Kada je omogućeno, ovo omogućava sistemu da koristi portove iznad 1024. Bezbednost portova iznad ovog opsega može biti manje stroga, povećavajući rizik.
|
||||
|
||||
- **Vidljivost ugnježdenih datotečnih sistema (`nohide`):** Ova konfiguracija čini direktorijume vidljivim čak i ako je drugi datotečni sistem montiran ispod izvezenog direktorijuma. Svakom direktorijumu je potrebna sopstvena izvozna stavka za pravilno upravljanje.
|
||||
- **Vidljivost ugnježdenih fajl sistema (`nohide`):** Ova konfiguracija čini direktorijume vidljivim čak i ako je drugi fajl sistem montiran ispod izvezenog direktorijuma. Svaki direktorijum zahteva svoj vlastiti izvozni unos za pravilno upravljanje.
|
||||
|
||||
- **Vlasništvo nad datotekama korisnika root (`no_root_squash`):** Sa ovom postavkom, datoteke koje kreira korisnik root zadržavaju svoj originalni UID/GID od 0, zanemarujući princip minimalnih privilegija i potencijalno dodeljujući prekomerne dozvole.
|
||||
- **Vlasništvo fajlova od strane root korisnika (`no_root_squash`):** Sa ovom postavkom, fajlovi koje kreira root korisnik zadržavaju svoj originalni UID/GID od 0, zanemarujući princip minimalnih privilegija i potencijalno dodeljujući prekomerne dozvole.
|
||||
|
||||
- **Nesmanjenje svih korisnika (`no_all_squash`):** Ova opcija osigurava da identiteti korisnika budu očuvani širom sistema, što može dovesti do problema sa dozvolama i kontrolom pristupa ako se ne upravlja pravilno.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user