CS/Operating System

보안 방법

olsohee 2023. 12. 23. 18:48

우리가 흔히 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다. 따라서 운영체제는 각 프로그램이 다른 프로그램의 메모리 영역이나 파일 영역을 침범하지 않도록 관리해야 한다. 이때 보안과 관련된 중요하고 위험한 명령들을 특권명령이라고 한다.

하드웨어 보안

운영체제는 하드웨어 보안을 위해 I/O 작업과 같이 디스크 파일에 접근하는 작업을 특권명령으로 삼아, 커널 모드에서만 실행할 수 있도록 한다. 따라서 사용자 프로그램이 맘대로 위험한 명령을 수행하는 것을 막는다.

메모리 보안

디스크뿐만 아니라 메모리의 경우에도 보안이 필요하다. 특히 메모리에 올라와 있는 OS의 코드(ex, 인터럽트 벡터와 인터럽트 처리 루틴)는 각별히 보안이 필요하다. 

 

따라서 2개의 레지스터를 이용해서 사용자 프로그램이 접근하려는 메모리 부분이 올바른지 체크하여 메모리를 보안한다.

  • 기준 레지스터(base register): 어떤 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소를 보관한다.
  • 한계 레지스터(limit register): 그 프로그램이 기준 레지스터 값으로부터 접근할 수 있는 메모리의 범위를 보관한다.

따라서 어떤 프로그램이 메모리의 특정 주소에 접근하고자 할 때, 접근하려고 하는 위치가 합법적인 범위에 있는지 체크한다. 사용자 프로그램이 접근할 수 있는 범위는 기준 레지스터에 있는 주소 ~ (기준 레지스터에 있는 주소 + 한계 레지스터에 있는 값)이다. 

 

 

즉 사용자 모드인 경우에 위와 같이 기준 레지스터와 한계 레지스터를 사용해서 메모리 접근 권한이 있는지 확인하고, 이 범위에 없으면 불법적인 메모리 접근이라고 판단하여 예외상황이라는 소프트웨어 인터럽트를 발생시킨다. 따라서 CPU 제어권이 운영체제로 넘어가게 되고 운영체제는 예외상황을 발생시킨 프로그램을 강제 종료시킨다. 단, 이는 하나의 프로그램이 메모리상에서 연속적으로 위치하는 경우에만 한정된 설명이다. 

 

반면, 커널모드인 경우에는 메모리에 무제한으로 접근이 가능하다.

 

메모리 접근 명령은 특권명령은 아니지만, 기준 레지스터와 한계 레지스터의 값을 세팅하는 연산은 특권명령이다. 사용자 프로그램이 자신의 기준 레지스터와 한계 레지스터에 접근하여 그 값을 변경하는 문제가 발생할 수 있기 때문이다. 따라서 운영체제가 두 개의 레지스터 값을 세팅하고, 사용자 프로그램은 두 값을 변경할 수 없다.

타이머

일반적으로 컴퓨터 시스템 내에 CPU는 하나만 존재하므로 특정 프로그램이 무한루프 등을 통해 CPU를 독점하는 경우를 막아야 한다. CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 운영체제는 타이머라는 하드웨어를 사용한다.

  • 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제에게 CPU 제어권을 넘긴다.
  • 타이머에 대한 인터럽트 처리 루틴은 지금 CPU를 점유하고 있는 프로그램으로부터 CPU를 빼앗아서 다른 프로그램에게 CPU를 넘기는 것이다.
  • 타이머는 일정한 시간 단위로 세팅될 수 있으며, 매 클럭 틱(clock tick)때마다 1씩 감소한다. 그리고 타이머 값이 0이 되면 인터럽트가 발생한다.
  • 타이머 값을 세팅하는 명령을 로드 타이머(load timer)라고 하며, 이는 특권명령이다.
  • 타이머는 시분할 시스템에서 현재 시간을 계산하기 위해서도 사용된다.

Reference

  • 이화여자대학교출판문화원, 운영체제와 정보기술의 원리, 반효경