5 фишек Bash для анализа безопасности контейнеров — 17 июня 2026 г. в 18:12:55.797
5 фишек Bash для анализа безопасности контейнеров 👋 Приветствую в мире цифровой безопасности! Расскажу о 5 однострочниках для быстрой проверки безопасности контейнерной среды. ⏺ Находим контейнеры запущенные с привилегиями которых быть не должно: docker inspect $(docker ps -q) | \ jq -r '.[] | select(.HostConfig.Privileged==true) | .Name' # Проверяем capabilities docker inspect $(docker ps -q) | \ jq -r '.[] | .Name, .HostConfig.CapAdd' Privileged контейнер имеет полный доступ к хосту. CapAdd с SYS_ADMIN или NET_ADMIN - почти то же самое. ⏺Ищем контейнеры с примонтированным Docker socket - классический способ эскалации из контейнера на хост: docker inspect $(docker ps -q) | \ jq -r '.[] | select(.Mounts[].Source=="/var/run/docker.sock") | .Name' Контейнер с docker.sock может запустить новый privileged контейнер и выйти на хост. ⏺ Смотрим какие процессы в контейнерах реально работают от root: for cid in $(docker ps -q); do name=$(docker inspect $cid --format '{{.Name}}') procs=$(docker top $cid | awk 'NR>1 && $1=="root" {print $NF}') [[ -n $procs ]] && echo "$name: $procs" done ⏺Проверяем namespace изоляцию - контейнер не должен делить PID или network namespace с хостом: for cid in $(docker ps -q); do name=$(docker inspect $cid --format '{{.Name}}') pid_mode=$(docker inspect $cid --format '{{.HostConfig.PidMode}}') net_mode=$(docker inspect $cid --format '{{.HostConfig.NetworkMode}}') [[ "$pid_mode" == "host" || "$net_mode" == "host" ]] && \ echo "WARN: $name uses host namespace pid=$pid_mode net=$net_mode" done ⏺Сравниваем реальные capabilities процессов внутри контейнеров с тем что заявлено в конфиге: for cid in $(docker ps -q); do pid=$(docker inspect $cid --format '{{.State.Pid}}') caps=$(cat /proc/$pid/status 2>/dev/null | grep CapEff) name=$(docker inspect $cid --format '{{.Name}}') echo "$name ($pid): $caps" done Если CapEff не совпадает с ожидаемым - кто-то добавил capabilities которых быть не должно. 🤖Бесплатный ChatGPT

