Это 28-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов
I. Обзор
1.1 Введение в Триви
Trivy — это простой и всеобъемлющий сканер уязвимостей контейнеров для CI. Уязвимость программного обеспечения — это неисправность, дефект или уязвимость, существующая в программном обеспечении или операционной системе. Trivy обнаруживает уязвимости в пакетах операционных систем (Alpine, RHEL, CentOS и т. д.) и зависимостях приложений (Bundler, Composer, npm, yarn и т. д.). Trivy прост в использовании, просто установите двоичные файлы, и вы готовы к сканированию. Сканирование просто указывает имя образа контейнера. По сравнению с другими инструментами сканирования изображений, такими как Clair, Anchore Engine, Quay, Trivy имеет очевидные преимущества с точки зрения точности, удобства и поддержки CI.
1.2 Особенности
- Поверхность обнаружения очень обширна и может обнаруживать комплексные уязвимости, пакеты программного обеспечения операционной системы (Alpine, Red Hat Universal Base Image, Red Hat Enterprise Linux, CentOS, Oracle Linux, Debian, Ubuntu, Amazon Linux, openSUSE Leap, SUSE Enterprise Linux, Photon ОС и Distrioless), зависимости приложений (Bundler, Composer, Pipenv, Poetry, npm, yarn и Cargo);
- Простой в использовании, просто нужно указать имя изображения;
- Сканирование выполняется быстро и без сохранения состояния, первое сканирование выполняется в течение 10 секунд (в зависимости от вашей сети). Последующие сканирования завершатся в течение секунды. В отличие от других сканеров, которым требуется много времени (около 10 минут) для получения информации об уязвимостях при первом запуске и рекомендуется поддерживать постоянную базу данных уязвимостей, Trivy не имеет состояния и не требует обслуживания или подготовки;
- Простота установки, способ установки:
1. apt-get install
2. yum install
3. brew install
Нет предварительных условий для установки баз данных, библиотек и т. д. (за исключением того, что для сканирования образов на основе RHEL/CentOS необходимо установить rpm).
Две установки и развертывания
2.1 Установка Linux
$ sudo vim /etc/yum.repos.d/trivy.repo
[trivy]
name=Trivy repository
baseurl=https://knqyf263.github.io/trivy-repo/rpm/releases/$releasever/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y update
$ sudo yum -y install trivy
2.2 Установка Mac OS
$ brew install knqyf263/trivy/trivy
2.3 Как использовать
当然,trivy也支持docker快速启动
docker run --rm -v [YOUR_CACHE_DIR]:/root/.cache/ knqyf263/trivy [YOUR_IMAGE_NAME]
需要将YOUR_CACHE_DIR替换成你的缓存目录,将之前缓存的漏洞库映射到容器中,不然启动会很慢
如果想通过这种方式扫描本机的容器镜像,需要将docker.sock文件映射到容器内,比如
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v $HOME/.cache/:/root/.cache/ knqyf263/trivy python:3.4-alpine
trivy使用简单示例如下:
扫描镜像:
trivy [image_name]
扫描通过save方式打包的镜像:
trivy --input [image_name.tar]
将扫描结果存为json文件:
trivy -f json -o results.json [image_name]
通过设置漏洞级别过滤漏洞:
trivy --severity HIGH,CRITICAL [image_name]
通过设置漏洞类型过滤漏洞:
trivy --vuln-type os [image_name]
漏洞类型分为os和library
只更新某个系统类型的漏洞库:
trivy --only-update alpine,debia [image_name]
指定退出代码:
trivy --exit-code 1 [image_name]
指定退出代码,主要是为后续判断提供可操作性,主要是在CI中
由于trivy有缓存,所以在扫描镜像的latest版本的时候,会出现异常,需要清楚缓存操作:
trivy --clear-cache [image_name]
如果需要重建本地漏洞数据库,或清除所有缓存,可以通过trivy --reset
3 Интеграция в КИ
Trivy дружественна к CI, и официально используется таким образом.Если вы хотите интегрировать CI, вам нужен только простой файл конфигурации Yml.Если будет найдена лазейка, тест провалится. Укажите --exit code 0, если вы не хотите, чтобы тест провалился. Поскольку в сценарии автоматизации (например, CI/CD) вас интересует только конечный результат, а не полный отчет, используйте флаг --light, чтобы оптимизировать этот сценарий для получения быстрых результатов.
Конфигурация Yml для интеграции GitLab CI может относиться к:
Четыре вопроса, требующие внимания
- Извлечение баз данных уязвимостей в Китае происходит медленно.
- На одном сервере нельзя выполнять несколько зеркальных сканирований параллельно.
- Вы можете использовать --light, чтобы использовать облегченную базу данных для оптимизации эффективности сканирования.
5 Отражение
trivy можно не только интегрировать в процесс CI для своевременного обнаружения уязвимостей изображений, но также можно интегрировать с самодельными гаванями для регулярного сканирования загружаемых изображений.