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, що означає Secure Computing mode, є функцією безпеки ядра Linux, призначеною для фільтрації системних викликів. Вона обмежує процеси до обмеженого набору системних викликів (exit()
, sigreturn()
, read()
, і write()
для вже відкритих дескрипторів файлів). Якщо процес намагається викликати щось інше, він завершується ядром за допомогою SIGKILL або SIGSYS. Цей механізм не віртуалізує ресурси, а ізолює процес від них.
Існує два способи активувати seccomp: через системний виклик prctl(2)
з PR_SET_SECCOMP
, або для ядер Linux 3.17 і вище, системний виклик seccomp(2)
. Старий метод активації seccomp шляхом запису в /proc/self/seccomp
був застарілий на користь prctl()
.
Покращення, seccomp-bpf, додає можливість фільтрувати системні виклики з налаштовуваною політикою, використовуючи правила Berkeley Packet Filter (BPF). Це розширення використовується програмним забезпеченням, таким як OpenSSH, vsftpd, і браузерами Chrome/Chromium на Chrome OS і Linux для гнучкої та ефективної фільтрації системних викликів, пропонуючи альтернативу тепер вже непідтримуваному systrace для Linux.
У цьому режимі Seccomp дозволяє лише системні виклики exit()
, sigreturn()
, read()
і write()
для вже відкритих дескрипторів файлів. Якщо здійснюється будь-який інший системний виклик, процес завершується за допомогою SIGKILL
Цей режим дозволяє фільтрувати системні виклики за допомогою налаштовуваної політики, реалізованої за допомогою правил Berkeley Packet Filter.
Seccomp-bpf підтримується Docker для обмеження syscalls з контейнерів, ефективно зменшуючи площу атаки. Ви можете знайти syscalls, які заблоковані за замовчуванням за адресою https://docs.docker.com/engine/security/seccomp/ і профіль seccomp за замовчуванням можна знайти тут https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Ви можете запустити контейнер docker з іншою політикою seccomp за допомогою:
Якщо ви хочете, наприклад, заборонити контейнеру виконувати деякі syscall, такі як uname
, ви можете завантажити профіль за замовчуванням з https://github.com/moby/moby/blob/master/profiles/seccomp/default.json і просто видалити рядок uname
зі списку.
Якщо ви хочете впевнитися, що якийсь бінарний файл не працює всередині контейнера docker, ви можете використовувати strace, щоб перерахувати syscalls, які використовує бінарний файл, а потім заборонити їх.
У наступному прикладі виявляються syscalls uname
:
Якщо ви використовуєте Docker лише для запуску програми, ви можете профілювати її за допомогою strace
і дозволити лише ті системні виклики, які їй потрібні
Щоб проілюструвати функцію Seccomp, давайте створимо профіль Seccomp, який відключає системний виклик “chmod”, як показано нижче.
У наведеному профілі ми встановили дію за замовчуванням на "дозволити" і створили чорний список для відключення "chmod". Щоб бути більш безпечними, ми можемо встановити дію за замовчуванням на "відкинути" і створити білий список для вибіркового дозволу системних викликів. Наступний вихід показує, що виклик "chmod" повертає помилку, оскільки він відключений у профілі seccomp.
Наступний вихід показує “docker inspect”, що відображає профіль:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)