Profile AppArmor w Docker / LXC

11

Mam kontener Docker (LXC), który obsługuje MySQL. Skoro idea Dockera polega na tym, że „jeden działający proces na kontener”, jeśli zdefiniuję profile AppArmor ukierunkowane na plik binarny MySQL, to czy będą one egzekwowane? Czy jest jakiś sposób, żeby to sprawdzić?

Naftuli Kay
źródło
dlaczego chcesz użyć zbroi w pojemniku?
c4f4t0r
3
W przypadku, gdy do bazy danych zostanie uruchomiony exploit zero-day lub inny, aby uniemożliwić mu dostęp do czegokolwiek innego. Ufam Linuxowi cgroups, ale nie za bardzo . Lepiej być bezpiecznym niż żałować, wolę zablokować MySQL niż pozwolić, aby MySQL zero-day znalazł sposób na wyjście z grupy.
Naftuli Kay

Odpowiedzi:

8

Po pierwsze, grupy cg nie są używane do izolowania aplikacji od innych w systemie. Służą do zarządzania wykorzystaniem zasobów i dostępem do urządzeń. Różne przestrzenie nazw (PID, UTS, mount, user ...) zapewniają pewną (ograniczoną) izolację.

Ponadto proces uruchomiony w kontenerze Docker prawdopodobnie nie będzie w stanie zarządzać profilem AppArmor, pod którym działa. Obecnie stosowane podejście polega na skonfigurowaniu określonego profilu AppArmor przed uruchomieniem kontenera.

Wygląda na to, że sterownik wykonywania libcontainer w Docker obsługuje ustawianie profili AppArmor dla kontenerów , ale nie mogę znaleźć żadnego dokumentu ani odniesienia w tym dokumencie.

Najwyraźniej AppArmor jest także obsługiwany przez LXC w Ubuntu .

Powinieneś napisać profil AppArmor dla swojej aplikacji i upewnić się, że LXC / libcontainer / Docker / ... załaduje go przed uruchomieniem procesów w kontenerze.

Profile używane w ten sposób powinny być egzekwowane, a aby je przetestować, powinieneś spróbować nielegalnego dostępu i upewnić się, że się nie powiedzie.

W tym przypadku nie ma powiązania między profilem binarnym a faktycznie wymuszonym. Musisz wyraźnie powiedzieć Docker / LXC, aby używał tego profilu dla twojego kontenera. Napisanie profilu dla pliku binarnego MySQL wymusi go tylko na hoście, a nie w kontenerze.

Siosm
źródło
To było moje (ograniczone) doświadczenie do tej pory. Mam problemy z wygenerowaniem profilu z kontenera Docker, ale jeśli profil został wygenerowany poza kontenerem, a następnie skopiowany, powinien po prostu działać ™, pod warunkiem, że uruchomisz AppArmor w kontenerze przed uruchomieniem pliku wykonywalnego.
Naftuli Kay
@Siosm: LCX! = Libcontainer. Pytanie dotyczyło sterownika LXC.
0xC0000022L
@ 0xC0000022L: Model wymuszania profilu AppArmor jest taki sam dla każdego narzędzia używanego do ograniczania procesów w kontenerach.
Siosm,
3

Odpowiedź jest bardzo prawdopodobna: nie.

W Ubuntu Server temat przypomnienie LXC omówione dość dużo dokładną pytanie i czyni następujące oświadczenie:

Programów w kontenerze nie można dalej ograniczać - na przykład MySQL działa pod profilem kontenera (ochrona hosta), ale nie będzie w stanie wejść do profilu MySQL (aby chronić kontener).

Lepszym uniknięcia exploitów mających niepożądane efekty jest ograniczenie użytkownika uruchamiającego kontener i użycie kontenerów przestrzeni użytkownika, które wykorzystują funkcję jądra użytkownika. Jednak dockerobecnie - o ile mi wiadomo - nie obsługuje userns.

W takim przypadku MySQL działałby - z perspektywy hostów - jako nieuprzywilejowany użytkownik, podczas gdy wewnątrz kontenera mógłby być uruchamiany jako root. W iptablesrazie potrzeby możesz użyć powiązania MySQL z zewnętrznym portem hosta.

0xC0000022L
źródło