Enfortiment
L'enfortiment s'aplica en fitxers de text de l'overlay de la compilació. Per auditar-lo n'hi ha prou
de llegir-los o comparar-los amb un diff. Aquesta pàgina en resumeix cadascun.
Línia d'arrencada del nucli
Totes les entrades de GRUB porten aquests paràmetres (els afegeix build.sh a config/grub.cfg):
| Paràmetre | Efecte |
|---|---|
lockdown=confidentiality | Ni tan sols root no pot llegir la memòria del nucli ni carregar-hi codi sense signar. |
init_on_alloc=1 | La memòria es posa a zero en reservar-la. |
init_on_free=1 | La memòria es posa a zero en alliberar-la: menys dades per recuperar en un atac cold boot. |
slab_nomerge | No barreja les memòries cau de l'assignador del nucli, cosa que dificulta explotar desbordaments. |
page_alloc.shuffle=1 | Reparteix de manera aleatòria les pàgines lliures. |
randomize_kstack_offset=on | Desplaçament aleatori de la pila del nucli a cada crida al sistema. |
pti=on | Aïllament de les taules de pàgines del nucli (Meltdown). |
mitigations=auto,nosmt | Mitigacions de CPU actives i SMT (hyper-threading) desactivat si cal. |
vsyscall=none | Treu l'antiga pàgina vsyscall, d'adreça fixa. |
debugfs=off | Sense debugfs. |
apparmor=1 security=apparmor | Activa AppArmor com a mòdul de seguretat. |
ipv6.disable=1 | IPv6 desactivat completament. |
sysctl
Fitxer: /etc/sysctl.d/99-redderos-hardening.conf.
Nucli
| Clau | Valor | Efecte |
|---|---|---|
kernel.kptr_restrict | 2 | Amaga les adreces del nucli, també a root. |
kernel.dmesg_restrict | 1 | Només root llegeix el registre del nucli. |
kernel.printk | 3 3 3 3 | Només errors greus a la consola. |
kernel.unprivileged_bpf_disabled | 1 | BPF només per a root. |
net.core.bpf_jit_harden | 2 | Enforteix el compilador JIT de BPF. |
kernel.kexec_load_disabled | 1 | No es pot carregar un altre nucli en calent. |
kernel.yama.ptrace_scope | 2 | Només root pot depurar altres processos. |
kernel.perf_event_paranoid | 3 | Sense perf per als usuaris normals. |
kernel.sysrq | 0 | Tecles màgiques SysRq desactivades. |
kernel.core_pattern | |/bin/false | Cap bolcat de memòria no s'arriba a escriure. |
kernel.unprivileged_userns_clone | 0 | Sense espais de noms d'usuari per als usuaris normals. |
dev.tty.ldisc_autoload | 0 | No carrega disciplines de línia sota demanda. |
vm.unprivileged_userfaultfd | 0 | userfaultfd només per a root. |
vm.swappiness | 0 | No utilitzar swap (a més, no n'hi ha cap). |
Sistema de fitxers
| Clau | Valor | Efecte |
|---|---|---|
fs.protected_symlinks | 1 | Protegeix contra paranys amb enllaços simbòlics a /tmp. |
fs.protected_hardlinks | 1 | El mateix amb enllaços durs. |
fs.protected_fifos | 2 | El mateix amb FIFO. |
fs.protected_regular | 2 | El mateix amb fitxers normals. |
fs.suid_dumpable | 0 | Els programes setuid no generen bolcats. |
Xarxa
| Clau | Valor | Efecte |
|---|---|---|
net.ipv4.tcp_syncookies | 1 | Resisteix les inundacions SYN. |
net.ipv4.tcp_rfc1337 | 1 | Protecció TIME-WAIT (RFC 1337). |
net.ipv4.tcp_timestamps | 0 | Sense marques de temps TCP, que delaten el rellotge. |
net.ipv4.conf.*.rp_filter | 1 | Descarta paquets amb origen falsificat. |
net.ipv4.conf.*.accept_redirects | 0 | Ignora les redireccions ICMP. |
net.ipv4.conf.all.secure_redirects | 0 | El mateix, també les «segures». |
net.ipv4.conf.all.send_redirects | 0 | No envia redireccions. |
net.ipv4.conf.all.accept_source_route | 0 | Ignora l'encaminament d'origen. |
net.ipv4.icmp_echo_ignore_all | 1 | No respon a ping. |
net.ipv4.ip_forward | 0 | No reenvia trànsit. |
L'autotest comprova que cada clau té el valor esperat (les que no existeixen al nucli en ús s'ometen i s'indica).
Mòduls bloquejats
Fitxer: /etc/modprobe.d/redderos-blacklist.conf. Cada mòdul se substitueix per /bin/false, de
manera que no es pot carregar ni a mà.
| Grup | Mòduls |
|---|---|
| Protocols de xarxa poc utilitzats | dccp, sctp, rds, tipc, n-hdlc, ax25, netrom, x25, rose, decnet, econet, af_802154, ipx, appletalk, psnap, p8022 |
| Sistemes de fitxers poc utilitzats | cramfs, freevxfs, jffs2, hfs, hfsplus, udf |
| DMA extern i perifèrics sense fil | firewire-core, thunderbolt, bluetooth, btusb |
La càmera (uvcvideo) té una línia preparada però comentada: descomenta-la a la compilació per
desactivar-la completament.
AppArmor
Debian i Ubuntu no carreguen perfils d'AppArmor en sistemes live. RedderOS anul·la aquesta condició
(/etc/systemd/system/apparmor.service.d/redderos-live.conf) i carrega els perfils
d'apparmor-profiles.
Amnèsia: systemd i límits
| Fitxer | Efecte |
|---|---|
systemd/journald.conf.d/redderos.conf | Registres només a la RAM (màxim 32 MB), sense reenviar a syslog. |
systemd/coredump.conf.d/redderos.conf | Sense bolcats de memòria. |
systemd/system.conf.d/redderos.conf | DefaultLimitCORE=0 per a tot el que arrenca systemd. |
security/limits.d/redderos.conf | Límit de bolcats a 0 per a tots els usuaris. |
systemd/logind.conf.d/redderos.conf | En tancar la sessió no queda viu cap procés de l'usuari. |
A més, la compilació emmascara els temporitzadors d'apt, motd-news, e2scrub i fstrim, i
desactiva els scripts del sistema live que activen la swap del disc de l'ordinador, els informes
d'errors (apport) i pollinate.
Usuaris i privilegis
rootestà bloquejat: no s'hi pot iniciar la sessió.anon, l'usuari de la sessió amnèsica, no té contrasenya nisudo. Només l'entrada Administrador temporal li donasudo, i únicament durant aquella sessió.- L'única excepció és
redder-wipe: qualsevol usuari el pot executar com a root sense contrasenya i sense arguments (/etc/sudoers.d/redderos-wipe). Només esborra la RAM i apaga. - Els usuaris de perfil es creen a la RAM en obrir el perfil i s'esborren en tancar-lo.
umask 077: els fitxers nous només els pot llegir el propietari.
Sense administrador, un programa compromès que s'executi com a anon no pot arribar a root ni
modificar el tallafoc.
Integritat de la ISO
La compilació genera md5sum.txt i sha256sum.txt amb la suma de cada fitxer de la imatge, i un
.sha256 de la ISO completa. La signatura GPG de la ISO està pendent.