본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 22. 22:31

한 번의 실행으로 AI 스택에 STRIDE-AI를 적용하는 방법

요약

STRIDE-GPT를 활용하여 AI 애플리케이션 스택에 대한 위협 모델링을 수행하는 방법을 설명합니다. LLM의 컨텍스트 윈도우 특성을 고려하여 시스템 프롬프트, RAG 문서, 에이전트 추론 체인 등을 핵심 자산으로 정의하고 보안 경계를 설정하는 가이드를 제공합니다.

핵심 포인트

  • LLM 컨텍스트 윈도우 내에서는 데이터와 지침의 경계가 모호함
  • 시스템 프롬프트, RAG 코퍼스, 임베딩 등을 일급 자산으로 취급해야 함
  • STRIDE-GPT 사용 시 상세한 아키텍처 설명이 필수적임
  • 신뢰할 수 없는 텍스트가 도달하는 모든 곳을 신뢰 경계로 간주해야 함

STRIDE-GPT는 아키텍처 설명을 입력받아 단 한 번에 전체 STRIDE 위협 모델 (threat model)을 생성합니다. 하지만 이 도구는 어떤 자산 (assets)을 대상으로 지정해야 하는지 알고 있을 때만 제대로 작동합니다. AI 애플리케이션은 기존의 위협 모델링 (threat modeling)이 다루지 않았던 자산들을 포함하고 있습니다: 시스템 프롬프트 (system prompts), RAG 문서, 도구 설명 (tool descriptions), 임베딩 저장소 (embedding stores), 에이전트 추론 체인 (agent reasoning chains). STRIDE-GPT를 잘못된 다이어그램에 지정하면, LLM이 단순히 덧붙여진 전통적인 앱 위협 모델을 얻게 될 뿐입니다. 올바르게 실행하는 방법을 소개합니다.

LLM을 추가할 때 무엇이 변하는가
전통적인 STRIDE는 결정론적 실행 (deterministic execution)을 가정합니다. 동일한 입력에는 동일한 출력이 나옵니다. 사용자, 앱, 데이터 저장소 사이에 명확한 신뢰 경계 (trust boundaries)가 존재합니다. 하지만 LLM의 컨텍스트 윈도우 (context window)는 이 모든 것을 동시에 무너뜨립니다. 개발자 지침 (instructions)과 공격자의 페이로드 (payloads)가 모두 동일한 어텐션 파이프라인 (attention pipeline)을 통해 토큰 (tokens)으로 전달됩니다. 모델이 실제로 강제하는 링 분리 (ring separation), 커널 모드 (kernel mode), 또는 권한 경계 (privilege boundary)는 존재하지 않습니다.

여러분의 위협 모델은 다음 항목들을 일급 자산 (first-class assets)으로 취급해야 합니다:

  • 시스템 프롬프트 (System prompt): (이미 유출되었다고 가정하고 설계하십시오)
  • RAG 검색 코퍼스 (retrieval corpus) 및 그 안의 모든 문서
  • 연결된 모든 MCP 서버의 도구 설명 (Tool descriptions)
  • 벡터 임베딩 (Vector embeddings): (평문 (plaintext)으로 취급하십시오, 역전 (inverted)될 수 있습니다)
  • 에이전트 추론 체인 (Agent reasoning chains) 및 전체 도구 호출 시퀀스 (tool call sequence)

신뢰할 수 없는 텍스트가 컨텍스트 윈도우에 도달할 수 있는 모든 곳이 신뢰 경계입니다. STRIDE를 실행하기 전에 이 모든 곳을 표시하십시오.

STRIDE-GPT 설정하기
STRIDE-GPT는 오픈 소스이며, 명시적인 OWASP LLM Top 10 지원과 함께 작성된 아키텍처 설명에 대한 STRIDE 패스 (pass)를 생성합니다.

pip install stride-gpt

도구를 열기 전에 아키텍처 설명을 작성하십시오. 다음 내용을 포함해야 합니다:

  • 모든 구성 요소: 사용자, API 게이트웨이 (API gateway), 오케스트레이터 (orchestrator), 모델 제공자 (model provider), 도구 세트, 데이터 저장소
  • 모든 데이터 흐름 (data flow): 사용자 입력이 어디로 들어오는지, 어떻게 모델에 도달하는지, 모델이 어디에 쓸 수 있는지
  • 모든 신뢰 경계: 신뢰할 수 있는 영역과 그렇지 않은 영역 사이에 선을 긋는 모든 곳
  • 에이전트가 호출할 수 있는 모든 도구 (MCP 서버 및 그 설명 포함)

