AppArmor
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AppArmor je poboljšanje jezgra dizajnirano da ograniči resurse dostupne programima kroz profile po programu, efikasno implementirajući Obaveznu Kontrolu Pristupa (MAC) vezivanjem atributa kontrole pristupa direktno za programe umesto za korisnike. Ovaj sistem funkcioniše tako što učitava profile u jezgro, obično tokom pokretanja, a ovi profili određuju koje resurse program može da pristupi, kao što su mrežne veze, pristup sirovim soketima i dozvole za datoteke.
Postoje dva operativna moda za AppArmor profile:
Režim sprovođenja: Ovaj režim aktivno sprovodi politike definisane unutar profila, blokirajući radnje koje krše te politike i beležeći sve pokušaje da ih prekrše kroz sisteme kao što su syslog ili auditd.
Režim žalbe: Za razliku od režima sprovođenja, režim žalbe ne blokira radnje koje su protiv politike profila. Umesto toga, beleži ove pokušaje kao kršenja politike bez sprovođenja ograničenja.
Kernel Module: Odgovoran za sprovođenje politika.
Policies: Specifikuju pravila i ograničenja za ponašanje programa i pristup resursima.
Parser: Učitava politike u jezgro za sprovođenje ili izveštavanje.
Utilities: Ovo su programi u korisničkom režimu koji pružaju interfejs za interakciju i upravljanje AppArmor-om.
Apparmor profili se obično čuvaju u /etc/apparmor.d/
Sa sudo aa-status
moći ćete da navedete binarne datoteke koje su ograničene nekim profilom. Ako možete da promenite karakter "/" u tačku u putanji svake navedene binarne datoteke, dobićete ime apparmor profila unutar pomenutog foldera.
Na primer, apparmor profil za /usr/bin/man biće lociran u /etc/apparmor.d/usr.bin.man
Da biste označili pogođeni izvršni fajl, apsolutne putanje i džokeri su dozvoljeni (za globovanje fajlova) za specificiranje fajlova.
Da biste označili pristup koji će binarni fajl imati nad fajlovima, mogu se koristiti sledeće kontrole pristupa:
r (čitati)
w (pisati)
m (mapiranje u memoriju kao izvršno)
k (zaključavanje fajlova)
l (kreiranje tvrdih linkova)
ix (izvršiti drugi program sa novim programom koji nasleđuje politiku)
Px (izvršiti pod drugim profilom, nakon čišćenja okruženja)
Cx (izvršiti pod profilom deteta, nakon čišćenja okruženja)
Ux (izvršiti bez ograničenja, nakon čišćenja okruženja)
Promenljive se mogu definisati u profilima i mogu se manipulisati izvan profila. Na primer: @{PROC} i @{HOME} (dodajte #include <tunables/global> u fajl profila)
Pravila odbijanja su podržana da bi nadjačala pravila dozvole.
Da biste lako započeli kreiranje profila, apparmor vam može pomoći. Moguće je da apparmor ispita radnje koje izvršava binarni fajl i zatim vam omogući da odlučite koje radnje želite da dozvolite ili odbijete. Samo treba da pokrenete:
Zatim, u drugoj konzoli izvršite sve radnje koje će binarni fajl obično izvršiti:
Zatim, u prvoj konzoli pritisnite "s" i zatim u zabeleženim radnjama označite da li želite da ignorišete, dozvolite ili nešto drugo. Kada završite, pritisnite "f" i novi profil će biti kreiran u /etc/apparmor.d/path.to.binary
Korišćenjem tastera sa strelicama možete izabrati šta želite da dozvolite/odbacite/šta god
Takođe možete kreirati šablon apparmor profila za binarni fajl sa:
Imajte na umu da po default-u u kreiranom profilu ništa nije dozvoljeno, tako da je sve odbijeno. Moraćete da dodate linije poput /etc/passwd r,
da biste dozvolili binarnom čitanje /etc/passwd
, na primer.
Možete zatim sprovoditi novi profil sa
Sledeći alat će pročitati logove i pitati korisnika da li želi da dozvoli neke od otkrivenih zabranjenih akcija:
Korišćenjem tastera sa strelicama možete odabrati šta želite da dozvolite/odbijete/šta god
Primer AUDIT i DENIED logova iz /var/log/audit/audit.log izvršnog fajla service_bin
:
Možete takođe dobiti ove informacije koristeći:
Napomena kako se profil docker-profile dockera učitava po defaultu:
Po default-u Apparmor docker-default profil se generiše iz https://github.com/moby/moby/tree/master/profiles/apparmor
docker-default profil Sažetak:
Pristup svim mrežama
Nema sposobnosti definisane (Međutim, neke sposobnosti će doći iz uključivanja osnovnih pravila i.e. #include <abstractions/base>)
Pisanje u bilo koju /proc datoteku nije dozvoljeno
Ostali poddirektorijumi/datoteke u /proc i /sys imaju zabranjen read/write/lock/link/execute pristup
Montiranje nije dozvoljeno
Ptrace se može pokrenuti samo na procesu koji je ograničen istim apparmor profilom
Kada pokrenete docker kontejner trebali biste videti sledeći izlaz:
Napomena da apparmor čak može blokirati privilegije sposobnosti dodeljene kontejneru po defaultu. Na primer, može blokirati dozvolu za pisanje unutar /proc čak i ako je dodeljena SYS_ADMIN sposobnost jer po defaultu docker apparmor profil odbija ovaj pristup:
Morate onemogućiti apparmor da biste zaobišli njegova ograničenja:
Napomena da po defaultu AppArmor takođe zabranjuje kontejneru da montira foldere iznutra čak i sa SYS_ADMIN sposobnošću.
Napomena da možete dodati/ukloniti sposobnosti docker kontejneru (to će i dalje biti ograničeno zaštitnim metodama kao što su AppArmor i Seccomp):
--cap-add=SYS_ADMIN
dodeljuje SYS_ADMIN
sposobnost
--cap-add=ALL
dodeljuje sve sposobnosti
--cap-drop=ALL --cap-add=SYS_PTRACE
uklanja sve sposobnosti i dodeljuje samo SYS_PTRACE
Obično, kada otkrijete da imate privilegovanu sposobnost dostupnu unutar docker kontejnera ali neki deo eksploatacije ne funkcioniše, to će biti zato što apparmor docker sprečava.
(Primer iz ovde)
Da ilustrujem funkcionalnost AppArmor-a, kreirao sam novi Docker profil “mydocker” sa sledećom linijom dodatom:
Da bismo aktivirali profil, potrebno je da uradimo sledeće:
Da bismo nabrojali profile, možemo izvršiti sledeću komandu. Komanda ispod nabraja moj novi AppArmor profil.
Kao što je prikazano u nastavku, dobijamo grešku kada pokušavamo da promenimo “/etc/” pošto AppArmor profil sprečava pisanje u “/etc”.
Možete saznati koji apparmor profil pokreće kontejner koristeći:
Zatim, možete pokrenuti sledeću liniju da pronađete tačan profil koji se koristi:
U čudnom slučaju možete modifikovati apparmor docker profil i ponovo ga učitati. Možete ukloniti ograničenja i "obići" ih.
AppArmor je zasnovan na putanji, to znači da čak i ako možda štiti datoteke unutar direktorijuma kao što je /proc
, ako možete konfigurisati kako će se kontejner pokrenuti, možete montirati proc direktorijum hosta unutar /host/proc
i on više neće biti zaštićen od strane AppArmor-a.
U ovoj grešci možete videti primer kako čak i ako sprečavate da se perl pokrene sa određenim resursima, ako jednostavno kreirate shell skriptu specifikujući u prvom redu #!/usr/bin/perl
i izvršite datoteku direktno, moći ćete da izvršite šta god želite. Na primer:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)