O carregamento do módulo pode ser desativado globalmente nos kernels modernos do Linux?

2

Era uma vez (antes do kernel 2.6.25), era possível usar /proc/sys/kernel/cap-bound para descartar CAP_SYS_MODULE system-wide e ter certeza de que o conjunto de código que estava atualmente carregado no espaço do kernel era tudo o que haveria seja, explorações ausentes ou reinicialização.

Em seguida, foi decidido que CAP_NET_ADMIN teria permissão para carregar módulos do kernel mesmo sem CAP_SYS_MODULE (!), e o valor de CAP_SYS_MODULE chegou ao fim - usando um kernel moderno, não acho tempo de execução verifica se CAP_SYS_MODULE ainda existe.

Qual é o substituto moderno?

    
por Charles Duffy 21.04.2016 / 19:34

1 resposta

2

A Kees Cook implementou um sysctl para preencher essa necessidade no início de 2009. Conforme documentado em Documentation / sysctl / kernel .txt :

modules_disabled:

A toggle value indicating if modules are allowed to be loaded in an otherwise modular kernel. This toggle defaults to off (0), but can be set true (1). Once true, modules can be neither loaded nor unloaded, and the toggle cannot be set back to false. Generally used with the "kexec_load_disabled" toggle.

Como mencionado, isso deve ser usado com kexec_load_disabled se o objetivo for controlar qual código está ativo no kernelspace:

kexec_load_disabled:

A toggle indicating if the kexec_load syscall has been disabled. This value defaults to 0 (false: kexec_load enabled), but can be set to 1 (true: kexec_load disabled). Once true, kexec can no longer be used, and the toggle cannot be set back to false. This allows a kexec image to be loaded before disabling the syscall, allowing a system to set up (and later use) an image without it being altered. Generally used together with the "modules_disabled" sysctl.

    
por 21.04.2016 / 19:38