Endurecemento
O endurecemento aplícase en ficheiros de texto do overlay da build. Para auditalo abonda con
lelos ou comparalos cun diff. Esta páxina resume cada un.
Liña de arranque do kernel
Todas as entradas de GRUB levan estes parámetros (engádeos build.sh a config/grub.cfg):
| Parámetro | Efecto |
|---|---|
lockdown=confidentiality | Nin sequera root pode ler a memoria do kernel nin cargar nel código sen asinar. |
init_on_alloc=1 | A memoria ponse a cero ao reservala. |
init_on_free=1 | A memoria ponse a cero ao liberala: menos datos que recuperar nun ataque cold boot. |
slab_nomerge | Non mestura cachés do asignador do kernel, o que dificulta explotar desbordamentos. |
page_alloc.shuffle=1 | Reparte de forma aleatoria as páxinas libres. |
randomize_kstack_offset=on | Desprazamento aleatorio da pila do kernel en cada chamada ao sistema. |
pti=on | Illamento das táboas de páxinas do kernel (Meltdown). |
mitigations=auto,nosmt | Mitigacións de CPU activas e SMT (hyper-threading) desactivado se é necesario. |
vsyscall=none | Quita a antiga páxina vsyscall, de enderezo fixo. |
debugfs=off | Sen debugfs. |
apparmor=1 security=apparmor | Activa AppArmor como módulo de seguranza. |
ipv6.disable=1 | IPv6 desactivado por completo. |
sysctl
Ficheiro: /etc/sysctl.d/99-redderos-hardening.conf.
Kernel
| Clave | Valor | Efecto |
|---|---|---|
kernel.kptr_restrict | 2 | Oculta os enderezos do kernel, tamén a root. |
kernel.dmesg_restrict | 1 | Só root le o rexistro do kernel. |
kernel.printk | 3 3 3 3 | Só erros graves na consola. |
kernel.unprivileged_bpf_disabled | 1 | BPF só para root. |
net.core.bpf_jit_harden | 2 | Endurece o compilador JIT de BPF. |
kernel.kexec_load_disabled | 1 | Non se pode cargar outro kernel en quente. |
kernel.yama.ptrace_scope | 2 | Só root pode depurar outros procesos. |
kernel.perf_event_paranoid | 3 | Sen perf para usuarios normais. |
kernel.sysrq | 0 | Teclas máxicas SysRq desactivadas. |
kernel.core_pattern | |/bin/false | Ningún volcado de memoria chega a escribirse. |
kernel.unprivileged_userns_clone | 0 | Sen espazos de nomes de usuario para usuarios normais. |
dev.tty.ldisc_autoload | 0 | Non carga disciplinas de liña baixo demanda. |
vm.unprivileged_userfaultfd | 0 | userfaultfd só para root. |
vm.swappiness | 0 | Non usar swap (ademais, non hai ningunha). |
Sistema de ficheiros
| Clave | Valor | Efecto |
|---|---|---|
fs.protected_symlinks | 1 | Protexe contra trampas con ligazóns simbólicas en /tmp. |
fs.protected_hardlinks | 1 | O mesmo coas ligazóns duras. |
fs.protected_fifos | 2 | O mesmo cos FIFO. |
fs.protected_regular | 2 | O mesmo cos ficheiros normais. |
fs.suid_dumpable | 0 | Os programas setuid non xeran volcados. |
Rede
| Clave | Valor | Efecto |
|---|---|---|
net.ipv4.tcp_syncookies | 1 | Resiste as inundacións SYN. |
net.ipv4.tcp_rfc1337 | 1 | Protección TIME-WAIT (RFC 1337). |
net.ipv4.tcp_timestamps | 0 | Sen marcas de tempo TCP, que delatan o reloxo. |
net.ipv4.conf.*.rp_filter | 1 | Descarta paquetes con orixe falsificada. |
net.ipv4.conf.*.accept_redirects | 0 | Ignora as redireccións ICMP. |
net.ipv4.conf.all.secure_redirects | 0 | O mesmo, tamén as «seguras». |
net.ipv4.conf.all.send_redirects | 0 | Non envía redireccións. |
net.ipv4.conf.all.accept_source_route | 0 | Ignora o encamiñamento de orixe. |
net.ipv4.icmp_echo_ignore_all | 1 | Non responde a ping. |
net.ipv4.ip_forward | 0 | Non reenvía tráfico. |
O autotest comproba que cada clave ten o valor esperado (as que non existen no kernel en uso omítense e indícase).
Módulos bloqueados
Ficheiro: /etc/modprobe.d/redderos-blacklist.conf. Cada módulo substitúese por /bin/false, así
que non se pode cargar nin a man.
| Grupo | Módulos |
|---|---|
| Protocolos de rede pouco usados | dccp, sctp, rds, tipc, n-hdlc, ax25, netrom, x25, rose, decnet, econet, af_802154, ipx, appletalk, psnap, p8022 |
| Sistemas de ficheiros pouco usados | cramfs, freevxfs, jffs2, hfs, hfsplus, udf |
| DMA externo e periféricos sen fíos | firewire-core, thunderbolt, bluetooth, btusb |
A cámara (uvcvideo) ten unha liña preparada pero comentada: descoméntaa na build para
desactivala por completo.
AppArmor
Debian e Ubuntu non cargan perfís de AppArmor en sistemas live. RedderOS anula esa condición
(/etc/systemd/system/apparmor.service.d/redderos-live.conf) e carga os perfís de
apparmor-profiles.
Amnesia: systemd e límites
| Ficheiro | Efecto |
|---|---|
systemd/journald.conf.d/redderos.conf | Rexistros só na RAM (máximo 32 MB), sen reenvialos a syslog. |
systemd/coredump.conf.d/redderos.conf | Sen volcados de memoria. |
systemd/system.conf.d/redderos.conf | DefaultLimitCORE=0 para todo o que arrinca systemd. |
security/limits.d/redderos.conf | Límite de volcados a 0 para todos os usuarios. |
systemd/logind.conf.d/redderos.conf | Ao pechar sesión non queda vivo ningún proceso do usuario. |
Ademais, a build enmascara os temporizadores de apt, motd-news, e2scrub e fstrim, e
desactiva os scripts do sistema live que activan a swap do disco do equipo, os informes de erros
(apport) e pollinate.
Usuarios e privilexios
rootestá bloqueado: non se pode iniciar sesión con el.anon, o usuario da sesión amnésica, non ten contrasinal ninsudo. Só a entrada Administrador temporal lle dásudo, e unicamente durante esa sesión.- A única excepción é
redder-wipe: calquera usuario pode executalo como root sen contrasinal e sen argumentos (/etc/sudoers.d/redderos-wipe). Só borra a RAM e apaga. - Os usuarios de perfil créanse na RAM ao abrir o perfil e bórranse ao pechalo.
umask 077: os ficheiros novos só os pode ler o seu propietario.
Sen administrador, un programa comprometido que se execute como anon non pode chegar a root nin
modificar a devasa.
Integridade da ISO
A build xera md5sum.txt e sha256sum.txt coa suma de cada ficheiro da imaxe, e un .sha256 da
ISO completa. A sinatura GPG da ISO está pendente.