Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jit — Mac에서 평문으로 저장된 비밀값을 찾아 Touch ID 뒤로 옮기고, 이를 읽는 도구들이 깨지지 않도록 필요한 순간에만 주입합니다. 무료이며 로컬 우선(local-first)입니다. | Kitploit
도구/GitHubGitHub/jitpass/jit
Authentication & AuthorizationEncryption/Decryption ToolsConfiguration AuditingDevSecOpsSecret DetectionSupply Chain Security
GitHubjitpass/jit

jit

Mac에서 평문으로 저장된 비밀값을 찾아 Touch ID 뒤로 옮기고, 이를 읽는 도구들이 깨지지 않도록 필요한 순간에만 주입합니다. 무료이며 로컬 우선(local-first)입니다.

저장소 보기
160473일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

jitpass - 적시(just-in-time) 비밀번호

개발 머신을 위한 적시(just-in-time) 자격 증명.

문서 · 빠른 시작 · 지원 도구 · 명령어 참조 · 보안

상태: macOS 전용(Apple Silicon), 아직 개발 중입니다.

jit이 무엇인가 (30초 요약)

당신의 비밀은 머신 전체에 평문으로 흩어져 있습니다: .env 파일, ~/.aws/credentials, ~/.zshrc exports, .npmrc 토큰, MCP 설정. 당신으로 실행되는 모든 것은 그것들을 읽을 수 있습니다. 악성 curl | sh, 수상한 npm install, 또는 지금 당신의 편집기에서 전체 권한으로 실행 중인 AI 에이전트 중 하나.

jit은 각 비밀을 Touch ID로 보호되는 로컬 암호화 볼트로 옮기고, 도구가 계속 작동하도록 파일을 다시 작성합니다. 디스크에는 이제 미끼(decoy)만 있습니다. 실제 값은 생체 인식 프롬프트 이후, 요청한 특정 프로세스의 메모리에만 나타납니다. 결과: 한 번 잠금 해제하면, jit은 도구(또는 에이전트)에 자격 증명을 넘기기 전에 묻고, 나머지 시간 동안 디스크에는 미끼만 존재합니다.

Code로 실행claude로 실행
imageimage

하지 않는 일: 이미 침해된 계정을 안전하게 만들지 않으며, 요청한 프로세스의 메모리에 들어간 비밀을 보호하지 않습니다. 경계는 한 페이지에 명확히 명시되어 있습니다: 의도된 한계.

작동 방식 (기계적으로)

커널 확장, 파일시스템 드라이버, FUSE가 없습니다. 도구가 할 수 있는 것에 따라 선택된 세 가지 메커니즘:

  1. 환경 변수를 하나의 프로세스에 주입한 후 execve. jit의 자체 이미지는 당신의 명령으로 대체되므로 값은 그 하나의 프로세스에만 존재하고 jit은 메모리에서 사라집니다.
  2. 도구의 네이티브 자격 증명 프로토콜(존재하는 경우): AWS credential_process, docker 및 git 자격 증명 헬퍼, kubectl exec 플러그인, Terraform의 자격 증명 헬퍼. 도구가 묻고, jit이 답하며, 파일은 관여하지 않습니다.
  3. 명명된 파이프 마운트, 파일만 읽을 수 있는 도구용.

마운트는 mkfifo(2)로 모드 0600에 생성된 POSIX FIFO입니다. open(".env")를 호출하는 프로그램은 작성자가 연결될 때까지 커널에서 차단됩니다. 백그라운드 서비스가 그 작성자입니다: O_WRONLY로 경로를 열어 읽는 쪽을 해제하고, 메모리의 복호화된 바이트를 커널 파이프 버퍼에 쓰고, 닫은 후 다음 읽는 쪽을 위해 open(2)로 돌아갑니다. 디스크에는 아무것도 닿지 않습니다. 쓰여지는 내용은 읽기마다 결정됩니다: 주변 읽는 쪽에는 미끼, 당신이 승인한 실행 내에서만 실제 값.

