저는 컴퓨터 보안 시험을 준비하고 있는데 다음 샘플 질문을 이해하는 데 어려움을 겪고 있습니다.
'x86의 링 0에서 실행하는 것과 Linux에서 UID 0으로 실행하는 것의 차이점을 설명하세요. 한 가지로는 달성할 수 있지만 다른 것에서는 달성할 수 없는 기능의 예를 들어보세요.'
현재 내가 알고 있는 바는 x86의 링 0이 가장 권한이 높은 운영 체제 수준이고 커널 코드가 링 0에서 실행된다는 것입니다. UID 0은 Linux 수퍼유저이며 기본적으로 무엇이든 실행할 수 있습니다. 현재 이러한 개념을 이해하고 있으므로 이 질문에 어떻게 대답해야 할지 모르겠습니다.
이것은 과제 질문이나 제가 채점할 내용이 아니라 단지 학습 자료일 뿐이라는 점에 유의하십시오.
답변1
당신의 이해가 정확합니다. "링 0"은 프로세서의 커널 모드를 나타내는 x86 용어입니다. "링 0에서 실행"은 "커널 코드"를 의미합니다.
보안 측면에서 프로세스(UID 하에서)가 수행할 수 있는 모든 작업은 커널에서 수행할 수 있습니다. 파일 열기와 같은 일부 작업은 커널 코드에서 수행하기가 매우 불편하지만 가능합니다.
반면, 일반적인 상황에서는 UID 0에서 코드를 실행할 수 있으면 커널 모듈을 로드하여 커널 코드를 실행할 수 있습니다. 따라서 일반적인 구성에서는 UID 0과 커널 수준 사이에 보안 장벽이 없습니다. 그러나 프로세스에서 실행되는 코드에는 여전히 프로세서 사용자 모드의 제한이 적용됩니다. 즉, 주변 장치(디스크, 네트워크 등 포함)에 대한 모든 액세스는 여전히 시스템 호출을 거쳐야 합니다. 컴퓨터는 강력하지 않은 UID 0을 갖도록 구성할 수 있습니다. 예를 들면 다음과 같습니다.
- 커널 모듈 로딩을 비활성화합니다.
- 사용하다보안 프레임워크예를 들어SELinux프로세스에서 권한 제거: UID 0이 반드시 이를 이기는 것은 아닙니다. 예를 들어 게스트 계정은 UID 0으로 생성될 수 있지만 올바른 SELinux 정책을 사용하면 기본적으로 권한이 없습니다.
- UID 0인치사용자 네임스페이스네임스페이스 작성자의 권한만 갖습니다.