Download presentation
Presentation is loading. Please wait.
1
운영체제 보안 (Protection in Operating System )
오 세 종
2
목차 개요 보호대상 객체와 보호 방법 메모리와 주소 보호 일반 객체 접근 보호 파일 보호 사용자 인증
3
개요 컴퓨터 보안에 있어서 운영체제의 역할에 대해 배움
개인 PC OS 보다는 서버급의 OS에 대해 다룸 운영체제는 멀티프로그래밍, 다수 사용자의 시스템 동시 이용을 지원하기 때문에 개별 사용자의 컴퓨팅 작업을 다른 사용자들로 부터 보호해야 한다. 운영체제가 제공해야 할 보안 영역 메모리 보호 파일 보호 시스템 자원에 대한 접근제어 사용자 인증 이 네가지 요소를 어떻게 지원할지에 대해 살펴봄
4
개요 개요 운영체제 응용 프로그램 응용 프로그램 Operating System MEMORY CPU Disk I/O device
5
보호대상 객체와 보호 방법 간단한 역사 컴퓨터의 초기 : 운영체제가 없었음 최초의 운영체제 (executive)
사용자가 스위치를 통해 직접 binary 로 프로그램 입력 각 사용자가 독점적으로 컴퓨터를 이용 각 사용자는 자신의 작업이 끝나면 사용한 중요정보는 컴퓨터에서 삭제 보안의 문제가 일어날 소지 없음 최초의 운영체제 (executive) 개별 프로그래머를 지원하고 새로운 사용자가 시스템을 쉽게 시작할 수 있도록 도와주는 간단한 유틸리티에 불과 링커(linker), 로더(loader)
6
보호대상 객체와 보호 방법 간단한 역사 후기의 운영체제 (operating system)
멀티프로그래밍의 등장으로 운영체제의 역할, 이름이 완전히 바뀜 (Monitor 라고도 불리움) 두명 이상의 사용자가 시스템 자원을 공유하면서 작업을 하는 환경 초기 운영체제가 사용자의 요구가 있을 때에만 수동적으로 지원했던 것에 비해 모니터는 능동적으로 사용자에게 자원을 할당하고 작업 환경을 통제하는 역할 초기 운영체제에서 정보보호는 개별 사용자의 몫, 후기 운영체제에서는 정보보호가 상당부분 운영체제의 몫이됨 각 사용자의 작업을 다른 사용자로 부터 어떻게 보호할 것인가
7
보호대상 객체와 보호 방법 보호대상 객체 (protected object)
다중 사용자 환경의 도래로 다음과 같은 시스템 객체들에 대한 보호의 필요성 대두 메모리 (memory) 디스크와 같은 공유 저장장치 프린터, 테이프 드라이버와 같은 직렬(serial) I/O 장치 공유 프로그램 공유 데이터
8
보호대상 객체와 보호 방법 OS의 보호 방법 가장 기초적인 방법은 분리 (separation) : 한 사용자의 객체를 다른 사용자들로 부터 분리시키는 것. 물리적 분리 : 각 프로세스들은 각각의 물리적인 시스템 자원들을 이용 (예: 서로 다른 보안 등급을 가진 프로세스들은 서로 다른 분리된 프린터 사용) 시간적 분리 : 서로 다른 보안 요구사항을 가진 프로세스들은 서로 다른 시간에 실행되도록 함 논리적 분리 : 각 사용자에게 오직 자신만이 컴퓨터를 사용하고 있는 것처럼 보이도록 다른 사용자의 작업을 감춤 기밀 분리 : 각 프로세스는 자신의 데이터, 커뮤니케이션 내용을 다른 프로세스가 알 수 없도록 만듦.
9
보호대상 객체와 보호 방법 OS의 보호 방법 OS 는 앞의 방법들 중 몇가지를 혼용할수도 있다.
처음 두가지 방법은 시스템의 자원 이용률을 떨어뜨림 OS 는 서로 다른 보안 요구사항을 가진 프로세스들이 동시적으로 수행될 수 있도록 지원해야 한다. 분리는 절반의 해결책
10
보호대상 객체와 보호 방법 OS의 보호 방법 OS 가 제공하는 보호의 여러 레벨
아무 보호도 없음 (No protection): 민감한 프로세스들이 서로 다른 시간에 수행될 때 고립 (Isolation) : 동시 수행되는 각 프로세스는 자신의 고유한 주소공간, 파일, 기타 객체를 할당 받는다. 운영체제는 각 프로세스가 다른 프로세스들에 대해 자신을 숨길 수 있도록 지원해야 한다. 모두 공유 또는 모두 공유하지 않음 (Share all or share nothing) : 어떤 객체에 대한 소유자(owner)는 그 객체가 공용(public) 인지 자신만을 위한 것인지(private)를 선언. 공용 객체는 모든 사용자가 접근할 수 있다.
11
보호대상 객체와 보호 방법 OS의 보호 방법 OS 가 제공하는 보호의 여러 레벨 (계속)
접근제한에 의한 공유 (Share via access limitation) : 사용자는 자신에게 허가된 권한 범위 내에서 객체에 접근. 운영체제는 각각의 접근 요구에 대해 권한 검사 후 접근허가 또는 거절 능력에 의한 공유 (Share by capability) : 접근제한에 의한 공유를 확장한 것으로, 객체에 대한 공유 권한이 정적인 방법이 아닌 동적인(dynamic) 방법으로 이루어진다. 공유의 정도는 객체의 소유자 혹은 주체(subject)가 처해 있는 컴퓨팅환경에 따라 결정된다.
12
보호대상 객체와 보호 방법 OS의 보호 방법 OS 가 제공하는 보호의 여러 레벨 (계속)
객체에 대한 제한된 이용 (Limit use of an object): 이 방법은 객체에 대한 접근을 제한한다는 것이 아니라 접근을 한후의 객체에 대한 이용을 제한한다는 것이다. 예) 사용자는 기밀 문서를 볼 수는 있지만 본 다음에 복사나 출력은 할 수 없게 함 예) 계산된 통계 데이터는 사용자가 볼 수 있지만 통계 대상이 되는 원천 데이터는 볼 수 없게 함 이상의 방법들 역시 운영체제의 복잡성을 높이지만 보다 정밀한 보안 제어를 가능하게 한다.
13
보호대상 객체와 보호 방법 OS의 보호 방법 보호 대상 객체의 크기(granularity)도 보안의 관심 대상이다.
예) 파일 > 레코드 > 필드 개체의 크기가 크면 클수록 보호도 쉬워진다. (그러나 객체의 활용성은 떨어진다.)
14
메모리와 주소 보호 다중 프로그래밍 환경에서의 중요한 문제는 한 프로그램에서 사용중인 (메인) 메모리를 다른 프로그램의 간섭으로 부터 보호하는 일 다행히도 하드웨어적 방법에 의해 추가적인 비용 없이 메모리를 효과적으로 보호하는 방법이 존재함 운영체제 일반 프로그램 일반 프로그램 일반 프로그램
15
메모리와 주소 보호 울타리 (Fence) 초기 컴퓨터 시스템에서 메모리에 적재된 운영체제를 사용자 시스템에서 보호하려는 목적으로 생겨남 메모리는 하드웨어적으로 운영체제를 위한 주소 영역과 일반 프로그램을 위한 주소영역으로 나누어짐 사용자는 운영체제 영역의 주소에 접근 할 수 없음 이러한 울타리를 고정 울타리(Fixed Fence)라고 한다. 문제점 운영체제가 필요한 메모리 < 운영체제 주소영역 운영체제가 필요한 메모리 > 운영체제 주소영역
16
메모리와 주소 보호 울타리 (Fence) 고정 울타리 (Fixed Fence) Memory Address Operating
Operating system n n+1 User Program Space Hardware address limitation addressing range
17
메모리와 주소 보호 울타리 (Fence) 고정 울타리의 한계를 극복하고자 도입된 것이 주소범위 레지스터 (Address Limit Register) 울타리의 경계주소를 운영체제가 결정. 이를 주소범위 레지스터에 저장 (가변 울타리) 사용자는 역시 운영체제의 주소 영역에 접근할 수 없다. 사용자 프로그램에서 주소범위 레지스터에 저장된 주소보다 작은 주소를 접근하고자 하면 운영체제가 차단 남아 있는 문제 운영체제 일반 프로그램의 문제는 해결 되었지만 일반 프로그램들 사이에는 여전히 메모리 보호가 되지 않는다.
18
메모리와 주소 보호 울타리 (Fence) 가변 울타리 (Variable Fence) Address Limit Register
Memory Address Limit Register Address Memory Operating system Operating system n+1 p+1 n n+1 User Program Space p p+1 User Program Space addressing range addressing range
19
메모리와 주소 보호 재배치(Relocation)
만일 사용자 프로그램에서 사용하는 메모리 주소가 고정적이라고 한다면 OS 의 크기 증가에 따라 프로그램에서 사용하던 주소를 더 이상 쓸 수 없는 상황이 벌어질 수 있다. 이 경우는 프로그램을 다시 작성해야 한다. *a = // 1001 번지를 변수 a 에 할당 *b = // 1002 번지를 변수 b 에 할당 a = 20 b = a * 35 …
20
메모리와 주소 보호 재배치(Relocation)
이런 문제를 해결하기 위해서 프로그램에서 사용하는 주소와 실제 메모리에 매핑되는 주소를 다르게 함. 실제 메모리 주소 = 프로그램 사용 주소 + 기준값 보통 기준 값으로 주소범위 레지스터에 있는 값을 이용. 이렇게 하면 사용자는 절대로 운영체제 영역에 들어갈 수 없다. *a = 1 // 논리주소 1 번지를 변수 a 에 할당 *b = 2 // 논리주소 2 번지를 변수 b 에 할당 a = 20 b = a * 35 … 실제 주소로 재배치
21
메모리와 주소 보호 기초/한계 레지스터(Base/Bound Register)
주소범위 레지스터 (Address Limit Register) 와 같이 프로그램이 사용할 수 있는 최저 주소 (시작주소)를 가리키는 레지스터를 기초 레지스터라고 한다. 기초 레지스터는 주소의 하한선은 결정을 하지만 상한선은 말하지 않기 때문에 상한선을 제한하기 위해 한계 레지스터를 이용 한 프로그램은 기초/한계 레지스터를 이용해서 다른 프로그램으로 부터 자신의 메모리 영역을 제한할 수 있다.
22
메모리와 주소 보호 기초/한계 레지스터(Base/Bound Register) Base Address Memory
Memory Operating system n+1 n Bound Register n+1 User A Program Space p p User B Program Space p+1 User C Program Space
23
메모리와 주소 보호 기초/한계 레지스터(Base/Bound Register) 문제점
사용자는 실수로 데이터를 프로그램 코드 부분에 저장할수 있다. 이 경우 프로그램은 정상적으로 작동하지 않게 된다. 이를 위해 두쌍의 기초/한계 레지스터가 이용된다. 이론상으로는 세쌍 이상의 레지스터를 구현할 수 있지만 실용성의 측면에서 두쌍이 적합한 것으로 알려져 있다.
24
메모리와 주소 보호 기초/한계 레지스터(Base/Bound Register) Memory Program Base
Operating system Program Bound User A Program Space User B Data Space Data Base User A Data Space Data Bound User C Program Space User C Data Space User B Program Space
25
메모리와 주소 보호 태그 구조 (Tagged Architecture)
사용자는 자신의 데이터를 전부 보호하기 보다는 일부만을 보호하고 나머지는 다른 프로그램과 공유하기를 원할 수 있다. 기초/한계 레지스터가 제공할 수 있는 공유 방법은 ‘전부 아니면 전무 (all or nothing)’ 이를 극복하기 위한 하나의 제안으로 제시된 것이 태그 구조의 메모리이다. 메모리의 각 저장 공간은 주소 외에 몇 bit 의 태그를 갖음
26
메모리와 주소 보호 태그 구조 (Tagged Architecture) Tag Values R : read only
0001 RW 1249 1267 X ~~~ R : read only RW : Read/Write X : Execute-only
27
메모리와 주소 보호 태그 구조 (Tagged Architecture)
각 메모리 주소에 대한 접근이 있을 때마다 태그 값을 보고 접근 허용 여부를 결정 이 기법이 실제 적용된 시스템은 많지 않음 이유 : 현재 잘 알려진 OS 들은 역사가 오래 된 것들. 새로운 기법을 적용 하려면 많은 변경 필요. 태그 구조를 이용하지 않는 다른 OS 와의 호환성 문제… Burroughs B (3 tag bits) IBM System/38 Intel I960 extend architecture processor : 변형 태그 구조 적용 (여러 메모리당 하나의 태그 bit 할당)
28
메모리와 주소 보호 앞으로 소개할 두가지 기법은 대부분의 운영체제에서 채택하고 있는 일반적이고 중요한 기법 (1965~1975 년 사이에 제안됨) 세그멘테이션 (Segmentation) 페이징 (Paging)
29
메모리와 주소 보호 세그멘테이션 메모리에 적재될 프로그램을 성격에 따라 여러 조각으로 나눈다. 나누어진 각 조각을 세그먼트(Segment) 라고 불리움 각 세그먼트들은 메모리 상에서 서로 독립된 위치에 적재됨. (cf. 이전의 방법에서는 프로그램 전체가 하나의 세그먼트) 각 세그먼트는 고유한 이름을 부여 받는다. 세그먼트의 길이는 가변적이다.
30
메모리와 주소 보호 Memory Logical Arrangement Of Program SUB MAIN MAIN SEG_A
DATA_SEG DATA_SEG
31
메모리와 주소 보호 세그멘테이션 세그먼트 내의 아이템에 대한 주소 지정 : <name, offset>
운영체제는 세그먼트 이름을 실제 메모리 주소에 매핑하기 위한 테이블을 가지고 있음 (세그먼트 변환 테이블) 두개의 서로 다른 프로세스가 하나의 세그먼트를 공유할 수도 있다.
32
메모리와 주소 보호 Memory Segment translation table Logical Program a MAIN
Segment translation table Logical Program a MAIN MAIN c SEG_A e SUB a DATA_SEG f b c SEG_A FETCH <DATA_SEG, 20> d SUB e DATA_SEG f g h i
33
메모리와 주소 보호 세그멘테이션 사용자 프로그램은 자신이 이용하는 메모리의 실제 주소를 알 필요도 없고, 알 수도 없다.
세그멘테이션의 장점 운영체제는 세그먼트를 메모리상의 임의의 장소에 위치시킬 수 있고, 프로그램의 실행중에도 세그먼트위 위치를 옮길 수 있다. 현재 사용중이지 않는 세그먼트는 임시 삭제하고(보조기억 장치에 저장) 다른 세그먼트를 위해 할당할 수 있다. 메모리의 모든 주소는 운영체제를 거쳐 참조되기 때문에 보안체크를 할 기회가 주어진다.
34
메모리와 주소 보호 세그멘테이션 세그멘테이션의 세번째 장점을 살리기 위해서 ‘세그먼트 변환 테이블’은 일반 프로그램이 접근할 수 없다. 사용자는 프로그램 내의 세그먼트 들에 대해 서로 다른 보호 범주을 지정할 수 있다. 예) SEG_A : execute only, DATA_SEG : read only 보안의 관점에서 세그멘테이션의 장점 메모리에 대한 모든 참조를 체크할 수 있다. 데이터 아이템의 각 부분에 대해 서로 다른 보호 범주지정 가능 2인 이상의 사용자가 한 세그먼트를 공유할 때 서로 다른 접근원한이 부여될 수도 있다. 사용자는 허가되지 않은 세그먼트를 만들거나 접근할 수 없다.
35
메모리와 주소 보호 세그멘테이션 세그멘테이션에서의 문제
<name, offset> 에서 세그먼트를 벗어나는 offset 이 의도적, 비의도적으로 사용될 수 있다. (컴파일시 체크 안됨) 세그먼트의 사이즈 정보를 관리. 실행시 체크 세그먼트 이름의 실제 주소 매핑을 위해 세그먼트 변환 테이블에서 찾을 때 시간이 많이 걸림 컴파일시 이름 주소를 숫자 주소로 변환 조각화 (fragmentation) 발생 세그먼트의 크기가 서로 다르기 때문에 메모리의 주기적인 조각 모으기(compaction) 실행 필요
36
메모리와 주소 보호 페이징 세그멘테이션의 한 종류로 볼 수 있다.
세그먼트가 가변적 크기를 갖는데 비해 페이지는 고정 사이즈를 갖는다. (보통 512 ~4096 bytes) 주소화 기법 : <page, offset> 메모리의 조각화, 페이지를 넘어서는 offset 의 지정 문제가 발생하지 않는다. 페이지의 사이즈를 어느 정도로 하는 것이 좋은가 하는 것이 이슈임
37
메모리와 주소 보호 Memory a Logical Program page translation table b PAGE 0
a Logical Program page translation table b PAGE 0 PAGE 1 PAGE 2 PAGE 3 c 1 e 2 a 3 f c d e f g h i j
38
메모리와 주소 보호 세그멘테이션과 페이징의 결합
페이징의 문제점은 프로그램에서 유사 성격을 가지고 있어서 동일 보호범주가 적용 되어야 할 부분이 여러 페이지로 나누어 질 수 있다는 것. 세그멘테이션과 페이징 기법의 장점을 취하여 만듦
39
메모리와 주소 보호 Memory a b c d e f g h i j f 3 a 2 e 1 c page translation
a b c d e f g h i j f 3 a 2 e 1 c page translation table Segment translation table Logical Program MAIN MAIN c SEG_A e SEG_A page translation table SUB a ㅎ FETCH <DATA_SEG, 20> SUB DATA_SEG f 1 Eㅗ DATA_SEG 2 a 3 kㅏ page translation table c 1 e 2 a 3 f
40
일반 객체 접근 보호 앞에서 살펴본 메모리 보호는 컴퓨터 시스템에 존재하는 객체들에 대한 보호 문제의 한 부분을 보여줌
보호가 필요한 시스템 객체들 메모리 보조 기억장치의 파일 파일 디렉토리 메모리에서 실행 중인 프로그램 하드웨어 장치 운영체제가 관리하는 각종 테이블 사용자 패스워드 보호 메커니즘 자체도 보호 대상
41
일반 객체 접근 보호 이러한 일반 객체에 대해서는 합법적인 권한을 가진 주체 (사용자, 프로그램)만이 접근할 수 있도록 해야 한다. 따라서 운영체제는 보호가 필요한 객체에 대한 권한 정보를 관리해야 한다. 이러한 방법의 하나로서 이전 시간에 배운 접근제어 리스트 (Access Control List) 접근제어 행렬 (Access Control matrix) 가 많이 사용됨
42
파일 보호 기본적인 보호 방법 전부/전무(all-none) 보호
초기의 IBM 운영체제에서 파일은 기본적으로 공유 자원. 사용자들은 다른 사용자들이 만든 파일을 읽고 쓸 수 있었다. (사용자들을 신뢰) 시스템에서 중요한 파일은 일반 사용자가 접근할 수 없도록 시스템 관리자에 의해 보호 (패스워드) 패스워드를 파일에 이용하려면 시스템 관리자의 개입이 필요.
43
파일 보호 기본적인 보호 방법 전부/전무(all-none) 보호의 문제점
사용자 수가 몇 안되는 시스템에서는 사용자들끼리 잘 알고 신뢰 할 수 있지만, 많은 수의 사용자 시스템에서는 모든 사용자를 신뢰할 수 없다. 사용자가 자신이 신뢰할 수 있는 다른 사용자를 안다 하더라도 그들만이 자신의 파일에 접근할 수 있도록 하는 방법이 없다. 이 방법은 일괄작업(batch processing) 환경에서는 적합할 수 있다. (사용자간에 상호 개입할 일이 적다.) 그러나 시간 분할 (time sharing)의한 동시 사용자 작업수행 환경에서는 사용자간 상호 간섭의 가능성이 증가. 파일 보호에 시스템 관리자의 개입이 필요하므로 편리성 저하 사용자는 파일 리스트 명령어를 통해 보호 파일의 존재도 확인
44
파일 보호 기본적인 보호 방법 그룹 보호 앞에서 지적한 이유로 해서 많은 운영체제에서는 그룹의 개념 지원
연관성이 있는 사용자들을 하나의 그룹으로 묶어서 생각. 그룹으로 묶는 기준 : need to share 사용자는 오직 하나의 그룹에만 속할 수 있다. 사용자는 파일을 생성할 때 자신의 그룹 안의 사용자를 위한 접근 권한과 기타 사용자를 위한 접근권한 지정 예) 자신: 모든 권한 소유,그룹 사용자 : 읽기,쓰기, 외부 사용자 : 읽기 DEC-10, Unix system, VAX VMS system 등에서 구현
45
파일 보호 기본적인 보호 방법 그룹 보호의 문제 한 사용자는 동시에 두 그룹에 들어갈 수 없다.
동시에 두 그룹에 들어가는 것을 허용하면 모호성 문제 발생 한 사용자가 동시에 두 그룹에 들어가지 못하는 단점을 극복하기 위해 한 사용자에게 두개의 사용자 계정을 만들 수 있다. 그러나 이 경우도 사용자는 한번에 한 계정만을 이용 가능하다. (두 계정을 동시에 open 할 수 없다) 불필요한 계정의 증가 사용자는 그룹의 모든 사용자가 아닌 한 사람의 사용자와만 어떤 파일을 공유하기 원할 수 있다.
46
파일 보호 Single permission 그룹 보호보다 세밀한 보안관리 제공 패스워드 /토큰 방식
사용자는 자신이 만든 파일에 패스워드를 부여 한다. 파일에 접근하는 다른 사용자는 올바른 패스워드를 제시 해야만 파일을 열어볼 수 있다. 파일을 생성한 사용자는 자신이 원하는 다른 사용자에게만 패스워드를 알려줌으로써 자신만의 ‘그룹’을 만들수 있다. 문제점 (사용자 인증에서의 패스워드와 비슷) 패스워드의 분실 패스워드가 권한이 없는 다른 사람에게 알려짐 권한의 회수, 변경시 : 패스워드를 바꾸어야 한다.
47
파일 보호 Single permission 임시적 권한 (temporary acquired permission)
Unix 운영체제에서 제안 기본 구조 : user(owner) – group – world 추가적인 권한 : set userid (suid) suid 가 어떤 파일의 실행을 위해 설정되면 그 프로그램을 실행하는 사용자는 자신의 권한을 가지고 프로그램을 실행 하는 것이 아니라 소유자의 권한을 가지고 실행 예) suid file1 pgm1 (owner : Tom) John
48
파일 보호 Single permission 임시적 권한 (temporary acquired permission)
Suid 를 이용하면 다른 사용자가 직접적인 방법으로는 데이터에 접근할 수 없도록 막으면서, 자신이 정한 통로 (프로그램) 를 통해서만 접근하도록 강제할 수 있다. 또 다른 예 패스워드 파일에 대한 접근권한 부여 Owner : System 사용자는 자신의 패스워드를 언제든지 바꿀 수 있어야 한다. 만일 패스워드 파일에 대한 직접적 접근권한을 사용자들에게 부여한다면?
49
사용자 인증 시스템에 접근하는 사용자가 권한이 있는 사용자 인지를 식별하는 일은 보안상 매우 중요
이를 위해 가장 보편적인 방법이 ID, 패스워드를 제시하게 하여 확인하는 방법 이에 대해서는 이미 다루었음
50
정리 컴퓨터 시스템이 발전하면서 보안적인 측면을 보완하기 위한 노력이 계속되었으며 그 결과로서 여려 가지 기법들이 제시 되었다. 이번 시간에 다룬 여러 가지 보호 기법들은 우리가 어떤 보안 시스템을 설계할 때 좋은 참고 자료가 될 수 있다. 사용자 편리성을 저하시키지 않으면서 필요한 정보를 보호할 수 있는 방법들이 계속 연구될 필요가 있다.
51
참고문헌 P.Pfleeger, Security in Computing, second edition, Prentice-Hall International Inc.,1997. (chapter 6)
Similar presentations