Sieve 리뷰: Cursor·Claude Code가 흘리는 API 키 잡기 (2026)
"AI 코딩 도구를 한두 달 썼는데, 내 API 키가 어디에 어떻게 캐싱돼 있는지 한 번이라도 확인해 본 적 있나?"
📌 핵심 3줄 요약
- Cursor·Claude Code·GitHub Copilot 같은 AI 코딩 에이전트가 워크스페이스 SQLite와 채팅 트랜스크립트에 평문 그대로 API 키를 캐싱한다는 사실이 2025년 말부터 반복 보고됐고, 그 빈틈을 메우려고 macOS 전용 시크릿 스캐너 Sieve가 등장했다.
- Sieve는 로컬에서만 동작하고 외부로 데이터를 보내지 않는다.
~/Library/Application Support아래 SQLite·로그를 정규식·엔트로피로 훑어 OpenAIsk-, Anthropicsk-ant-, AWSAKIA, GitHubghp_같은 토큰을 잡는다. - 운영 관점에서는 Sieve를 '주 1회 점검 루틴'으로 묶고, .env 화이트박스화·AGENTS.md 시크릿 제외 규칙·pre-commit 훅·OS Keychain 보관·토큰 수명 단축 다섯 가지를 함께 굴려야 의미가 있다.
1. 왜 지금 시크릿 스캐너가 필요해졌나
AI 코딩 도구를 한두 달 쓰다 보면 "이 스크립트 실행해줘" 한 줄에 .env 내용이 그대로 컨텍스트로 빨려 들어가는 경험을 한 번쯤 한다. 문제는 그 컨텍스트가 휘발성으로 끝나지 않고 워크스페이스 데이터베이스에 평문으로 남는다는 점이다. HN에서 2025년 말부터 반복적으로 지적된 부분이고, Sieve 제작자도 같은 동기에서 도구를 만들었다.
위험은 두 갈래다. 계정 탈취로 디스크 덤프가 유출되면 SQLite 한 번 읽는 것만으로 키가 노출된다. 백업 도구가 같은 폴더를 클라우드에 올리거나 공유 머신에 묶여 있다면 의도치 않은 경로로 시크릿이 흘러간다. 두 시나리오 모두 '키가 어디에 있는지 모른다'는 사실에서 출발한다.

2. Sieve는 무엇이고 왜 등장했나
Sieve는 2026년 4월 Mac App Store에 올라온 macOS 전용 시크릿 스캐너다. 앱 ID는 6767409365, 카테고리는 개발자 도구. 차별점은 두 가지인데, 첫째는 데이터를 외부로 전혀 보내지 않는 로컬 전용 동작이고, 둘째는 gitleaks·trufflehog가 다루지 않는 'AI 코딩 도구 캐시 경로'를 1차 스캔 대상으로 삼는다는 점이다.
기존 시크릿 스캐너는 git 저장소 단위로 동작한다. 하지만 Cursor·Claude Code의 시크릿은 트랜스크립트에만 남는다. git 저장소에 들어가지 않으니 gitleaks 입장에서는 보이지 않는 영역이다. Sieve는 정확히 그 사각지대를 노린다.
3. 스캔 대상과 동작 원리
macOS Sequoia 노트북에서 Sieve를 30분 돌려보며 실제로 어떤 경로를 훑는지 확인했다. 대표 위치는 다음 표와 같다. 도구별 캐시 위치가 거의 표준화돼 있어, 한 번만 외워두면 다른 스캐너에도 그대로 쓸 수 있다.
| 도구 | 스캔 대상 경로 (macOS) |
|---|---|
| Cursor | ~/Library/Application Support/Cursor/User/workspaceStorage/*/state.vscdb |
| VS Code + Copilot | ~/Library/Application Support/Code/User/workspaceStorage/*/state.vscdb |
| Claude Code | ~/.config/claude-code/, ~/Library/Application Support/Claude/ |
| Cline / Continue | VS Code 확장 워크스페이스 SQLite 동일 위치 |
| 로그 일반 | ~/Library/Logs/ 산하 IDE 관련 디렉터리 |
state.vscdb는 SQLite 파일이고, 안에 IDE 세션 정보와 채팅 트랜스크립트가 담겨 있다. 시크릿이 평문으로 들어가는 곳이 바로 이 트랜스크립트 영역이다.