"RAG를 사용하는 AI 챗봇"이라고만 적으면 일반적인 결과만 얻게 됩니다.

"Pinecone RAG 코퍼스를 가진 FastAPI 앱, 파일 쓰기 엔드포인트를 포함한 3개의 MCP 도구, 그리고 API 게이트웨이 뒤에 있는 GPT-4o 백엔드"라고 명시하면 실제로 실행 가능한 위협 모델 (Threat Model)을 얻을 수 있습니다.

부인 방지 (Repudiation) 대응: 전체 컨텍스트 로깅
대부분의 에이전트 프레임워크 (Agent Frameworks)는 최종 답변만을 로깅합니다. 이는 사후 사고 재구성 (Post-incident Reconstruction)을 수행하기에 충분하지 않습니다. 모든 에이전트의 결정에 대해 최소 5개의 필드를 포함하는 구조화된 트레이스 (Structured Trace)가 필요합니다:

span = tracer . start_span ( " agent_decision " )
span . set_attribute ( " system_prompt_hash " , hash ( system_prompt ))
span . set_attribute ( " retrieved_context_ids " , json . dumps ( chunk_ids ))
span . set_attribute ( " tool_calls " , json . dumps ( tool_calls ))
span . set_attribute ( " model_output " , response )
span . set_attribute ( " session_id " , session_id )
span . set_attribute ( " user_id " , user_id )

Langfuse와 Phoenix는 모두 LLM 네이티브 트레이싱 (LLM-native Tracing)을 위해 OpenTelemetry를 래핑 (Wrap)하여 사용합니다. 권한이 부여된 작업 (Privileged Operations)을 건드리는 항목은 서명하거나 해시 (Hash) 처리하십시오. 전체 컨텍스트 윈도우 (Context Window)가 로깅되지 않으면, 에이전트의 메모리를 오염 (Poisoning)시킨 공격자가 상태가 언제 변경되었는지에 대한 흔적을 남기지 않게 됩니다. 조작된 상태는 세션 전반에 걸쳐 정상적인 것처럼 그대로 남아 있게 됩니다.

지갑 거부 (Denial of Wallet) 대응: 3단계 계층
요청 기반의 속도 제한 (Rate Limits)은 토큰 고갈 공격 (Token Drain Attacks)을 방어하지 못합니다. 다단계 에이전트 쿼리 (Multi-step Agentic Query) 하나는 캐시된 응답보다 500배 더 많은 비용이 들 수 있지만, 속도 제한기 (Rate Limiter) 입장에서는 여전히 단 하나의 요청으로 기록됩니다. 제한기는 절대 작동하지 않습니다.

계층 1: BudgetActions를 사용하는 AWS Budgets. 일일 한도에 도달하면 API가 자동으로 Bedrock 호출 권한을 취소합니다. 알림이 아닌 즉각적인 차단 (Hard Kill)입니다.

{ "BudgetName" : "bedrock-daily-cap" , "BudgetLimit" : { "Amount" : "50" , "Unit" : "USD" }, "BudgetType" : "COST" , "BudgetActions" : [{ "ActionType" : "APPLY_IAM_POLICY" , "ActionThreshold" : { "ActionThresholdValue" : 100 , "ActionThresholdType" : "PERCENTAGE" } }] }

계층 2: 모델 제공자(Model Provider) 앞단에서 키별 토큰 기반 속도 제한을 강제하는 AI 게이트웨이 (AI Gateway).

Cloudflare AI Gateway, Portkey, 그리고 Helicone은 모두 토큰 카운팅 (Token Counting)을 지원합니다. 요청 (Request) 수가 아닌 토큰을 기준으로 계산하십시오. 계층 3: 모델 제공자 (Model Provider) 측의 제한. OpenAI 사용 티어 (Usage Tiers), Anthropic 지출 한도 (Spend Limits), Google Cloud 할당량 (Quotas) 등이 이에 해당합니다. 이 세 계층은 모두 독립적으로 작동합니다. 단일 계층만으로는 단일 장애점 (Single Point of Failure)이 될 수 있습니다.

