
사용자가 커널 모드에서 자신의 프로그램을 실행할 수 있습니까? 사용자가 이를 어떻게 수행할 수 있습니까? 시스템 보호 메커니즘의 어떤 약점을 우회해야 합니까?
나는 사용자 프로그램이 인터럽트 벡터의 모드 비트를 사용자 모드에서 커널 모드로 전환한 다음 원하는 인터럽트 핸들러를 실행할 수 있다고 생각합니다. 나는 올바른 길을 가고 있습니까?
답변1
사용자는 커널 모드에서 자신의 코드를 실행할 수 없습니다. 커널 모드는 프로그램이 머신(가상 머신인 경우)의 모든 측면에 대한 제어를 제공합니다. 커널 모드에서 코드를 실행하면 모든 보안 조치가 우회됩니다.
모듈을 로드하여 커널 모드에서 코드를 실행할 수 있습니다. 물론 루트만 모듈을 로드할 수 있습니다(특정 정적 보안 구성에서는 이를 비활성화할 수 있습니다).
"사용자 프로그램이 인터럽트 벡터에서 모드 비트를 사용자 모드에서 커널 모드로 전환할 수 있다"는 것이 무슨 뜻인지 모르겠습니다. 사용자 프로그램은 인터럽트 벡터를 제어할 수 없으며 커널은 이를 자체적으로 예약합니다.
답변2
시스템 호출을 연결하고 프로그램이 될 onc를 추가할 수 있습니다. 프로그램이 커널 모드에서 실행하여 "systme 호출"을 추가할 수 있습니다. 커널 버전을 찾으려면 /boot/system.map-kernel 버전 파일에 행을 추가해야 합니다. proc/version LKM 도구가 이를 수행하는 데 도움이 될 수 있습니다