본 포스팅은 공룡책으로 불리는 Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 10th』 기반으로 정리한 글입니다.
보안과 보호
보안(Security)
- 컴퓨터 시스템의 물리적 자원인 데이터와 코드에 대한 정보 무결성을 보호하기 위해 사용자 인증 보장
- 인증받지 않은 접근, 악의적인 파괴, 변경/실수에 의한 데이터 변경 방지
- 지정된 일부의 인원만 알고 있어야하는 정보를 위험으로부터 지킴
- authentication : 인증
보호(Protection)
- 운영체제로부터 적절한 권한을 획득한 프로세스만이 memory segments, CPU와 같은 자원 사용할 수 있도록 보장
- 사용자에게 허용되는 접근의 종류를 제한함으로써 시스템에 접근하는 것을 제어
- 보호해야할 가치가 있는 정보를 외부의 위협으로부터 지키는 일련의 행동
- authroization : 인가, 권한 보호
Security Problem
컴퓨터 자원 (Computer Resources)
- 우연히 혹은 의도적으로 잘못 사용되는 것을 방지
- 공격을 감지하여 방어하고, 실수를 제어함
- cryptography(암호학)
컴퓨터 자원 보안 (Security)
- 보안은 컴퓨터 자원을 보호해야함
- 권한 없는 접근
- 악의적인 침입 및 변경
- 실수로 데이터 일관성을 해치는 행위
보안 위배 요소
- thread: 보안 위반을 일으킬 수 있는 잠재적인 가능성, 주로 실수에 의해 발생
- attack: 악의적인 공격
보안 위배 사항 분류
- 무결성 위반 (Confidentiality)
- 데이터 안정성 위반 (integrity)
- 유용성 위반 (availability)
- 서비스 절도 (Theft of service)
- 서비스 방해, 디도스 공격 (Denial of service (Dos) 혹은 Distributed Dos (DDos))
보안의 4단계
- 물리적 단계(Physical) : 인가된 사용자만이 진입할 수 있도록 물리적으로 보호
- 네트워크 단계(Network) : 보안 측면에서 해로운 단계
- 운영체제 단계(Operating System) : 공격할 수 있는 지점을 줄이고 침투를 못하게 막음
- 응용 프로그램 단계(Application) : 보안을 위배하는 버그를 포함 (가장 상위 단계)
Program Threats
프로그램 (또는 프로세스) 보안 취약점
- 멀웨어 (Malware)
- 컴퓨터 시스템을 공격, 비활성화 또는 손상시키도록 설계된 소프트웨어
- 트로이 목마(Trojan horse), 스파이웨어(spyware), 랜섬웨어(ransomware), 백도어(backdoor), 로직붐(logic bomb)
- 코드 주입 (Code Injection)
- 대부분 소프트웨어는 악의적이지 않으나 code-injection 공격으로 심각한 피해
- 바이러스와 웜 (Viruses and Worms)
- 바이러스 : 일반적인 프로그램에 있는 코드의 조각, 다른 프로그램 감염하도록 자가복제
- 웜: 사람의 도움 없이 스스로 복제하기 위해 네트워크 사용
System and Network Threats
시스템 및 네트워크의 위협
- 네트워크 트래픽을 통한 공격
- 스니핑 (sniffing) : 침입자가 능동적으로 다른 상대방들의 네트워크 트래픽을 intercept
- 스푸핑 (spoofing) : 다른 사람의 컴퓨터 시스템에 접근할 목적으로 IP 주소를 변조 후 합법적인 사용자인 것처럼 위장하여 시스템 접근 ⇒ IP 주소에 대한 추적을 피하는 해킹 기법
- 서비스 거부 공격 (Denial of Service)
- 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격
- Port Scanning
- 취약점 탐지의 사전 작업
- 포트 스캐닝 자체로는 정상적인 동작이나 공격 용도로 이용할 때가 있음
- 시스템이나 네트워크가 어떤 포트를 열고 서비스하고 있는지 알아내기 위한 작업
Cryptography as a Security Tool
네트워크로 연결된 컴퓨터에서는 네트워크 메세지의 잠재적인 송신자와 수신자가 존재한다.
운영체제 입장에서는 이 메세지를 어떻게 신뢰할까?
바로 Cryptography, 암호술이다. cryptography는네크워크에서 컴퓨터들에 대해 선택적으로 분산된 키(keys)를 기반으로 하여 네트워크를 신뢰할 수 있도록 한다.
암호화 (Encryption)
sender가 키를 가지고 receiver만 메세지를 읽을 수 있도록 함
- 암호화 알고리즘의 컴포넌트
- 키의 집합 : K
- 메시지의 집합 : M
- 암호화된 문자의 집합 : C
- 암호화 함수 E : K -> (M -> C)
- 복호화 함수 D : K -> (C -> M)
- 암호화 알고리즘의 핵심적인 특징
- 암호화된 문자 c가 주어졌을때 메시지 해석
- 키 k를 보유한 컴퓨터는 암호문자를 복호화하여 일반 텍스트로 복호화 가능
- 키 k를 보유하지 못한 컴퓨터는 암호문자를 복호화 불가능
- 암호문자를 일반적으로 노출이 되어 있지만 암호문자로부터 키 k를 도출하는 것은 불가능
암호화 알고리즘의 종류
1. 대칭형(symmetric) 암호화 알고리즘
- A와 B가 사용하는 key가 같을 때 (암호화, 복호화시 사용하는 키같음)
- key는 보호되어야함
2. 비대칭형(asymmetric) 암호화 알고리즘
- 암호화와 복호화하는데 key가 다름
- 공개키 (public key) : 암호화하는데 사용되는 키
- 개인키 (private key) : 복호화하는데 사용되는 키
- 공개키는 외부에 공개되어도 상관 없지만, 개인키는 노출되어선 안
대칭형 암호화 알고리즘 (Symmetric Encryption)
- 송신자와 수신자 모두 동일한 키를 가지고 암호화, 복호화 수행
- 암호화와 복호화는 송신자와 수신자 둘 간의 발생할수도 있고 신뢰받는 3자를 통해서 발생할 수 있음
- 대칭형 암호화 알고리즘 종류
- DES : Data Encryption Standard
- AES : Advanced Encryption Standard
비대칭형 암호화 알고리즘 (Asymmetric Encryption)
- 공개키와 개인키를 구분하여 암호화와 복호화 수행하는 방식
- 암호화 키와 복호화 키를 서로 다르게 쓰면 누가 listening해도 상관 없음
- 공개키는 외부에 노출 가능하지만 개인키는 노출되어선 안됨
- RSA 알고리즘 : Rivest, Shamir, and Adleman
- 현대까지도 많이 사용되는 비대칭 알고리즘
인증 (Authentication)
- hashing을 통해 키를 가진 수신자만 복호화
- 송신자의 메세지를 제한하여 중간에 수정되지 않도록 보장
- 인증 알고리즘
- 키의 집합 : K
- 메시지의 집합 : M
- 인증자들의 집합 : A
- 보안(해시) 함수 S : K-> (M->A)
- 검증(verification) 함수 V : K->(M x A -> {true, false})
- 메세지 m이 주어지면 메세지를 가지고 k를 알아야 컴퓨터는 인증자 a 생성 가능 (ex 전자서명)
- 오직 k를 가지고 있는 경우에 V_k(m, a) = true
- k를 가지고 있는 경우 메세지에 인증자를 생성하여 확인
- 그렇지 않으면 인증자 생성 불가
- 인증 알고리즘의 종류
- MAC : Message-Authentication Code
- Digital Signature Algorithm
Goals of Protection
- 컴퓨터 시스템에 의해 정의된 자원에게만 프로세스와 사용자에게 권한 부여해줌
- 컴퓨터 시스템의 reliability를 증가하여 인터넷과 같은 보안 커뮤니케이션 platform에 접근하도록 함
최소한의 권한 원칙 (The Principle of Least privilege)
- 프로세스, 유저, 시스템에게 최소한의 권한 부여
- ex) UNIX user & file privileges : root, sudo, chmod
- permissions 획득해야지 악성 공격 가능성 완화
Access Matrix
- matrix로 ACL (Access Control LIst, 권한의 집합)을 생성하여 어디까지 접근 가능한지 정리
- 어떤 도메인에 어떤 객체가 접근 가능한지 행렬로 정리해 정책(policy)을 관리
Sandboxing & Code Signing
- Sandboxing
- credential 있는 프로세스만 유효한 범위 내에서 실행 가능
- running process와 같이 할 수 있는 거만 제한
- ex) JAVA and .NET
- Code signing
- 어떤 프로그램이나 스크립트, 앱을 어떻게 실행할 수 있을까? 만약 코드나 스크립트가 바뀐다면?
- 프로그램에 Code signing을 하여 안전한 프로그램임을 인증 (digital siging of programs and executables)
- 전자 서명, Operating System의 patch 작업, 안드로이드나 iOS 앱에서 사용
'CS > 운영체제' 카테고리의 다른 글
[공룡책🦖] ch11 Storage Managemet (0) | 2023.07.29 |
---|---|
[공룡책🦖] ch10 Virtual Memory (0) | 2023.07.27 |
[공룡책🦖] ch9 Main Memory (0) | 2023.07.25 |
[공룡책🦖] ch8 Deadlocks (0) | 2023.07.23 |
[공룡책🦖] ch7 Synchronization Examples (0) | 2023.07.21 |