Chapter 16. Security
컴퓨터 보안의 기본 목표를 CIA 원칙으로 살펴보고 기밀성과 무결성을 지키는 암호학의 역할을 정리한 노트입니다.
Notion 원본 페이지의 강의 슬라이드와 설명을 바탕으로 정리한 노트입니다.
Computer Security

- Cryptography(암호학)
- 보안의 전반에 적용되어 데이터의 기밀성과 무결성을 보호
- System Security(시스템 보안)
- 운영체제와 하드웨어 레벨에서의 보안
- 커널 레벨의 보안이 포함되어있는 부분
- Software Security
- 애플리케이션 레벨에서의 보안
- Network Security
- 네트워크를 통해 데이터를 전송할 때 발생 가능한 위협으로부터 보호
- Surveilance(감시)
- 시스템이 보안을 제대로 유지하고 있는지 모니터링
- 시스템 관점, 물리적 관점으로 나뉨
- 시스템 관점 → 소프트웨어 안정성, 데이터 확인
- 물리적 관점 → 실제 하드웨어와 환경을 보호
컴퓨터 보안 개요
정의
→ NIST 컴퓨터 보안 핸드북에서의 정의
- 컴퓨터 보안은 자동화된 정보시스템의 보호를 통해 무결성, 가용성, 기밀성(CIA)를 유지하는 것을 목표로 함
- 이런 목표는 하드웨어, 펌웨어, 데이터, 통신과 같은 정보 시스템 전반에 걸쳐 적용
CIA Triad(=보안 요구사항, 원칙)
- 보안의 3가지 요소, 이 요소들을 모두 충족해야 보안성이 보장된다고 할 수 있음
1. Confidentiality(기밀성)
- 데이터, 코드 등의 정보가 비인가된 사용자에게 노출되지 않도록 보호
- 민감한 정보 등의 보호를 목표
- 데이터 기밀성과 프라이버시의 개념을 포함
2. Integrity(무결성)
- 데이터가 손상되거나 위,변조되지 않도록 보호
- 데이터 무결성과 시스템 무결성을 포함 → 데이터 무결성: 데이터가 정확하고 위변조되지 않는 것 → 시스템 무결성: 시스템이 무결하게 의도된 기능을 제대로 수행하는 것
3. Availability(가용성)
- 권한이 있는 사용자가 필요로 하는 정보를 적시에 접근하고 사용할 수 있도록 보장
보안 문제
완벽한 보안 시스템은 없다
- 모든 보안 시스템에는 취약점이 존재하며, 이를 완전히 제거하는 것은 불가능
- 보호는 공격자가 악의적인 행동을 하는 데 필요한 노력을 증가시킬 뿐 이를 완전히 방지하는 것은 불가능
- 모든 시스템은 특정한 형태의 hole(결함)을 가짐
4B(기술적으로 완벽한 보안 시스템에서도 발생 가능한 위협)
- Burglary (도둑질): 정보를 물리적으로 훔침
- Bribery (뇌물): 내부 사용자에게 뇌물을 제공해 정보를 얻음
- Blackmail (협박): 약점이 있는 사용자를 협박하여 정보를 얻음
- Bludgeoning (폭행): 물리적인 폭력으로 정보를 강제로 획득
보안 문제 관련 용어
1. Vulnerability(취약점)
- 보안적으로 악용 가능한 특정 지점
- 기밀성, 무결성, 가용성(CIA) 중 하나라도 손실될 가능성이 있는 지점
2. Threat(위협)
- 취약점을 악용할 가능성이 있는 상태 → 취약점을 아무도 모른다면 악용 가능성이 없어 위협이 아니게 됨
3. Attack(공격)
- 위협을 실제로 실행하여 시스템에 피해를 주는 행위
4. Adversarry(공격 주체)
- 시스템을 공격하려는 주체 → 해커, 경쟁 기업 등
5. Countermeasure(대응책)
- 공격을 방어하거나 피해를 최소화하기 위한 방법
Security Services
→ 보안을 위해 제공되는 매커니즘, 프로세스/ 보안의 요구사항
- Confidentiality, Integrity, Availability, Authentication, Access Control, Nonrepudiation의 총 5가지
1. Confidentiality(기밀성)
- 데이터, 코드 등의 정보가 비인가된 사용자에게 노출되지 않도록 보호
- 민감한 정보 등의 보호를 목표
- 데이터 기밀성과 프라이버시의 개념을 포함
2. Integrity(무결성)
- 데이터가 손상되거나 위,변조되지 않도록 보호
- 데이터 무결성과 시스템 무결성을 포함 → 데이터 무결성: 데이터가 정확하고 위변조되지 않는 것 → 시스템 무결성: 시스템이 무결하게 의도된 기능을 제대로 수행하는 것
3. Availability(가용성)
- 권한이 있는 사용자가 필요로 하는 정보를 적시에 접근하고 사용할 수 있도록 보장
4. Authentication(인증)
- 시스템 접근 시 사용자의 신원을 확인하는 과정
- Ex) 사용자의 로그인 과정
5. Access Control(접근 제어)
- 권한에 따라 리소스에 대한 접근을 제한하는 매커니즘
- Authorization(권한 부여)이 이 접근 제어를 위해 사용
6. Nonrepudiation(부인 방지)
- 특정 작업이나 통신에 대해 부인할 수 없도록 보장
- Ex) 이메일 시스템 → 송신, 수신자, 서버 모두 송신, 수신, 확인 기록을 공유, 부인이 어려움
크래커의 통상적인 공격 단계
1. 정보 수집
- 취약점을 찾고 이를 악용하기 위해 최대한 많은 정보를 수집
2. 포트 스캔
- 네트워크 상에 열려있는 포트를 탐지해 어떤 서비스가 실행 중인지 확인한 후 보안이 약한 서비스나 구성 오류를 찾음
3. 로그인 계정 획득
- 시스템에 접근하기 유효한 사용자 계정을 획득
4. Root 권한 획득
- 취약점을 이용해 Root 권한(최고 권한)을 획득
5. Root 권한 유지
- 추후에 시스템에 다시 접근하기 위해 백도어를 설정
보안의 종류
- 물리적/ 계정/ 파일시스템/ 네트워크 보안 등이 있음
1. 물리적 보안(Physical Security)
→ 보안을 위해 물리적 접근을 통제하는 방식
하드웨어 보안
- 하드웨어 장비 및 시스템에 대한 물리적 접근을 제한해 보안 강화
- Ex) ID 카드, 생체 정보 인증(홍체, 지문 등)
BIOS 보안
- 부팅 단계에서 보안을 설정해 시스템 보호
- 바이오스를 통해 부팅 단계의 부팅 비밀번호 설정 가능
- Ex) 부팅 비밀번호 설정, 외부 장치(플로피 디스크)를 통한 부팅 제한
Session 보안
- 사용자가 시스템을 사용하지 않을 때(세션이 비활성화)도 시스템을 보호
- Ex) 일정 시간 동안 활동이 없을 시 자동 로그아웃, 화면보호기 등
2. 계정 보안(Account Security)
Authentication(인증)
- 계정의 사용자가 본인이 맞는지 확인하는 과정
- 보통 비밀번호를 사용한 인증 방법을 사용
- 이 방법은 보안의 첫 번째 방어선이자 가장 큰 보안 취약점이 될 수 있음 비밀번호 사용의 문제점
- 비밀번호를 다른 사람이 볼 수 있는 곳에 메모하는 사용자
- 비밀번호를 느리게 입력 시 주위 사람이 알아채기 쉬움
- 단순한 비밀번호 사용
- 너무 길고 복잡한 비밀번호 사용, 이는 사용자가 쉽게 잊게 함
-
비밀번호는 곧장 읽을 수 있는 형태(평문)으로 저장되어서는 안 됨
- 따라서 보안 해시를 사용해 변환 후 저장 **계정 인증 프로토콜 **→ 이걸 사용해 비밀번호 취약점을 방지
-
CHAP(Challenge Handshake Authentication Protocol)이 사용
- 클라이언트는 계정 정보와 비밀번호를 암호화 해 전송
- 서버에서 랜덤 넘버를 생성한 후 클라이언트에게 전송
- 클라이언트는 랜덤 넘버와 비밀번호를 조합해 서버로 전송
- 서버는 클라이언트가 보낸 정보를 계산해 검증
Authentication Alternatives(인증 대안)
→ 비밀번호 인증 대신 사용하거나 이를 보완하는 대안
- 위조 및 복제가 불가능해야 하고 도난 시 소유자가 이를 빨리 알아차려 이전의 것을 비활성화 해야함 인증 대안 예시
- 물리적 키 (Physical Keys)
- 물리적인 장치를 사용해 접근을 인증
- EX) 출입증
- 생체 키 (Biometric Keys)
- 사용자의 생체 정보를 기반으로 인증
- Ex) 홍채, 지문, 얼굴 인식
- 이미지를 사용한 비밀번호 (Passwords Using Images)
- 텍스트 기반 비밀번호 대신 특정 이미지를 통한 인증
Authorization(권한)
-
특정 사용자가 특정 작업 수행, 데이터 접근이 가능한지 결정하는 과정
-
인증 이후의 과정이고 사용자의 권한을 확인
-
Access matrix로 표현됨 → ACL, Capability를 나타내는 테이블 Access control lists (ACLs)
-
각 객체에 대해 어떤 사용자가 어떤 작업을 수행할 수 있는 지를 나타냄
-
간단하며 거의 모든 파일 시스템에서 사용 Capabilities
-
각 사용자에 대해 어떤 자원에 접근할 수 있고, 어떤 방식으로 접근할 수 있는 지를 나타냄
-
이름 지정(naming)과 보호(protection)를 동시에 수행하는 경우가 많습니다. 사용자가 특정 객체에 대한 권한(capability)이 있어야만 해당 객체를 볼 수 있음
-
매우 높은 보안이 요구되는 시스템에서 사용
3. File System Security
Setuid/Setgid 프로그램
→ setuid, setgid는 특정 파일 실행 시 실행자의 권한이 아닌 파일 소유자 권한으로 실행하게 함
- 잘못 작성된 setuid 프로그램은 보안 취약점을 포함하게 됨
- 이런 setuid 프로그램을 통해 루트 권한을 획득하는 백도어가 존재
Search Path(경로 검색)
- 사용자가 현재 작업 중인 디렉토리를 PATH(환경 변수)에 포함시키는 경우가 많음
- 크래커는 이렇게 사용되는 디렉토리에 악성 프로그램을 넣어 평소에 쓰는 명령어 등을 악성 프로그램의 실행으로 이어지게 함 → ex) 만일 /home/hi 디렉토리를 환경 변수로 설정하면 여기에 git이라는 이름의 악성 파일을 넣허 bash에 git 입력 시 악성 파일이 실행되게 함
기타 보안 대책
- 파일 시스템 자체 암호화
- 디스크로 가는 PCI 버스에 암호화 엔진(하드웨어)를 설치해 암호화를 하는 방법도 있음
- 파일 시스템 백업
- 시스템 로그 모니터링
- 기본 권한을 신중하게 지정
- 파일 시스템 사용 제한
- 파일 시스템 무결성 확인
4. Network Security
Secure Protocol 사용
- 평문 데이터가 네트워크 상으로 전송되지 않도록 Secure Protocol을 사용
- ssh(Secure Shell) 프로토콜은 여러 프로토콜의 통신을 암호화
- 많은 프로토콜이 ssh를 기반으로 한 프로토콜로 대체
- slogin, sftp, ssh
- Secure Socket Layer(SSL)
- 클라이언트와 서버 사이 데이터 암호화를 제공
- 현재는 TLS로 대체
- IPSec 프로토콜
- IP 패킷을 암호화
- IPv4에서는 선택적으로 적용, IPv6에서는 선택적으로 적용
TCP Wrapper
- 커널 단에서 TCP 통신을 Wrapping해 별도의 기능을 추가하는 것, 이때 보안적인 기능들을 추가 가능
- 방화벽보다 내부에서 동작
- telnet, ftp 등의 인터넷 서비스를 모니터링하고 필터링
- 클라이언트를 서비스 프로그램에 연결하기 전에 활동을 로깅하고 연결이 허용되는지 확인 → 이 외에도 기능 존재
Firewall

