유출된 키의 경보음: KeyRotate가 이제 AI 로그, 저장소, 웹 루트를 감시합니다
게시일 2026-10-24
2026년 10월은 키를 관리하는 사람에게 힘든 달이었습니다. Railway에서는 고객의 환경 변수를 보관하는 시스템에 공격자가 침입해 그 일부를 복호화했고, OpenCode Console에서는 이전 시스템에 침입한 사람이 사용자가 연결한 OpenAI, Anthropic, Google 키를 읽었을 수 있습니다. STUDIO는 고객이 저장한 API 키를 제3자가 읽었을 수 있다고 발표했습니다. Onamae.com Desktop Cloud(お名前.com デスクトップクラウド)에서는 서버에 저장된 거래 계좌 로그인 정보가 도난당했습니다. 그리고 공격자들은 Claude Code의 출력을 기록한 로그에서 찾은 GitHub 토큰으로 LiteLLM의 릴리스 파이프라인을 장악한 뒤, Claude, Codex, Gemini, Cursor 로그인 정보를 수집하는 악성코드가 든 릴리스를 배포했습니다.
주목할 것은 마지막 사건입니다. 공개 저장소에 토큰을 push한 사람은 없었습니다. 코딩 에이전트가 명령을 실행했고, 그 명령이 토큰을 출력했고, 대화 기록이 그것을 남겼을 뿐입니다. 대화 기록에 들어간 내용은 이미 AI 제공업체로 전송되었고, Mac에도 평문으로 남아 있습니다. 자격 증명을 훔치는 악성코드가 어디를 뒤져야 하는지 아는 폴더에 말입니다.
KeyRotate는 원래 유출된 “뒤”를 위한 도구였습니다. 키를 교체하고, 그 키를 쓰던 파일을 모두 갱신하고, 이전 키는 더 필요 없을 때까지 살려 둡니다. 10월 24일에 빌드된 새 버전은 그 “앞”을 더합니다. 키가 흘러 들어가기 쉬운 곳을 감시하다가, 사용자의 키가 그곳에 나타나면 알립니다.
가드: 모든 경고를 한 화면에
새로운 가드 화면은 키가 다른 사람 손에 들어갔을 수 있다는 징후를 심각한 순서로 모읍니다. 각 경고에는 “지금 교체”, “키 열기”, “숨기기” 같은 동작이 하나씩 붙어 있어 다음에 무엇을 할지 헷갈리지 않습니다. 정보원은 다음과 같습니다.
- AI 도구 로그(이번 버전의 새 기능)
- Enfour의 서명된 피드로 전달되는 제공업체 침해 권고
- 사용량 감시: Mac에 있는 어떤 것으로도 설명되지 않는 방식으로 쓰인 키를 알아챕니다.
- 매일의 키 확인: 제공업체는 GitHub 시크릿 스캐닝 등으로 유출이 보고된 키를 폐기합니다. 제공업체가 갑자기 거부하는 키는 그 자체로 단서입니다.
- 폴더와 그 git 기록을 살피는 유출 검사
- 원격 저장소(역시 새 기능)
사이드바의 배지가 경고 수를 보여 주고, 개요 화면의 상자에는 다른 상자가 다루지 않는 경보가 표시됩니다.
AI 도구 로그
KeyRotate는 Claude Code, Codex, Gemini CLI, Qwen Code, OpenCode, Goose, Cline, Roo Code의 대화 로그와, AI 프록시의 요청 로그처럼 직접 추가한 AI 로그 폴더를 읽습니다. 확인은 1시간마다 하며, 첫 회 이후에는 새 줄만 읽습니다.
저장된 키는 정확한 값으로 대조합니다. 대화 기록 안에서 JSON 이스케이프된 비밀번호 형태도 포함됩니다. 그 밖에 비밀처럼 보이는 것은 Gitleaks 규칙으로 찾습니다. 저장된 키가 발견된 값을 아직 쓰고 있으면 경보가 되며, 교체될 때까지 매일 반복됩니다. ntfy나 Gotify를 설정했다면 휴대폰으로도 전달됩니다.
먼저 저희 자신의 컴퓨터에서 시험해 보았습니다. Claude Code의 로그에는 Anthropic, OpenAI, AWS, Stripe 키와 개인 키까지 남아 있었습니다. 코딩 에이전트를 매일 쓴다면 사용자의 로그에도 있다고 생각해 두는 편이 안전합니다.
저장소: 모든 브랜치와 태그까지
GitHub, Gitea·Forgejo(Codeberg와 자체 호스팅 서버 포함), GitLab, Bitbucket 계정을 추가해 감시할 저장소를 고르거나, 아무 HTTPS git 서버의 주소를 지정하십시오. KeyRotate는 각 저장소의 전체 기록(모든 브랜치와 태그)을 Mac에 있는 자체 저장 공간으로 복사합니다. git 프로토콜을 직접 구현하고 있어 git을 설치할 필요가 없으며, 샌드박스에서 동작하는 App Store 앱에는 이 점이 중요합니다. 복사본은 유출 검사로 살피고, 첫 복사 이후에는 하루 한 번 바뀐 부분만 가져옵니다.
GitHub에서는 GitHub의 시크릿 스캐닝 알림도 읽어, GitHub가 찾은 비밀이 아직 유효하면 알려 줍니다. 계정에 접속하는 데 쓰는 토큰도 다른 키와 마찬가지로 KeyRotate 보관함에 저장됩니다.
저장소 기록에 사용자의 키가 있으면 경보입니다. 비공개 저장소라면 복제할 수 있는 모든 사람이, 공개 저장소라면 누구나 그 키를 읽을 수 있습니다.
웹 프로젝트, 그리고 교체에서 빠지는 .env
이제 유출 검사 폴더를 웹 프로젝트로 다룰 수 있습니다. “웹 프로젝트 추가…”에는 ~/Sites, /Library/WebServer/Documents, MAMP의 htdocs, Herd 바로 가기가 있고, Pancake Stack과 FrontierStack에는 각 사이트와 가상 호스트에 새 “KeyRotate로 감시…” 버튼이 생겼습니다. 웹 프로젝트에서 발견한 내용은 웹 서버가 그 파일을 어떻게 다루는지로 판단합니다.
- 웹 루트에 있고 실행되지 않는 파일(
.env,.json,.sql, 백업, 로그): 누구나 내려받을 수 있습니다. - 스크립트와 페이지: 모든 방문자의 브라우저로 전송됩니다.
- PHP 등 서버 코드: 하드코딩된 상태입니다. 공개되지는 않지만 모든 복사본, 백업, 저장소에 함께 실려 갑니다.
웹 프로젝트는 매일 다시 검사합니다. 다른 폴더도 “매일 다시 검사”로 똑같이 할 수 있습니다.
폴더를 검사할 때마다 KeyRotate의 대상이 아닌 .env 파일, 즉 교체에서 빠지게 될 사본도 목록으로 보여 줍니다. “키 가져오기 및 대상 지정…”은 키를 가져오고 각 파일을 대상으로 만들어, 다음 교체 때 그 파일도 다시 씁니다. “이전 키 업데이트…”은 오래된 사본을 현재 키로 덮어씁니다. 그 줄만 바꾸며 백업도 남깁니다.
릴리스를 기다리지 않는 침해 권고
Enfour는 앱 릴리스와 별도로 서명된 권고를 발행하며, KeyRotate는 앱에 내장된 키로 서명된 권고만 받아들입니다. 10월 24일에 발행된 권고 #4는 LiteLLM 1.107.0, GitLab CVE-2026-110264, Node.js의 10월 보안 릴리스, Onamae.com Desktop Cloud, FXTF, 외환 파이네스트(外為ファイネスト), ThreeTrader, SBI증권의 패스키 탈취 주의 안내, 인도국립은행(State Bank of India)의 데이터 유출, DigiD의 예방적 PHP 중단을 다룹니다. 각각은 개요 화면에 체크리스트가 있는 카드로 나타나며, 그 서비스에 어떤 키를 저장했는지 묻습니다. 그중 두 건은 자세히 다루었습니다: Onamae.com Desktop Cloud 침해 사고와 STUDIO 침해 사고입니다.
Mac 안에서 처리하는 방식
- Mac 밖으로 나가는 것은 없습니다. 예외는 선택한 제공업체와 git 호스트로 보내는 요청, 그리고 설정한 경우 자신의 ntfy·Gotify 서버로 보내는 알림뿐입니다. 권고 가져오기는 내려받기입니다.
- 결과에 비밀이 남지 않습니다. 기록하는 것은 위치와 시각, 가린 미리보기뿐이며 비밀 자체는 저장하지 않습니다.
- 로그는 그 자리에서 읽습니다. KeyRotate는 AI 대화 기록을 복사하거나 어디로도 보내지 않습니다. 저장소 복사본은 Mac에 있는 KeyRotate의 저장 공간에 보관됩니다.
솔직한 한계
- 실행 중일 때만 지킵니다. 창을 닫아도 KeyRotate는 메뉴 막대에 남아 15분마다, 그리고 잠자기에서 깨어날 때 확인합니다. 종료하면 확인도 멈춥니다. 가드의 “로그인할 때 열기”로 Mac과 함께 시작되게 할 수 있습니다.
- 교체해도 기록은 지워지지 않습니다. 저장소 기록이나 AI 대화 기록에 있는 키는 교체한 뒤에도 그대로 남습니다. 그것을 무해하게 만드는 것은, 더 이상 쓰는 곳이 없음을 확인한 뒤 제공업체에서 이전 키를 폐기하는 것입니다.
- AI 제공업체는 이미 받았습니다. 대화 기록에 나타난 키는 기록될 때 이미 제공업체로 전송되었습니다. Mac에서 찾아내면 교체하라는 신호가 되지만, 되돌릴 수는 없습니다.
- 추가한 것만 볼 수 있습니다. 추가하지 않은 폴더, 로그, 저장소는 검사하지 않습니다. 사용을 시작하기 전에 다른 곳으로 복사된 키는 그 키가 쓰이는 방식으로만 드러납니다. 지원하는 제공업체의 사용량 감시와 제공업체 자신의 거부입니다.
시작하기
- Mac App Store에서 KeyRotate를 업데이트하고 가드를 여십시오.
- AI 도구 로그의 첫 확인이 끝나기를 기다리십시오. 이후에는 새 줄만 읽습니다. 다른 AI 로그 폴더가 있다면 추가하십시오.
- 원격 저장소에서 계정을 추가하고(토큰은 KeyRotate 보관함에 저장), 감시할 저장소를 고르십시오.
- 웹 프로젝트를 추가하거나, Pancake Stack이나 FrontierStack의 사이트에서 “KeyRotate로 감시…”를 누르십시오.
- 검사가 목록으로 보여 준
.env파일을 정리한 뒤 “로그인할 때 열기”를 켜십시오.
그다음에는 가드가 알린 키마다 교체하고, 이전 키를 쓰는 곳이 없어지면 폐기하십시오. KeyRotate가 하는 일도 살펴보십시오.
Mac에서 모두 운영하십시오.
FrontierStack은 이 Mac과 연결된 서버에서 서비스를 설치, 모니터링, 보호하며 — 암호와 키는 어떤 AI에게도 보이지 않게 지킵니다.
FrontierStack 다운로드Apple 공증 완료 · 안전 & 보안 · macOS 13 Ventura 이상
