June

4-1) 정보보호

lec-01.

1. 보안(Security)이란?

컴퓨터 보안은 다음 세 가지 속성 CIA로 정의된다.

속성영문의미
기밀성Confidentiality인가된 사용자만 시스템·데이터에 접근 가능
무결성Integrity요청한 데이터가 올바른(변조되지 않은) 데이터임을 보장
가용성Availability필요할 때 언제든 시스템·데이터를 사용할 수 있음
🔑 세 가지를 모두 갖춘 시스템 = 안전한(Secure) 시스템

2. 보안과 신뢰성 (Security & Reliability)

보안은 신뢰성(Reliability)과 밀접하게 연관된다. 안전한 시스템이란 다음을 신뢰할 수 있는 시스템이다.

  • 개인 데이터를 기밀로 유지한다
  • 인가된 접근·수정만 허용한다
  • 올바르고 의미 있는 결과를 제공한다
  • 원할 때 즉시 그 결과를 제공한다

3. 프라이버시(Privacy)란?

핵심 개념: "정보적 자기결정권 (Informational Self-Determination)"

→ 나에 관한 정보를 내가 통제할 권리

"통제(Control)"의 의미:

항목의미
Who gets to see it누가 볼 수 있는지
Who gets to use it누가 사용할 수 있는지
What they can use it for어떤 목적으로 사용할 수 있는지
Who they can give it to누구에게 전달할 수 있는지

4. Security vs. Privacy

보안과 프라이버시는 흔히 상충(opposing forces)하는 개념으로 여겨진다.

과연 그럴까? 하나를 얻으려면 반드시 하나를 포기해야 하는가?

→ 반드시 그렇지는 않다. 잘 설계된 시스템은 둘 다 보장할 수 있다.


5. 공격자(Adversaries)의 유형

유형특징
Amateurs기술 수준이 낮은 일반 공격자
Crackers기술적으로 능숙한 해커
Organized crime금전적 목적의 조직범죄
Government "cyber warriors"국가 지원 사이버 공격
Terrorists파괴·혼란을 목적으로 하는 테러리스트
오늘날 가장 심각한 위협은 무엇인가? (강의 토론 주제)

6. 얼마나 안전하게 만들어야 하는가?

최약 고리 원칙 (Principle of Easiest Penetration)

  • "시스템은 가장 약한 연결 고리만큼만 강하다"
  • 공격자는 방어자에게 편한 곳이 아닌, 자신에게 가장 쉬운 곳을 노린다
  • 안전한 시스템을 만들려면 공격자처럼 생각(think like an attacker)해야 한다

적절한 보호 원칙 (Principle of Adequate Protection)

  • "보안은 경제학이다 (Security is economics)"
  • 피해액 $1,000짜리 시스템 보호에 $100,000을 쓰는 것은 비합리적

7. 주요 용어 (Terminology)

용어정의예시
자산 (Assets)보호해야 할 대상Hardware · Software · Data
취약점 (Vulnerabilities)악용 시 손해를 야기할 수 있는 시스템의 약점사용자 인증이 없는 파일 서버
위협 (Threats)시스템에 발생할 수 있는 손실·피해개인 파일이 공개되는 상황
공격 (Attack)취약점을 악용하여 위협을 실행하는 행위다른 사용자인 척 파일에 접근
통제 (Control)취약점을 제거하거나 줄이는 것인증 시스템 도입

위협의 4대 유형

유형의미
Interception가로채기
Interruption방해·중단
Modification변조
Fabrication위조
🔑 시스템 설계 시 위협 모델(Threat Model)을 명확히 정의해야 한다
→ "누구로부터, 무엇을 막을 것인가?" (Whom do we want to stop from doing what?)

8. 방어 방법 (Methods of Defense)

방법설명
Prevent (예방)공격 자체를 막음
Deter (억제)공격을 더 어렵거나 비용이 많이 들게 함
Deflect (전환)공격자에게 덜 매력적인 대상이 됨
Detect (탐지)공격 발생을 인지
Recover (복구)공격 피해를 최소화·복원
💡 Defence in Depth: 하나의 위협에 여러 방어 방법을 동시에 적용하는 것이 효과적

