key-amnesia - AI 에이전트에 시크릿을 노출하지 않고 명령을 실행하는 도구

1 week ago 25
  • .env를 .gitignore에 넣는 방식은 비밀값이 Git에 커밋되는 것은 막지만, 로컬 프로젝트에 평문으로 남아 에이전트가 읽는 것까지 막지는 못함
    • 이제 위협은 Git뿐 아니라 프로젝트 파일과 명령 실행 환경에 접근하는 AI 에이전트
    • .env/셸 기록/MCP 설정/자격 증명 파일처럼 에이전트가 읽을 수 있는 키를 LEAK(Locally Exposed Agent Key) 로 정의
  • 시크릿은 암호화된 볼트에 저장하고, 에이전트가 ka run으로 실행한 자식 프로세스의 환경변수에만 주입함
    • 명령이 시크릿을 그대로 출력하면 에이전트에게 결과를 반환하기 전에 검열
  • 마스터 비밀번호는 사용자가 실제 키보드로만 입력하며, 승인이 필요하면 에이전트가 읽거나 입력할 수 없는 별도 콘솔 창을 띄움
  • pip install key-amnesia로 설치한 뒤 ka setup, ka init, ka import .env, ka scan, ka run 순서로 사용할 수 있음
    • ka setup은 Claude Code/Cursor/Codex용 스킬과 안전 훅을 설치하고, 인라인 자격 증명이나 위험한 ka 명령이 포함된 도구 호출을 차단
    • Argon2id와 SecretBox를 사용하며 마스터 비밀번호를 잊으면 복구할 수 없음
  • 기본 per-call 모드는 시크릿을 사용할 때마다 비밀번호를 요구하고, cached 모드는 ka unlock 이후 기본 30분 동안 재입력 없이 실행함
  • --pre-admit은 다음 연결 프로세스를 자동 승인하고, --admit-tree는 사용자가 고른 조상 프로세스와 실제 하위 프로세스를 세션 동안 승인함
  • 보안 한계
    • 명령이 시크릿을 인코딩하거나 변형해 출력하면 검열을 우회할 수 있음
    • 시크릿 이름은 평문으로 저장되며, 화면 제어 권한을 가진 에이전트에는 별도 콘솔의 격리가 약해짐
    • 화면이 없는 헤드리스 환경에서는 승인을 거부하며, 같은 OS 사용자로 실행되는 프로세스는 권한을 공유함
  • 윈도우/리눅스 지원. macOS의 격리 콘솔 실행은 실험 단계
  • Apache-2.0 라이선스
Read Entire Article