위협 모델링

Threat modeling

데이터 흐름과 신뢰 경계를 그려 위협과 대응책을 미리 찾습니다.

···
html
<div class="sd"><div class="sd-head"><strong>THREAT MODEL</strong><span id="state">live check</span></div><div class="sd-stage"><div class="flow"><div class="tile" id="user">user input</div><div class="edge" id="edge1"></div><div class="tile" id="api">API</div><div class="edge" id="edge2"></div><div class="tile" id="db">data store</div></div><div class="risk" id="risk">boundary 1</div></div><div class="sd-foot"><span id="caption">checking boundary</span><span>tap to step</span></div></div>
css
.sd{box-sizing:border-box;width:min(94vw,700px);height:min(86vh,318px);padding:clamp(9px,2.3vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(6px,1.8vmin,12px);font:600 clamp(12px,2.6vmin,16px)/1.25 var(--font-sans, sans-serif)}.sd *{box-sizing:border-box}.sd-head,.sd-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:1.25em}.sd-head strong{color:var(--accent);letter-spacing:.06em}.sd-head span,.sd-foot{color:var(--muted)}.sd-foot{font-size:clamp(12px,2.4vmin,14px)}.sd-stage{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:clamp(6px,2vmin,18px);overflow:hidden}.sd .mono{font-family:ui-monospace,monospace}.sd .tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.5vmin,10px);text-align:center}.sd .good{color:var(--accent);border-color:var(--accent)}.sd .bad{color:var(--accent-3);border-color:var(--accent-3)}.sd .arrow{color:var(--muted);font-size:clamp(15px,4vmin,28px)}.sd .active{background:color-mix(in srgb,var(--accent) 16%,var(--surface));border-color:var(--accent)}.sd .blocked{background:color-mix(in srgb,var(--accent-3) 13%,var(--surface));border-color:var(--accent-3)}.sd-stage{flex-direction:column}.flow{display:flex;align-items:center;width:95%;gap:5px}.flow .tile{flex:1;min-width:0}.edge{height:2px;flex:.35;background:var(--line);position:relative}.edge.hot{height:5px;background:var(--accent-3)}.risk{border:1px solid var(--accent-3);border-radius:6px;color:var(--accent-3);padding:4px 9px}
js
let n=0;function advance(){n=1-n;document.getElementById('edge1').classList.toggle('hot',!n);document.getElementById('edge2').classList.toggle('hot',!!n);document.getElementById('risk').textContent=n?'storage permission':'untrusted input';document.getElementById('state').textContent=n?'boundary 2':'boundary 1';document.getElementById('caption').textContent=n?'check access to stored data':'validate input at entry'}advance();setInterval(advance,950);
document.querySelector('.sd').addEventListener('pointerdown',advance);

위협 모델링은 시스템 구성요소와 데이터 흐름을 그린 뒤 각 경계에서 무엇이 잘못될 수 있는지 묻는 작업입니다. 공격자가 통제할 수 있는 입력과 가치 있는 자산을 먼저 찾습니다.

데모는 사용자 입력에서 API와 저장소까지 흐름을 따라 위험 지점을 표시합니다. 도식만 만들고 끝내지 말고 대응책과 검증 방법을 작업 항목으로 연결해야 합니다.

언제 쓰나

새 기능 설계, 외부 연동, 권한 구조 변경 전 위험을 검토할 때 사용합니다.

페이지로 열기 ↗