Skip to main content Link Search Menu Expand Document (external link)

Bloque 15 - Endurecimiento del Kernel

Como vimos en el apartado Correción 7 hay muchos valores que fuimos cambiando por los aconsejados. Ahora aparecen nuevos valores a tener en cuenta, el procedimiento es el mismo que en la corrección:

2022-11-29 09:23:21 Result: sysctl key kernel.dmesg_restrict has a different value than expected in scan profile. Expected=1, Real=0

...
  • kernel.dmesg-restict, sirve para restringir el acceso a la información de dmesg, normalmente para que usuarios normales no puedan ver información sensible como los detalles de las caídas de las aplicaciones. El valor 0 es sin restricciones y todos los usuarios pueden acceder a la información de dmesg. En cambio, el valor 1 sólo permite ver esta información a los usuarios que tengan la capacidad CAP_SYSLOG, es decir, el usuario que tenga asignado esta capacidad en el archivo /etc/security/capability.conf (aparte de los superusuarios). Podemos ver las capacidades de cada usuario si usamos el comando capsh:
## Usuario propio

capsh --print

## El de otros usuario, como administrador

sudo capsh --print --user=[nombre_usuario]

2022-11-29 09:23:21 Result: sysctl key kernel.kptr_restrict has a different value than expected in scan profile. Expected=2, Real=1

...
  • kernel.kptr_restict, está diseñado para ocultar los punteros del kernel expuestos, específicamente a través de las interfaces /proc. Exponer estos punteros proporciona un blanco fácil para las vulnerabilidades de escritura del núcleo, ya que revelan las ubicaciones de estructuras modificables que contienen funciones que pueden activarse. Si se establece en 2, los punteros del núcleo que utilizan %pK se imprimen como 0's independientemente de los privilegios.
2022-11-29 09:23:21 Result: sysctl key kernel.modules_disabled has a different value than expected in scan profile. Expected=1, Real=0

...
  • kernel.modules_disabled, el Kernel puede ser configurado para no permitir la carga de nuevos módulos del kernel. Esta característica es especialmente útil para los sistemas de alta seguridad. El uso de esta opción será una gran protección contra la carga de módulos maliciosos, por ejemplo, puede ayudar a contrarrestar los rootkits.
2022-11-29 09:23:21 Result: sysctl key kernel.perf_event_paranoid has a different value than expected in scan profile. Expected=3, Real=1

...
  • kernel.perf_event_paranoid, define cómo de “paranoico” debe ser el Kernel en relación con la monitorización del rendimiento. Los niveles de “paranoia” actuales están documentados en un comentario de kernel/events/core.c:

    • -1 - Nada paranoico.
    • 0 - no permite el acceso a tracepoint para usuarios no privilegiados.
    • 1 - no permite eventos de cpu para usuarios no privilegiados.
    • 2 - no permite los perfieles de kernel para usuarios no privilegiados.

No encuentro ninguna referencia a porque el valor debe ser 3, por lógica debe ser más restrictivo. En cambio, he encontrado esta vulnerabilidad donde se sugiere que el valor de este debe ser >=3.

2022-11-29 09:23:21 Result: sysctl key kernel.sysrq has a different value than expected in scan profile. Expected=0, Real=1

...
  • kernel.sysrq, este valor lo modificamos durante las correcciones, pero fue con otra versión de Lynis, ahora nos sugiere deshabilitarlo directamente. Esto puede deberse a que es posible hacer uso de esto de manera remota por algunas referencias, pero desconozco como se hace realmente.
2022-11-29 09:23:21 Result: sysctl key net.ipv4.conf.all.accept_redirects has a different value than expected in scan profile. Expected=0, Real=1

...
  • net.ipv4.conf.all.accept_redirects, este caso es curioso porque, como vimos en el Bloque 20 de la Primera auditoría, este valor estaba a 0 y ahora dice que está a 1. Me inclino a pensar que su valor siempre fue ese y que la antigua versión de este programa tuviera un fallo en ese test.

Aunque muestra muchos valores, no son los únicos que busca:

2022-11-29 09:23:21 Result: key kernel.exec-shield-randomize does not exist on this machine
2022-11-29 09:23:21 Result: key kernel.exec-shield does not exist on this machine

...

2022-11-29 09:23:21 Result: key kernel.suid_dumpable does not exist on this machine
2022-11-29 09:23:21 Result: sysctl key kernel.sysrq has a different value than expected in scan profile. Ex
pected=0, Real=1


...

2022-11-29 09:23:21 Result: key net.core.bpf_jit_harden does not exist on this machine
2022-11-29 09:23:21 Result: key net.inet.icmp.bmcastecho does not exist on this machine
2022-11-29 09:23:21 Result: key net.inet.icmp.drop_redirect does not exist on this machine
2022-11-29 09:23:21 Result: key net.inet.icmp.rediraccept does not exist on this machine
2022-11-29 09:23:21 Result: key net.inet.icmp.timestamp does not exist on this machine

...

Como vemos son valores que no existen en la máquina, esto puede deberse a que son valores opcionales, que son valores que se han ido añadiendo a otras versiones de la distribución o directamente de otras distribuciones. En cualquier caso, habría que estudiar individualmente el alcance, compatibilidad e impacto de estos parámetros en nuestro sistema, apoyándonos en la información que aporta el registro de Lynis.


Información adicional

  • dmesg -> es usado con el fin de escribir los mensajes del kernel en Linux y otros sistemas operativos similares a Unix en una salida estándar de forma mucho más organizada. Muchos de estos mensajes los vemos cuando arrancamos el sistema operativo, siendo un buen indicativo de los procesos utilizados por el kernel y si alguno obtiene un fallo.

  • Punteros -> nombres con los que se designa un espacio de memoria.

  • Paranoia del kernel -> cómo actúa el núcleo a la hora de que el software vea el hardware. Por ejemplo, si hacemos que el kernel solo reconozca el tipo de USB (firmware) que deseamos, cualquier otro tipo de USB simplemente sería ignorado por nuestro equipo, algo un poco extremo, pero podría servir dependiendo de las circunstancias.