065. STRIDE 모델 (위협 식별 프레임워크)
⚠️ 이 문서는 소프트웨어 설계 단계에서 시스템을 공격할 수 있는 보안 위협(Threats)들을 브레인스토밍할 때, 막연하게 생각하지 않고 6가지의 명확한 카테고리로 체계적으로 분류하여 누락 없이 위험을 찾아내게 해주는 마이크로소프트의 STRIDE 모델을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: STRIDE는 컴퓨터 시스템을 공격하는 방법이 아무리 다양해도 결국 본질적으로 **신분 위장(S), 변조(T), 부인(R), 정보 유출(I), 서비스 거부(D), 권한 상승(E)**이라는 6가지 범주 안에 모두 들어간다는 철학을 바탕으로 만든 체크리스트다.
- 가치: 데이터 흐름도(DFD) 상의 각 화살표와 데이터베이스를 짚어가며 "여기서 S(위장) 공격이 가능할까? T(변조) 공격은?"이라고 체계적으로 질문을 던짐으로써, 아키텍트의 상상력 부족으로 인한 보안 구멍(Blind Spot)의 누락을 원천 방지한다.
- 융합: 발견된 6가지 위협은 보안의 핵심 3요소인 CIA(기밀성, 무결성, 가용성)와 인증(Authentication), 부인방지(Non-repudiation) 등 보안 원칙을 깨뜨리는 행위와 1:1로 완벽하게 맵핑되며, 이를 방어하기 위한 암호학적 아키텍처 수립의 직접적인 명분이 된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
보안 설계 회의(Threat Modeling)를 열고 개발자들에게 "우리 시스템이 어떻게 털릴지 상상해 보세요"라고 하면 막막해한다. "해커가 침투할 것 같아요", "DB가 털릴 것 같아요" 같은 모호한 대답만 겉돈다. 체계가 없으면 가장 치명적이지만 눈에 잘 안 띄는 위협을 빠뜨리고 넘어가게 된다.
STRIDE 모델은 1999년 마이크로소프트의 보안 전문가들(Koren Kohnfelder와 Praerit Garg)이 고안한 분류 체계다. "아무리 복잡한 최신 해킹 기술이라도, 그 목적을 까보면 결국 이 6개 박스 중 하나에 들어간다"는 대원칙을 제시하여, 누구나 6가지 돋보기 색깔의 안경을 바꿔 끼며 체계적으로 취약점을 스캔할 수 있게 만든 위협 식별(Threat Identification)의 바이블이다.
📢 섹션 요약 비유: 집에 도둑이 들 구멍을 찾을 때, 그냥 "어디 뚫릴까?" 고민하면 지붕이나 굴뚝을 빼먹기 십상입니다. 하지만 "1. 문을 부술까? 2. 유리창을 깰까? 3. 아빠로 분장할까?"라는 6가지 체크리스트(STRIDE)를 들고 돌아다니면 단 하나의 쥐구멍도 빼먹지 않고 다 찾아낼 수 있습니다.
Ⅱ. STRIDE의 6대 위협 카테고리와 방어 매핑 (Deep Dive)
아키텍트는 설계도의 콤포넌트를 가리키며 다음 6가지 이니셜 순서대로 위협을 점검한다. 각 위협은 우리가 수호해야 할 '보안 속성'을 정확히 정면으로 파괴하는 행위다.
| 머리글자 | 영문 / 한글 의미 | 위협의 구체적 설명 및 공격 예시 | 파괴하는 보안 속성 | 방어 대책 (Countermeasures) |
|---|---|---|---|---|
| S | Spoofing (신분 위장) | 다른 사람이나 다른 서버인 척 흉내 내는 것. (예: 피싱 사이트, IP 스푸핑, 세션 하이재킹으로 관리자 흉내) | 인증 (Authentication) | 강력한 다단계 인증(MFA), 디지털 서명, 상호 TLS(mTLS) 도입 |
| T | Tampering (데이터 변조) | 전송 중이거나 저장된 데이터를 해커가 몰래 수정/삭제하는 것. (예: 중간자 공격으로 송금 계좌번호를 내 통장으로 슬쩍 바꾸기) | 무결성 (Integrity) | HTTPS 암호화(TLS), 해시 함수(SHA-256), HMAC 데이터 서명 |
| R | Repudiation (부인/발뺌) | 자기가 공격해놓고 "내가 안 했는데요? 에러 난 건데요?"라며 오리발을 내미는 행위. 시스템 로그를 삭제하여 증거를 인멸함. | 부인 방지 (Non-repudiation) | 수정 불가능한 블록체인 로그, WORM 스토리지 로그 저장, 디지털 서명 |
| I | Information Disclosure (정보 유출) | 보아서는 안 될 데이터를 훔쳐보는 행위. (예: DB 덤프 탈취, 평문 네트워크 패킷 스니핑, 버러 오버플로우로 메모리 읽기) | 기밀성 (Confidentiality) | 데이터베이스 저장 시 AES-256 암호화, 접근 통제(RBAC) 강화 |
| D | Denial of Service (서비스 거부) | 시스템의 자원(CPU, 메모리, 대역폭)을 고갈시켜 뻗게 만듦. (예: DDoS 폭격, 무한 루프 에러 유발 봇넷) | 가용성 (Availability) | 로드 밸런서(L4/L7) 트래픽 분산, WAF Rate-Limiting(요청 횟수 제한) |
| E | Elevation of Privilege (권한 상승) | 일반 유저 권한으로 들어왔다가, 버그를 이용해 관리자(root/admin) 권한으로 계급을 수직 상승시키는 것. (가장 치명적) | 인가 (Authorization) | 최소 권한 원칙 설계, OS 커널 샌드박싱, 엄격한 서버 사이드 권한 체크 |
┌───────────────────────────────────────────────────────────────────────────────────┐
│ 데이터 흐름도(DFD) 상에서 STRIDE 렌즈를 통한 위협 도출 예시 │
├───────────────────────────────────────────────────────────────────────────────────┤
│ │
│ [사용자 스마트폰] ━━━━━━━ (인터넷 통신 구간) ━━━━━━━▶ [웹 서버] │
│ │ │ │ │
│ └─ (S) 폰 분실 시 남이 씀! │ │ │
│ │ │ │
│ (T) 중간 해커가 와이파이에서 금액 변조! │ │
│ (I) 중간 해커가 패킷 훔쳐보고 카드번호 복사!│ │
│ (D) 해커가 1초에 1만 번 접속 요청 쏴서 다운!│ │
│ │ │
│ (R) 해킹 로그를 다 지워버림! │
│ (E) 평직원 ID로 접속 후 관리자 기능 호출! │
└───────────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 하나의 시스템 아키텍처를 놓고 6가지(STRIDE) 돋보기를 번갈아 끼며 쳐다보는 과정이다. 인터넷 통신 구간 화살표를 쳐다볼 때는 T(변조)와 I(유출)의 위협이 가장 크다는 것을 깨닫게 되고, "이 구간은 무조건 TLS 1.3 파이프를 씌워서(방어책) 암호화 통신을 강제하자"는 아키텍처 설계의 명분이 자연스럽게 도출된다.
- 📢 섹션 요약 비유: 자동차를 설계할 때 "1. 열쇠를 훔쳐 탈까?(S) 2. 브레이크 선을 끊을까?(T) 3. 사고 내고 뺑소니 칠까?(R) 4. 차 안의 짐을 훔쳐볼까?(I) 5. 바퀴를 터뜨려 못 가게 할까?(D) 6. 조수석에 탔다가 몰래 운전대를 뺏을까?(E)" 라는 6가지 악당의 시나리오를 놓고 안전장치를 만드는 것과 완벽히 동일합니다.
Ⅲ. 실무 시나리오: 로그인 및 결제 시스템 설계
스타트업에서 새로운 "포인트 간편 결제 API"를 개발한다고 가정하자. 기획안이 나왔을 때 아키텍트가 STRIDE 모델을 돌려 보안을 뜯어고치는 과정이다.
- 기획 초안: 사용자가 폰에서 [송금하기]를 누르면
POST /transfer?amount=10000형태로 서버에 쏜다. - STRIDE 모델링 발동:
- (S) 위장: "사용자가 훔친 폰이면 어쩌지?" $\rightarrow$ [방어] 송금 시점에 지문(생체 인증) 한 번 더 요구하자.
- (T) 변조: "10000원 보냈는데, 프록시 툴로 가로채서 10원으로 변조하면?" $\rightarrow$ [방어] 금액 데이터에 HMAC 무결성 서명을 붙여서 서버가 검증하게 하자.
- (E) 권한 상승: "일반 회원이 관리자용 취소 API
/admin/refund에 직접 접속을 시도하면?" $\rightarrow$ [방어] 모든 API 앞단에 JWT 기반 역할(Role) 검증 인터셉터를 강제로 끼워 넣자.
- 결과: 이 짧은 회의(STRIDE) 덕분에, 코드 한 줄 짜기 전 설계 단계에서 가장 치명적인 해킹(돈 복사, 타인 계좌 출금)의 싹을 완전히 잘라내고 탄탄한 아키텍처를 확립하게 된다.
Ⅳ. 최신 위협 트렌드와의 관계 및 한계
- 강점: STRIDE는 20년이 넘은 고전 프레임워크지만, 클라우드, 블록체인, 자율주행 자동차 등 어떤 최신 기술 아키텍처에 갖다 대도 완벽하게 동작한다. 왜냐하면 인간(해커)의 '나쁜 의도' 자체는 시대를 불문하고 저 6가지 범주를 절대 벗어나지 못하기 때문이다.
- 한계: 너무 뼈대만 제공하기 때문에 "실제로 어떻게 코드를 뚫고 들어오는데?"라는 구체적인 전술(Tactics)은 알려주지 않는다. 따라서 오늘날에는 이 뼈대(STRIDE) 위에 최근 해커들이 유행처럼 쓰는 구체적인 해킹 기법(예: MITRE ATT&CK 기술 사전에 등록된 최신 랜섬웨어 수법)을 얹어서 구체화하는 방식으로 융합하여 사용한다.
Ⅴ. 결론
"보안의 실패는 상상력의 실패다." 해커는 상상도 못 한 방법으로 시스템을 부수고 들어오는데, 방어자는 뻔한 방화벽만 쌓고 안심한다. STRIDE 모델은 방어자에게 6가지 강력한 상상력의 무기를 쥐여주어, 해커가 생각할 수 있는 모든 공격의 교집합을 선제적으로 막아내는 무결점 아키텍처 설계의 나침반이다. 이를 위협의 심각도를 계산하는 채점표인 DREAD 모델과 결합하면, 완벽한 "내재적 보안(Security by Design)"의 쌍두마차가 완성된다.
📌 관련 개념 맵
- 영혼의 콤비 (짝꿍 모델): STRIDE (위협의 식별) + DREAD (위협의 점수/우선순위 산정)
- 보호하는 보안 6원칙: 인증(S 방어), 무결성(T 방어), 부인방지(R 방어), 기밀성(I 방어), 가용성(D 방어), 인가(E 방어)
- 사용 단계: 소프트웨어 생명주기(SDLC)의 '설계(Design)' 단계 $\rightarrow$ Threat Modeling
- 관련 도구: 마이크로소프트 Threat Modeling Tool
👶 어린이를 위한 3줄 비유 설명
- 새로 지은 마법의 성을 나쁜 괴물들이 어떻게 쳐들어올지 미리 상상해서 약점을 찾는 놀이예요.
- 그냥 막연히 상상하면 어려우니까, "1. 변장하기 2. 문서 조작하기 3. 시치미 떼기 4. 몰래 훔쳐보기 5. 깽판 쳐서 못 쓰게 하기 6. 대장 행세하기"라는 6가지 나쁜 짓 목록표를 만들었어요.
- 이 6가지(STRIDE) 표를 들고 성을 한 바퀴 돌며 "아, 여기선 변장하고 들어올 수 있겠네!" 하고 미리미리 마법의 자물쇠를 다 달아버리는 완벽한 방어 작전이랍니다!