호출자 신원은 설명하고 감사하며, 절대 결정하지 않습니다. 프로세스 이름은 위조 가능하고, 빨리 닫히는 FIFO 읽는 쪽은 식별을 완전히 회피할 수 있습니다. 프롬프트에 응답하는 사람이 관문이며, 프로세스 이름은 무엇에 응답할지만 알려줍니다. 자세한 내용은 작동 방식 및 라이브 마운트.

설치

root@kitploit:~
brew install jitpass/tap/jitpass

이것이 권장 경로이며, 보안 도구에게는 그 이유가 중요합니다. 릴리스는 Apple Developer ID로 서명되고 Apple이 공증(notarize)합니다. Homebrew는 다운로드한 것을 격리하므로, Gatekeeper는 실행이 허용되기 전에 공증 티켓에 대해 바이너리를 검사합니다. 우리 말을 믿지 않고 직접 확인하려면 jit doctor를 실행하세요: 그 jit 줄은 signed CZC6BH93GJ를 보고하며, 이는 jit upgrade가 무엇이든 설치하기 전에 실행하는 것과 동일한 검사입니다.

Homebrew 없이 (더 약한 경로와 그 이유)
root@kitploit:~
curl -sL https://dl.jitpass.com/jitpass/jit/releases/latest/download/jitpass_darwin_arm64.tar.gz | tar -xz jit
shasum -a 256 jit   # 릴리스 페이지의 checksums.txt와 비교
codesign -dv --verify --verbose=2 ./jit   # 예상: Developer ID, TeamIdentifier=CZC6BH93GJ
sudo mv jit /usr/local/bin/

이것은 Homebrew가 없는 사람들을 위한 것이며, 진정으로 더 약한 경로입니다: curl은 격리 비트를 설정하지 않으므로 Gatekeeper가 공증 티켓을 확인하지 않으며, go install도 마찬가지입니다. 바이너리는 여전히 서명되고 공증되었으므로 위 두 줄로 실행 전에 둘 다 확인할 수 있지만, 실제로 실행해야 합니다. Homebrew가 있다면 Homebrew를 사용하세요.

Apple Silicon 전용입니다. Intel Mac에서는 소스에서 빌드하세요: go install github.com/jitpass/jit/cmd/jit@latest.

경로 하나를 선택하세요. 이전에 tarball에서 설치했고 Homebrew로 전환하는 경우, brew install 후 이전 복사본을 제거하세요 (sudo rm /usr/local/bin/jit); 그렇지 않으면 두 개의 jit이 PATH에 있어 별도로 업그레이드되며, jit doctor가 이를 표시합니다.

업그레이드: brew upgrade jitpass, 또는 jit upgrade: 검증된 자체 업데이트(교체 전에 Developer-ID 서명과 체크섬 모두 확인, 서비스 재시작). 어느 쪽이든 볼트는 그대로입니다.

Homebrew는 바이너리와 함께 셸 완성을 설치하므로 jit <TAB>이 하위 명령, 플래그, 볼트 경로 및 래핑 가능한 도구 이름을 기본으로 완성합니다. tarball이나 소스에서 설치한 경우 직접 추가하세요:

root@kitploit:~
echo 'source <(jit completion zsh)' >> ~/.zshrc && exec zsh

어느 쪽이든 jit doctor는 완성이 셸에 도달하는지 알려줍니다.

실제 사용 방법

root@kitploit:~
jit scan                            # 읽기 전용. 스캔하는 파일을 변경하지 않으며 실제 값을 출력하지 않습니다.
jit vault init                      # 볼트 생성 (마스터 키는 로그인 키체인에)
jit migrate --dry-run               # 머신 전체 수정 계획 미리보기
jit migrate                         # 적용: 계획 표시, [y/N] 확인, Touch ID 한 번
jit migrate ~/code/myapp            # 또는 프로젝트 하나만 수정
jit run -- npm run dev              # 도구 실행; 실제 값은 해당 프로세스에만 주입

경로 없이 jit scan은 홈 디렉터리 전체를 훑으므로 큰 디렉터리에서는 시간이 걸립니다. 한 곳만 바로 보려면 경로를 지정하세요: jit scan ~/.aws.

일상적으로는 대부분 jit run -- <cmd>입니다. 자체 로그인 토큰을 가진 CLI(gh, glab, stripe 등)는 jit wrap gh를 한 번 실행한 후 평소처럼 계속 gh를 입력하면 됩니다.

