위협 모델링(Threat Modeling)은 가치 있는 무언가를 보호하기 위해 잠재적인 위협과 그에 대한 완화 방안을 체계적으로 식별하고, 이를 쉽게 이해할 수 있도록 표현하는 활동입니다. 애플리케이션, 시스템, 서비스 등 보안에 영향을 끼칠 수 있는 모든 정보를 구조화하여 표현하고, 이를 기반으로 보안 문제를 찾아내는 방법론이죠. 저는 이 과정을 크게 아래와 같은 흐름으로 정리하고자 합니다.
- Decompose the Application: 자산 식별 및 DFD, PFD 등 다양한 다이어그램 작성
- Identify Threats (Modeling): 위협 식별 및 분석
- Mitigate: 완화 방법 도출 및 적용
- Validate: 조치 확인 및 검증
Decompose the Application
이 단계는 우리가 보호해야 할 대상이 무엇인지 명확히 이해하는 과정입니다. OWASP 문서에서는 아래와 같은 항목들을 정의하도록 권장합니다.
Attribute | Description |
---|---|
Threat Model Information | 사용할 위협 모델링 프레임워크(예: STRIDE)를 정의합니다. |
External Dependencies | 우리가 직접 제어할 수 없는 외부 의존성(예: 외부 API, 라이브러리)을 정의합니다. |
Entry Points | 사용자와 시스템이 상호작용하는 모든 시작 지점(예: 웹 페이지, API 엔드포인트)을 정의합니다. (+Trust Levels) |
Exit Points | 시스템 외부로 데이터가 나가는 지점(예: 응답 데이터, 로그 전송)을 정의합니다. |
Assets | 보호해야 할 가치 있는 자산(예: 개인정보, 관리자 세션, 설정 파일)을 정의합니다. (+Trust Levels) |
Trust Levels | 각 컴포넌트나 데이터가 지니는 신뢰 수준 또는 신뢰 경계(Trust Boundary)를 정의합니다. |
Data Flow Diagrams | 데이터의 흐름을 시각화한 DFD를 작성합니다. |
DFD (Data Flow Diagrams)
DFD는 이름 그대로 데이터의 흐름을 그리는 다이어그램입니다. 모델링 방법에 따라 약간씩의 차이는 있지만, 보통 애플리케이션, 시스템, 서비스에서의 전체적인 데이터 흐름을 표현하는 데 중점을 둡니다.
PFD (Process Flow Diagrams)
PFD는 애플리케이션의 동작 프로세스를 표현하는 다이어그램입니다. DFD와는 다르게 서비스의 동작 흐름에 초점을 맞추기 때문에, 비즈니스 로직을 악용하는 시나리오를 찾아내는 데 특히 유용합니다.
Other Diagrams
DFD, PFD 외에도 시스템의 전체적인 아키텍처, 신뢰 경계(Trust Boundary), 네트워크 존 등을 포괄적으로 보여주는 다양한 다이어그램을 활용할 수 있습니다. 이는 시스템의 복잡한 상호작용과 보안 컨텍스트를 이해하는 데 큰 도움이 됩니다.
Identify Threats
시스템을 분석하고 이해했다면, 이제 잠재적인 위협을 식별할 차례입니다. 위협을 체계적으로 식별하고 분류하기 위해 다양한 모델링 프레임워크가 사용됩니다. 각 모델은 고유한 관점을 제공하므로, 분석 대상의 특성에 맞는 모델을 선택하거나 여러 모델을 조합하여 사용하는 것이 효과적입니다.
STRIDE Model
STRIDE는 Microsoft에서 개발한 위협 모델링 프레임워크로, 6가지 위협 유형의 앞글자를 따서 만들어졌습니다. DFD나 PFD 같은 다이어그램의 각 요소(프로세스, 데이터 흐름 등)에 STRIDE 카테고리를 대입하여 위협과 대응 방안을 식별합니다.
Threat | Description | Desired Property (보안 속성) | |
---|---|---|---|
S | Spoofing | 공격자가 다른 사용자나 컴포넌트로 위장합니다. | Authenticity (인증) |
T | Tampering | 공격자가 시스템과 사용자 간에 교환되는 데이터를 무단으로 수정합니다. | Integrity (무결성) |
R | Repudiation | 공격자가 자신이 수행한 악의적인 행위를 부인합니다. | Non-repudiation (부인 방지) |
I | Information Disclosure | 공격자가 시스템이 전송하거나 저장하는 중요 데이터에 무단으로 접근합니다. | Confidentiality (기밀성) |
D | Denial of Service | 공격자가 시스템의 가용성을 저하하거나 마비시킵니다. | Availability (가용성) |
E | Elevation of Privilege | 공격자가 낮은 권한에서 더 높은 권한을 획득하여 인가되지 않은 정보에 접근합니다. | Authorization (인가) |
STRIDE-per-interaction
상호작용(Interaction)을 기반으로 위협을 분석하는 방식입니다. 각 요소(Element)를 모두 분석하는 것보다 시간과 리소스 측면에서 효율적이어서 이 방식이 더 선호됩니다.
STRIDE-per-element
각 요소(프로세스, 데이터 저장소 등)를 기반으로 위협을 분석합니다. 더 상세한 분석이 가능하지만 그만큼 많은 노력이 필요합니다.
DREAD Model
DREAD 모델은 각 위협의 위험도를 정량적으로 평가하기 위한 모델입니다. 현재는 STRIDE에 통합되거나 다른 위험 평가 모델로 대체되는 추세이지만, 위험의 우선순위를 정하는 데 여전히 유용한 관점을 제공합니다.
Risk Category | Description | |
---|---|---|
D | Damage | 공격 성공 시 어느 정도의 피해가 발생하는가? |
R | Reproducibility | 공격을 얼마나 쉽게 재현할 수 있는가? |
E | Exploitability | 공격에 얼마나 많은 노력이 필요한가? |
A | Affected users | 얼마나 많은 사용자가 영향을 받는가? |
D | Discoverability | 취약점을 얼마나 쉽게 발견할 수 있는가? |
P.A.S.T.A. (Process for Attack Simulation and Threat Analysis)
PASTA는 비즈니스 목표와 연계하여 공격자 중심의 관점에서 위협을 분석하는 7단계의 리스크 중심 방법론입니다.
Step | Description | |
---|---|---|
1 | Define the Objectives | 비즈니스 및 보안 목표를 정의합니다. |
2 | Define the Technical Scope | 기술적 분석 범위를 정의합니다. |
3 | Decompose the Application | 서비스를 분석하고 분해합니다. |
4 | Analyze the Threats | 위협 정보를 분석합니다. |
5 | Vulnerability Analysis | 존재하는 취약점을 분석합니다. |
6 | Attack Analysis | 식별된 위협과 취약점을 이용한 공격 시나리오를 모델링합니다. |
7 | Risk and Impact Analysis | 리스크와 비즈니스 영향도를 분석하고 완화 전략을 수립합니다. |
VAST (Visual, Agile, and Simple Threat)
VAST는 Agile 및 DevOps 프로세스와의 통합에 중점을 둔 방법론입니다. 애플리케이션의 동작 흐름(PFD)과 인프라 구성(DFD)을 기반으로, 개발 수명주기 초기에 위협을 식별하고 대응하는 것을 목표로 합니다.
Mitigate
위협 모델링으로 발견된 위협 및 보안 취약점은 당연히 완화하거나 조치해야 합니다. 발견된 위협은 다음과 같은 전략에 따라 관리할 수 있습니다.
- 수정 (Fix / Remediate): 코드를 수정하거나, 보안 설정을 강화하거나, 새로운 보안 기술을 도입하여 위협을 직접적으로 해결합니다.
- 제거 (Remove): 위협의 원인이 되는 기능이나 컴포넌트가 불필요하다면 제거하여 위협을 원천적으로 없앱니다.
- 전달 (Transfer): 보험이나 제3자 서비스(예: WAF, CDN)를 통해 위협으로 인한 리스크를 다른 주체에게 전달합니다.
- 수용 (Accept): 위협으로 인한 비즈니스 영향도가 낮고, 조치에 드는 비용이 더 크다고 판단될 경우, 해당 리스크를 감수하기로 결정합니다. 이 경우 결정 사항을 반드시 문서화해야 합니다.
시스템 구성과 비즈니스 요구사항에 따라 가장 적절한 조치 또는 완화 방안을 찾아 위협 수준을 관리 가능한 범위로 낮추는 것이 중요합니다.
Validate
조치가 올바르게 적용되었고, 기존 위협이 실제로 완화되었는지 확인하는 마지막 단계입니다. 다음과 같은 방법을 활용할 수 있습니다.
- 보안 테스트: 모의 해킹(Penetration Testing), 퍼징(Fuzzing) 등을 통해 조치가 효과적인지 공격자 관점에서 검증합니다.
- 보안 코드 리뷰: 수정된 코드에 또 다른 취약점이 없는지, 보안 표준에 맞게 작성되었는지 검토합니다.
- 설정 검토: 변경된 인프라나 애플리케이션의 설정이 안전하게 구성되었는지 확인합니다.
- 회귀 테스트: 보안 조치로 인해 기존 기능에 문제가 발생하지 않았는지 확인합니다.
Tools
- CAPEC - Common Attack Pattern Enumeration and Classification
- diagrams.net (draw.io)
- PlantUML
- OWASP Threat Dragon
- stride-gpt
Draw.io
다이어그램을 그리는 목적이라면 draw.io는 정말 좋은 선택입니다. 위협 모델링이 아니더라도 순서도(flow chart)를 그릴 때 유용하므로 익숙해지면 여러모로 쓸모가 많은 도구입니다.
OWASP Threat Dragon
OWASP에서 개발한 오픈소스 위협 모델링 도구입니다. DFD와 같은 다이어그램을 그리고, STRIDE 기반으로 위협을 식별하고 관리하는 기능을 제공하여 위협 모델링 프로세스 전체를 지원합니다.
Resources
- SANS Institute
- NIST SP 800-154, NIST SP 800-53
- OWASP Threat Dragon Project
- CISA Cyber Security Evaluation Tool (CSET)
- Guide to Cyber Threat Modelling (CSA Singapore)
- ThreatHunter-Playbook
- awesome-threat-modelling