- 신뢰할 수 있는 호스트와 신뢰할 수 없는 호스트 사이에 배치되어 내부 네트워크와 연결된 외부 네트워크 사이에 필터링 또는 보호 계층을 생성
- 외부에서 들어오는 데이터를 필터 규칙에 의해 들어올 수 없는 것을 방어
- 별도로 public하게 접근해야하는 것들은 DMZ라는 영역을 별도로 두어 접근이 가능하게 함
Instrusion Detection/ Prevention(침임 탐지 및 방지)
- 컴퓨터 시스템에 대한 침임 시도를 탐지하거나 방지하는 개념
- 방화벽은 네트워크 트래픽을 필터링하는 기본적인 보안 장치
- IDS와 IPS는 방화벽의 기능을 강화한 개념으로 침입을 탐지하고 방지하는 역할을 수행
- 방화벽을 안정적으로 강화한 장치
공격(Attack)과 대응책(Countermeasure)

- 보안은 4가지 주요 계층에서 공격과 대응 방법을 통해 관리됨
Security Threats(보안 위협)
1. Physical Threat(물리적 위협)
- 자연재해, 인간의 물리적인 침입
- 홍수, 화재, 지진, 폭발 등
- 컴퓨터를 훔침, 시스템 콘솔에 접근해 불법적 조작
2. Logical Threat(.논리적 위협)
- 개발자 또는 시스템을 구축한 사람에 의한 버그로 발생
- 사용자가 오용한 경우 → ex. 비밀번호를 0000으로 설정 등
3. Operational Threat(운영적 위협)
- 관리 실패로 인해 발생
4. Denial of Service(Dos, 서비스 거부 공격)
- 컴퓨터가 정상적으로 서비스를 제공하지 못하도록 과도한 트래픽 등을 발생시켜 방해
Attack(공격 방법)
-
바이러스, 웜/ 트로이 목마/ Logic Bomb/ 트랩도어/ 딕셔너리 공격/ 로그인 스푸핑 → 상대적으로 저수준의 공격
-
Malware, Spyware, Ransomware/ Keystroke Logger/ Code Injection/ Packet Sniffing → 상대적으로 고수준의 어려운 공격
-
DoS, DDoS
Buffer Overflow
→ 공격보다는 취약점
-
함수의 호출과 관련된 내용들은 스택 영역에 포함

