본문 바로가기
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 가 시크릿이 새는 가장 큰 통로인데, 새는 게 조용하고, 포맷도 예쁘고, 도움이 되는 것처럼 보인다는 것.

한 문장으로 실패 모드

repo 에 LLM 기반 코딩 agent 를 붙여. agent 가 맥락을 잡으려고 .env 를 읽어. 나중에 deploy 스크립트를 설명하면서 진짜 .env 의 일부를 그대로 인용해. 그 조각이 채팅 히스토리에 들어가고, 서버로 sync 되고, 로그에 찍히고, 얼마나 보관되는지도 모르는 DB 에 그대로 앉아 있게 돼.

"말하지 말라고 했어" 텔

제일 뼈아픈 건 LLM 이 *자기가 조심하고 있다고 설명할* 때야. "OPENAI_API_KEY=sk-proj-A1B2... (안전을 위해 일부만 표시) 같은 .env 의 민감한 값은 공개하면 안 됩니다." 여기서 "안전을 위해 일부만" 은 시늉일 뿐이야. API key 는 앞 16자만으로도 프로젝트가 특정되고, prefix 가 provider 를 알려주고, 한 번 더 물으면 그냥 이어서 말해주는 경우도 많아.

이게 일어나는 이유

  1. LLM 은 commit 에 API key 가 새어 들어간 코드를 테라바이트 단위로 학습했고, 그 과정에서 새는 *모양* 을 배웠어.
  2. "시크릿을 공개하지 마" 는 튜닝된 행동이지 단단한 벽이 아니야. "어떤 포맷인지만 보여줘", "디버깅하려고 그래", "가정해서 말하자면" 같은 말로 우회돼.
  3. chain-of-thought 나 "thinking" trace 를 쓰는 요즘 모델은, 답변에는 안 쓰기로 *결정하면서* 그 추론 단계에서 시크릿을 그대로 적어놔. 그리고 추론은 로그에 남는 일이 많고.
  4. 시크릿이 한 번 대화 context 에 들어가면 이후 모든 턴이 그걸 안고 가. 부주의한 스크린샷 한 장, 공유된 transcript 하나면 끝이야.

External links

Exercise

active LLM 코딩 채팅 하나 열어. transcript 에서 API key 처럼 보이는 fragment grep (sk-, ghp_, AKIA, AIzaSy, hkdf:, JWT 의 eyJ). 걸리는 게 있으면 그 키를 *지금* 갈아끼워. 회전한 뒤의 transcript 는 무해하지만, 회전 전 transcript 는 거기 앉아 있던 시간만큼 살아있는 노출이었어.

Progress

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

댓글 0

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

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