/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과 함께 사용됩니다.