Análisis de Vulnerabilidades usando Clair
Desarrollo del tema

Clair es un proyecto de open source que proporciona una herramienta para monitorear la seguridad de sus contenedores a través del análisis estático de vulnerabilidades en contenedores appc y docker. Clair es un motor de análisis basado en API que inspecciona los contenedores capa por capa en busca de fallas de seguridad conocidas. Con Clair, puede crear fácilmente servicios que proporcionen un monitoreo continuo de las vulnerabilidades de los contenedores.
Los datos de vulnerabilidad se importan continuamente desde un conjunto conocido de fuentes y se correlacionan con el contenido indexado de las imágenes del contenedor para producir listas de vulnerabilidades que amenazan un contenedor. Cuando los datos de vulnerabilidad cambian en sentido ascendente, el estado anterior y el nuevo estado de la vulnerabilidad junto con las imágenes a las que afectan se pueden enviar a través de un webhook a un punto final configurado. Todos los componentes principales se pueden personalizar mediante programación en tiempo de compilación sin bifurcar el proyecto. Clair apoya la seguridad de los contenedores mediante:
-
Actualizar datos de vulnerabilidad de un conjunto de fuentes que usted define y almacenar estos datos en su base de datos.
-
Permitir a los clientes consultar esta base de datos en busca de vulnerabilidades dentro de imágenes específicas mediante el uso de una API.
-
Indexación de imágenes de contenedores con una lista de características presentes en la imagen mediante el uso de una API
Laboratorio: Análisis usando Clair
Descripción
En la presente guía se creara una imagen de contenedor y se procederá con el respectivo análisis usando la herramienta Clair.
Objetivos
- Instalar Clair y usarlo para analizar una imagen de contenedor.
Antes de comenzar
- Contar con el acceso al ambiente del laboratorio.
Inicio de laboratorio
-
Crearemos un archivo Docker Compose y Config siguiente manera:
mkdir -p example-clair/docker-compose-data/clair-config; touch example-clair/docker-compose.yaml; touch example-clair/docker-compose-data/clair-config/config.yml -
Con el editor de texto añadiremos el contenido según corresponda:
- Se agrega el contenido del archivo Docker Compose:
vim example-clair/docker-compose.yamlservices: postgres: image: postgres:9.6 restart: unless-stopped volumes: - ./docker-compose-data/postgres-data/:/var/lib/postgresql/data:rw environment: - POSTGRES_PASSWORD=ChangeMe - POSTGRES_USER=clair - POSTGRES_DB=clair clair: image: quay.io/coreos/clair:v2.0.0 restart: unless-stopped volumes: - ./docker-compose-data/clair-config/:/config/:ro - ./docker-compose-data/clair-tmp/:/tmp/:rw depends_on: postgres: condition: service_started command: [--log-level=debug, --config, /config/config.yml] clairctl: image: jgsqware/clairctl:latest restart: unless-stopped environment: - DOCKER_API_VERSION=1.24 volumes: - ./docker-compose-data/clairctl-reports/:/reports/:rw - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: clair: condition: service_started- Se agrega el contenido del archivo Config:
vim example-clair/docker-compose-data/clair-config/config.ymlclair: database: type: pgsql options: source: postgresql://clair:ChangeMe@postgres:5432/clair?sslmode=disable cachesize: 16384 api: port: 6060 healthport: 6061 timeout: 900s updater: interval: 2h notifier: attempts: 3 renotifyinterval: 2h -
Iniciamos el Docker Compose:
cd example-clair; sudo docker compose up -d -
Cambiamos de manera temporal los permisos del docker.sock:
sudo chmod 666 /var/run/docker.sock -
Descargamos una imagen de prueba:
sudo docker pull infoslack/dvwa -
Analizamos la imagen con Clair:
sudo docker compose exec clairctl clairctl analyze -l infoslack/dvwa -
Creamos un reporte de lo analizado:
sudo docker compose exec clairctl clairctl report -l infoslack/dvwa -
Limpiamos el ambiente:
sudo docker compose down -v; cd ~ sudo chmod 660 /var/run/docker.sock