기능 기반 보안
Capability-based security기능 기반 보안은 기존의 보안 모델 중 하나인 안전한 컴퓨팅 시스템 설계의 개념입니다.기능(일부 시스템에서는 키로 알려져 있음)은 통신 가능한 권한의 토큰입니다.오브젝트를 관련 접근권 세트와 함께 참조하는 값을 나타냅니다.기능 기반 운영 체제의 사용자 프로그램은 기능을 사용하여 개체에 액세스해야 합니다.기능 기반 보안이란 최소한의 권한이라는 원칙에 따라 서로 직접 기능을 공유하도록 사용자 프로그램을 설계하는 원리와 이러한 트랜잭션을 효율적이고 안전하게 하기 위해 필요한 운영체제 인프라스트럭처를 말합니다.기능 기반 보안은 기존의 UNIX 권한 및 액세스 제어 목록을 사용하는 접근 방식과 대조됩니다.
대부분의 operating system은 기능과 유사한 기능을 구현하고 있지만, 일반적으로 시스템 전체에 액세스 권한을 부여하고 분배하는 주요 수단이 될 수 있는 상호 신뢰성이 없는 엔티티 간의 기능 교환을 허용하기에 충분한 지원을 제공하지 않습니다.반면 기능 기반 시스템은 이러한 목표를 염두에 두고 설계되었습니다.
이 문서에서 설명하는 기능은 Portable Operating System Interface(POSIX) 1e/2c의 "기능"과 혼동하지 마십시오.후자는 프로세스 간에 전송할 수 없는 거친 권한입니다.
서론
기능은 위조 가능한 참조 대신 사용함으로써 시스템 보안을 향상시킨다는 목표를 달성합니다.위조 가능한 참조(예를 들어 경로 이름)는 개체를 식별하지만 해당 개체에 적합한 액세스 권한과 해당 참조를 유지하는 사용자 프로그램을 지정하지 않습니다.따라서 참조된 오브젝트에 대한 접근 시도는 일반적으로 Access Control List(ACL; 접근컨트롤 리스트)를 사용하여 요청 프로그램의 주변 권한에 따라 운영시스템에 의해 검증되어야 합니다.대신, 기능이 있는 시스템에서는 사용자 프로그램이 해당 기능을 가지고 있다는 사실만으로도 해당 기능에 의해 지정된 권한에 따라 참조된 개체를 사용할 수 있습니다.이론적으로 기능을 갖춘 시스템은 모든 엔티티에 실제로 필요한 모든 기능만을 제공함으로써 접근컨트롤 리스트 또는 유사한 메커니즘의 필요성을 배제합니다.
기능은 일반적으로 액세스 권한을 지정하는 섹션과 액세스 대상 개체를 고유하게 식별하는 섹션으로 구성된 특권 데이터 구조로 구현됩니다.사용자는 데이터 구조나 개체에 직접 액세스하지 않고 핸들을 통해 액세스합니다.실제로는 기존 운영체제(기존 핸들)의 파일 기술자와 비슷하지만 시스템상의 모든 오브젝트에 액세스하기 위해 사용됩니다.기능은 일반적으로 운영체제에 의해 목록으로 저장되며, 프로그램이 기능의 내용을 직접 수정하지 못하도록 하는 메커니즘이 있습니다(접근 권한을 위조하거나 가리키는 개체를 변경).또한 일부 시스템은 Plesey System 250과 같이 기능 기반 주소 지정(기능에 대한 하드웨어 지원)을 기반으로 합니다.
기능을 가진 프로그램은 다른 프로그램에 전달하거나 권한이 적은 버전으로 변환하거나 삭제하는 등의 기능을 수행할 수 있습니다.운영체제는 보안정책의 무결성을 유지하기 위해 시스템 기능에 대해 특정 작업만 수행할 수 있도록 해야 합니다.
예
기능은 사용자 프로세스에 의한 소유에 의해 프로세스에 특정 방법으로 오브젝트와 상호작용할 수 있는 기능(따라서 이름)을 부여하는 보호된 오브젝트 참조로 정의됩니다.이러한 방법에는 개체와 관련된 데이터 읽기, 개체 수정, 개체 내의 데이터 프로세스 실행 및 기타 생각할 수 있는 액세스 권한이 포함될 수 있습니다.기능은 논리적으로 특정 개체를 고유하게 식별하는 참조와 이러한 권한 중 하나 이상으로 구성됩니다.
사용자 프로세스의 메모리 공간에 다음 문자열이 있다고 가정합니다.
/etc/passwd
이는 시스템상의 하나의 개체를 식별하지만 액세스 권한을 지정하지 않기 때문에 기능은 아닙니다.대신 다음과 같은 값의 쌍이 있다고 가정합니다.
/etc/passwd O_RDWR
이 쌍은 액세스 권한 집합과 함께 개체를 식별합니다.그러나 사용자 프로세스가 이러한 값을 소유하는 것은 해당 액세스가 실제로 합법적인지 여부에 대해 아무런 설명도 하지 않기 때문에 이 쌍은 여전히 기능이 아닙니다.
이제 사용자 프로그램이 다음 문을 성공적으로 실행한다고 가정합니다.
인트 fd = 열다.("/etc/passwd", O_RDWR); 변수fd이제 프로세스의 파일 기술자 테이블에 파일 기술자 인덱스가 포함되어 있습니다.이 파일 기술자는 기능입니다.프로세스의 파일 기술자 테이블에 해당 프로세스가 실제로 개체에 대한 합법적인 액세스 권한을 가지고 있음을 보여주기에 충분합니다.이 배열의 주요 특징은 파일 기술자 테이블이 커널 메모리에 있으며 사용자 프로그램에 의해 직접 조작될 수 없다는 것입니다.
프로세스 간의 공유
기존 운영 체제에서는 프로그램이 종종 처음 두 예시와 같은 참조를 사용하여 서로 및 스토리지와 통신합니다.경로 이름은 종종 명령줄 매개 변수로 전달되고 소켓을 통해 전송되며 디스크에 저장됩니다.이러한 참조는 기능이 아니므로 사용하기 전에 검증해야 합니다.이러한 시스템에서 중심 질문은 "누구의 권한이 평가 대상인가?"입니다.이는 특히 두 개의 서로 다른 권한을 가진 실체를 대신해 행동해야 하는 프로세스에서 중요한 문제가 됩니다.이들은 혼란스러운 부차적인 문제로 알려진 프로그래밍 오류의 영향을 받기 쉬우며, 매우 빈번하게 보안 구멍이 발생합니다.
기능 기반 시스템에서는 운영 체제에서 알려진 메커니즘을 사용하여 기능 자체를 프로세스와 스토리지 간에 전달하여 이러한 기능의 무결성을 유지합니다.
이 문제를 해결하기 위한 새로운 접근법 중 하나는 직교적으로 영속적인 운영체제를 사용하는 것입니다.이러한 시스템에서는 엔티티를 폐기하고 그 기능을 무효화할 필요가 없기 때문에 나중에 이러한 기능을 복원하기 위해서는 ACL과 같은 메커니즘이 필요합니다.운영체제는 모든 스토리지(휘발성 및 비휘발성)에 포함된 기능의 무결성과 보안을 항상 유지합니다.부분적으로는 대부분의 운영체제에서와 같이 사용자 프로그램에서 필요한 것이 아니라 모든 시리얼화 작업을 스스로 수행합니다.사용자 프로그램은 이 책임에서 해방되므로 법적 기능만 재생산하거나 접근컨트롤 메커니즘을 사용하여 접근 요구를 검증할 필요가 없습니다.구현의 예로는 1980년대 초반의 Flex 머신이 있습니다.
POSIX 기능
Portable Operating System Interface(POSIX) 드래프트 1003.1e는 "기능"이라고 불리는 권한의 개념을 지정합니다.다만, POSIX 의 기능은, 이 기사의 기능과 다릅니다.POSIX 기능은 어떤 오브젝트에도 관련지을 수 없습니다.CAP_NET_B를 가진 프로세스입니다.IND_SERVICE 기능은 1024 미만의 임의의 TCP 포트로 수신할 수 있습니다.이 시스템은 [1]Linux에서 찾을 수 있습니다.
반면 Capsicum Unix는 진정한 기능 시스템 모델과 Unix 설계 및 POSIX API를 혼합합니다.Capsicum 기능은 파일 기술자의 개량된 형태로 프로세스와 프로세스 등의 기존 POSIX 이외의 추가 객체 유형 간에 위임 가능한 권한으로 기능을 통해 참조할 수 있습니다.Capsicum 기능 모드에서는 프로세스가 글로벌 네임스페이스(파일 시스템 이름 공간 등)를 사용하여 개체를 검색할 수 없으며 대신 개체를 상속하거나 위임해야 합니다.이 시스템은 FreeBSD에서 기본적으로 볼 수 있지만 다른 시스템에서 패치를 사용할 수 있습니다.[2]
실장
기능 기반 보안을 사용하는 주요 연구 및 상용 시스템은 다음과 같습니다.
- 오픈 소스 기능 기반 파일 시스템인 Tahoe-LAFS
- Tymshare에서 개발한 운영 체제인 GNOSIS
- 케임브리지 CAP 컴퓨터
- Hydra(운영체제), Carnegie Mellon University의 C.mp 프로젝트의 일부
- StarOS, Carnegie Mellon 대학교 CM* 프로젝트의 일부
- IBM System/38 및 AS/400
- 인텔 iAPX 432
- 플레시 시스템 250
- 유연성
- L4 마이크로커널 패밀리:
- Open Kernel Labs의 OKL4
- NICTA의 seL4
- Fiasco.OC 및 NOVA from TU Dresden
- 아메바 분산 운영 체제
- FreeBSD 캡시쿰[3][4]
- 제노드[5]
- 구글 푸치아[6]
- Web Assembly System Interface(WASI)
레퍼런스
- ^ – Linux 프로그래머 매뉴얼– 개요, 표기법 및 Miscellanea
- ^ – FreeBSD 커널 인터페이스 매뉴얼
- ^ "Capsicum(4)".
- ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf[베어 URL PDF]
- ^ "Genode OS: a breath of fresh air in operating system and software security".
- ^ "Google's Fuchsia operating system runs on virtually anything".
- Levy, Henry M., *기능 기반 컴퓨터 시스템, Digital Equipment Corporation 1984.ISBN 0-932376-22-3.전자 버전은 여기에서 구할 수 있습니다.
- EROS 프로젝트
- E, 기능 보안을 기반으로 하는 프로그래밍 언어(ERights.org)
- 마크 S. 밀러, 카핑이, 조나단 샤피로능력 신화 해체, 기술 보고서 SRL2003-02, 존스 홉킨스 대학교 시스템 연구실.온라인으로 입수할 수 있습니다.
- 케임브리지 CAP 컴퓨터, Levy, 1988
추가 정보
- 기능 기반 어드레싱:
- Li Gong, 보안 기반 역량 시스템, sp. 56, 1989 IEEE 보안 및 사생활 심포지엄, 1989
- 기능 기반 어드레싱
- 기능 기반 어드레싱의 하드웨어 구현
- PDP-11/45에서의 기능 실장
- IBM System/38 기능 기반 주소 지정 지원
- EROS: 고속 기능 시스템
Linux에서의 POSIX의 "기능:
- POSIX의 기능과 파일
- POSIX 파일 기능:뿌리의 힘을 살리다
- 루트 권한 없음으로 설정
- POSIX 파일 기능과 관련된 보안 문제 및 새로운 리스크
- Linux 매뉴얼 페이지 "capabilities(7)"
- Linux 기능 사용