최신 Linux 커널에서 모듈 로딩을 전역적으로 비활성화할 수 있습니까?

최신 Linux 커널에서 모듈 로딩을 전역적으로 비활성화할 수 있습니까?

/proc/sys/kernel/cap-bound커널 2.6.25 이전에는 시스템 전체에 걸쳐 drop을 사용하여 CAP_SYS_MODULE악용이나 재부팅 없이 커널 공간에 로드된 현재 코드 세트가 모두 있는지 확인할 수 있었던 때가 있었습니다 .

CAP_NET_ADMIN그런 다음 (!) 없이도 커널 모듈을 로드할 수 있도록 허용하기로 결정했고 CAP_SYS_MODULE값이 CAP_SYS_MODULE초과되었습니다. 최신 커널을 검색해 보니 런타임 검사가 CAP_SYS_MODULE여전히 존재하지 않는 것으로 나타났습니다.

현대적인 대안은 무엇입니까?

답변1

Kees Cook은 이러한 요구를 충족하기 위해 2009년 초에 sysctl을 구현했습니다. 문서에 명시된 바와 같이문서/sysctl/kernel.txt:

modules_disabled:

다른 모듈식 커널에 모듈을 로드할 수 있는지 여부를 나타내는 토글 값입니다. 이 토글의 기본값은 꺼짐( 0)이지만 true( 1)로 설정할 수 있습니다. true이면 모듈을 로드하거나 언로드할 수 없으며 토글을 다시 false로 설정할 수 없습니다. 일반적으로 "kexec_load_disabled" 토글과 함께 사용됩니다.


kexec_load_disabled앞서 언급했듯이 커널 공간에서 활성화된 코드를 제어하는 ​​것이 목표라면 다음 방법을 사용해야 합니다.

kexec_load_disabled:

kexec_load 시스템 호출이 비활성화되었는지 여부를 나타내는 토글 스위치입니다. 이 값의 기본값은 0(false: kexec_load가 활성화됨)이지만 1 (true: kexec_load가 비활성화됨)로 설정할 수 있습니다. true가 되면 kexec를 더 이상 사용할 수 없으며 토글을 false로 다시 설정할 수 없습니다. 이를 통해 시스템 호출이 비활성화되기 전에 kexec 이미지를 로드할 수 있으므로 시스템이 이미지를 변경하지 않고도 이미지를 설정(나중에 사용할)할 수 있습니다. 일반적으로 "modules_disabled" sysctl과 함께 사용됩니다.

관련 정보