무언가가 jit wrap, jit migrate, 또는 아무것도 필요하지 않은지 확실하지 않나요? 알 필요가 없습니다. jit scan은 찾은 모든 것을 jit이 보호할 것(래핑 포함 한 명령)과 당신만 고칠 수 있는 것으로 나누고, 단순한 jit migrate가 그 전체 계획을 실행합니다:

root@kitploit:~
$ jit scan
  YOUR SECRETS: 7 — 0 protected by jit (0%)
  ▱▱▱▱▱▱▱▱▱▱  to 100%: one command +71% · 2 secrets only you can fix +29%

  jit will protect these — 5 secrets in 4 files, 0% → 71%
      → jit migrate
        ~/.zshrc            STRIPE_API_KEY, DB_PASSWORD
        ~/.config/gh/hosts.yml  GitHub CLI token · wraps gh
        ...

  only you can protect these — 2 secrets, 71% → 100%

    [rotate, then delete every copy]
    ! A production database password in 2 files
      → rotate it now, then delete every copy

(jit scan --full는 심각도와 함께 기존의 범주별 인벤토리를 제공하며, 래핑 가능한 CLI 토큰 섹션도 포함합니다.)

일상적인 도구

자격 증명을 한 번 마이그레이션한 후, 항상 해오던 방식대로 도구를 계속 사용하세요.

root@kitploit:~
# AWS (그리고 Terraform, 모든 AWS SDK)
jit migrate ~/.aws/credentials       # 키가 볼트로 이동; 평문 파일 없음
aws s3 ls                            # 필요 시 볼트에서 해석. 접두사, 플래그 없음.
terraform apply                      # 동일한 자격 증명, 동일한 명령

# GCP 애플리케이션 기본 자격 증명 (머신 전체 자격 증명)
jit migrate ~/.config/gcloud/application_default_credentials.json
terraform apply                      # google provider가 ADC를 읽음; Touch ID 프롬프트 후 작동

# Docker / docker-compose
jit migrate ~/.docker/config.json    # 레지스트리 로그인이 볼트로 이동
jit run -- docker compose up         # jit이 이 실행에 주입
docker login ghcr.io                 # 여전히 작동; 헬퍼가 볼트에 저장

# ~/.zshrc에 있던 셸 exports
jit migrate ~/.zshrc                 # 한 줄 훅을 남김; 새 셸에는 변수만 있음
./deploy.sh                          # 해당 변수를 읽는 스크립트는 변경 없이 작동

# 프롬프트에서 한 번 입력했던 토큰, 이제 셸 히스토리에 존재
jit migrate ~/.zsh_history           # 각각 볼트로 이동; 명령은 유지, 비밀은 제거
jit guard history                    # 다음 것이 기록되지 않도록 중지 (zsh)
                                     # (단순 `jit migrate`도 확인 요청하는 계획에서 이를 제안)

# 자체 토큰을 가진 CLI (gh, stripe, glab)
jit wrap gh                          # 한 번
gh pr list                           # 호출마다 토큰 주입, 영구적으로

각 도구가 실제 자격 증명에 처음 접근할 때 jit은 한 번 묻고 볼트가 잠길 때까지 답을 기억합니다. 볼트 잠금 해제 위에 어떻게 쌓이는지, --trust가 무엇을 하는지, 도구별 프롬프트를 끄는 방법은 두 번의 Touch ID 순간을 참조하세요.

왜 어떤 도구는 설정이 필요 없고 다른 도구는 jit run이 필요한가요? 한 가지 규칙: 도구가 jit에게 비밀을 직접 요청할 수 있는가? AWS(credential_process 경유), 로그인 시 셸, docker의 레지스트리 로그인(자격 증명 헬퍼 경유)은 모두 가능하므로 추가 입력이 필요 없습니다. 런타임에 파일만 읽는 도구(docker compose, 일반 SDK)는 요청할 수 없으므로 jit run이 값을 전달합니다.

