홈 › 블로그 › 유출된 키의 경보음: KeyRotate가 이제 AI 로그, 저장소, 웹 루트를 감시합니다

유출된 키의 경보음: 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 로그인 정보를 수집하는 악성코드가 든 릴리스를 배포했습니다.

Black October10월의 치명적인 PHP 취약점은 이야기의 절반일 뿐입니다. 공격자가 침입한 서버에서 노리는 것은 그곳에 저장된 AI 키입니다. 영상: Nate B Jones (AI News & Strategy Daily) · YouTube에서 보기

주목할 것은 마지막 사건입니다. 공개 저장소에 토큰을 push한 사람은 없었습니다. 코딩 에이전트가 명령을 실행했고, 그 명령이 토큰을 출력했고, 대화 기록이 그것을 남겼을 뿐입니다. 대화 기록에 들어간 내용은 이미 AI 제공업체로 전송되었고, Mac에도 평문으로 남아 있습니다. 자격 증명을 훔치는 악성코드가 어디를 뒤져야 하는지 아는 폴더에 말입니다.

KeyRotate는 원래 유출된 “뒤”를 위한 도구였습니다. 키를 교체하고, 그 키를 쓰던 파일을 모두 갱신하고, 이전 키는 더 필요 없을 때까지 살려 둡니다. 10월 24일에 빌드된 새 버전은 그 “앞”을 더합니다. 키가 흘러 들어가기 쉬운 곳을 감시하다가, 사용자의 키가 그곳에 나타나면 알립니다.

가드: 모든 경고를 한 화면에

새로운 가드 화면은 키가 다른 사람 손에 들어갔을 수 있다는 징후를 심각한 순서로 모읍니다. 각 경고에는 “지금 교체”, “키 열기”, “숨기기” 같은 동작이 하나씩 붙어 있어 다음에 무엇을 할지 헷갈리지 않습니다. 정보원은 다음과 같습니다.

사이드바의 배지가 경고 수를 보여 주고, 개요 화면의 상자에는 다른 상자가 다루지 않는 경보가 표시됩니다.

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로 감시…” 버튼이 생겼습니다. 웹 프로젝트에서 발견한 내용은 웹 서버가 그 파일을 어떻게 다루는지로 판단합니다.

웹 프로젝트는 매일 다시 검사합니다. 다른 폴더도 “매일 다시 검사”로 똑같이 할 수 있습니다.

폴더를 검사할 때마다 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 안에서 처리하는 방식

솔직한 한계

시작하기

  1. Mac App Store에서 KeyRotate를 업데이트하고 가드를 여십시오.
  2. AI 도구 로그의 첫 확인이 끝나기를 기다리십시오. 이후에는 새 줄만 읽습니다. 다른 AI 로그 폴더가 있다면 추가하십시오.
  3. 원격 저장소에서 계정을 추가하고(토큰은 KeyRotate 보관함에 저장), 감시할 저장소를 고르십시오.
  4. 웹 프로젝트를 추가하거나, Pancake Stack이나 FrontierStack의 사이트에서 “KeyRotate로 감시…”를 누르십시오.
  5. 검사가 목록으로 보여 준 .env 파일을 정리한 뒤 “로그인할 때 열기”를 켜십시오.

그다음에는 가드가 알린 키마다 교체하고, 이전 키를 쓰는 곳이 없어지면 폐기하십시오. KeyRotate가 하는 일도 살펴보십시오.

Mac에서 모두 운영하십시오.

FrontierStack은 이 Mac과 연결된 서버에서 서비스를 설치, 모니터링, 보호하며 — 암호와 키는 어떤 AI에게도 보이지 않게 지킵니다.

FrontierStack 다운로드

Apple 공증 완료 · 안전 & 보안 · macOS 13 Ventura 이상