예시 — 자동차 도난 위협

방법적용
Prevent완전한 예방은 불가
Deter안전한 주차장 이용
DeflectThe Club 장치, 경보 스티커 부착
Detect자동차 알람, OnStar
Recover보험 가입

9. 컴퓨터 시스템 방어 수단

보호 대상(자산): Hardware · Software · Data

방어 수단예시
암호화 (Cryptography)데이터 암호화, 디지털 서명, 암호화 프로토콜, 무결성 보장, 개인정보 자동 소멸
소프트웨어 통제 (Software Controls)비밀번호, OS 사용자 격리, 바이러스 스캐너, 개발 품질 관리, 개인 방화벽
하드웨어 통제 (Hardware Controls)지문 인식기, 스마트 토큰, 방화벽, 침입 탐지 시스템(IDS), TEE
물리적 통제 (Physical Controls)잠금장치, 경비원, 오프사이트 백업
정책 및 절차 (Policies & Procedures)비밀번호 변경 규정, 보안 교육, 비기술적 보안 수단

✅ 핵심 정리 (Summary)

질문핵심 답
보안이란?CIA: 기밀성 · 무결성 · 가용성
프라이버시란?정보적 자기결정권 (Informational Self-Determination)
공격자 유형?공격자처럼 생각하는 훈련이 필요
방어 목표?취약점(Vulnerability)을 통제(Control)하여 공격 차단
방어 방법?암호화, 소프트웨어/하드웨어/물리적 통제, 정책·절차

lec-01-ch1.

1.1 컴퓨터 보안의 핵심 목표 (Fundamental Goals)

컴퓨터 보안은 무단 행위로부터 컴퓨터 관련 자산을 보호하는 기술·과학·공학의 복합 실천이다.

→ 무단 행위를 예방하거나, 탐지하거나, 복구하는 방식으로 보호한다.

6가지 핵심 보안 목표

#목표설명
1기밀성 (Confidentiality)비공개 정보가 인가된 당사자만 접근 가능하도록 유지. 저장 중(at rest) 및 전송 중(in motion) 모두 적용. 기술적 수단(암호화) 또는 절차적 수단으로 달성
2무결성 (Integrity)데이터·소프트웨어·하드웨어가 인가된 당사자 외에는 변경되지 않음을 보장. 암호학적 체크섬, 접근 제어 사용
3인가 (Authorization)컴퓨팅 자원이 인가된 주체만 접근 가능. 접근 제어(Access Control) 메커니즘으로 달성
4가용성 (Availability)인가된 사용을 위해 정보·서비스·자원이 지속적으로 접근 가능. DoS(서비스 거부 공격) 방어 필요
5인증 (Authentication)주체·데이터·소프트웨어가 진짜임을 보장. 개체 인증(Entity auth.): 신원 확인 / 데이터 출처 인증(Data origin auth.): 데이터 출처 확인 → Attribution(귀속)과 Accountability(책임) 지원
6책임추적성 (Accountability)과거 행위에 대한 책임 주체 식별 가능. 전자적 증거(로그, 식별자)를 통해 달성. 부인 방지(Non-repudiation) 포함
Trusted vs. Trustworthy 구분
- Trustworthy: 신뢰를 받을 만한 것 (기대에 안정적으로 부응)
- Trusted: 신뢰를 받고 있는 것 (실패 시 모든 보장이 사라짐)
기밀성 vs. 프라이버시 vs. 익명성
- 기밀성: 비인가 공개 방지
- 프라이버시: 개인적으로 민감한 정보를 보호하고 공유를 통제
- 익명성: 행위가 공개 신원과 연결되지 않는 속성

1.2 보안 정책과 공격 (Security Policies and Attacks)

보안 정책 (Security Policy): 시스템의 규칙과 관행의 설계 의도를 명시 — 무엇이 허용되고 허용되지 않는지를 정의

