사용자가 커널 모드에서 프로그램을 어떻게 실행합니까?

사용자가 커널 모드에서 프로그램을 어떻게 실행합니까?

사용자가 커널 모드에서 자신의 프로그램을 실행할 수 있습니까? 사용자는 어떻게 이를 수행할 수 있습니까? 시스템 보호 메커니즘의 어떤 약점을 우회해야 합니까?

내 생각에 사용자 프로그램은 인터럽트 벡터에서 모드 비트를 사용자 모드에서 커널 모드로 전환할 수 있고 그런 다음 원하는 인터럽트 핸들러를 실행할 수 있다고 생각합니다. 나는 올바른 길을 가고 있습니까?

답변1

사용자는 커널 모드에서 자신의 코드를 실행할 수 없습니다. 커널 모드를 사용하면 프로그램이 머신(이 경우 가상 머신)의 다양한 측면을 제어할 수 있습니다. 커널 모드에서 코드를 실행하면 모든 보안 조치가 우회됩니다.

모듈을 로드하여 커널 모드에서 코드를 실행할 수 있습니다. 물론 루트만 모듈을 로드할 수 있습니다(일부 정적 보안 구성에서는 이 기능을 비활성화할 수 있습니다).

"사용자 프로그램이 인터럽트 벡터에서 모드 비트를 사용자 모드에서 커널 모드로 전환할 수 있다"는 것이 무엇을 의미하는지 모르겠습니다. 사용자 프로그램은 인터럽트 벡터를 제어할 수 없으며 커널은 이를 자체적으로 예약합니다.

답변2

시스템 호출을 연결하고 하나를 추가하면 프로그램이 커널 모드에서 실행하여 "시스템 호출"을 추가할 수 있습니다. 커널 버전을 찾으려면 /boot/system.map-kernel 버전에 줄을 추가해야 합니다. /proc /version LKM 도구를 사용하면 이 작업을 수행할 수 있습니다.

관련 정보