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 to ulepszony kernel zaprojektowany w celu ograniczenia zasobów dostępnych dla programów poprzez profile dla każdego programu, skutecznie wdrażając Obowiązkową Kontrolę Dostępu (MAC) poprzez powiązanie atrybutów kontroli dostępu bezpośrednio z programami zamiast użytkowników. System ten działa poprzez ładowanie profili do jądra, zazwyczaj podczas uruchamiania, a te profile określają, do jakich zasobów program ma dostęp, takich jak połączenia sieciowe, dostęp do surowych gniazd i uprawnienia do plików.
Są dwa tryby operacyjne dla profili AppArmor:
Tryb egzekwowania: Ten tryb aktywnie egzekwuje zasady zdefiniowane w profilu, blokując działania, które naruszają te zasady i rejestrując wszelkie próby ich naruszenia za pomocą systemów takich jak syslog lub auditd.
Tryb skarg: W przeciwieństwie do trybu egzekwowania, tryb skarg nie blokuje działań, które są sprzeczne z zasadami profilu. Zamiast tego rejestruje te próby jako naruszenia zasad, nie wprowadzając ograniczeń.
Moduł jądra: Odpowiedzialny za egzekwowanie zasad.
Zasady: Określają zasady i ograniczenia dotyczące zachowania programów i dostępu do zasobów.
Parser: Ładuje zasady do jądra w celu egzekwowania lub raportowania.
Narzędzia: To programy w trybie użytkownika, które zapewniają interfejs do interakcji i zarządzania AppArmor.
Profile AppArmor są zazwyczaj zapisywane w /etc/apparmor.d/
Za pomocą sudo aa-status
będziesz mógł wylistować binaria, które są ograniczone przez jakiś profil. Jeśli zmienisz znak "/" na kropkę w ścieżce każdego wymienionego binarnego, otrzymasz nazwę profilu AppArmor w wymienionym folderze.
Na przykład, profil apparmor dla /usr/bin/man będzie znajdował się w /etc/apparmor.d/usr.bin.man
Aby wskazać dotknięty plik wykonywalny, dozwolone są ścieżki bezwzględne i znaki wieloznaczne do określania plików.
Aby wskazać dostęp, jaki binarny plik będzie miał do plików, można użyć następujących kontroli dostępu:
r (odczyt)
w (zapis)
m (mapowanie pamięci jako wykonywalne)
k (blokowanie plików)
l (tworzenie twardych linków)
ix (wykonanie innego programu z nowym programem dziedziczącym politykę)
Px (wykonanie pod innym profilem, po oczyszczeniu środowiska)
Cx (wykonanie pod profilem potomnym, po oczyszczeniu środowiska)
Ux (wykonanie bez ograniczeń, po oczyszczeniu środowiska)
Zmienne mogą być definiowane w profilach i mogą być manipulowane z zewnątrz profilu. Na przykład: @{PROC} i @{HOME} (dodaj #include <tunables/global> do pliku profilu)
Reguły odmowy są obsługiwane, aby nadpisać reguły zezwolenia.
Aby łatwo rozpocząć tworzenie profilu, apparmor może Ci pomóc. Możliwe jest, aby apparmor sprawdził działania wykonywane przez plik binarny, a następnie pozwolił Ci zdecydować, które działania chcesz zezwolić lub odmówić. Musisz tylko uruchomić:
Następnie, w innej konsoli wykonaj wszystkie działania, które binarny plik zazwyczaj wykonuje:
Następnie, w pierwszej konsoli naciśnij "s", a następnie w zarejestrowanych akcjach wskaż, czy chcesz zignorować, zezwolić, czy cokolwiek innego. Gdy skończysz, naciśnij "f", a nowy profil zostanie utworzony w /etc/apparmor.d/path.to.binary
Używając klawiszy strzałek, możesz wybrać, co chcesz zezwolić/odmówić/cokolwiek innego
Możesz również utworzyć szablon profilu apparmor dla binarnego pliku za pomocą:
Zauważ, że domyślnie w utworzonym profilu nic nie jest dozwolone, więc wszystko jest zabronione. Będziesz musiał dodać linie takie jak /etc/passwd r,
aby zezwolić na odczyt binarny /etc/passwd
, na przykład.
Możesz następnie wymusić nowy profil za pomocą
Narzędzie to odczyta logi i zapyta użytkownika, czy chce zezwolić na niektóre z wykrytych zabronionych działań:
Używając klawiszy strzałek, możesz wybrać, co chcesz zezwolić/odmówić/cokolwiek
Przykład logów AUDIT i DENIED z /var/log/audit/audit.log wykonywalnego service_bin
:
Możesz również uzyskać te informacje, używając:
Zauważ, jak profil docker-profile Dockera jest ładowany domyślnie:
Domyślnie profil docker-default Apparmor jest generowany z https://github.com/moby/moby/tree/master/profiles/apparmor
Podsumowanie profilu docker-default:
Dostęp do całej sieci
Brak możliwości jest zdefiniowany (Jednakże, niektóre możliwości będą pochodzić z podstawowych reguł bazowych tzn. #include <abstractions/base>)
Pisanie do jakiegokolwiek pliku /proc jest niedozwolone
Inne podkatalogi/pliki w /proc i /sys mają zabroniony dostęp do odczytu/zapisu/blokady/linkowania/wykonywania
Montowanie jest niedozwolone
Ptrace może być uruchamiane tylko na procesie, który jest ograniczony przez ten sam profil apparmor
Gdy uruchomisz kontener docker, powinieneś zobaczyć następujący wynik:
Zauważ, że apparmor nawet zablokuje uprawnienia do możliwości przyznane kontenerowi domyślnie. Na przykład, będzie w stanie zablokować pozwolenie na zapis w /proc, nawet jeśli przyznana jest możliwość SYS_ADMIN, ponieważ domyślny profil apparmor dla dockera odmawia tego dostępu:
Musisz wyłączyć apparmor, aby obejść jego ograniczenia:
Zauważ, że domyślnie AppArmor również zabrania kontenerowi montowania folderów od wewnątrz, nawet z uprawnieniem SYS_ADMIN.
Zauważ, że możesz dodać/usunąć uprawnienia do kontenera docker (będzie to nadal ograniczone przez metody ochrony takie jak AppArmor i Seccomp):
--cap-add=SYS_ADMIN
nadaje uprawnienie SYS_ADMIN
--cap-add=ALL
nadaje wszystkie uprawnienia
--cap-drop=ALL --cap-add=SYS_PTRACE
usuwa wszystkie uprawnienia i nadaje tylko SYS_PTRACE
Zazwyczaj, gdy znajdziesz, że masz uprawnienie uprzywilejowane dostępne wewnątrz kontenera docker, ale część eksploatu nie działa, będzie to spowodowane tym, że apparmor docker będzie to uniemożliwiał.
(Przykład z tutaj)
Aby zilustrować funkcjonalność AppArmor, stworzyłem nowy profil Docker “mydocker” z dodaną następującą linią:
Aby aktywować profil, musimy wykonać następujące kroki:
Aby wyświetlić profile, możemy użyć następującego polecenia. Poniższe polecenie wyświetla mój nowy profil AppArmor.
Jak pokazano poniżej, otrzymujemy błąd podczas próby zmiany „/etc/”, ponieważ profil AppArmor uniemożliwia dostęp do zapisu do „/etc”.
Możesz znaleźć, który profil apparmor działa w kontenerze używając:
Następnie możesz uruchomić następującą linię, aby znaleźć dokładny profil używany:
W dziwnym przypadku możesz zmodyfikować profil dockera apparmor i go przeładować. Możesz usunąć ograniczenia i "obejść" je.
AppArmor jest oparty na ścieżkach, co oznacza, że nawet jeśli może chronić pliki w katalogu takim jak /proc
, jeśli możesz skonfigurować, jak kontener ma być uruchomiony, możesz zamontować katalog proc hosta wewnątrz /host/proc
i nie będzie on już chroniony przez AppArmor.
W tym błędzie możesz zobaczyć przykład, jak nawet jeśli zapobiegasz uruchamianiu perla z określonymi zasobami, jeśli po prostu stworzysz skrypt powłoki określając w pierwszej linii #!/usr/bin/perl
i wykonasz plik bezpośrednio, będziesz mógł wykonać cokolwiek chcesz. Np.:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)