핵심 용어 정리

용어정의
자산 (Assets)보호 대상 자원: 정보, 소프트웨어, 하드웨어, 컴퓨팅·통신 서비스
취약점 (Vulnerabilities)설계 결함, 구현 결함, 배포·설정 문제 등 시스템의 특정 약점
위협 에이전트 (Threat agent)공격의 잠재적 원천. 활성화되면 공격자(Attacker)가 됨
위협 (Threat)자산에 피해를 줄 수 있는 상황과 주체의 조합. 수단과 의도가 모두 있어야 신뢰할 수 있는 위협
공격 벡터 (Attack vector)공격이 수행되는 특정 방법 또는 단계의 시퀀스
공격 (Attack)취약점을 악용하여 보안 정책을 위반하려는 의도적 행위
통제/대응책 (Controls/Countermeasures)정책을 지원·시행하기 위한 예방·탐지·복구 수단
예시 (가정 보안 정책)
- 정책: 가족만 집 물건 반출 허용
- 취약점: 잠기지 않은 뒷문
- 공격자: 모르는 사람이 뒷문으로 진입하여 TV를 훔침
- 공격 벡터: 잠기지 않은 문을 통한 진입

보안 정책 위반과 공격의 관계

  • 시스템 행동 → 인가 상태 (보안 정책 준수) or 비인가 상태 (정책 위반)
  • 비인가 상태로의 전환 = 보안 정책 위반

1.3 위험과 위험 평가 (Risk, Risk Assessment)

위험(Risk): 특정 기간 동안, 특정 자산에 대한 유해한 미래 사건으로 인한 예상 손실

위험 공식

javascript
R = T · V · C
변수의미
T위협 정보 (특정 위협이 주어진 기간에 실현될 확률)
V취약점의 존재 여부
C자산 가치 및 공격 성공 시 비용·영향
T와 V를 합쳐 P(공격이 성공적으로 취약점을 악용할 확률)로 표현하면:
R = P · C

연간 예상 손실 (ALE)

javascript
ALE = Σ(Fᵢ · Cᵢ)
  • Fᵢ: i번째 보안 이벤트의 연간 추정 빈도
  • Cᵢ: i번째 이벤트 발생 시 평균 손실

위험 평가 핵심 질문

  1. 가장 가치 있는 자산은 무엇인가?
  2. 어떤 시스템 취약점이 존재하는가?
  3. 관련 위협 에이전트와 공격 벡터는 무엇인가?
  4. 공격 확률 또는 빈도 추정치는?

정성적 위험 평가 매트릭스 (Risk Rating Matrix)

비용/영향 (C)확률 V.LOWLOWMODERATEHIGHV.HIGH
V.LOW (무시)11111
LOW (제한적)12222
MODERATE (심각)12333
HIGH (치명적)22344
V.HIGH (복합 치명)23455
위험 수준 1(V.LOW) ~ 5(V.HIGH)

위험 관리 vs. 위험 완화

위험 관리의 4가지 옵션:

  • (a) 기술적·절차적 대응책으로 위험 완화
  • (b) 보험을 통해 제3자에게 위험 이전
  • (c) 위험 수용 (대응 비용이 더 클 때)
  • (d) 시스템 폐기로 위험 제거

1.4 공격자 모델링 (Adversary Modeling)

보안 분석의 핵심: 공격자 모델(Adversary Model) 구축

공격자 속성 (5가지)

  1. 목표 (Objectives) — 보호 필요 자산 시사
  2. 방법 (Methods) — 예상 공격 기법·유형
  3. 능력 (Capabilities) — CPU·저장소·대역폭·기술·인원·기회
  4. 자금 수준 (Funding level) — 공격 결의·방법·능력에 영향
  5. 외부자 vs. 내부자 (Outsider vs. Insider) — 내부자는 초기 접근 우위를 가짐

공격자 집단 7가지 분류 (Table 1.2)

