커널은 악성 프로그램이 모든 물리적 RAM을 읽는 것을 어떻게 방지합니까?

커널은 악성 프로그램이 모든 물리적 RAM을 읽는 것을 어떻게 방지합니까?

가능한 모든 주소에서 메모리를 읽으려고 시도하는 프로그램을 작성하고 "전체" Unix에서 실행하면 모든 물리적 RAM에 액세스할 수 없습니다. 하지만 운영 체제는 이를 어떻게 방지합니까?

나는 어떤 어셈블리 코드로도 모든 것에 접근할 수 있는 작은 CPU 아키텍처에 더 익숙합니다. 프로그램(커널)이 어떻게 그러한 악의적인 작업을 감지할 수 있는지 이해가 되지 않습니다.

답변1

잘못된 메모리 액세스를 차단하는 것은 커널이 아니라 CPU입니다. 커널의 역할은 CPU를 올바르게 구성하는 것뿐입니다.

보다 정확하게는 잘못된 메모리 액세스를 방지하는 하드웨어 구성 요소는 다음과 같습니다.메모리 관리 유닛. 프로그램이 메모리 주소에 액세스하면 CPU는 MMU의 내용을 기반으로 주소를 디코딩합니다. MMU는 가상 주소를 물리적 주소로 변환합니다. CPU가 특정 가상 주소에 로드하거나 저장할 때 MMU 내용을 기반으로 해당 물리적 ​​주소를 계산합니다. 커널은 각 프로그램이 액세스 권한이 있는 메모리에만 액세스할 수 있도록 MMU 구성을 설정합니다. 다른 프로그램의 메모리 및 하드웨어 레지스터는 프로그램의 메모리에 전혀 매핑되지 않습니다. 이러한 물리적 주소에는 프로그램의 MMU 구성에 해당하는 가상 주소가 없습니다.

서로 다른 프로세스 간에 컨텍스트 전환이 발생하면 커널은 새 프로세스에 필요한 변환이 포함되도록 MMU 구성을 수정합니다.

일부 가상 주소는 전혀 매핑되지 않습니다. 즉, MMU는 이를 특별한 "해당 주소 없음" 값으로 변환합니다. 이로 인해 프로세서가 매핑되지 않은 주소를 역참조할 때 트랩이 발생합니다. 프로세서는 커널 코드에서 미리 정의된 위치로 분기합니다. 일부 함정은 합법적이지만 다른 함정은 합리적입니다. 예를 들어, 가상 주소는 다음 위치에 있는 위치에 해당할 수 있습니다.스왑 공간, 이때 커널 코드는 스왑에서 페이지 콘텐츠를 로드한 다음 원래 프로그램으로 다시 전환하고 메모리 액세스 명령을 다시 실행합니다. 다른 트랩은 합법적이지 않습니다. 이 경우 프로세스는 다음을 받습니다.신호기본적으로 프로그램을 즉시 종료합니다(프로그램에 신호 처리기에 대한 분기가 없으면 어떤 경우에도 메모리 액세스 명령이 완료되지 않습니다).

관련 정보