-
이 코드에 쓰인 strcpy는 문자열을 버퍼 B로 복사하는 것
-
그러나 처음 버퍼 선언 시 B[1024]로 1024 바이트 이하의 크기가 될 것이라 예상
- 이를 초과하면 버퍼 오버플로우 발생
-
이를 방지하기 위해 일차적으로는 복사할 버퍼의 길이를 파라미터로 넘겨주는 방법으로 길이를 검증함
- 이런 문제를 막기 위해 새로 나온 메서드들이 scanf_s, stycpy_s 같은 것들
Code Injection

- 함수 A가 실행되면 A의 실행 이후 돌아갈 Return Address, 그 위에 A의 지역변수들이 스택 영역에 쌓임
- 이때 A의 지역 변수 중 선언된 버퍼 B에 원래 할당된 값보다 큰 값을 넣으면 버퍼 오버플로우가 발생
- 결국 Return Address를 덮어씌우게 됨, 함수의 실행이 끝나면 돌아가기 위해 Return Address가 저장된 공간의 코드를 실행시키는데, 이때 덮어씌워진 코드가 실행됨
- 이런 버퍼 오버플로우로 악성 코드 등을 심으로 그게 코드 인젝션
IP Spoofing

- 공격자가 허가된 IP주소를 위조해 이를 악용하는 공격 기법
Denial of Service(DoS)
- 시스템이 서비스를 제공하지 못하도록 하는 공격, 주로 시스템 리소스를 과다하게 사용하게 해 사용자들의 요청을 처리하지 못하게 함
Internal DoS
- 시스템 내부의 자원을 고갈시켜 시스템을 마비
- 메모리, 프로세스. CPU 등
- 시스템 내부에서 발생할 수 있음
- Ex) 사용자 실수로 인한 프로세스의 무한 fork()
External DoS
- 시스템 외부의 자원을 고갈시켜 시스템을 마비
- 응용 프로그램(Application) 수준의 자원 고갈
- Mail bombing: 대량의 이메일을 전송하여 메일 서버 과부하 유발.
- Buffer overflow: 입력 크기 제한을 초과하여 메모리 손상 유발.
- Java Applet Attack: 악의적인 Java Applet을 사용해 시스템 침투.
- 프로토콜(Protocol) 수준의 자원 고갈
- TCP SYN Flooding: 다량의 SYN 패킷 전송으로 연결 요청을 초과시킴.
- Ping Flooding: 다량의 핑 요청을 보내 네트워크 대역폭 소모.
- 네트워크(Network) 수준의 자원 고갈
- UDP Storming: UDP 프로토콜을 악용하여 네트워크 자원 소모.
DDoS(Distributed DoS, 분산 서비스 거부 공격)
- 외부 DoS 등은 하나의 시스템에서 공격하므로 IDS로 탐지한 후 쉽게 차단이 가능
- 차단할 요청을 구별하기 어렵게 해 우회하는 식으로 공격하기 위해 불특정 다수의 컴퓨터에서 DoS 공격을 하는 것
- 주로 작은 임베디드 디바이스, 다른 사람의 PC에 코드를 인젝션해 공격
암호학의 기초 개념
암호화
- 데이터를 읽기 어렵게 난독화 하는 방법
- 이를 통해 인증, 기밀성, 데이터 무결성을 얻을 수 있음
- 암호화 알고리즘은 공개되어도 되지만 키는 반드시 기밀로 유지되어야 함
암호화의 2가지 종류
- 공유 키 암호화(대칭 키 암호화)
- 공개 키 암호화(비대칭 키 암호화)
공유 키 암호화(대칭 키 암호화)

