내가 아는 한 커널의 주소 공간을 조작해야만 상위 프로세스 uid를 변경할 수 있습니다. 더 좋은 방법이 있습니까? 커널 메모리만 변경할 수 있는 경우 어떻게 해야 합니까?
참고: 하위 프로세스에는 루트가 있지만 상위 프로세스에는 루트가 없습니다.
답변1
다른 프로세스의 UID는 변경할 수 없습니다.
실제로 디버거를 사용하여 권한을 포기하게 할 수는 있지만 이런 방식으로 권한을 높일 수는 없습니다(디버거는 프로그램이 일반적으로 수행하지 않는 작업을 수행하도록 할 수 있지만 권한이 없는 작업은 수행할 수 없음). ).
예, /dev/mem
일부 코드를 커널에 로드하거나 또는 를 통해 커널 데이터 구조에 직접 액세스하여 원하는 모든 작업을 수행 할 수 있습니다 /dev/kmem
. 그러나 올바른 주소를 찾는 것은 어렵고 올바른 수정은 더욱 어렵습니다. 이는 보안 허점 이외의 다른 작업을 수행하는 합리적인 방법이 아닙니다.
권한이 없는 프로세스와 권한이 있는 하위 프로세스가 반드시 있어야 하는 경우 하위 프로세스가 권한이 없는 프로세스의 요청을 수신하고 대신 해당 요청을 수행하도록 합니다. 하위 프로세스가 수행하려는 작업에 대해 매우 주의하십시오. 요청이 예상한 프로세스에서 오는지 아니면 가짜 프로세스에서 오는지 실제로 알 수 없다는 점을 기억하십시오. 모든 보안 검사는 권한이 있는 프로세스 내에서 수행되어야 하며 권한이 없는 프로세스의 데이터는 신뢰할 수 없습니다.