2021-09-23 00:55:18 +00:00
|
|
|
|
### Clair
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
Un outil complet indexer et chercher des vulnérabilités est
|
2018-11-14 05:01:54 +00:00
|
|
|
|
[`Clair`](https://github.com/coreos/clair/), du projet CoreOS. À partir des
|
|
|
|
|
informations mises à disposition par les équipes de sécurités des principales
|
|
|
|
|
distributions, cela alimente en continu une base de données qui sera accéder au
|
|
|
|
|
moment de l'analyse.
|
|
|
|
|
|
|
|
|
|
L'outil se présente sous la forme d'un serveur autonome dans la récupération
|
2021-09-23 00:55:18 +00:00
|
|
|
|
de ses données sources, auquel nous pourrons interagir au moyen d'une API :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
pour lui envoyer des images et lui demander une analyse. Les clients de cette
|
|
|
|
|
API seront soit les registres directement, soit un programme dédié.
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
---
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
Commençons par lancer notre propre instance de `Clair`, à l'aide d'un
|
2021-09-23 00:55:18 +00:00
|
|
|
|
`docker-compose.yml` :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
|
```yml
|
|
|
|
|
version: '3'
|
|
|
|
|
services:
|
|
|
|
|
postgres:
|
|
|
|
|
container_name: clair_postgres
|
|
|
|
|
image: postgres:latest
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
- POSTGRES_PASSWORD
|
|
|
|
|
|
|
|
|
|
clair:
|
|
|
|
|
container_name: clair_clair
|
2020-09-14 13:46:13 +00:00
|
|
|
|
image: quay.io/coreos/clair:v2.0.9
|
2018-11-14 05:01:54 +00:00
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
- postgres
|
|
|
|
|
ports:
|
|
|
|
|
- "6060-6061:6060-6061"
|
|
|
|
|
links:
|
|
|
|
|
- postgres
|
|
|
|
|
volumes:
|
|
|
|
|
- /tmp:/tmp
|
|
|
|
|
- ./clair_config:/config
|
|
|
|
|
command: [-config, /config/config.yaml]
|
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
Prenez quelques minutes pour comprendre ce `docker-compose.yml` : notez la
|
|
|
|
|
présence de la variable d'environnement `POSTGRES_PASSWORD`, non définie : ce
|
2020-09-14 13:46:13 +00:00
|
|
|
|
sera la variable présente dans votre environnement, au moment du
|
2021-09-23 00:55:18 +00:00
|
|
|
|
`docker-compose up` qui sera utilisée. N'oubliez pas de la définir :
|
2020-09-14 13:46:13 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
|
```bash
|
|
|
|
|
export POSTGRES_PASSWORD=$(openssl rand -base64 16)
|
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
Parmi les volumes partagés avec `clair`, il y a un dossier
|
|
|
|
|
`./clair_config`. Notez le `./` au début, qui indique que le dossier sera
|
|
|
|
|
recherché relativement par rapport à l'emplacement du `docker-compsose.yml`.
|
|
|
|
|
|
|
|
|
|
Dans ce dossier, vous devez placer un exemplaire du fichier de configuration
|
|
|
|
|
dont un [exemple se trouve dans le dépôt du
|
|
|
|
|
projet](https://raw.githubusercontent.com/coreos/clair/master/config.yaml.sample). **N'oubliez
|
2018-11-14 05:01:54 +00:00
|
|
|
|
pas de changer le nom d'hôte et le mot de passe pour se connecter au conteneur
|
2020-09-14 13:46:13 +00:00
|
|
|
|
de base de données.**
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
Une fois lancé, la base nécessite d'être initialisée. L'opération peut prendre
|
2021-09-23 00:55:18 +00:00
|
|
|
|
plusieurs minutes. Vous pouvez suivre l'avancement de l'ajout via :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
curl http://localhost:6060/v1/namespaces
|
|
|
|
|
curl http://localhost:6060/v1/namespaces/debian:9/vulnerabilities?limit=10
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
### PAClair
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
Afin de pouvoir réaliser à la demande et sans registre privé, l'analyse de
|
|
|
|
|
conteneur, nous allons utiliser le programme
|
2021-09-23 00:55:18 +00:00
|
|
|
|
[`paclair`](https://github.com/yebinama/paclair) :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
pip3 install paclair
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
Il nécessite un fichier de configuration pour être utilisé, essayez :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
|
```yml
|
2018-11-16 01:38:41 +00:00
|
|
|
|
General:
|
|
|
|
|
clair_url: 'http://localhost:6060'
|
|
|
|
|
Plugins:
|
|
|
|
|
Docker:
|
|
|
|
|
class: paclair.plugins.docker_plugin.DockerPlugin
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
Pour obtenir un rapport d'analyse, on commence par envoyer les couches de
|
2021-09-23 00:55:18 +00:00
|
|
|
|
l'image à `Clair` :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
paclair --conf conf.yml Docker nemunaire/fic-admin push
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
Puis on lui demande la génération d'un rapport `html` :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2022-02-24 19:43:43 +00:00
|
|
|
|
paclair --conf conf.yml Docker nemunaire/fic-admin analyse \
|
|
|
|
|
--output-format html --output-report file
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
![Rapport d'analyse statique des vulnérabilités par Clair](paclair.png)
|
|
|
|
|
|
2021-09-23 00:55:18 +00:00
|
|
|
|
Si l'on souhaite uniquement avoir des statistiques dans la console :
|
2018-11-14 05:01:54 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
42sh$ paclair --conf conf.yml Docker node:latest analyse --output-format stats
|
|
|
|
|
Unknown: 2
|
|
|
|
|
Negligible: 1
|
|
|
|
|
Medium: 5
|
|
|
|
|
High: 4
|
2018-11-14 05:01:54 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|