В эпоху виртуализации процессов и ресурсов, достаточно, остро обстоит вопрос с безопасностью использования исполняемых сред. В заранее подготовленные образы могут содержать в себе ВПО и разного рода эксплойты, которые могут нанести ущерб, как системе локально, так и инфраструктуре глобально.
Они как раз и распространяются через такие площадки, как Docker Hub, GitHub, позволяющие установить нужно ПО, которое не проверяется на различного рода программные закладки и то самое ВПО. Как проверить, безопасно ли использовать контейнер?
Сканирование и анализ слоев в Dockerfile
Напомним, что сам контейнер это всего лишь изолированная среда, куда раскатывается базовый образ ОС и поверх уже него выполняется Dockerfile, который скорее может быть уже с вредоносными действиями. Возьмем для примера уже в заранее инфицированный контейнер, который наполнен майнерами и прочим ВПО. Скачаем его на нашу машину с уже предустановленным Docker:
Обратите внимание, что мы лишь скачали образ в наш локальный репозиторий, но не запускали на ОС! И этого делать не нужно, для анализа будет достаточен сам файл! Если у вас не предустановлен Docker, то сделайте это следующей командой:
После чего нужно понять, что конкретно мы хотим исследовать и где будем детектировать вредоносную активность. Образ – это совокупность минимально базовой ОС, выполненного на ней Dockerfile и метаданных, которые используются, при развертывании. Поэтому обратим внимание на него, для начала нужно понять какие действия выполнены в образе, для этого будем использовать утилиту инспектирования dive. Для установки deb выполним команду:
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb
Она позволит найти последнюю версию ПО в репозитории, а так же прописать ее в путях для скачивания, чтобы затем установить.
После успешной установки пакета можем прописать команду, где укажем dive для запуска ПО инспектирования и пропишем название образа:
Панель управления представляет собой четыре основных поля, где Layers это и есть Docker File, а точнее его слои. Ниже идут детали каждого из слоев и метаинформация об образе, где уже можно увидеть, что взаимодействовали с директориями веба. Разберем каждый слой и постараемся найти, что-то нелегитимное:
В данном случае видим, что установка происходит с подозрительного домена nginx[.]so, после с помощью TAB переключимся к файловой системе справа и просмотрим изменения, которые внес Dockerfile. Дополнительно отфильтруем изменения комбинацией клавиш Ctrl+A и увидим скопление скопированных ранее файлов с подозрительными названиями:
При реальной атаке, файлы могут быть названы совсем безобидно, поэтому необходимо обращать внимание на директории и на формат файлов, которые добавляются в контейнере. Так как файлы выглядит подозрительно, необходимо удостовериться в том, что это ВПО. Выйдем из панели инспектора и создадим контейнер с файловой системой, не запуская его:
sudo docker export temp_container -o filesystem.tar && \
sudo docker rm temp_container && \
ls
Теперь у нас в домашней директории лежит файловая система контейнера с уже примененным Dockerfile! Осталось ее распаковать и проверить все файлы на ВПО, для этого пропишем команду, предварительно создав новую папку и перейдя в нее:
Помним, что вредоносы потенциально затронули несколько директорий, как раз их и будем сканировать антивирусом ClamAV, после чего видим результат, где обнаружены ВПО!
С помощью инструмента инспектирования можно проводить подобные ручные анализы на более глубоком уровне и уже использовать в дополнении движки Yara правил, которые позволят детектировать и другие виды и варианты ВПО. Данное решение не замена автоматизированным инструментам, а лишь способ, позволяющий в ручную рассмотреть детали пакета внутри, на основе ручного/статического анализа.
При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать: