Устранение уязвимостей образа Docker (с помощью centos2ol.sh)

Вы хотите запустить образ Docker, но он не проходит проверку на уязвимость? Вот пример решения этой проблемы на образе YugabyteDB (база данных с открытым исходным кодом, совместимая с PostgreSQL, распределенная база данных SQL).

Обнаружение уязвимостей: docker scan.

Здесь я использую Docker scan для проверки на уязвимости:

docker scan yugabytedb/yugabyte:2.15.1.0-b175
Вход в полноэкранный режим Выйти из полноэкранного режима

Это возвращает несколько критических, и я сосредоточусь на CVE-2022-2526

Всего

Tested 252 dependencies for known vulnerabilities, found 1022 vulnerabilities.

Войти в полноэкранный режим Выйти из полноэкранного режима

Это очень много. Это образ YugabyteDB, который часто обновляется, но он основан на CentOS.

Есть ли исправление? rpm -q --changelog.

Позвольте мне запустить быструю оболочку, чтобы посмотреть на это:

docker exec -it $(
docker run --rm -d yugabytedb/yugabyte:2.15.1.0-b175 sleep infinity
) bash -c "bash ; pkill -f '^sleep infinity$' "

Войти в полноэкранный режим Выйти из полноэкранного режима

В этой оболочке я проверяю версию systemd:

[root@74b21c4194ea yugabyte]# cat /etc/system-release

CentOS Linux release 7.9.2009 (Core)

[root@74b21c4194ea yugabyte]# rpm -q systemd

systemd-219-78.el7_9.5.x86_64

[root@74b21c4194ea yugabyte]# yum info systemd

Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: pkg.adfinis.com
 * epel: mirror.nl.leaseweb.net
 * extras: pkg.adfinis.com
 * updates: pkg.adfinis.com
Installed Packages
Name        : systemd
Arch        : x86_64
Version     : 219
Release     : 78.el7_9.5
Size        : 23 M
Repo        : installed
From repo   : updates
Summary     : A System and Service Manager
URL         : http://www.freedesktop.org/wiki/Software/systemd
License     : LGPLv2+ and MIT and GPLv2+
Description : systemd is a system and service manager for Linux, compatible with
            : SysV and LSB init scripts. systemd provides aggressive parallelization
            : capabilities, uses socket and D-Bus activation for starting services,
            : offers on-demand starting of daemons, keeps track of processes using
            : Linux cgroups, supports snapshotting and restoring of the system
            : state, maintains mount and automount points and implements an
            : elaborate transactional dependency-based service control logic. It can
            : work as a drop-in replacement for sysvinit.

Войти в полноэкранный режим Выйти из полноэкранного режима

Образ основан на CentOS 7.9 и systemd имеет версию 219release 78.el7_9.5. Сканирование выше говорит, что уязвимость исправлена в релизе 78.el7_9.5.

К сожалению, эта CVE еще не исправлена в CentOS:

[root@74b21c4194ea yugabyte]# rpm -q --changelog systemd | head

* Mon Dec 06 2021 systemd maintenance team <systemd-maint@redhat.com> - 219-78.5
- install: fix a potential crash (#1828758)
- acl-util: only set the mask if not present (#2026361)

Вход в полноэкранный режим Выход из полноэкранного режима

Итак… каковы решения?

Если исправлено: yum update -y в Dockerfile.

Если обновление доступно, я бы просто собрал образ с помощью yum update:


mkdir -p /var/tmp/build
cd       /var/tmp/build

cat > Dockerfile <<'DOCKERFILE'
FROM  yugabytedb/yugabyte:2.15.1.0-b175
RUN   yum update -y
DOCKERFILE

docker build -t yugabytedb/yugabyte:2.15.1.0-b175-20220831
docker scan     yugabytedb/yugabyte:2.15.1.0-b175-20220831

Вход в полноэкранный режим Выйти из полноэкранного режима

К сожалению, как видно выше, в моем случае интересующая меня уязвимость не исправлена последним обновлением CentOS.

Обратите внимание, что все образы YugabyteDB обновляются каждый раз при выходе нового релиза или сборки, поэтому, скорее всего, вам не нужно этого делать.

Однако CentOS отстает в исправлениях. Сканирование моего нового образа показало только 3 исправленные уязвимости с момента обновления образа YugabyteDB:

Tested 252 dependencies for known vulnerabilities, found 1019 vulnerabilities.
Вход в полноэкранный режим Выход из полноэкранного режима

Мне нужен совместимый с CentOS дистрибутив со свежими обновлениями.

На помощь приходит Oracle: centos2ol.sh.

Oracle Linux — это бесплатная альтернатива CentOS с лучшей поддержкой. Мы предлагаем быстрый скрипт для перехода с CentOS на Oracle Linux. Единственное изменение, которое я делаю, это отключаю конфигурацию GRUB. Вот мой Dockerfile для сборки нового образа:


mkdir -p /var/tmp/build
cd       /var/tmp/build

cat > Dockerfile <<'DOCKERFILE'
FROM  yugabytedb/yugabyte:2.15.1.0-b175
RUN   yum update -y
# https://blogs.oracle.com/scoter/post/switching-from-centos-to-oracle-linux-a-hands-on-example
RUN   curl -O https://raw.githubusercontent.com/oracle/centos2ol/main/centos2ol.sh
# Don't config grub in a container (will get /usr/sbin/grub2-probe: error: failed to get canonical path of `overlay')
RUN sed -e 's/grub2-mkconfig/: &/' -i centos2ol.sh
RUN   bash centos2ol.sh
# already updated, but just in case
RUN yum update

DOCKERFILE

docker build -t yugabytedb/yugabyte:2.15.1.0-b175-ol7 .
docker scan     yugabytedb/yugabyte:2.15.1.0-b175-ol7
Войти в полноэкранный режим Выйти из полноэкранного режима

Это намного лучше, большинство отсканированных уязвимостей устранено:

Tested 275 dependencies for known vulnerabilities, found 81 vulnerabilities.
Войти в полноэкранный режим Выход из полноэкранного режима

И мой CVE входит в число исправленных. Единственные оставшиеся уязвимости находятся в пакете openssl. Я не проверял, почему они не исправлены. В любом случае, у вашего предприятия, вероятно, есть свой собственный список уязвимостей для проверки.

Вот мой быстрый тест: запустите yugabyted и проверьте, что все в порядке:

docker logs -f $(
docker run --rm -d yugabytedb/yugabyte:2.15.1.0-b175-ol7 yugabyted start 
)
Войти в полноэкранный режим Выйти из полноэкранного режима

Oracle Linux является бесплатной альтернативой CentOS, поэтому вышеописанное позволяет легко получить последние обновления ОС для вашего образа Docker.

Оцените статью
devanswers.ru
Добавить комментарий