90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
### Stage 5 : Une vraie isolation (3 points)
|
|
|
|
En plus du `chroot`, assignez de nouveaux namespaces au processus que vous
|
|
allez lancer : CGroups, IPC, mount, net, PID, UTS, user.
|
|
|
|
Il est requis que le nouveau processus ne puisse pas s'échapper de ses
|
|
namespaces !
|
|
|
|
Astuce : `unshare(2)`.
|
|
|
|
|
|
### Stage 6 : Empêcher les fuites d'information (2 points)
|
|
|
|
Démonter tous les sytèmes de fichiers qui ne sont pas nécessaire au
|
|
fonctionnement de votre conteneur et remontez les partitions
|
|
|
|
N'oubliez pas de remonter les systèmes de fichiers pour lequel cette opération
|
|
est nécessaire pour terminer l'étape d'isolation.
|
|
|
|
Astuce : `mount(2)`.
|
|
|
|
|
|
### Stage 7 : Identification du conteneur (1 point)
|
|
|
|
Maintenant que vous avez votre conteneur, personalisez-le un peu en lui donnant
|
|
un nom unique.
|
|
|
|
Astuce : `sethostname(2)`
|
|
|
|
|
|
### Stage 8 : `pivot_root` (4 points)
|
|
|
|
Effectuer un `pivot_root(2)` de telle sorte qu'il ne reste plus de trace du
|
|
système de fichiers hôte.
|
|
|
|
Astuce : `pivot_root(2)`, `umount(2)`.
|
|
|
|
|
|
### Stage 9 : Bac à sable connecté (4 points)
|
|
|
|
Partant d'une liste d'interfaces sur la machine hôte similaire à :
|
|
|
|
```
|
|
42sh$ ip link
|
|
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
|
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
|
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
|
|
link/ether 90:2b:34:5e:fa:a7 brd ff:ff:ff:ff:ff:ff
|
|
```
|
|
|
|
Vous devrez pouvoir `ping` votre conteneur depuis votre hôte :
|
|
|
|
```
|
|
42sh$ ip address
|
|
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
|
|
[...]
|
|
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
|
|
[...]
|
|
3: veth3e06cad@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
|
|
link/ether 42:a2:a0:89:54:ef brd ff:ff:ff:ff:ff:ff
|
|
inet 10.10.10.41/24 brd 10.10.10.255 scope global veth3e06cad
|
|
valid_lft forever preferred_lft forever
|
|
42sh$ ping 10.10.10.42
|
|
PING 10.10.10.42 (10.10.10.42) 56(84) bytes of data.
|
|
64 bytes from 10.10.10.42: icmp_seq=1 ttl=56 time=3.90 ms
|
|
64 bytes from 10.10.10.42: icmp_seq=2 ttl=56 time=3.78 ms
|
|
^C
|
|
--- 10.10.10.42 ping statistics ---
|
|
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
|
|
rtt min/avg/max/mdev = 3.789/3.847/3.906/0.085 ms
|
|
```
|
|
|
|
Dans l'exemple ci-dessus, l'interface dans le conteneur a l'IP `10.10.10.42`,
|
|
tandis que la machine hôte a l'IP `10.10.10.41`.
|
|
|
|
Astuces : vous pouvez utiliser la `libnetlink(3)` ou même faire des appels aux
|
|
programmes `ip(8)`, `brctl(8)`, ...
|
|
|
|
|
|
### Stage 10 (bonus) : seccomp (2 points)
|
|
|
|
Filtrez les appels systèmes de telle sorte qu'aucun programme exécuté dans
|
|
votre bac à sable ne puisse plus appeler les appels systèmes suivants :
|
|
|
|
* `nfsservctl(2)` ;
|
|
* `personality(2)` ;
|
|
* `pivot_root(2)`.
|
|
|
|
Astuce : `seccomp(2)`.
|