- 암호화와 복호화에 **동일한 키(공유 키, 대칭 키)**를 사용
- 원격의 두 시스템이 모두 동일한 키를 지녀야 함
- 이때 대칭 키를 어떻게 두 시스템에게 안전하게 전달하는가가 관건
- DES/ AES 알고리즘을 사용
공개 키 암호화(비대칭 키 암호화)

- 각 원격의 시스템이 자신만의 공개 키와 개인 키를 가짐
- 공개 키는 모두에게 공개됨
- 개인 키(비밀 키)는 소유자만 알고 있는 키
- Key pair
- 공개 키와 개인 키의 한 쌍으로 암호화와 복호화
- 기밀성과 인증 제공 가능
- RSA 알고리즘을 사용
주의사항
- 비대칭 암호화 알고리즘은 시간복잡도가 매우 큼
- 따라서 데이터 전체에 비대칭 암호화를 적용하기 보다, 데이터는 대칭 키로 암호화하고, 대칭 키를 비대칭 암호화 방식으로 전달
- 인증 정보와 같이 중요한 정보는 직접 비대칭 키로 암호화 되기도 함
네트워크 상 암호화의 응용
1. 전자서명(Digital Signature) → 비대칭 키 암호화 응용

- 전송할 평문 데이터를 해시함수로 해시 값으로 변환
- 해시 값을 개인 키로 암호화해 전자서명을 생성
- 이 전자 서명과 데이터를 보냄
- 데이터가 암호화되어있다면 이를 복호화 하고, 해시함수로 만든 해시값과 전자 서명을 공개 키로 복호화 해서 나온 해시 값이 같다면 인증 절차가 완료
2. TLS/SSL → 비대칭 키 응용

