Что такое Clair?
Clair — это open-source инструмент статического анализа уязвимостей в контейнерах, разработанный компанией CoreOS. Он сканирует образы контейнеров на предмет известных уязвимостей безопасности и предоставляет детальные отчеты о найденных проблемах.
Основные возможности Clair
- Статический анализ — сканирование образов контейнеров без их запуска
- Поддержка дистрибутивов — Ubuntu, Debian, CentOS, RHEL, Alpine, Oracle Linux
- База данных уязвимостей — регулярные обновления из различных источников
- API интерфейс — REST API для интеграции в CI/CD pipeline
- Масштабируемость — горизонтальное масштабирование для больших объемов
- Интеграции — поддержка Docker Registry, Kubernetes
Архитектура Clair
Clair состоит из нескольких компонентов:
- Clair API — основной сервис анализа
- PostgreSQL — база данных уязвимостей и результатов
- Updaters — модули обновления базы уязвимостей
- Matchers — модули сопоставления пакетов с уязвимостями
Установка Clair
Установка через Docker Compose:
1version: '3.8'
2services:
3 postgres:
4 image: postgres:13
5 environment:
6 POSTGRES_DB: clair
7 POSTGRES_USER: clair
8 POSTGRES_PASSWORD: password
9 volumes:
10 - postgres_data:/var/lib/postgresql/data
11
12 clair:
13 image: quay.io/coreos/clair:v4.7.0
14 restart: unless-stopped
15 depends_on:
16 - postgres
17 ports:
18 - "6060:6060"
19 - "6061:6061"
20 environment:
21 CLAIR_CONF: /config/config.yaml
22 CLAIR_MODE: combo
23 volumes:
24 - ./config.yaml:/config/config.yaml:ro
25
26volumes:
27 postgres_data:
Конфигурационный файл config.yaml:
1http_listen_addr: ":6060"
2introspection_addr: ":6061"
3log_level: info
4
5indexer:
6 connstring: host=postgres port=5432 user=clair dbname=clair password=password sslmode=disable
7 scanlock_retry: 10
8 layer_scan_concurrency: 5
9 migrations: true
10
11matcher:
12 connstring: host=postgres port=5432 user=clair dbname=clair password=password sslmode=disable
13 max_conn_pool: 100
14 migrations: true
15
16updaters:
17 sets:
18 - "ubuntu"
19 - "debian"
20 - "rhel"
21 - "alpine"
22 interval: "6h"
Использование Clair API
Пример сканирования образа через Python:
1import requests
2import json
3
4# Конфигурация Clair
5CLAIR_URL = "http://localhost:6060"
6
7def scan_image(image_name, image_tag="latest"):
8 """Сканирование Docker образа"""
9
10 # Создание манифеста для сканирования
11 manifest = {
12 "hash": f"{image_name}:{image_tag}",
13 "layers": [
14 {
15 "hash": "layer1",
16 "uri": f"docker://{image_name}:{image_tag}",
17 "headers": {}
18 }
19 ]
20 }
21
22 # Отправка на сканирование
23 response = requests.post(
24 f"{CLAIR_URL}/indexer/api/v1/index_report",
25 json=manifest
26 )
27
28 if response.status_code == 201:
29 # Получение результатов
30 report_id = response.json()["manifest_hash"]
31
32 vuln_response = requests.get(
33 f"{CLAIR_URL}/matcher/api/v1/vulnerability_report/{report_id}"
34 )
35
36 if vuln_response.status_code == 200:
37 return vuln_response.json()
38
39 return None
40
41# Использование
42results = scan_image("nginx", "latest")
43if results:
44 print(f"Найдено уязвимостей: {len(results.get('vulnerabilities', []))}")
Установка Python клиента:
Интеграция с CI/CD
Пример интеграции с GitHub Actions:
1name: Security Scan
2
3on:
4 push:
5 branches: [ main ]
6 pull_request:
7 branches: [ main ]
8
9jobs:
10 security-scan:
11 runs-on: ubuntu-latest
12
13 steps:
14 - uses: actions/checkout@v3
15
16 - name: Build Docker image
17 run: docker build -t myapp:${{ github.sha }} .
18
19 - name: Run Clair scan
20 run: |
21 docker run -d --name clair-db postgres:13
22 docker run -d --name clair --link clair-db:postgres \
23 -p 6060:6060 -p 6061:6061 \
24 quay.io/coreos/clair:latest
25
26 # Ожидание запуска Clair
27 sleep 30
28
29 # Сканирование образа
30 clairctl analyze myapp:${{ github.sha }}
31
32 - name: Upload scan results
33 uses: actions/upload-artifact@v3
34 with:
35 name: security-scan-results
36 path: clair-report.json
Применение Clair
- CI/CD безопасность — автоматическое сканирование в pipeline
- Compliance — соответствие требованиям безопасности
- Мониторинг реестров — регулярное сканирование Docker Registry
- Анализ образов — оценка безопасности базовых образов
- Отчетность — детальные отчеты о найденных уязвимостях
Преимущества использования
- Open Source — бесплатное использование и модификация
- Точность — минимальное количество ложных срабатываний
- Производительность — быстрое сканирование больших образов
- Актуальность — регулярные обновления базы уязвимостей
- Интеграция — легкая интеграция в существующие процессы
Источники данных о уязвимостях
Clair использует данные из:
- CVE Database — официальная база уязвимостей
- Ubuntu Security Notices — уведомления безопасности Ubuntu
- Debian Security Tracker — трекер безопасности Debian
- Red Hat Security Data — данные безопасности Red Hat
- Alpine SecDB — база данных Alpine Linux
FAQ
Может ли Clair сканировать запущенные контейнеры?
Нет, Clair выполняет статический анализ образов контейнеров. Для сканирования запущенных контейнеров используйте runtime security решения.
Как часто обновляется база уязвимостей?
База уязвимостей обновляется каждые 6 часов по умолчанию, но интервал можно настроить в конфигурации.
Поддерживает ли Clair частные реестры?
Да, Clair может работать с частными Docker Registry, включая аутентификацию и SSL сертификаты.