Sieve의 매칭 룰셋은 두 갈래로 나뉜다.
- 정형 토큰 정규식 — OpenAI
sk-prefix, Anthropicsk-ant-, AWSAKIA·ASIA, GitHubghp_·gho_, Stripesk_live_, Slackxoxb-처럼 패턴이 명확한 토큰. - 엔트로피 기반 휴리스틱 — 32자 이상 고엔트로피 문자열을 잠재 후보로 표시. 환경변수 값으로 보이는 패턴(
KEY=,TOKEN=,SECRET=직후 문자열)을 우선순위로 끌어올린다.
스캔은 전부 로컬에서 끝난다. 네트워크 권한이 필요 없고, 앱 샌드박스에서 사용자가 선택한 폴더 권한만 받아 동작한다. 외부 전송이 두려워 스캐너를 망설였던 사람에게는 이 부분이 결정적이다.

4. 설치와 첫 실행 — 실제 점검 흐름
설치는 Mac App Store에서 한 번에 끝난다. brew·CLI 없이 GUI 앱으로 동작하고, 첫 실행 시 폴더 접근 다이얼로그가 뜬다. 풀 디스크 액세스가 아니라 폴더 단위 권한이라 부담이 적다.
- App Store에서 "Sieve Secret Scanner" 검색 후 설치.
- 첫 실행 시 사용자 폴더 접근 허용 — 필요한 디렉터리만 골라서 허용.
- 'Scan AI Tools' 버튼을 누르면 위 표의 경로를 일괄 스캔.
- 1~2분 안에 매칭 결과가 카테고리별(OpenAI, Anthropic, AWS 등)로 출력.
- 각 결과를 클릭하면 매칭 위치(파일 경로·라인·앞뒤 컨텍스트)를 보여준다. 실제 키 값은 마스킹된다.
실제 30분 점검에서는 작년에 테스트용으로 붙였다가 잊어버린 OpenAI 키 한 개, Cursor 채팅에 무심코 붙여 넣은 GitHub 개인 토큰 한 개가 잡혔다. 둘 다 곧바로 회수했다. "내가 안 흘렸다"고 확신했더라도 실제로 한 번 돌려봐야 한다.
5. 검출됐다면 — 즉시 대응 절차
키가 잡혔다면 화면을 닫기 전에 다음 순서를 그대로 밟는 게 안전하다. 발견 이후 30분이 가장 중요하다.
💡 노출 후 30분 체크리스트
- 노출된 토큰을 즉시 무효화(revoke·delete). 회전(rotation)보다 폐기가 우선이다. 구 토큰을 살려두면 캐시 어딘가에서 그대로 쓰일 수 있다.
- 새 토큰은 최소 권한·최단 수명으로 재발급. OpenAI·Anthropic은 프로젝트 단위 키, AWS는 IAM 역할 + STS 단기 토큰을 우선.
- 노출 키가 결제 가능한 종류였다면 결제 콘솔에서 최근 사용량과 의심 트래픽 확인. 의심 호출이 보이면 사용량 한도를 일시 0으로 내려둔다.
- Sieve가 잡아낸 SQLite 파일은 삭제해도 IDE가 자동 재생성하므로 부담 없이 정리.
6. 한계 — macOS 전용·로컬·가짜 양성
도구의 한계도 분명하다. 광고하지 않으면 자기 발에 걸린다.
- macOS 전용이라 Windows·Linux 개발자는 직접 쓸 수 없다.
- 로컬 한정이라 팀 단위로 일괄 점검하는 용도엔 부적합. 1인 1머신 위생용이다.
- 정규식·엔트로피 휴리스틱 특성상 가짜 양성(False Positive)이 섞인다. 특히 32자 이상 해시·UUID 토큰이 자주 잘못 잡힌다.
- 새 AI 도구가 등장하면 그 도구의 캐시 경로는 룰셋 업데이트 전까지 사각지대다. 룰셋 최신화 주기를 가끔 확인해야 한다.
7. Windows·Linux 사용자를 위한 수동 점검
Sieve를 못 쓰는 환경이라도 동일한 SQLite 파일 구조는 거의 같다. 다음 패턴으로 수동 점검이 가능하다.
# Windows (PowerShell + sqlite3)
$dbs = Get-ChildItem "$env:APPDATA\Cursor\User\workspaceStorage\*\state.vscdb"
foreach ($db in $dbs) {
sqlite3 $db.FullName ".dump" |
Select-String -Pattern "sk-[A-Za-z0-9]{20,}|sk-ant-|AKIA[0-9A-Z]{16}|ghp_[A-Za-z0-9]{36}"
}
# Linux (bash)
for db in ~/.config/Cursor/User/workspaceStorage/*/state.vscdb; do
sqlite3 "$db" ".dump" \
| grep -E "sk-[A-Za-z0-9]{20,}|sk-ant-|AKIA[0-9A-Z]{16}|ghp_[A-Za-z0-9]{36}"
done
핵심 정규식은 OpenAI sk-, Anthropic sk-ant-, AWS AKIA, GitHub ghp_ 네 가지면 충분하다. 이 정도만 잡아도 1차 위생은 확보된다. Copilot 사용자는 경로의 Cursor를 Code로 바꿔 같은 명령을 한 번 더 돌리면 된다.
8. Sieve vs gitleaks vs trufflehog 비교
같은 시크릿 스캐너 카테고리지만 영역이 겹치지 않는다. 셋을 같이 쓰는 게 정답이다.

| 구분 | Sieve | gitleaks | trufflehog |
|---|---|---|---|
| 주 스캔 대상 | AI 코딩 도구 캐시·트랜스크립트 | git 저장소·커밋 히스토리 | git + 파일시스템 + 검증 호출 |
| 실행 형태 | macOS GUI 앱 | CLI (Go) | CLI (Go) |
| 데이터 전송 | 로컬 전용 (네트워크 없음) | 로컬 전용 | 검증 시 외부 API 호출 |
| 권장 위치 | 개인 머신 정기 점검 | pre-commit·CI | CI·정기 백그라운드 스캔 |
| IDE 캐시 커버 | ○ | × | △ (경로 직접 지정 시) |
실무 권고는 단순하다. pre-commit과 CI에는 gitleaks, 외부 키 유효성 검증까지 원하면 trufflehog, 그리고 개인 머신에는 Sieve를 주 1회 스케줄로 돌리는 조합이다.
9. 운영 위생 보강 5가지 — Sieve만으론 부족하다
Sieve는 사후 점검 도구다. 진짜 줄여야 할 건 시크릿이 트랜스크립트에 들어가는 빈도 자체다. 다음 다섯 가지를 같이 굴리면 점검에서 잡히는 양 자체가 한 자릿수로 떨어진다.
- .env 화이트박스화 — direnv·dotenv-vault로 키를 컨테이너 안에서만 펼치고, 셸 환경변수로는 직접 노출하지 않는다.
- AGENTS.md 시크릿 제외 규칙 — Claude Code·Cursor가 읽는 가이드 문서에 ".env·secrets/는 절대 출력하지 말 것"을 명시한다. 모델이 자발적으로 마스킹한다.
- pre-commit 훅 — gitleaks·trufflehog를 pre-commit으로 묶어 커밋 단계에서 차단. Sieve가 사후, 이건 사전 방어.
- OS Keychain 보관 — macOS Keychain·Windows Credential Manager·Linux Secret Service로 시크릿을 로드. 평문 .env 자체를 없앤다.
- 토큰 수명 단축 — 30일 회전, 결제 가능한 키는 7일. 노출돼도 피해가 자동 감쇠.
⚠️ 단점과 주의할 점
- macOS 전용 — Windows·Linux 개발자는 8장 수동 점검 패턴으로 대체해야 한다.
- 가짜 양성 비율이 무시할 수 없다. 32자 해시·UUID는 화이트리스트로 분리해 두는 게 검토 피로를 줄인다.
- App Store 등록 도구라 업데이트 주기가 평균 2~4주 — 새 AI 도구가 나오면 룰셋 반영 전까지 사각지대가 생긴다.
- 스캔 권한 부여 시 폴더 단위로 명확히 제한할 것. "모든 디스크 액세스"는 굳이 줄 필요 없다.
10. 자주 묻는 질문 (FAQ)
- Q. Sieve가 데이터를 외부로 전송하나? — 아니다. 로컬에서만 동작하고 네트워크 권한 자체가 없다.
- Q. 정말 Cursor가 .env를 SQLite에 저장하나? — .env 파일 자체를 통째로 저장하지는 않지만, 채팅에서 키 값이 언급되면 트랜스크립트에 평문으로 남는다.
- Q. Windows에서도 Sieve를 쓸 수 있나? — 현재는 macOS 전용. 동일 SQLite를
sqlite3·grep으로 수동 점검할 수 있다. - Q. 가짜 양성이 너무 많으면? — '환경변수 패턴' 우선순위로 보고 32자 해시는 화이트리스트로 분리한다.
- Q. 키가 노출됐을 때 회전과 폐기 중 뭘 먼저? — 무조건 폐기 우선. 회전만 하면 구 토큰이 어딘가에서 살아 있을 수 있다.
참고 자료와 함께 보면 좋은 글
1차 출처와 본 블로그의 관련 글입니다.
- Sieve Secret Scanner — Mac App Store
- Hacker News — Sieve 관련 토론 스레드
- Cursor 공식 문서 — 워크스페이스 저장 구조
- Claude Code 공식 문서
- GitHub Copilot 공식 문서
- Cline 오픈소스 레포
- gitleaks 공식 레포
- trufflehog 공식 레포
🚀 지금 바로 할 일
- Mac App Store에서 Sieve를 설치하고, 30분 시간을 내서 'Scan AI Tools' 한 번 돌려보기 — 잡힌 키가 0개여도 그 자체가 베이스라인이다.
- 발견된 토큰이 있다면 회전이 아닌 폐기를 먼저 수행하고, 새 토큰은 최소 권한·최단 수명 정책으로 재발급.
- 이번 주 안에 pre-commit 훅에 gitleaks를 추가하고, AGENTS.md에 ".env·secrets/ 출력 금지" 한 줄을 더해 사전·사후 두 겹 방어를 갖추기.
💬 의견
Sieve 외에 본인 머신에서 평문 시크릿을 점검하는 자기 루틴이 따로 있다면 어떤 도구·스크립트인지 댓글로 공유 부탁드립니다. 다음 글에서는 AGENTS.md 시크릿 제외 규칙을 Claude Code·Cursor·Codex 셋에서 어떻게 일관되게 적용하는지 정리할 예정입니다.
'AI 리뷰' 카테고리의 다른 글
| Agentic AI 신뢰성 설계 7원칙 Bayer 사례로 정리 (2026) (0) | 2026.06.21 |
|---|---|
| Microsoft VibeVoice: 90분 다화자 팟캐스트 TTS 정리 (0) | 2026.06.08 |
| AI Engineering from Scratch 솔직 리뷰: 무료 GitHub 로드맵 vs 유료 강의 (0) | 2026.05.27 |
| Google Antigravity 2.0 첫인상과 실전 사용법 (2026) (0) | 2026.05.21 |