Seccomp
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Seccomp, czyli tryb bezpiecznego obliczania, to funkcja zabezpieczeń jądra Linuxa zaprojektowana do filtrowania wywołań systemowych. Ogranicza procesy do ograniczonego zestawu wywołań systemowych (exit()
, sigreturn()
, read()
, i write()
dla już otwartych deskryptorów plików). Jeśli proces spróbuje wywołać cokolwiek innego, zostaje zakończony przez jądro za pomocą SIGKILL lub SIGSYS. Ten mechanizm nie wirtualizuje zasobów, ale izoluje proces od nich.
Istnieją dwa sposoby aktywacji seccomp: przez wywołanie systemowe prctl(2)
z PR_SET_SECCOMP
, lub dla jąder Linuxa 3.17 i nowszych, wywołanie systemowe seccomp(2)
. Starsza metoda włączania seccomp poprzez zapis do /proc/self/seccomp
została wycofana na rzecz prctl()
.
Ulepszenie, seccomp-bpf, dodaje możliwość filtrowania wywołań systemowych z dostosowywaną polityką, używając reguł Berkeley Packet Filter (BPF). To rozszerzenie jest wykorzystywane przez oprogramowanie takie jak OpenSSH, vsftpd oraz przeglądarki Chrome/Chromium na Chrome OS i Linuxie do elastycznego i efektywnego filtrowania wywołań systemowych, oferując alternatywę dla teraz nieobsługiwanego systrace dla Linuxa.
W tym trybie Seccomp pozwala tylko na wywołania systemowe exit()
, sigreturn()
, read()
i write()
dla już otwartych deskryptorów plików. Jeśli zostanie wykonane jakiekolwiek inne wywołanie systemowe, proces zostaje zabity za pomocą SIGKILL
Ten tryb pozwala na filtrowanie wywołań systemowych za pomocą konfigurowalnej polityki wdrożonej przy użyciu reguł Berkeley Packet Filter.
Seccomp-bpf jest wspierany przez Docker, aby ograniczyć syscalls z kontenerów, skutecznie zmniejszając powierzchnię ataku. Możesz znaleźć syscalls zablokowane przez domyślnie w https://docs.docker.com/engine/security/seccomp/ a domyślny profil seccomp można znaleźć tutaj https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Możesz uruchomić kontener docker z inną polityką seccomp za pomocą:
Jeśli chcesz na przykład zabronić kontenerowi wykonywania niektórych syscall jak uname
, możesz pobrać domyślny profil z https://github.com/moby/moby/blob/master/profiles/seccomp/default.json i po prostu usunąć ciąg uname
z listy.
Jeśli chcesz upewnić się, że niektóre binarne pliki nie działają wewnątrz kontenera docker, możesz użyć strace, aby wylistować syscall, które używa ten plik binarny, a następnie je zabronić.
W poniższym przykładzie odkrywane są syscall uname
:
Jeśli używasz Dockera tylko do uruchamiania aplikacji, możesz profilować go za pomocą strace
i pozwolić tylko na te syscalls, które są potrzebne
Aby zilustrować funkcję Seccomp, stwórzmy profil Seccomp, który wyłącza wywołanie systemowe „chmod” jak poniżej.
W powyższym profilu ustawiliśmy domyślną akcję na „zezwól” i stworzyliśmy czarną listę, aby wyłączyć „chmod”. Aby być bardziej bezpiecznym, możemy ustawić domyślną akcję na odrzucenie i stworzyć białą listę, aby selektywnie włączyć wywołania systemowe. Poniższy wynik pokazuje, że wywołanie „chmod” zwraca błąd, ponieważ jest wyłączone w profilu seccomp.
Poniższy wynik pokazuje „docker inspect” wyświetlający profil:
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)