루트 사용자가 메모리에서 커널 코드의 일부를 읽고 쓸 수 있는지 알고 싶습니다. 그럴 수 있어?
답변1
예, 일반적으로 루트 사용자는 커널 코드를 간접적으로 수정할 수 있는 충분한 권한을 가지고 있습니다. 그러나 적절한 보안 조치가 고려된다는 가정 하에 일부 메커니즘을 사용하여 이를 제한할 수 있습니다. 권한이 있는 루트 사용자가 커널 코드를 수정할 수 있는 방법의 대략적인 목록:
ioperm()
syscall은 Iiopl()
/O 포트 권한을 설정할 수 있습니다.물론 부팅 디렉터리(커널 포함)의 파일은 수정할 수 있습니다.
/dev/mem
,/dev/kmem
문자 장치는/dev/port
직접 메모리 액세스를 허용합니다.다양한 MSR을 사용하여 낮은 수준의 CPU 동작을 변경하여 보안을 위반할 수 있습니다.
이
kexec
기능을 사용하여 새 커널로 부팅할 수 있습니다.ACPI 테이블은 커널에서 AML을 실행하여 루트에 의해 런타임에 로드될 수 있습니다.
ACPI를
custom_method
악용하여 메모리에 직접 쓸 수 있습니다.모듈 서명이 비활성화된 경우 루트로 커널 모듈을 로드할 수 있습니다.
kprobes와 같은 디버깅 기능은 커널 동작을 수정할 수 있습니다.
강화된 커널(예: 적절하게 구성된)을 사용하여 완화를 수행할 수 있습니다.사이버 보안, 또는 다음을 사용하여커널 잠금패치할 내용이제 상류. 물론, 루트 사용자가 커널이 위치한 부트 로더나 부트 파티션에 쓰는 것을 방지하는 것은 여전히 필요합니다.