#집단 유형
1외국 정보기관 (정부 지원 기관 포함)
2사이버 테러리스트 / 정치적 동기 집단
3산업 스파이 (경쟁사 지원 가능)
4조직범죄 단체
5크래커 (컴퓨터 불법 침입 개인)
6악의적 내부자 (불만 직원 포함)
7비악의적 직원 (보안 인식 부족)
공격 유형 구분
- 표적 공격 (Targeted attacks): 특정 개인·조직을 겨냥
- 기회주의적 공격 (Opportunistic attacks): 불특정 다수 대상
- 일반 공격 (Generic attacks): 임의 피해자 대상

보안 평가 방법

방법특징
공식 보안 평가 (Formal security evaluation)제3자 검토, 비용·시간 많이 소요, 작은 변경에도 재인증 필요
침투 테스트 (Penetration testing / Pen testing)허가 하에 실제 시스템에서 취약점을 찾는 테스트
블랙박스 (Black-box)설계 문서 없이 진행
화이트박스 (White-box)설계 문서·소스코드 활용 → 취약점 발견 가능성 높음

1.5 위협 모델링 (Threat Modeling)

위협 모델: 대상 시스템이 방어해야 할 위협·위협 에이전트·공격 벡터를 식별

1.5.1 다이어그램 기반 위협 모델링

  • 시스템 아키텍처 다이어그램 작성
  • 데이터 흐름 다이어그램(DFD)으로 발전
  • 신뢰 도메인(Trust domains) 표시
  • 각 컴포넌트·링크·도메인별로 "어디서 나쁜 일이 생길 수 있는가?" 질문

1.5.2 공격 트리 (Attack Trees)

  • 루트 노드: 전체 공격 목표 (예: 집 진입)
  • 자식 노드: 목표를 달성하는 대안적 방법들 (예: 창문, 문, 터널)
  • 리프 노드: 더 이상 분해되지 않는 최하위 단계
  • 루트에서 리프까지의 경로 = 하나의 완전한 공격 벡터
비대칭성: 공격자는 하나의 방법만 찾으면 되지만, 방어자는 모든 가능한 공격을 막아야 한다.

1.5.3 STRIDE (위협 범주 체크리스트)

글자위협 유형설명
SSpoofing웹사이트·사용자 등을 사칭
TTampering코드·저장 데이터·전송 패킷의 무단 변조
RRepudiation과거 행위에 대한 책임 부인
IInformation disclosure데이터 무단 공개
DDenial of service자원 소모나 오류 유발로 서비스 가용성 훼손
EEscalation of privilege더 높은 접근 권한 획득

1.6 모델-현실 괴리 (Model-Reality Gaps)

위협 모델의 품질은 모델이 현실을 얼마나 정확하게 반영하는지에 달려 있다.

주요 모델링 오류 2가지

  1. 잘못된 가정 (Invalid assumptions) — 잘못 놓여진 신뢰 포함
  2. 잘못된 위협에 집중 — 더 중요한 위협을 간과
📌 예시: 온라인 주식 거래 사기
보안 엔지니어가 직접 자금 인출을 막았으나, 공격자는 계정을 탈취해 특정 주식 가격을 조작하여 간접적으로 이득 취득 → 위협 모델 실패

보안 분석의 핵심 질문 3가지

  1. 가치 있는 자산은 무엇인가?
  2. 어떤 잠재적 공격이 위험에 처하게 하는가?
  3. 잠재적으로 피해를 주는 행위를 어떻게 막거나 관리할 수 있는가?
⚠️ 보안은 관찰 불가능하다 (Security is Unobservable)
나쁜 결과가 관찰되지 않는다고 해서 보안이 확보된 것이 아니다.
보안은 시스템의 복잡한 요소들의 상호작용에서 창발적(Emergent)으로 나타나는 속성이다.

1.7 컴퓨터 보안 설계 원칙 (Design Principles)

