
credactor v2.6.0
Сканируй. Редактируй. Коммить чисто.
Credactor
Найди секрет. Исправь его. Коммить чисто.
Сканеры секретов хороши в том, чтобы бить тревогу, но почти не помогают её потушить. Они выдают список утекших учётных данных, а всю чистку оставляют вам. Credactor замыкает цикл: он находит жёстко закодированный секрет и перезаписывает его на месте, так что утечка превращается из обнаружения в исправление одной командой.
Хранение учётных данных в исходном коде — это базовая практика безопасности, а не опциональная. Credactor делает соблюдение этой практики дешёвым — на вашей машине перед коммитом или в CI перед слиянием. Запускайте его отдельно или вместе с уже используемыми сканерами.
# 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 и shell) видаos.environ["KEY"]. Замена является валидным кодом. Если в файле ещё нет соответствующего импорта (например,import os), добавьте его. - Безопасность по умолчанию. Атомарная запись, автоматические резервные копии
.bak, защита от пересечения границ симлинков и прав доступа к файлам, полное маскирование секретов в каждом выводе. Если безопасную резервную копию записать невозможно, Credactor пропускает файл, а не перезаписывает вслепую; сбой во время записи оставляет оригинал нетронутым. - Нулевые зависимости времени выполнения. Чистая стандартная библиотека Python 3.11+, плюс необязательное расширение для кодировок, отличных от UTF-8.
- Создан для конвейера. Вывод SARIF для GitHub Code Scanning, режим только для чтения
--ciс точными кодами выхода, хук pre-commit (бета) и импорт отчётов Gitleaks или TruffleHog (БЕТА, и другие в разработке). Обнаруживайте с Gitleaks или TruffleHog, исправляйте с Credactor.
Установка
pip install credactor
Требуется Python 3.11+. Других зависимостей нет. Работает на Linux, macOS и Windows (протестировано в CI на Linux и Windows).
Из исходников:
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 . # шлюз только для чтения: выход 1 при находках
credactor --replace-with env . # редактировать в ссылки на переменные окружения вместо стража
Хук pre-commit (бета)
Интеграция хука находится в стадии бета. Перед тем как полагаться только на него, выполните
credactor --dry-run .вручную.
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.5.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-----) | Критический |
| JWT | eyJ… трёхсегментные токены | Высокий |
| Строки подключения | URL с встроенными учётными данными (scheme://user:pass@host) | Высокий |
| Переменные с учётными данными | password = "…", api_key = "…", secret_key = "…" | Высокий/Средний/Низкий |
| XML-атрибуты | <add key="Password" value="…" /> | Высокий/Средний/Низкий |
| Строки с высокой энтропией | шестнадцатеричные строки в кавычках (32–64 символов) / Base64 (60+ символов) | Средний/Низкий |
Детерминированные токены провайдеров (префиксы выше) помечаются независимо от энтропии. Эвристические детекторы (JWT, строки подключения, hex, Base64) должны пройти порог энтропии. Отдельные hex- или Base64-строки помечаются только если они в кавычках. Незакавыченное значение с высокой энтропией обнаруживается только на переменной с именем, содержащим учётные данные, что исключает 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 (или таблица [ingest] в .credactor.toml) требуют указания целевой директории. См. Руководство по интеграции CI.
Дополнительные возможности
- Интерактивное или пакетное редактирование; пользовательская строка замены через
--replacement;--scan-historyдля сканирования истории коммитов git - Безопасные резервные копии:
--secure-delete(перезапись и удаление.bak; повышает планку для случайного восстановления, но не является криминалистической гарантией) или--secure-backup-dirдля хранения резервных копий вне репозитория - Белые списки через
# credactor:ignoreи.credactorignore(глобусы,file:line, литералы значений) - Конфигурация на репозиторий через
.credactor.toml - 29 типов исходных/конфигурационных/заметочных файлов «из коробки» (включая
.txt);--scan-jsonдля включения 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 и сборки релизов используют lockfile с
--require-hashes, включая сборочный бэкенд (python -m build --no-isolationс закреплённым setuptools), так что подделанная зависимость не пройдёт сборку. - Побайтовая проверка артефактов на соответствие исходному коду. При каждом пуше и перед каждой публикацией
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.