업데이트로 돌아가기
New releaseAug 22, 2026

credactor v2.6.0

스캔. 삭제. 깨끗한 커밋.

공유

PyPI CI License

Credactor

비밀을 찾아라. 고쳐라. 깨끗하게 커밋하라.

시크릿 스캐너는 경보를 울리는 데는 능숙하지만, 불을 끄는 데는 별로 도움이 되지 않습니다. 유출된 자격 증명 목록을 건네주고 정리는 사용자 몫으로 남겨둡니다. Credactor는 그 순환을 완성합니다. 하드코딩된 비밀을 찾아 그 자리에서 다시 작성하므로, 유출이 탐지에서 수정까지 단 하나의 명령으로 해결됩니다.

소스 코드에서 자격 증명을 제외하는 것은 선택이 아닌 기본 보안 관행입니다. Credactor는 커밋 전 로컬 머신에서든, 병합 전 CI에서든 그 기준을 저렴하게 유지할 수 있게 해줍니다. 단독으로 실행하거나, 이미 신뢰하는 스캐너와 함께 실행하세요.

Credactor: scan, redact, commit clean
# Credactor는 이것을 찾습니다:
db_password = "h8Tq2vKp9mRz4Wd"

# 기본적으로 비밀을 런타임에 크게 실패하는 센티널로 다시 작성합니다:
db_password = "REDACTED_BY_CREDACTOR"

# --replace-with env를 사용하면 환경에서 읽는 참조를 작성합니다:
db_password = os.environ["DB_PASSWORD"]

편집은 작업 트리의 파일을 다시 작성합니다. 비밀이 이미 커밋된 경우 키를 교체하고 기록도 정리하세요(예: git filter-repo 사용). 파일을 다시 작성하는 것은 유출된 자격 증명을 폐기하는 것을 대체하지 않습니다.


왜 Credactor인가

  • 탐지만이 아닌 편집. 대부분의 스캐너는 발견 단계에서 멈춥니다. Credactor는 비밀을 그 자리에서 대체합니다. 기본적으로 런타임에 실패하는 큰 REDACTED_BY_CREDACTOR 센티널이거나, 언어를 인식하는 환경 변수 참조(Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP, 셸) 예: os.environ["KEY"]입니다. 대체물은 유효한 코드입니다. 파일에 해당 import(예: import os)가 이미 포함되어 있지 않으면 추가하세요.
  • 기본적으로 안전. 원자적 쓰기, 자동 .bak 백업, 심볼릭 링크 경계 및 파일 권한 가드, 모든 출력에서 전체 비밀 마스킹. 안전한 백업을 쓸 수 없으면 Credactor는 맹목적으로 다시 쓰는 대신 파일을 건너뜁니다. 쓰기 중 충돌이 발생해도 원본은 그대로 유지됩니다.
  • 런타임 의존성 제로. 순수 Python 3.11+ 표준 라이브러리, 비-UTF-8 인코딩용 선택적 추가 기능.
  • 파이프라인에 최적화. GitHub Code Scanning용 SARIF 출력, 정확한 종료 코드가 있는 읽기 전용 --ci 게이트, pre-commit 훅(베타), Gitleaks 또는 TruffleHog 보고서 수집. Gitleaks 또는 TruffleHog로 탐지하고, Credactor로 수정하세요.

설치

pip install credactor

Python 3.11+ 필요. 다른 의존성 없음. Linux, macOS, Windows에서 실행(Linux 및 Windows에서 CI 테스트 완료).

소스에서:

git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .

그러면 credactor가 모든 디렉터리에서 작동합니다.

빠른 시작

먼저 --dry-run을 실행하고 편집 전에 결과를 검토하세요. 오탐이 가능하며, --fix-all에서는 오탐이 다시 작성됩니다. 알려진 안전 값은 # credactor:ignore 또는 .credactorignore 항목으로 억제하세요.

credactor --dry-run .                 # 스캔, 아무것도 변경하지 않음
credactor .                           # 스캔 후 대화형으로 편집(발견 항목당 y/n)
credactor --fix-all .                 # 한 번의 확인 후 모든 항목 편집
credactor --fix-all --yes .           # 비대화형으로 편집(CI / 스크립트)
credactor --ci .                      # 읽기 전용 게이트: 발견 시 exit 1
credactor --replace-with env .        # 센티널 대신 환경 변수 참조로 편집

Pre-commit 훅(베타)

훅 통합은 베타입니다. 단독으로 의존하기 전에 수동으로 credactor --dry-run .을 실행하세요.

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/rxb06/credactor
    rev: v2.6.0   # 최신 릴리스 태그로 고정
    hooks:
      - id: credactor

탐지

Credactor는 가장 자주 유출되는 자격 증명 유형을 탐지하고, 각각에 심각도를 할당하여 한눈에 분류할 수 있게 합니다.

