# Проверяем безопасность Docker-образов с помощью Trivy

### Что такое Trivy <a href="#chto-takoe-trivy" id="chto-takoe-trivy"></a>

Один из самых лёгких и многофункциональных сканеров уязвимостей Docker-образов. Он сканирует как образ в репозитории, так и локальный образ. Нацелен на нахождение уязвимостей двух типов:

— Проблемы сборок ОС (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu).\
— Проблемы в зависимостях (Gemfile.lock, Pipfile.lock, composer.lock, package-lock.json, yarn.lock, Cargo.lock).

Trivy работает на разных платформах Linux, включая RHEL, CentOs, Ubuntu, Debian, Arch Linux, MacOS, Nix и других.

### Как установить Trivy <a href="#kak-ustanovit-trivy" id="kak-ustanovit-trivy"></a>

Есть разные способы установки Trivy на разные платформы. Вот команды для Ubuntu:

```
$ sudo apt-get install wget apt-transport-https gnupg lsb-release
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
$ echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
$ sudo apt-get update
$ sudo apt-get install trivy
```

### Как использовать Trivy <a href="#kak-ispolzovat-trivy" id="kak-ispolzovat-trivy"></a>

Для запуска используем команду:

```
$ trivy image <образ>
```

#### Обнаружение неправильных настроек безопасности <a href="#obnaruzhenie-nepravilnykh-nastroek-bezopasnosti" id="obnaruzhenie-nepravilnykh-nastroek-bezopasnosti"></a>

Можно запускать проверку неправильных настроек безопасности как в файловой системе, так и в репозиториях git. Попробуем запустить сканирование файловой системы. Для этого нужно клонировать [этот репозиторий](https://github.com/bharatmicrosystems/trivy-demo).

Репозиторий git содержит файл Dockerfile и файл манифеста deployment.yaml k8s.

Dockerfile выглядит следующим образом:

```
FROM nginx
USER root
```

Файл deployment.yaml выглядит следующим образом:

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        securityContext:
          privileged: true
```

> Важно: здесь мы целенаправленно установили для привилегированного атрибута в securityContext значение true. Этого делать нельзя.

Теперь запускаем сканирование: так Trivy сможет найти эту настройку конфигурации:

```
$ trivy config <директория_конфига>
```
