Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
autonoma — Обнаруживает и автоматически исправляет жестко закодированные секреты в Python-репозиториях — отказывается, когда исправление может сломать ваш код. | Kitploit
Инструменты/GitHubGitHub/vihaaninnovations/autonoma
Статический анализАнализ уязвимостейАнализ КодаDevSecOpsОбнаружение СекретовБезопасность Цепочки Поставок
GitHubvihaaninnovations/autonoma

autonoma

Обнаруживает и автоматически исправляет жестко закодированные секреты в Python-репозиториях — отказывается, когда исправление может сломать ваш код.

Репозиторий
23 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Autonoma

Python License Platform Edition PyPI Version

Autonoma обнаруживает жёстко зашитые секреты и заменяет их ссылками на os.environ[...] с помощью перезаписи AST. Изменения применяются только тогда, когда перезапись является детерминированной и сохраняет семантику.

Перезаписи используют разобранное синтаксическое дерево, а не регулярные выражения по сырому тексту.
Работает локально, без сетевых вызовов. Работает в CI с идемпотентными, минимальными изменениями.

Демо Autonoma


Какую проблему это решает

Жёстко зашитые секреты в кодовых базах:

  • секреты попадают в коммиты и остаются в истории git
  • ручное исправление ломает код или упускает краевые случаи
  • команды обнаруживают утечки, но избегают инструментов автоправки, потому что они небезопасны

Большинство инструментов их обнаруживают.
Autonoma трогает только то, что может гарантированно безопасно изменить.


Быстрый пример

root@kitploit:~
autonoma scan .
autonoma fix .
git diff

Установка

root@kitploit:~
pip install autonoma-cli

Интеграция с Pre-commit

Добавьте это в ваш .pre-commit-config.yaml, чтобы предотвратить попадание секретов в историю:

root@kitploit:~
- repo: local
  hooks:
    - id: autonoma
      name: Autonoma Scan
      entry: autonoma scan
      language: system
      types: [python]

Попробуйте за 60 секунд

root@kitploit:~
# 1. Создайте тестовый файл с жёстко зашитыми секретами
cat > test_secrets.py << 'EOF'
SENDGRID_API_KEY = "sg-live-abc123xyz789"
DB_PASSWORD = "Pr0dAccess2024!"
EOF

# Также создайте файл контракта окружения (требуется для безопасного исправления)
printf 'SENDGRID_API_KEY=\nDB_PASSWORD=\n' > .env.example

# 2. Сканирование — выводит результаты в JSON на stdout
autonoma scan test_secrets.py

# 3. Исправление — перезаписывает файл на месте
autonoma fix test_secrets.py

# 4. Сканирование снова — теперь должно быть чисто (код выхода 0)
autonoma scan test_secrets.py

# 5. Просмотрите результат
cat test_secrets.py

Ожидаемый вывод после исправления:

root@kitploit:~
import os
SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"]
DB_PASSWORD = os.environ["DB_PASSWORD"]

Команды

scan

Режим обнаружения. Выводит JSON в stdout и человекочитаемую сводку в stderr. Без изменений — никогда не модифицирует файлы.

root@kitploit:~
# Сканирование директории (результаты JSON в stdout)
autonoma scan src/

# Сохранение JSON-результатов в файл
autonoma scan src/ > findings.json

Коды выхода для scan:

КодЗначение
0Находок нет
1Есть находки
3Ошибка инструмента

fix

Исправляет жёстко зашитые секреты с помощью перезаписи AST. Изменяет файлы на месте.

root@kitploit:~
# Применить исправления
autonoma fix src/

# Предварительный просмотр изменений до записи
autonoma fix src/ --diff

# Записать журнал аудита исправлений
autonoma fix src/ --report-out audit.json

Коды выхода для fix:

КодЗначение
0Находок нет — репозиторий уже был чистым
1Находки существовали до исправления (исправление могло быть успешным — проверьте количество FIXED/REFUSED в выводе)
3Ошибка инструмента

Команда fix завершается с кодом 1 всегда, когда перед попыткой исправления были найдены секреты, независимо от того, удалась перезапись или нет. Это сделано намеренно: конвейеры CI должны помечать коммит, в котором были внесены секреты, даже после автоправки. После этого запустите autonoma scan, чтобы убедиться, что репозиторий чист.

history-scan

Сканирует историю git на предмет секретов, которые были закоммичены, а затем удалены или изменены.

[!NOTE] Только обнаружение. Эта команда не перезаписывает историю git и не изменяет коммиты.

root@kitploit:~
autonoma history-scan .

До / После

Вот шаблоны, которые Autonoma на самом деле исправляет сегодня.

До

root@kitploit:~
# settings.py
SENDGRID_API_KEY = "sg-live-abc123xyz789"
DB_PASSWORD = "Pr0dAccess2024!"

