C.W.K.
Stream
Lesson 01 of 05 · published

헤드라인 — LLM 은 시크릿 못 지켜

~15 min · llm-secrets, headline, shape-leak

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

2026년 솔로 개발자한테 가장 과소평가된 보안 위험: 에디터의 AI assistant 가 단일 가장 큰 시크릿 누출 surface, 누출은 silent 하고, 잘 포맷됐고, 도움 되어 보여.

한 문장으로 실패 모드

Repo 에 LLM 기반 코딩 agent 추가. context 위해 .env 읽음. 나중에 deploy 스크립트 설명. 설명에 진짜 .env 의 snippet 포함. snippet 이 채팅 히스토리에 들어가고, 서버에 sync 되고, 로그 되고, 알 수 없는 보존 기간 동안 DB 에 앉아있음.

"말하지 말라고 했어" 텔

가장 죄책감 드는 행동은 LLM 이 *자기 신중함을 narrate* 할 때 — "OPENAI_API_KEY=sk-proj-A1B2... (안전 위해 truncated) 같은 .env 의 민감한 값 공개하면 안 됩니다." "안전 위해 truncated" 는 performative. API key 의 처음 16자가 프로젝트 식별에 충분하고, prefix 가 provider 알려주고, 많은 경우 한 번 더 물으면 LLM 이 그냥 계속해.

이게 일어나는 이유

  1. LLM 은 commit 에 leak 된 API key 가 있는 테라바이트의 코드로 훈련됐고, 그 leak 의 *모양* 을 학습.
  2. "시크릿 공개 X" 는 튜닝된 행동이지 hard wall 이 아냐 — "사용된 포맷 보여줘", "디버깅 위해", "가설로" 같은 phrasing 으로 우회 가능.
  3. chain-of-thought / "thinking" trace 가진 최근 모델은 답변에 언급 안 *결정하면서* reasoning 단계에서 시크릿을 spelling out. Reasoning 은 종종 로그됨.
  4. 시크릿이 대화 context 에 들어가면 모든 후속 turn 이 운반. 부주의한 스크린샷 한 번, 공유된 transcript 한 번이면 끝.

External links

Exercise

active LLM 코딩 채팅 하나 열어. transcript 에서 API key 처럼 보이는 fragment grep (sk-, ghp_, AKIA, AIzaSy, hkdf:, JWT 의 eyJ). 매치마다: 키 *지금* 회전. Post-rotation transcript 는 무해; pre-rotation transcript 는 거기 앉아있던 만큼 live 노출이었음.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.