안녕하세요! 👋 오늘날 복잡한 소프트웨어 시스템을 개발할 때, 보안은 선택이 아닌 필수가 되었습니다. 하지만 단순히 '버그 없는 코드'를 작성하는 것만으로는 충분하지 않죠. 진짜 중요한 것은 "공격자가 우리 서비스를 어떻게 무너뜨릴 수 있을까?"를 미리 고민하는 것입니다.
바로 이 질문에 대한 답을 찾는 체계적인 방법론이 '위협 모델링(Threat Modeling)'입니다. 오늘은 OWASP 커뮤니티 페이지에서 제시하는 위협 모델링 프로세스를 바탕으로, 여러분의 서비스를 더욱 안전하게 만들 수 있는 4단계 가이드를 자세히 알아보겠습니다! 🚀

🤔 위협 모델링, 왜 필요한가요?
위협 모델링은 방어자의 관점이 아닌, 잠재적인 공격자의 시각에서 시스템을 분석하여 보안 위험을 식별하고, 정량화하며, 해결책을 찾는 구조화된 접근 방식입니다.
"집을 짓기 전에 도둑이 어디로 침입할지, 불이 나면 어디로 대피할지 미리 설계도에 반영하는 것"과 같다고 할 수 있죠. 🏘️ 불필요한 비용과 시간을 낭비하는 것을 막고, 개발 초기 단계부터 보안을 고려하는 'Shift-Left' 개념의 핵심입니다.
🗺️ 위협 모델링 4단계 프로세스
OWASP는 위협 모델링 프로세스를 다음과 같은 4가지 핵심 단계로 제시합니다.
1단계: 작업 범위 설정 (Scope your work) 🔍
가장 먼저, "무엇을 보호할 것인가?"를 명확히 이해하고 분석 대상을 정의하는 단계입니다. 이 단계에서는 다음과 같은 질문에 답을 찾습니다.
- 다이어그램 그리기: 시스템이 어떻게 작동하고 데이터가 어떻게 흐르는지 시각적으로 표현합니다. 데이터 흐름도(DFD)가 주로 사용되며, 시스템의 구성 요소, 데이터 저장소, 프로세스, 데이터 흐름, 그리고 신뢰 경계(Trust Boundary)를 명확히 보여줍니다.
- DFD의 주요 요소:
- 외부 개체: 시스템 외부에서 상호작용하는 사용자나 다른 시스템.
- 프로세스: 데이터 처리 또는 작업을 수행하는 시스템의 기능.
- 데이터 저장소: 데이터가 저장되는 곳 (예: 데이터베이스).
- 데이터 흐름: 데이터가 시스템 내에서 이동하는 경로.
- 권한 경계: 데이터가 흐르면서 신뢰 수준이 변화하는 지점 (중요!).
- DFD의 주요 요소:
- 진입점(Entry Points) 식별: 공격자가 애플리케이션과 상호작용하거나 데이터를 입력할 수 있는 모든 지점(예: 웹 페이지, API 엔드포인트, 입력 필드)을 파악합니다.
- 자산(Assets) 식별: 보호해야 할 가치 있는 모든 것(예: 사용자 개인 정보, 금융 데이터, 서비스 가용성, 회사의 평판)을 정의합니다.
- 신뢰 수준(Trust Levels) 식별: 시스템이 외부 개체(익명 사용자, 인증된 사용자, 관리자 등)에 부여하는 접근 권한의 수준을 정의하고 문서화합니다.
|💡 핵심: 시스템의 전체 그림을 그리고, 공격자가 어디서 들어와 무엇을 노릴 수 있는지 파악하는 지도 그리기 작업입니다.
2단계: 위협 식별 (Determine Threats) 🕵️♂️
시스템의 작동 방식을 이해했다면, 이제 어떤 종류의 위협이 시스템을 손상시킬 수 있는지 체계적으로 찾아내는 단계입니다. 이때 STRIDE와 같은 위협 분류 프레임워크가 매우 유용합니다.
STRIDE 모델 (마이크로소프트의 강력한 위협 분류 프레임워크)
STRIDE는 공격자의 목표를 6가지 유형으로 나누어 위협을 식별하도록 돕습니다.
- Spoofing (스푸핑) 🧑🤝🧑: 다른 사람인 척 위장하는 공격. (예: 사용자 계정 도용)
- 방어: 인증(Authentication)
- Tampering (템퍼링) 😈: 데이터나 시스템을 조작하는 공격. (예: 데이터베이스 변조)
- 방어: 무결성(Integrity)
- Repudiation (부인) 🙅♀️: 자신이 한 행동을 부인하는 공격. (예: 거래 내역 조작 후 부인)
- 방어: 부인 방지(Non-Repudiation)
- Information Disclosure (정보 노출) 🤫: 민감한 정보가 노출되는 공격. (예: 개인 정보 유출)
- 방어: 기밀성(Confidentiality)
- Denial of Service (서비스 거부) 🚫: 시스템 사용을 방해하는 공격. (예: 서버 다운)
- 방어: 가용성(Availability)
- Elevation of Privilege (권한 상승) 👑: 낮은 권한으로 더 높은 권한을 얻는 공격. (예: 일반 사용자가 관리자 권한 획득)
- 방어: 인가(Authorization)
이 단계에서는 DFD에서 식별된 각 요소(데이터 저장소, 프로세스 등)에 대해 STRIDE 위협 유형을 적용하여 "이 부분이 스푸핑에 취약할까?", "이 데이터는 템퍼링될 수 있을까?" 와 같은 질문을 던지며 위협 목록을 작성합니다.
위협 분석 및 순위 지정: 식별된 위협은 위협 트리(Threat Tree)를 통해 어떻게 공격이 발생할 수 있는지 심층적으로 분석하고, 위험 요인(Risk Factors)(예: 공격의 용이성, 영향 범위, 피해 잠재력)을 고려하여 '높음', '중간', '낮음' 등으로 순위를 매깁니다. 이를 통해 어떤 위협을 먼저 처리할지 우선순위를 정할 수 있습니다.
|💡 핵심: 우리 시스템을 공격할 수 있는 모든 시나리오와 유형을 공격자의 입장에서 상상하고 기록합니다.
3단계: 대응책 및 완화 방안 결정 (Determine Countermeasures and Mitigation) 🛡️
이제 식별되고 우선순위가 정해진 위협에 대해 어떻게 방어할지 결정하는 단계입니다. 대응책(Countermeasure)은 위협이 현실화되는 것을 방지하거나 그 영향을 줄이는 보호 조치입니다.
위험 완화 전략:
- 수용 (Accept): 위험을 감수하기로 결정하고, 그 결정을 문서화합니다. (매우 드물고 신중해야 함)
- 제거 (Eliminate): 위험을 유발하는 시스템 구성 요소를 완전히 제거합니다.
- 완화 (Mitigate): 위험의 발생 가능성이나 영향을 줄이는 보안 통제(Security Control)를 추가합니다. (가장 흔한 전략)
- 전가 (Transfer): 위험을 보험 등으로 제3자에게 이전합니다.
각 STRIDE 위협 유형에 맞는 다양한 완화 기술(예: 암호화, 인증, 인가, 필터링, 스로틀링)을 고려하여 적용 계획을 수립합니다.
위협 프로필 생성: 이 단계를 통해 각 위협이 '완전히 완화되었는지', '부분적으로 완화되었는지', 아니면 '아직 완화되지 않은 취약점(Non-mitigated threats)인지'를 명확히 구분하는 위협 프로필을 만들 수 있습니다.
|💡 핵심: 발견된 위협에 대해 어떤 방어책을 적용할지 결정하고, 가장 효과적인 해결책을 찾아 적용 계획을 세웁니다.
4단계: 작업 평가 (Assess your work) ✅
마지막으로, 수행된 위협 모델링 작업이 완전하고 정확한지 확인하는 단계입니다. 이 단계는 주로 다음과 같은 질문으로 이루어집니다.
- 시스템의 구조와 데이터 흐름을 시각적으로 보여주는 다이어그램이 있는가?
- 식별된 모든 위협을 포함하는 위협 목록이 명확하게 작성되었는가?
- 각 위협에 대한 적절한 보안 통제(대응책) 목록이 정의되었는가?
- 문서화가 충실히 이루어졌는가?
이러한 요소들이 모두 충족되었다면, 위협 모델링 프로세스가 성공적으로 완료된 것으로 간주할 수 있습니다.
위협 모델링과 코드 리뷰의 시너지: 위협 모델링은 코드 리뷰를 대체하는 것이 아니라 보완합니다. 개발 초기에 위협 모델링을 통해 시스템의 취약점을 미리 파악하고 문서화하면, 코드 리뷰어가 어디에 집중해야 할지 명확한 가이드를 얻을 수 있습니다. 이는 효율적이고 심층적인 보안 코드 리뷰를 가능하게 합니다. 🤝
✨ 마치며
위협 모델링은 한 번 하고 끝내는 작업이 아닙니다. 시스템이 발전하고 새로운 기능이 추가될 때마다 반복적으로 수행되어야 하는 지속적인 과정입니다. 개발 초기부터 공격자의 관점에서 시스템을 바라보는 습관을 들이고, 위협 모델링을 생활화한다면 더욱 강력하고 안전한 소프트웨어를 만들 수 있을 것입니다.
우리 모두의 서비스가 견고한 성처럼 튼튼해지기를 바라며, 오늘 포스팅이 많은 도움이 되었기를 바랍니다! 🏰✨
태그: OWASP, 위협 모델링, Threat Modeling, SDLC, STRIDE, 보안 설계, 시큐어코딩, ShiftLeft, DFD, 보안 프로세스
'일반IT > IT보안' 카테고리의 다른 글
| OWASP Top 10: A04:2021 안전하지 않은 설계(Insecure Design)와 DREAD 위협 평가 📊 심층 분석! (0) | 2025.09.29 |
|---|---|
| OWASP Top 10: A04:2021 안전하지 않은 설계(Insecure Design)와 STRIDE 위협 모델링 샅샅이 파헤치기 🧐 (0) | 2025.09.29 |
| 🏗️ 잘못된 첫 단추, 모든 것을 무너뜨린다! OWASP 4위, 안전하지 않은 설계 (0) | 2025.09.29 |
| 💉 당신의 애플리케이션을 감염시키는 치명적인 공격, 인젝션(Injection) 파헤치기 (0) | 2025.09.29 |
| 🔐 내 비밀번호는 안전할까? OWASP 2위, 암호화 실패 파헤치기 (0) | 2025.09.29 |