카테고리예시심각도
클라우드 제공업체 키AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…)치명적
플랫폼 토큰GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-)치명적
개인 키PEM 블록 (-----BEGIN … PRIVATE KEY-----)치명적
JWTeyJ… 3-세그먼트 토큰높음
연결 문자열인라인 자격 증명이 있는 URL (scheme://user:pass@host)높음
자격 증명 변수password = "…", api_key = "…", secret_key = "…"높음/중간/낮음
XML 속성<add key="Password" value="…" />높음/중간/낮음
고엔트로피 문자열따옴표로 묶인 16진수(32–64자) / Base64(60+자)중간/낮음

결정적 제공업체 토큰(위 접두사)은 엔트로피와 관계없이 플래그됩니다. 휴리스틱 탐지기(JWT, 연결 문자열, 16진수, Base64)는 엔트로피 기준을 통과해야 합니다. 독립형 16진수 또는 Base64는 따옴표로 묶인 경우에만 플래그됩니다. 따옴표가 없는 고엔트로피 값은 자격 증명 이름의 변수에서만 감지되며, 이는 git SHA와 체크섬을 보호합니다. 전체 탐지 및 심각도 규칙은 매뉴얼을 참조하세요.

Credactor의 기본 규칙 세트는 전용 스캐너보다 좁으며, 일부 제공업체 형식(예: SendGrid, Twilio, Slack 웹훅)은 탐지되지 않습니다. 강점은 수정입니다. 가장 넓은 탐지를 위해 Gitleaks 또는 TruffleHog와 함께 사용하거나 단독으로 실행하세요.

다른 스캐너와 함께 사용하여 모두 편집

Credactor는 단독으로도 훌륭하며, 함께 사용하면 더 강력해집니다. 이미 Gitleaks 또는 TruffleHog를 실행 중인가요? 해당 보고서를 Credactor에 전달하면 자체 발견 항목과 중복 제거된 결합 세트를 편집합니다(중복 시 더 높은 심각도가 우선). 하나의 수정 패스로 스캔과 그들의 스캔을 모두 처리합니다:

gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .

--from-gitleaks / --from-trufflehog(또는 .credactor.toml[ingest] 테이블)는 디렉터리 대상을 요구합니다 — Credactor를 스캐너가 실행한 동일한 루트로 지정하세요. 보고서 경로는 작업 디렉터리를 기준으로 해석되며, 보고서는 스냅샷입니다. 편집하거나 트리를 변경한 후에는 다시 생성하세요. CI 통합 가이드를 참조하세요.

추가 기능

  • 대화형 또는 일괄 편집; --replacement를 통한 사용자 지정 대체 문자열; git 커밋 기록 스캔용 --scan-history
  • 안전한 백업: --secure-delete(.bak 덮어쓰기 및 제거; 일반적인 복구에 대한 장벽을 높이지만 포렌식 보장은 아님) 또는 저장소 외부에 백업을 저장하는 --secure-backup-dir
  • 인라인 # credactor:ignore.credactorignore 허용 목록(글로브, file:line, 값 리터럴)
  • .credactor.toml을 통한 저장소별 구성
  • 기본 제공 29개 소스/구성/메모 파일 유형(.txt 포함); JSON 포함용 --scan-json; 파일을 읽을 수 없을 때 실패하는 --fail-on-error

스캔 파일 유형

.py .js .ts .jsx .tsx .sh .bash .env .cfg .ini .toml .yaml .yml .rb .go .java .php .cs .kt .tf .hcl .conf .config .properties .xml .pem .key .crt .txt

또한 .env.* / .env-* 변형(.env.local, .env.production) 및 SSH / 개인 키 파일(id_rsa, id_dsa, id_ecdsa, id_ed25519) — 모두 확장자가 아닌 파일 이름으로 매칭됩니다. JSON은 API 응답이 높은 오탐률을 생성하므로 기본적으로 제외됩니다. 포함하려면 --scan-json을 추가하세요. 명령줄에서 직접 지정된 파일은 확장자가 이 목록에 없어도 스캔됩니다.

종료 코드

코드의미
0발견 항목 없음 또는 모두 해결됨
1해결되지 않은 발견 항목
2오류(예: 잘못된 경로, 위험한 --replacement, --ci --fix-all, 누락되거나 유효하지 않은 수집 보고서, 또는 읽을 수 없는 파일과 함께 --fail-on-error)

공급망 강화

보안 도구는 실행하기에 안전할 뿐만 아니라 설치하기에도 안전해야 합니다. Credactor의 빌드 및 릴리스 파이프라인은 끝에서 끝까지 강화되어 있습니다. 자세한 내용은 보안 문서를 참조하세요.

  • 런타임 의존성 제로. 기본 pip install credactor는 타사 패키지를 가져오지 않으므로(선택적 [encoding] 추가 기능만) 설치 시 검증할 것이 없습니다.
  • 해시 고정 도구 체인. CI 및 릴리스 빌드는 --require-hashes 잠금 파일에서 설치하며, 빌드 백엔드 포함(고정된 setuptools에 대한 python -m build --no-isolation)이므로 변조된 의존성은 빌드를 실패시킵니다.
  • 아티팩트를 소스와 바이트 단위로 검증. 모든 푸시 및 모든 게시 전에 scripts/audit_wheel.py가 wheel과 sdist를 커밋된 소스와 바이트 단위로 비교합니다(sha256 대 git HEAD). 추가, 누락 또는 변경된 파일이 있으면 게이트가 실패하므로 빌드 단계가 눈에 띄지 않게 코드를 주입할 수 없습니다.
  • SHA 고정, 최소 권한 CI. GitHub Actions는 커밋 SHA에 고정되며, 워크플로 토큰은 좁게 유지됩니다 — 기본적으로 contents: read, 게시 작업에만 id-token: write.

문서

문서설명
설정 가이드설치, 구성, CI/CD 통합
매뉴얼전체 참조: 모든 플래그, 모드, 조합, 대체 및 백업 동작, 탐지 및 심각도, 종료 코드, 제한 사항(동작 테스트 검증됨)
예시출력이 포함된 일반적인 워크플로
CI 통합Pre-commit 훅, CI 파이프라인
보안위협 모델, 강화 조치, 알려진 제한 사항
변경 로그버전 기록
기여개발 설정, 코드 스타일, PR 프로세스
면책 조항제한 사항, 안전한 사용, 보증

라이선스

Apache 2.0. LICENSE 참조.

카테고리