머신 전역 자격 증명 파일(GCP ADC, sops, npm, netrc)도 동일한 일상 방식으로 작동합니다: 도구를 실행하고 프로세스별 프롬프트를 승인하세요. 명시적으로 원할 때만 jit run --with <name>을 추가하세요: 응답할 프롬프트가 없는 스크립트와 CI, 또는 프로젝트 자체 설정이 절대 도달할 수 없는 하드 게이트를 원할 때. **지원 도구**는 모든 도구에 정확히 무엇을 입력해야 하는지, 각각이 어떻게 전달되는지 나열합니다.

두 번의 Touch ID 순간, 한 번이 아님

jit은 두 가지 다른 순간에, 두 가지 다른 작업을 위해 지문을 요구합니다:

  1. 볼트 잠금 해제. 잠긴 후 jit을 처음 사용할 때, Touch ID 한 번으로 전체 세션 동안 볼트가 열립니다(활동 5분 후 다시 잠김; 아무리 바빠도 8시간을 넘지 않음). 명령마다가 아니라 한 번 잠금 해제합니다.
  2. 도구에 자격 증명 전달. 그 위에, 특정 도구가 실제 자격 증명에 처음 접근할 때 jit은 넘기기 전에 묻고 무엇이 요청하는지 이름을 밝힙니다. 이것은 볼트가 열려 있는 동안 실행하지 않은 프로그램이 조용히 키를 사용하는 것을 막습니다.
root@kitploit:~
$ aws s3 ls
  Touch ID  ->  unlock your vault              # 게이트 1: 5분 동안 볼트 열기
  Touch ID  ->  aws wants your aws credential   # 게이트 2: 이 도구, 이 자격 증명
  ...your buckets...

$ aws s3 cp ./file s3://bucket/   # 동일한 도구, 동일한 세션: 프롬프트 없음

$ terraform apply
  Touch ID  ->  terraform wants your aws credential   # 다른 도구: 자체적으로 요청

게이트 2는 잠금 해제된 볼트가 무제한 사용이 되지 않게 합니다: 당신이 aws를 직접 사용한 후에도, 동일한 키에 접근하는 수상한 npm install은 여전히 이름을 밝히는 프롬프트를 트리거하므로 거절할 수 있습니다.

두 번째 게이트가 싫나요? 끄세요; 볼트 잠금은 유지됩니다(끄는 것 자체가 Touch ID를 요구합니다, 닫는 창을 다시 열기 때문):

root@kitploit:~
jit service consent off   # 볼트가 잠금 해제된 동안 도구가 조용히 해석
jit service consent on    # 도구별로 다시 요청 (기본값)

여러 자격 증명이 필요한 것을 시작하나요? jit run --trust -- terraform apply는 한 번의 동작으로 전체 실행의 도구를 승인합니다. 자세한 내용: 프로세스별 동의.

키보드를 떠나나요? jit grant

두 게이트 모두 응답할 사람이 있다고 가정합니다. 밤새 작업하는 AI 에이전트, 긴 빌드, 예약 작업: 화면이 잠기고 세션이 끊기며 실행은 아무도 보지 못할 프롬프트에서 멈춥니다. 프로세스 그랜트는 결정을 제거하는 대신 더 일찍 이동시킵니다 - 당신이 여전히 있을 때 주는 Touch ID 한 번으로, 정확히 무엇에 서명하는지 이름을 밝힙니다:

root@kitploit:~
$ jit grant --process claude --profile jamf --for 8h
  Touch ID  ->  let claude under iTerm2 use 2 secrets (jamf) unattended for 8h
✓ granted g-7f3a2c81   claude -> jamf   until 17:42
  └ covers claude under iTerm2: 1 running now, any started before 17:42

