권한 수준
100%

Kernel · 레슨 2

권한 수준

프로세서 권한이 사용자 실행과 신뢰되는 커널 실행을 분리하는 방법을 알아봅니다.

프로세서는 민감한 명령어와 메모리 접근을 제한하는 권한 모드를 제공합니다. 리눅스는 이 하드웨어 경계를 사용해 일반 애플리케이션의 오류가 커널 메모리를 직접 덮어쓰거나 장치를 재설정하지 못하게 합니다. 특권 실행으로의 전환은 커널이 제어합니다.

사용자 모드

일반 프로세스는 자체 가상 주소 공간 안에서 사용자 모드로 실행됩니다. 자유롭게 계산하고 커널이 허용한 메모리 매핑에 접근할 수 있으며 그 범위는 클 수 있습니다. 사용자 모드가 “아주 적은 메모리만 사용한다”는 뜻은 아닙니다. 임의의 물리 메모리, 다른 프로세스의 비공개 매핑 또는 특권 프로세서 제어에는 직접 접근할 수 없습니다.

페이지 테이블과 보호 비트가 메모리 접근을 적용합니다. 스레드가 유효하지 않거나 허용되지 않은 주소를 참조하면 프로세서가 커널로 트랩하고, 커널은 유효한 페이지 폴트를 해결하거나 SIGSEGV 같은 신호를 전달할 수 있습니다.

사용자 모드 프로세스가 일반적으로 직접 접근할 수 있는 메모리는 무엇입니까?

커널 모드

커널 모드에서는 메모리 관리, 스케줄링, 인터럽트 처리 및 드라이버에 필요한 특권 명령어를 실행하고 보호된 커널 매핑에 접근할 수 있습니다. x86에서 이 리눅스 구분은 일반적으로 커널의 링 0과 사용자 프로세스의 링 3으로 설명됩니다. 리눅스는 보통 일반 프로세스 격리에 링 1과 2를 사용하지 않습니다.

다른 아키텍처는 예외 수준 같은 서로 다른 이름과 메커니즘을 사용합니다. 가상화는 단순한 두 링 그림으로 표현할 수 없는 하이퍼바이저 및 게스트 관계를 추가합니다. 핵심 개념은 x86 링 번호 자체가 아니라 제어된 권한입니다.

리눅스 커널은 일반적으로 어느 x86 보호 링에서 실행됩니까?

제어된 전환

다음과 같은 여러 이벤트가 커널 진입점으로 제어권을 넘깁니다.

  • 시스템 호출 명령어가 커널 서비스를 요청
  • 예외가 페이지 폴트나 잘못된 명령어 같은 상태를 보고
  • 하드웨어 인터럽트가 외부 이벤트를 보고

프로세서는 실행 컨텍스트를 저장하고 설정된 진입 메커니즘에 따라 권한을 바꾼 뒤 신뢰되는 커널 코드를 시작합니다. 커널은 요청과 상태를 검증하고 작업을 수행하거나 거부한 다음 적절할 때 사용자 모드로 돌아갑니다.

애플리케이션이 일시적으로 커널 코드가 되는 것은 아닙니다. CPU가 커널이 제어하는 스택과 매핑을 사용해 해당 스레드를 대신하여 커널 핸들러를 실행합니다.

시스템 호출 전환 중에는 어떤 일이 일어납니까?

CPU 권한과 사용자 식별 정보는 다름

리눅스 사용자 root로 실행되는 애플리케이션도 일반적으로 사용자 모드에서 실행됩니다. UID 0은 커널 권한 부여 검사에 영향을 주지만 명령어가 커널 메모리에 직접 접근하게 하지는 않습니다. 반대로 어떤 사용자의 시스템 호출 때문에 실행되었는지와 관계없이 커널 코드는 특권 모드에서 실행됩니다.

capability, 네임스페이스, seccomp, 보안 모듈 및 cgroup은 프로세스가 요청할 수 있는 작업을 추가로 제한합니다. 이러한 계층적 정책은 하드웨어 사용자/커널 모드 경계와 별개입니다.

root 식별 정보와 커널 모드를 올바르게 비교한 설명은 무엇입니까?

경계가 중요한 이유

이 경계는 일반적인 버그의 피해를 제한하고 접근 검사를 수행할 지점을 제공하지만 커널 취약점과 악성 모듈은 이를 무너뜨릴 수 있습니다. 신뢰할 수 있는 경로로 커널과 펌웨어를 업데이트하고, 특권 코드를 최소화하며, 신뢰할 수 없는 모듈을 불러오지 마십시오.

추측 실행 문제와 부채널도 하드웨어 격리에 지속적인 완화 조치가 필요함을 보여 줍니다. “서로 다른 링”은 기반일 뿐 완전한 보안의 증명이 아닙니다.

사용자/커널 모드 분리가 완전한 시스템 보안을 보장합니까?

레슨 완료

권한 수준 완료

이제 하드웨어 실행 권한과 리눅스 계정 권한을 구분할 수 있습니다.

  • 사용자 모드를 보호된 가상 주소 공간과 연결합니다.

  • 커널 모드를 특권 명령어 및 매핑과 연결합니다.

  • 시스템 호출, 예외 및 인터럽트를 제어된 진입으로 취급합니다.

  • UID 0 권한 부여와 링 0 실행을 구분합니다.

  • 권한 모드를 더 넓은 보안 설계의 한 계층으로 이해합니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
다음 수업
Kernel(으)로 돌아가기