docker-internals: add part on CoreOS Clair
This commit is contained in:
parent
e1b1f8e1b3
commit
f89b5e88e6
4 changed files with 155 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
|||
SOURCES = tutorial.md setup.md oci.md manifest.md runc.md linuxkit.md vxlan.md rendu.md
|
||||
SOURCES = tutorial.md clair.md oci.md manifest.md runc.md linuxkit.md vxlan.md rendu.md
|
||||
PANDOCOPTS = --latex-engine=xelatex \
|
||||
--standalone \
|
||||
--normalize \
|
||||
|
|
154
tutorial/docker-internals/clair.md
Normal file
154
tutorial/docker-internals/clair.md
Normal file
|
@ -0,0 +1,154 @@
|
|||
\newpage
|
||||
|
||||
Une vision plus Clair de la sécurité ?
|
||||
======================================
|
||||
|
||||
Nous avons vu, au travers de tous les précédents TP, que Docker nous apportait
|
||||
un certain degré de sécurité d'emblée au lancement du conteneur. Cela peut sans
|
||||
doute paraître quelque peu rassurant pour la personne chargée d'administrer la
|
||||
machine hébergeant les conteneurs, car cela lui apporte des garanties quant à
|
||||
l'effort de cloisonnement mis en place.
|
||||
|
||||
Mais doit-on pour autant s'arrêter là et considérer que nous avons réglé
|
||||
l'ensemble des problématiques de sécurité liées aux conteneurs ?
|
||||
|
||||
Évidemment, non : une fois nos services lancés dans des conteneurs, il ne sont
|
||||
pas moins exposés aux bugs et autres failles applicatives ; qu'elles soient
|
||||
dans notre code ou celui d'une bibliothèque, accessible par rebond, ...
|
||||
|
||||
Il est donc primordial de ne pas laisser ses conteneurs à l'abandon une fois
|
||||
leur image créée et envoyée en production. Nos conteneurs doivent être
|
||||
regénérés sitôt que leur image de base est mise à jour (une mise à jour d'une
|
||||
image telle que Debian, Ubuntu ou Redhat n'apparaît que pour cela) ou bien
|
||||
lorsqu'un des programmes ou bibliothèques que l'on a installé ensuite.
|
||||
|
||||
Convaincu ? Cela sonne encore comme des bonnes pratiques difficile à mettre en
|
||||
œuvre, pouvant mettre en péril tout un système d'information. Pour s'en
|
||||
protéger, nous allons avoir besoin de réaliser à intervalles réguliers une
|
||||
analyse statique de nos conteneurs.
|
||||
|
||||

|
||||
|
||||
|
||||
## Clair
|
||||
|
||||
Le principal outil pour indexer et chercher des vulnérabilités est
|
||||
[`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
|
||||
de ses données sources, auquel nous pourrons interagir au moyen d'une API :
|
||||
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é.
|
||||
|
||||

|
||||
|
||||
|
||||
Commençons par lancer notre propre instance de `Clair`, à l'aide d'un
|
||||
`docker-compose.yml` :
|
||||
|
||||
<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
|
||||
image: quay.io/coreos/clair:v2.0.6
|
||||
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>
|
||||
|
||||
Vous trouverez un exemple de configuration dans le [dépôt du
|
||||
projet](https://raw.githubusercontent.com/coreos/clair/master/config.yaml.sample). N'oubliez
|
||||
pas de changer le nom d'hôte et le mot de passe pour se connecter au conteneur
|
||||
de base de données.
|
||||
|
||||
Une fois lancé, la base nécessite d'être initialisée. L'opération peut prendre
|
||||
plusieurs minutes. Vous pouvez suivre l'avancement de l'ajout :
|
||||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
curl http://localhost:6060/v1/namespaces
|
||||
curl http://localhost:6060/v1/namespaces/debian:9/vulnerabilities?limit=10
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
## PAClair
|
||||
|
||||
Afin de pouvoir réaliser à la demande et sans registre privé, l'analyse de
|
||||
conteneur, nous allons utiliser le programme
|
||||
[`paclair`](https://github.com/yebinama/paclair) :
|
||||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
pip3 install paclair
|
||||
```
|
||||
</div>
|
||||
|
||||
Il nécessite un fichier de configuration pour être utilisé, essayez :
|
||||
|
||||
<div lang="en-US">
|
||||
```yml
|
||||
General:
|
||||
clair_url: 'http://localhost:6060'
|
||||
Plugins:
|
||||
Docker:
|
||||
class: paclair.plugins.docker_plugin.DockerPlugin
|
||||
```
|
||||
</div>
|
||||
|
||||
Pour obtenir un rapport d'analyse, on commence par envoyer les couches de
|
||||
l'image à `Clair` :
|
||||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
paclair --conf conf.yml Docker nemunaire/fic-admin push
|
||||
```
|
||||
</div>
|
||||
|
||||
Puis on lui demande la génération d'un rapport `html` :
|
||||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
paclair --conf conf.yml Docker nemunaire/fic-admin analyse --output-format html --output-report file
|
||||
```
|
||||
</div>
|
||||
|
||||
Si l'on souhaite uniquement avoir des statistiques dans la console :
|
||||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
42sh$ paclair --conf conf.yml Docker node:latest analyse --output-format stats
|
||||
Unknown: 2
|
||||
Negligible: 1
|
||||
Medium: 5
|
||||
High: 4
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
## Exercice {.unnumbered}
|
||||
|
||||
Déterminez le nombre de vulnérabilités dans les principales images officielles
|
||||
du [Docker Hub](https://hub.docker.com/explore), notamment `nginx`, `golang`,
|
||||
`reddis`, ...
|
BIN
tutorial/docker-internals/hubvuln.png
Normal file
BIN
tutorial/docker-internals/hubvuln.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
BIN
tutorial/docker-internals/paclair.png
Normal file
BIN
tutorial/docker-internals/paclair.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
Loading…
Add table
Add a link
Reference in a new issue