다음 8시간 동안, 입력한 터미널 아래의 모든 claude(그리고 그것이 실행하는 것)는 프롬프트 없이 해당 비밀을 얻습니다 - 화면 잠금을 통해서도, 나중에 시작하는 세션도 포함: 새 탭, 다음 claude, 새벽 3시에 실행되는 스크립트. 신뢰되는 이름이 아니라 당신의 터미널이 지정되는 것입니다: 머신의 다른 곳에서 자신을 claude라고 부르는 프로그램은 그 트리에서 내려오지 않으므로 아무것도 상속받지 않습니다. 그랜트는 마감 시한, 해당 터미널 종료, 또는 jit grant revoke를 입력하는 순간 종료됩니다(지문 필요 없음 - 접근 권한 제거는 항상 무료). 종료 시 사라지는 정확히 하나의 프로세스를 원하나요? --pid. 모든 서브는 감사 추적에 별도 이벤트로 기록되므로, 다음 날 아침 당신이 잠든 동안 에이전트가 무엇을 건드렸는지 정확히 읽을 수 있습니다. 자세한 내용: 프로세스 그랜트.

AI 에이전트와 MCP 서버

편집기의 에이전트는 당신으로, 당신의 권한으로 실행되며 하루 종일 파일을 읽습니다. 그것이 존재의 목적이며, 또한 저장소의 평문 .env가 2년 전보다 훨씬 다른 위험이 된 이유입니다. jit은 에이전트를 4가지 측면에서 일급 시민으로 취급합니다:

root@kitploit:~
jit migrate ~/.claude.json           # MCP 서버 설정: 키가 볼트로 이동,
                                     # 각 서버는 이제 `jit run`을 통해 실행
jit wrap claude                      # AI CLI 자체: claude, codex, gemini,
                                     # cursor-agent, copilot, cline, opencode, kiro-cli
jit grant --process claude --profile myapp --for 8h
                                     # 아무도 응답하지 않는 프롬프트 없이 밤새 작업 허용
jit audit --parent claude            # 당신이 잠든 동안 정확히 무엇을 건드렸는지 읽기
  • 프롬프트가 에이전트를 이름으로 밝힙니다. 프로세스별 동의가 켜져 있을 때(기본값), 도구가 실제 자격 증명에 처음 접근하면 어떤 프로그램이 요청하는지 말하는 Touch ID가 표시됩니다. 이 페이지 상단의 두 스크린샷이 보여주는 것입니다: VS Code와 claude가 요청한 동일한 비밀, 각각 이름이 밝혀짐. ~/.aws/credentials를 조용히 읽는 에이전트는 프롬프트이지 조용한 성공이 아닙니다.
  • MCP 서버는 jit run을 통해 실행됩니다. 마이그레이션된 MCP 설정은 키가 아닌 볼트 경로를 보유하므로 설정 파일 자체는 디스크에 있어도 안전하고, 읽는 에이전트에게 넘겨줘도 안전합니다.
  • 승인되지 않은 읽기가 얻는 것은 미끼입니다. 저장소에서 .env를 grep하여 차갑게 읽는 에이전트는 자리 표시자 값을 얻고, 읽기는 기록됩니다.
  • jit audit --parent claude 는 에이전트가 사용한 모든 비밀, 트리거한 모든 프롬프트, 거절한 모든 것을 보여줍니다.

자세한 내용은 MCP / AI 도구 및 프로세스별 동의를 참조하세요.

감사 추적: 무슨 일이 있었고, 누가 했는가

모든 jit 명령과 모든 잠금 해제는 jit audit으로 읽는 내구성 있는 로그에 기록되며, 최신순, 이벤트당 key=value 한 줄이므로 실제 서비스 로그처럼 grep할 수 있습니다. 명령 인수는 마스킹되므로 로그는 명령이 실행되었음을 증명하면서도 전달한 비밀을 저장하지 않습니다.

root@kitploit:~
$ jit audit --since 1h
time=2026-07-24 10:15:04 level=info kind=cmd status=ok dur=312ms cmd="jit migrate ~/.aws/credentials" user=meni parent=claude
time=2026-07-24 10:16:22 level=info kind=use op="read a secret" cmd="aws s3 ls" parent=claude secrets=aws/default
time=2026-07-24 10:31:09 level=warn kind=unlock status=denied method=touchid-or-passcode cmd="node postinstall.js" parent=npm secrets=aws/default

가운데 줄은 jit이 존재하는 이유를 말하는 이야기입니다: aws/default는 claude가 실행한 aws s3 ls에 의해 읽혔습니다. 마지막은 거절한 프롬프트입니다: npm 아래의 node postinstall.js가 동일한 키에 접근하려 했으나 거부됨. jit은 또한 서비스가 소켓에서 거부한 것(커널이 당신의 것이 아니라고 말하는 프로세스가 에이전트를 탐색)을 kind=error로 기록합니다.

