Linux 커널 보안에 관한 몇 가지 기본적인 질문 [닫기]

Linux 커널 보안에 관한 몇 가지 기본적인 질문 [닫기]

저는 Linux 커널에 대해 잘 모르고 몇 가지 질문이 있습니다.

  1. 커널 메모리를 사용자 공간 메모리와 분리하는 주요 목적은 무엇입니까? 사용자 애플리케이션이 커널에 나쁜 짓을 하지 않도록 하시겠습니까?

  2. 사용자 수준 응용 프로그램이 제어권을 커널로 전송하는 방법은 몇 가지입니까? 내가 생각할 수 있는 것은 (1) 시스템 호출 호출, (2) 메모리를 커널에 매핑하는 것(그러나 내 생각에는지도()(또한 시스템 호출임), (3) 커널 모듈을 로드합니다(그러나 내 생각에는lsmod일부 시스템 호출도 호출합니다.) 내가 맞나요? 제가 놓친 다른 방법이 있나요?

  3. 커널을 공격하는 방법은 몇 가지입니까? 그들에 대한 간략한 세부정보를 얻을 수 있나요?

  4. 루트 권한을 얻으면 커널에 대한 모든 권한을 갖게 된다는 의미입니까? 즉, 커널과 하드웨어로 내가 원하는 것은 무엇이든 할 수 있다는 것입니까? 아니면 여전히 커널에 대한 권한이 제한되어 있습니까?

누구든지 이 질문에 대한 답을 찾는 데 도움을 줄 수 있다면 매우 감사하겠습니다.

답변1

나는 질문에 가능한 한 간략하게 대답하려고 노력할 것입니다. 귀하가 묻는 질문은 일반적으로 대학의 운영 체제 입문 과정에서 다루어지지만 귀하는 그러한 과정을 수강하지 않은 것으로 가정합니다.

  1. 사용자 공간 프로세스의 메모리 격리는 악의적인 사용자 공간 프로그램으로부터 커널을 보호할 뿐만 아니라 사용자 공간 프로그램을 서로 보호하기 위해 매우 바람직합니다. 이것은 종종 호출됩니다.가상 메모리. 또한 다른 이유(간단한 조각화, 간단한 링커/로더 등)로 인해 필요한 페이징 구현도 더 쉽게 만듭니다.

  2. 인터럽트(모든 인터럽트가 사용자 수준 애플리케이션에 의해 제어되는 것은 아닙니다). 프로세서를 포기하면 프로세스에 대한 "제어"도 사라집니다(예: wait시스템 호출이기도 함). 커널은 자체적으로 응용 프로그램의 일정을 취소하기로 결정할 수 있습니다.

  3. 이것은 매우 광범위한 질문입니다. 제대로 구현되지 않은 시스템 호출이 있는 커널은 공격에 취약합니다. 실제 메모리에 쓰는 기능은 또 다른 방법입니다. 부적절하게 실행된 명령은 다른 취약점(예: Intel 프로세서의 sysret 취약점)으로 이어질 수도 있습니다.

  4. 루트 권한은 커널 권한과 다릅니다. 루트로 실행되는 응용 프로그램은 여전히 ​​가상 메모리를 사용하고 시스템 호출을 수행해야 하며 사용자 수준 응용 프로그램이 준수해야 하는 다른 규칙을 따라야 합니다.

일부 답변에 대해 더 자세한 내용을 제공하고 싶으시면 알려주시기 바랍니다.

누구든지 답변 중 일부를 개선할 수 있다면 언제든지 지적해주세요.

관련 정보