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

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

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

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

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

Категории

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

autonoma

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

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

Популярное

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

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

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

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

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

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 исправляет и от чего отказывается

    ШаблонПримерПоведениеПочему
    Простое присваивание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любой шаблонОтказаноНет контракта окружения для получения имени переменной

    Возможности 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

    Скачать инструмент