grep 대신 플래그로 좁히세요: --kind, --status ok|failed|denied, --since/--until(2h/3d 같은 기간 또는 날짜), --parent claude, --secret aws, --user, --grep <regexp>. --follow(-f)를 추가하면 tail -f처럼 새 이벤트를 실시간으로 스트리밍하거나, --format json으로 머신이 파싱 가능한 덤프를 얻습니다. 두 부분 모두 볼트 옆의 내구성 있는 파일이므로 지난 시간만큼 쉽게 지난 주도 설명합니다.

지원 내용

.env 파일, 셸 exports, AWS 및 Terraform, kubeconfig, Docker 레지스트리 로그인, GCP ADC, .npmrc / .netrc 토큰, MCP 서버 설정, 일반 토큰 파일, 셸 히스토리에 기록된 자격 증명, 래핑 가능한 CLI(gh, stripe, vercel, …), 로그인 시 자격 증명을 생성하는 SSO CLI (clisso). 모든 경우에 파일은 계속 작동하고 실제 값은 필요 시 볼트에서 옵니다.

각 도구에 정확히 무엇을 입력해야 하는지별로 그룹화된 전체 카탈로그는 **지원 도구**에 있습니다: 도구가 추가되거나 제거됨에 따라 코드를 추적합니다. 나열되지 않은 것도 jit wrap add로 래핑할 수 있습니다.

이미 1Password에 비밀을 보관하고 있나요? CLI가 설치되어 있으면 jit migrate는 복사 대신 연결합니다: 이미 1Password에 있는 값은 op:// 참조로 볼트에 저장되므로 1Password가 기록 시스템으로 유지되고 jit은 위의 모든 메커니즘을 통해 값을 적시에 전달합니다(jit vault link는 하나의 비밀을 수동으로 동일하게 수행).

되돌릴 수 있나요? 항상 그렇습니다.

jit은 자격 증명을 절대 파괴하지 않습니다. 마이그레이션은 값을 볼트로 이동하고 원래 위치에 작동하는 훅을 남깁니다(미끼 .env, 셸 설정의 eval "$(jit export)" 줄, ~/.aws/config의 credential_process = jit …, 또는 PATH 심). 그래서 도구는 필요 시 계속 해석합니다. 자격 증명은 여전히 존재하며, 평문 대신 암호화되어 있을 뿐입니다.

그리고 모든 변경은 되돌릴 수 있습니다. 파일을 건드리기 전에 jit은 암호화된 백업을 볼트에 저장하므로 jit migrate undo는 바이트 단위로 복원합니다:

root@kitploit:~
jit migrate ~/code/myapp        # 수정 적용, Touch ID 한 번
# 마음이 바뀌었거나, 무언가 고장났나요?
jit migrate undo ~/code/myapp   # 건드린 모든 파일 바이트 단위 복원

더 알아보기

문서는 docs/ 아래에 작업별로 구성되어 있습니다:

  • 빠른 시작: 설정, 마이그레이션, 수정과 함께 살기, 단계별
  • 작동 방식: 볼트, 서비스, 마운트, 심을 한 페이지에
  • FAQ: 개발자 및 보안 질문, 솔직하게 답변
  • 프로세스별 동의: 도구별 프롬프트가 하는 일, 조정 또는 끄는 방법
  • 프로세스 그랜트: 실행 중인 도구를 제한적이고, 취소 가능하며, 감사되는 기간 동안 무인 작업 사전 승인
  • 감사 추적: 모든 명령, 잠금 해제, 거부를 필터링 및 팔로우 가능하게 읽기
  • 명령어 참조: CLI에서 생성된 모든 명령과 플래그
  • 보안 아키텍처: 위협 모델과 정직한 한계
  • CONTRIBUTING.md: 빌드/테스트 설정; DCO(git commit -s)를 통한 서명, CLA 없음

라이선스

PolyForm Perimeter License 1.0.0 - 개인 및 회사 내부 용도로만 무료.

도구 다운로드