#원칙핵심 내용
P1Simplicity-and-Necessity설계를 가능한 단순·소형으로 유지. 필수 컴포넌트만 사용. 미사용 기능 비활성화 → 공격 표면 최소화
P2Safe-Defaults안전한 기본 설정 사용. 접근 제어는 기본 거부(Deny-by-default). 실패 시 안전하게 종료(Fail-safe). Allowlist(허용 목록) 사용 권장
P3Open-Design비밀 설계나 공격자의 무지에 의존하지 말 것. 공개 검토·분석 권장. Kerckhoffs' 원칙: 시스템 보안은 설계 비밀에 의존해서는 안 된다
P4Complete-Mediation모든 객체에 대한 모든 접근마다 적절한 권한 검증. 인증 → 인가 → 요청 무결성 확인
P5Isolated-Compartments강한 격리 구조로 시스템 컴포넌트 구획화. 컴포넌트 간 통신 제한. 권한 상승(Escalation of privilege) 방어. 샌드박스·가상화·방화벽 등 활용
P6Least-Privilege작업에 필요한 최소 권한만, 필요한 기간 동안만 부여
P3는 P9(Kerckhoffs' 원칙)과 자주 함께 사용됨

lec-02.

강의 개요

항목내용
강의명Flaws, Faults, and Failures
핵심 주제보안 결함의 발생 원인, 분류, 실제 사례, 대응 전략
교재 연계Ch. 2 (van Oorschot)

1. Flaw / Fault / Failure 구분

보안을 분석할 때 "무엇이 잘못됐는가"를 세 가지 수준으로 구분한다.

용어정의관점
Flaw프로그램 내에 존재하는 문제. 보안 결함(Security flaw)은 CIA 중 하나 이상에 영향을 미친다.일반
Fault프로그래머의 실수로 코드 안에 잠재된 문제. 아직 드러나지 않은 상태이며 내부 관점에서 본 결함.개발자(내부)
Failure실제로 사용자가 경험하는 오류. Fault가 특정 조건을 만나 외부로 표출된 상태.사용자(외부)

세 개념의 관계는 다음과 같다: Fault(잠재된 결함)가 특정 조건에서 트리거되면 Failure(실제 오작동)가 발생하며, 이 Failure를 역추적하면 원인인 Fault를 찾을 수 있다.

Fault를 찾는 방법

역추적 (Work backwards): 이미 발생한 Failure로부터 원인을 거슬러 올라가 Fault를 특정한다. 디버깅의 일반적인 방법이다.

의도적 Failure 유발 (Think like an attacker): 프로그램에 비정상적인 입력이나 조건을 가해 의도적으로 Failure를 만들어낸다. 퍼징(Fuzzing)이 이 방식의 대표 기법이다. 공격자의 시각으로 프로그램을 탐색해야 숨겨진 Fault를 발견할 수 있다.

패치(Patch)와 그 한계

Fault를 발견한 뒤 수정하는 행위를 패치라 한다. 마이크로소프트는 "Patch Tuesday"(매달 둘째 주 화요일)에 정기 패치를 배포한다. 그러나 패치에는 구조적 한계가 있다.

  • 좁은 시야: 보안 사고 압박 속에서 패치하면 해당 취약점 하나에만 집중하게 되어 코드 전반의 다른 문제를 놓치기 쉽다.
  • 패치가 새 결함을 낳을 수 있음: 급하게 작성된 패치 자체가 새로운 Fault를 만들 수 있다.
  • "penetrate and patch" 전략의 한계: 사후 대응 방식은 근본적인 설계 문제를 해결하지 못한다.

2. 보안 결함의 분류

보안 결함(Security flaw)이 발생하는 원인을 기준으로 분류한다.

javascript
보안 결함
├── 의도적(Intentional)
│   ├── 악의적(Malicious): 공격 목적으로 삽입 — 백도어, 트로이목마 등
│   └── 비악의적(Nonmalicious): 정당한 기능이지만 보안상 악용 가능한 기능
└── 비의도적(Unintentional): 실수·누락·설계 오류 — 가장 흔하고 위험

명세(Specification)의 문제 — "해야 할 것" vs "하지 말아야 할 것"

소프트웨어 명세는 보통 프로그램이 "무엇을 해야 하는가"만 기술한다. 그러나 보안은 "무엇을 하지 말아야 하는가"까지 요구한다. 예를 들어 서버가 요청된 파일을 반환하는 것은 명세에 맞지만, 인증 없이 반환하는 것은 명세에 없어도 명백히 해서는 안 되는 동작이다. 이 간극이 비의도적 보안 결함의 주요 원인 중 하나다.


3. Heartbleed (CVE-2014-0160)

배경

2014년 OpenSSL 라이브러리에서 발견된 취약점으로, 전 세계 HTTPS 서버의 약 17%에 영향을 미쳤다. 유형은 비의도적 보안 결함이다.

TLS Heartbeat란?

TLS(Transport Layer Security)는 클라이언트와 서버 간 암호화 통신을 제공한다. Heartbeat는 TLS 확장 기능으로, 연결이 아직 살아있는지 확인하기 위해 클라이언트가 서버에 짧은 메시지를 보내고 그대로 되돌려 받는 "ping" 역할을 한다. 요청 형식은 [보낼 데이터] + [데이터 길이]다.

취약점 원리

서버는 클라이언트가 주장하는 "데이터 길이"를 실제 데이터의 길이와 대조하는 bounds check(경계 검사)를 수행하지 않았다. 공격자가 짧은 데이터(예: 1바이트)를 보내면서 길이는 64KB라고 선언하면, 서버는 그 1바이트뿐 아니라 메모리에서 연속된 64KB를 읽어 그대로 응답한다. 이 메모리 영역에는 개인키, 세션 키, 비밀번호, 쿠키 등 민감한 정보가 포함될 수 있다.

이름의 유래

마치 심장이 뛰듯(Heartbeat) 서버 메모리에서 정보가 피처럼 흘러나온다(Bleed)는 뜻에서 Heartbleed라 명명됐다.

교훈

단 한 줄의 bounds check 코드가 빠졌을 뿐이지만 전 세계 수백만 서버의 암호화 통신이 무력화됐다. 모든 외부 입력값은 신뢰하지 않고 반드시 검증해야 한다는 원칙(입력 검증, Input Validation)의 중요성을 보여주는 대표 사례다.


4. 버퍼 오버플로우 (Buffer Overflow)

가장 빈번하게 악용되는 보안 결함 유형이다.

발생 원인

C 언어의 gets(), strcpy() 등의 함수는 입력 데이터가 버퍼의 크기를 초과하더라도 이를 확인하지 않고 그냥 쓴다. C는 배열 경계를 자동으로 검사하지 않으며 예외(Exception)도 발생시키지 않는다. 따라서 버퍼를 넘어선 데이터가 인접한 메모리를 조용히 덮어쓴다.

프로세스 메모리 구조 (낮은 주소 → 높은 주소)

영역내용
Text프로그램 코드 (읽기 전용)
Data초기화된 전역/정적 변수
BSS초기화되지 않은 전역/정적 변수
Heap (↑)동적 할당 메모리 (malloc 등), 위 방향으로 증가
Stack (↓)함수 호출 정보, 지역 변수, 아래 방향으로 증가

오버플로우 공격의 대상은 Stack, Heap, BSS 모두 가능하다. 실제로는 Stack이 가장 고전적인 대상이다.

스택 스매싱 (Stack Smashing)

참고 논문: "Smashing the Stack for Fun and Profit" — Aleph One (Phrack, 1996)

함수가 호출될 때 스택에는 함수가 끝난 뒤 돌아갈 저장된 반환 주소(saved return address)가 기록된다. 버퍼 오버플로우로 이 반환 주소를 공격자가 원하는 주소로 덮어쓰면, 함수가 리턴할 때 프로그램은 공격자의 코드로 점프한다. 공격자는 보통 스택 위에 셸 코드(shellcode)를 올려두고 그 위치로 점프하도록 유도한다.

공격이 효과적인 대상 프로그램:

  • setuid 프로그램: 일반 사용자가 실행하더라도 root 권한으로 동작하므로, 공격에 성공하면 즉시 루트 셸을 얻는다.
  • 네트워크 데몬: 원격에서 입력을 받아 처리하므로 네트워크를 통한 원격 공격이 가능하다.

현대적 방어 기법

기법설명
Stack Canary반환 주소 앞에 특정 값을 두고, 리턴 전에 값이 바뀌었는지 확인
ASLR스택·힙·라이브러리의 주소를 실행마다 무작위화하여 공격자가 점프 주소를 예측하기 어렵게 함
DEP / NX스택·힙 영역을 실행 불가(Non-eXecutable)로 설정하여 셸 코드 실행을 차단

5. 쿠팡 사건 (2023)

항목내용
사건 유형개인정보 무단 접근 의혹
공격 방법브루트 포스(Brute force) — 자격증명 대입 공격
문제점접근 로그 불충분, 사건 세부 내용 은폐 시도
시사점내부자 위협과 접근 통제 실패, 투명성 부재

이 사건은 기술적 취약점뿐 아니라 조직의 보안 거버넌스 문제가 결합된 사례다. 로그 보존과 사고 투명성이 보안 관리의 중요한 요소임을 보여준다.


6. 악성코드(Malware) 유형

유형설명특징
바이러스(Virus)다른 파일에 자신의 코드를 삽입하여 퍼짐숙주 파일 필요
웜(Worm)네트워크를 통해 스스로 복제·전파숙주 파일 불필요, 빠른 확산
트로이목마(Trojan)정상 소프트웨어로 위장한 악성 코드사용자가 직접 실행
랜섬웨어(Ransomware)파일을 암호화한 뒤 복호화 대가로 금전 요구금전적 목적
스파이웨어(Spyware)사용자 활동을 몰래 수집은밀한 정보 수집
루트킷(Rootkit)OS 수준에서 자신을 숨기는 악성 코드탐지 회피, 지속적 접근 유지
백도어(Backdoor)인증 없이 접근 가능한 숨겨진 진입점원격 제어, 지속적 침투

7. 보안 결함 대응 전략

안전한 코딩 관행 (Secure Coding Practices)

경계를 검사하지 않는 함수(gets, strcpy)를 경계 검사를 수행하는 함수(fgets, strncpy)로 대체한다. 모든 외부 입력은 신뢰하지 않고 검증한다(입력 검증, Input Validation).

정적 분석 (Static Analysis)

코드를 실행하지 않고도 소스 코드를 분석하여 잠재적 Fault를 배포 전에 발견한다. 컴파일러 경고 수준을 높이는 것도 간단한 정적 분석의 일종이다.

퍼징 (Fuzzing)

비정상적이거나 예상치 못한 입력을 자동으로 생성하여 프로그램에 주입하고, 충돌(crash)이나 이상 동작이 발생하는 조건을 찾는다. 의도적으로 Failure를 유발하여 Fault를 탐지한다.

최소 권한 원칙 (Principle of Least Privilege)

프로그램이나 사용자에게 작업 수행에 필요한 최소한의 권한만 부여한다. 공격에 성공하더라도 피해 범위를 제한한다.

컴파일러 보호 기법

Stack Canary, ASLR, DEP/NX 등 컴파일러 및 OS 수준의 보호 기법을 적용한다.


핵심 정리

질문핵심 답
Fault와 Failure의 차이는?Fault는 코드 안의 잠재 결함, Failure는 그것이 실제로 드러난 오작동
버퍼 오버플로우가 위험한 이유는?C가 경계 검사를 하지 않아 인접 메모리(반환 주소 포함)를 덮어쓸 수 있기 때문
Heartbleed의 본질적 원인은?외부 입력(길이 값)에 대한 bounds check 누락 — 입력 검증 실패
패치만으로 충분한가?아니다. 사후 패치는 좁은 시야와 새 결함 유입 위험이 있으며, 설계 단계의 보안이 필요하다

lec-03.

lec-04.

Seoul, South Korea

jwsong5160@gmail.com

© 2026 Junwoo Song