- 키를 교환
- 송신자가 AES(대칭키) 키를 생성 한 후 수신자의 공개 키로 암호화 해서 전송
- 이를 수신자는 자신의 개인 키로 복호화 해 실제 키를 획득
- 키를 안전하게 획득 가능
- 데이터 전송
- 데이터를 AES(대칭키) 키로 암호화 해 전송
- 이를 받으면 획득한 AES(대칭키) 키로 복호화 → 이게 위에서 말한 키는 비대칭 키 암호화로, 데이터는 대칭 키 암호화로 교환하는 것
VPN(Virtual Private Network, 가상 사설망)

- 물리적 네트워크를 구축하지 않고 (기존 인터넷 망 위에) 가상의 네트워크를 만들어 사용 → Virtual
- 전용 회선이 이상적, but 비용적인 이유로 VPN을 사용
- 데이터가 의도한 수신자에게만 전달되도록 기밀성 유지 → Private
- VPN이 공공 인터넷 위에 개설되어도 데이터는 암호화 되어 의도되지 않은 수신자는 접근 불가
VPN 기술

- 터널링
- 데이터를 안전하게 전송하기 위해 공공 인터넷 상에서 사설 네트워크를 만드는 과정.
- 사용 프로토콜:
- PPTP, L2TP, L2F, MPLS, IPsec
- Authentication (인증)
- 네트워크에 접근하는 사용자가 신뢰할 수 있는지를 인증.
- 사용 기술:
- Radius, CHAP, PKI
- Access Control (접근 제어):
- 네트워크 리소스에 대한 접근 권한을 설정.
- 사용 기술:
- PKI
- Data Security (데이터 보안):
- 데이터가 전송되는 동안 무결성과 기밀성을 보장.
- 사용 기술:
- IPsec, PKI, SSL, TSL ⇒ 공공 인터넷 위에 개설되므로 허점이 존재, 이를 막기 위해 암호화, 인증 프로토콜 등을 필수적으로 사욛