После (autonoma fix .)

root@kitploit:~
# settings.py
import os
SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"]
DB_PASSWORD = os.environ["DB_PASSWORD"]

Отказано (безопасность с отказом в первую очередь)

root@kitploit:~
# f-строка — отказано, потому что перезапись изменит семантику
api_key = f"prefix_{BASE_KEY}"
# → REFUSED: refuse_fstring_mixed_expression

# Словарь/вложенное значение — отказано, потому что цель не является простым присваиванием
DATABASES = {
    "default": {"PASSWORD": "Pr0d@ccess2024!"}
}
# → REFUSED: unsupported assignment target type

Отклонённые находки сообщаются в JSON-выводе и вызывают ненулевой код выхода в CI. Файлы с отклонёнными находками никогда не изменяются.


Что Autonoma исправляет и от чего отказывается


Возможности CI/CD

Повторный запуск на чистом файле не производит изменений. Перезаписи сохраняют исходные отступы и комментарии. import os добавляется только в том случае, если его нет.

Интеграция и CI/CD

GitHub Actions (только сканирование)

Чтобы завершать сборку с ошибкой при обнаружении секретов:

root@kitploit:~
- name: Scan for secrets
  run: autonoma scan .

Устаревшие команды

Команда analyze сохранена для обратной совместимости. Перейдите на scan или fix.

root@kitploit:~
# Эквивалент 'autonoma scan'
autonoma analyze src/ --detect-only

# Эквивалент 'autonoma fix'
autonoma analyze src/ --auto-fix

Ограничения и поведение

Что исправляется

  • Простые присваивания: API_KEY = "secret"
  • Атрибуты класса: class Config: PASS = "secret"
  • Именованные аргументы: connect(password="secret")

Что отклоняется (по замыслу)

  • Сложные выражения: f-строки, конкатенации или вызовы функций в правой части.
  • Неоднозначные цели: множественные присваивания (A = B = "secret") или распаковка кортежей.
  • Вложенные/словарные значения: значения внутри словарей, списков или кортежей.
  • Отсутствие контекста: если в репозитории не найден .env.example или контракт окружения.

Отклонённые случаи сообщаются в JSON-выводе и вызывают ненулевые коды выхода в CI. Файл никогда не изменяется, если хотя бы одна проблема в нём отклонена.

Что оно не делает

  • Не использует энтропию/угадывание (использует эвристическое сопоставление имён).
  • Не изменяет не-Python файлы в Community Edition.
  • Не удаляет ваш код; резервные копии записываются как <file>.bak перед изменением.

Текущие ограничения

SEC002 в настоящее время объединяет шаблоны значений учётных данных с логикой маршрутизации, обусловленной ключевыми словами. Учётные данные, присвоенные нетипичным именам переменных, могут в настоящее время не обнаруживаться.

Autonoma намеренно избегает широкого обнаружения секретов только на основе энтропии, если влияние точности не может быть измерено на размеченном корпусе ложноположительных срабатываний.


JSON-схема

autonoma scan выводит отчёт detect-only на stdout:

root@kitploit:~
{
  "schema_version": "1.0",
  "tool_name": "autonoma",
  "tool_version": "0.1.5",
  "generated_at": "2026-03-24T12:00:00Z",
  "mode": "detect-only",
  "summary": {
    "files_processed": 3,
    "total_findings": 2,
    "safe_to_fix": 1,
    "refused": 1
  },
  "findings": [
    {
      "file": "settings.py",
      "line": 4,
      "pattern_type": "api_key",
      "severity": "high",
      "rule_id": "SEC002",
      "safe_to_fix": true,
      "suggested_env_var": "SENDGRID_API_KEY",
      "refusal_reason": null,
      "fingerprint": "sha256:abc123..."
    }
  ]
}

Лицензия

Лицензия MIT

Скачать инструмент
ШаблонПримерПоведениеПочему
Простое присваиваниеapi_key = "sk-abc123"ИсправленоДетерминированная перезапись AST
Атрибут классаclass C: SECRET = "abc"ИсправленоДетерминированная перезапись AST
Именованный аргументconnect(password="abc")ИсправленоДетерминированная перезапись AST
f-строкаkey = f"prefix_{v}"ОтказаноПерезапись изменит поведение во время выполнения
Конкатенацияkey = "sk-" + suffixОтказаноПерезапись изменит поведение во время выполнения
Словарь/вложенное значениеcfg = {"pass": "abc"}ОтказаноНе является простой целью присваивания
Множественное присваиваниеA = B = "secret"ОтказаноНеоднозначная цель
Уже безопасноkey = os.getenv("KEY")ПропущеноИзменения не требуются
Отсутствует .env.exampleлюбой шаблонОтказаноНет контракта окружения для получения имени переменной