권한 상승 (Elevation of Privilege) 대응: OPA를 통한 범위 제한 (Scope)
모델은 귀하의 도구 (Tools)에 대한 권한을 보유합니다. 프롬프트 인젝션 (Prompt Injection)은 이 모든 권한을 상속받습니다. 유일한 실질적인 해결책은 모델 외부에서 완전히 범위를 강제하는 것입니다. 도구 디스패치 (Tool Dispatch) 단계에서 Open Policy Agent (OPA)를 사용하여, 현재 세션의 사용자 신원과 연결된 허용 목록 (Allowlist)을 기준으로 모든 호출을 검사합니다:

package tool_dispatch
default allow = false
allow {
input.tool_name == permitted_tools[_]
input.session.user_role == "standard"
}
permitted_tools := ["search", "read_file", "summarize"]

파괴적인 작업, 삭제, 쓰기, 결제, 외부 전송 등은 호출이 실행되기 전 디스패치 계층에서 requires_human_approval 플래그를 강제해야 합니다. 모델은 승인 토큰을 절대 볼 수 없으므로, 프롬프트 인젝션이 모델에게 스스로 승인하라고 명령하여 게이트를 우회할 수 없습니다.

사람들을 괴롭히는 세 가지 함정 (Gotchas)

  1. 시스템 프롬프트 노출 (System Prompt Exposure). Pastebin에 올라갔을 때 패닉에 빠질 만한 정보라면 프롬프트 템플릿에 포함되어서는 안 됩니다. 자격 증명 (Credentials), 내부 URL, 비즈니스 로직은 런타임 (Runtime) 시 실제 권한 부여 계층 (Authorization Layer)에서 가져오십시오. 프롬프트는 결국 추출될 것입니다.
  2. 임베딩 역전 (Embedding Inversion). 벡터 데이터베이스 (Vector Databases)는 문서를 수치형 임베딩 (Embeddings)으로 저장합니다. 연구에 따르면 임베딩은 원래의 텍스트로 역전될 수 있습니다. 만약 API 키를 보유한 어떤 프로세스에서든 벡터 저장소에 접근할 수 있다면, 문서가 어떻게 저장되어 있든 상관없이 정보 유출 (Information Disclosure) 문제가 발생합니다.
  3. 위협 모델 드리프트 (Threat Model Drift). 추가하는 모든 MCP 서버는 원래 모델이 다루지 않았던 기능들을 부여합니다. 새로운 도구, RAG 코퍼스 (Corpus), 또는 데이터 소스가 연결될 때마다 STRIDE를 다시 실행하십시오. 20분간의 검토가 사후 분석 (Postmortem)보다 훨씬 낫습니다.

오늘 바로 적용할 수 있는 사항

5가지 AI 특화 자산(AI-specific assets)이 명시적으로 명시된 작성된 아키텍처 설명(architecture description)을 대상으로 STRIDE-GPT를 실행하십시오. 키(key)를 무효화하는 하나의 엄격한 지출 한도(spending cap)를 설정하십시오. 에이전트의 의사 결정 루프(decision loop)에 6개 필드로 구성된 구조화된 추적(structured trace)을 추가하십시오. 이 세 가지 변경 사항은 다른 어떤 것이 배포되기 전에 부인 (Repudiation), 서비스 거부 (Denial of Service), 권한 상승 (Elevation of Privilege)에 걸쳐 가장 노출 위험이 높은 격차를 메워줍니다.

저는 7가지 프로덕션 레드 플래그 (production red flags), 복사해서 붙여넣을 수 있는 위협 모델 프롬프트 (threat model prompt), 그리고 완전한 3계층 지갑 거부 회로 차단기 (three-layer denial-of-wallet circuit breaker)를 포함한 전체 STRIDE-AI 분석 내용을 ToxSec Substack에 작성했습니다. ToxSec은 AI 보안 취약점, 공격 체인 (attack chains), 그리고 방어자가 실제로 이해해야 하는 공격 도구 (offensive tools)를 다룹니다. NSA, Amazon, 그리고 방위 산업 분야에서 실무 경험을 쌓은 AI 보안 엔지니어가 운영합니다. CISSP 인증 보유, 사이버 보안 공학 석사 (M.S. in Cybersecurity Engineering) 학위 소지자입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0