22 lines
No EOL
1.5 KiB
Markdown
22 lines
No EOL
1.5 KiB
Markdown
## Light Hardened Container
|
|
|
|
#### Perché
|
|
Voglio esporre su internet alcuni servizi da una board (Odroid C2).
|
|
Giocando con i vari sistemi per creare container quello piú simile ai miei desideri é `systemd-nspawn` (si, systemd é una merda ed é il male). `systemd-nspawn` é tipo una chroot ma meglio.
|
|
|
|
### Come
|
|
Uso [alpine linux](https://alpinelinux.org) come base perché la rootfs é scandalosamente piccola (1.9Mb), supporta arm64 (che é l'architettura della mia board casalinga), supporta un sistema di pacchetti degno di questo nome (apk) ed e' orientata alla sicurezza.
|
|
|
|
L'assunto di base é che i servizi che girano dentro il container sono bucabili e quindi bisogna limitare i danni di un sicuro pwn.
|
|
Per fare questo ho pensato di far girare la root di ogni container dentro una partizione read-only.
|
|
Per i dati necessari ai vari servizi, faccio un bind di una directory da una partizione no-exec in modo che
|
|
anche se il servizio viene bucato, l'attaccante puó scrivere solamente sulla partizione dei dati (da cui non puo'
|
|
peró avviare niente).
|
|
|
|
Per evitare di far usare interpreti e altre utilities utili all'attaccante, il container deve contenere esclusivamente i files strettamente necessari per far girare il servizio. Per fare questo, prima della fase di deploy il servizio verrá fatto girare con strace per controllare tutte le syscall a `open`.
|
|
|
|
Ricapitolando, immaginiamo di voler far girare `nginx` in questa maniera:
|
|
|
|
- Scarichiamo la rootfs di alpine
|
|
- `systemd-nspawn -D `
|
|
.... |