루트 사용자에게 커널 코드에 대한 읽기/쓰기 액세스 권한이 있습니까?

루트 사용자에게 커널 코드에 대한 읽기/쓰기 액세스 권한이 있습니까?

루트 사용자가 메모리에서 커널 코드의 일부를 읽고 쓸 수 있는지 알고 싶습니다. 그럴 수 있어?

답변1

예, 일반적으로 루트 사용자는 커널 코드를 간접적으로 수정할 수 있는 충분한 권한을 가지고 있습니다. 그러나 적절한 보안 조치가 고려된다는 가정 하에 일부 메커니즘을 사용하여 이를 제한할 수 있습니다. 권한이 있는 루트 사용자가 커널 코드를 수정할 수 있는 방법의 대략적인 목록:

  • ioperm()syscall은 I iopl()/O 포트 권한을 설정할 수 있습니다.

  • 물론 부팅 디렉터리(커널 포함)의 파일은 수정할 수 있습니다.

  • /dev/mem, /dev/kmem문자 장치는 /dev/port직접 메모리 액세스를 허용합니다.

  • 다양한 MSR을 사용하여 낮은 수준의 CPU 동작을 변경하여 보안을 위반할 수 있습니다.

  • kexec기능을 사용하여 새 커널로 부팅할 수 있습니다.

  • ACPI 테이블은 커널에서 AML을 실행하여 루트에 의해 런타임에 로드될 수 있습니다.

  • ACPI를 custom_method악용하여 메모리에 직접 쓸 수 있습니다.

  • 모듈 서명이 비활성화된 경우 루트로 커널 모듈을 로드할 수 있습니다.

  • kprobes와 같은 디버깅 기능은 커널 동작을 수정할 수 있습니다.

강화된 커널(예: 적절하게 구성된)을 사용하여 완화를 수행할 수 있습니다.사이버 보안, 또는 다음을 사용하여커널 잠금패치할 내용이제 상류. 물론, 루트 사용자가 커널이 위치한 부트 로더나 부트 파티션에 쓰는 것을 방지하는 것은 여전히 ​​필요합니다.

관련 정보