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

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

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

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

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

Категории

Все категории
Loading categories
git-secrets — Предотвращает случайную фиксацию секретов и учетных данных в git-репозиториях. | Kitploit
Инструменты/GitHubGitHub/awslabs/git-secrets
Анализ КодаАудит конфигурацииDevSecOpsОбнаружение Секретов
GitHubawslabs/git-secrets

git-secrets

Предотвращает случайную фиксацию секретов и учетных данных в git-репозиториях.

Репозиторий
13.4k1.3k11 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

=========== git-secrets


Предотвращает добавление паролей и другой конфиденциальной информации в git-репозиторий.

.. contents:: :depth: 2

Описание

::

root@kitploit:~
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<файлы>...]
git secrets --scan-history
git secrets --install [-f|--force] [<целевой-каталог>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <шаблон>
git secrets --add-provider [--global] <команда> [аргументы...]
git secrets --register-aws [--global]
git secrets --aws-provider [<файл-учётных-данных>]

Описание

git-secrets сканирует коммиты, сообщения коммитов и слияния --no-ff, чтобы предотвратить попадание секретов в ваши git-репозитории. Если коммит, сообщение коммита или любой коммит в истории слияния --no-ff соответствует одному из настроенных вами запрещённых шаблонов регулярных выражений, то коммит отклоняется.

Установка git-secrets

git-secrets должен быть помещён в вашу переменную PATH, чтобы git мог его найти при выполнении git secrets.

*nix (Linux/macOS)

root@kitploit:~

Вы можете использовать цель ``install`` из предоставленного Makefile для установки ``git secrets`` и man-страницы.
Вы можете настроить путь установки с помощью переменных PREFIX и MANPREFIX.

::

    make install

Windows
~~~~~~~

Запустите предоставленный PowerShell-скрипт ``install.ps1``. Он скопирует необходимые файлы
в каталог установки (по умолчанию ``%USERPROFILE%/.git-secrets``) и добавит
этот каталог в переменную PATH текущего пользователя.

::

    PS > ./install.ps1

Homebrew (для пользователей macOS)

::

root@kitploit:~
brew install git-secrets

.. warning::

root@kitploit:~
**Вы ещё не закончили! Вы ОБЯЗАТЕЛЬНО должны установить git-хуки для каждого репозитория, в котором
хотите использовать** ``git secrets --install``.

Вот краткий пример того, как обеспечить сканирование git-репозитория на наличие секретов при каждом коммите::

root@kitploit:~
cd /path/to/my/repo
git secrets --install
git secrets --register-aws

Расширенная настройка

Добавьте шаблон конфигурации, если хотите добавлять хуки во все репозитории, которые вы инициализируете или клонируете в будущем.

::

root@kitploit:~
git secrets --register-aws --global

Добавьте хуки во все ваши локальные репозитории.

::

root@kitploit:~
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets

Добавьте собственные поставщики для сканирования учётных данных безопасности.

::

root@kitploit:~
git secrets --add-provider -- cat /path/to/secret/file/patterns

Перед публикацией репозитория

С помощью git-secrets также можно сканировать репозиторий, включая все ревизии:

::

root@kitploit:~
git secrets --scan-history

Параметры

Режимы работы

root@kitploit:~

Каждый из этих параметров должен быть первым в командной строке.

``--install``
    Устанавливает git-хуки для репозитория. После установки хуков для git-репозитория
    коммиты и не-ff слияния для этого репозитория будут предотвращены от
    добавления секретов.

``--scan``
    Сканирует один или несколько файлов на наличие секретов. Если файл содержит секрет,
    совпавший текст из сканируемого файла будет выведен в stdout, и
    скрипт завершится с ненулевым статусом. Каждая совпавшая строка будет выведена с
    именем файла, который совпал, двоеточием, номером совпавшей строки,
    двоеточием и затем текстом совпавшей строки. Если файлы не указаны,
    сканируются все файлы, возвращаемые ``git ls-files``.

``--scan-history``
    Сканирует репозиторий, включая все ревизии. Если файл содержит секрет,
    совпавший текст из сканируемого файла будет выведен в stdout, и
    скрипт завершится с ненулевым статусом. Каждая совпавшая строка будет выведена с
    именем файла, двоеточием, номером строки, двоеточием и затем текстом строки.

``--list``
    Выводит конфигурацию ``git-secrets`` для текущего репозитория или в глобальной
    конфигурации git.

``--add``
    Добавляет запрещённый или разрешённый шаблон.

``--add-provider``
    Регистрирует поставщика секретов. Поставщики секретов — это исполняемые файлы, которые
    при вызове выводят запрещённые шаблоны, которые ``git-secrets`` должен
    считать запрещёнными.

``--register-aws``
    Добавляет общие шаблоны AWS в git-конфиг и гарантирует, что ключи,
    присутствующие в ``~/.aws/credentials``, не будут обнаружены ни в одном коммите.
    Добавляются следующие проверки:

    - Идентификаторы ключей доступа AWS через ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
    - Ключи API Amazon Bedrock. Долгоживущие через ``ABSK[A-Za-z0-9+/]{109,}=*`` и краткосрочные через ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
    - Назначения секретных ключей доступа AWS через ":" или "=" с возможными кавычками
    - Назначения идентификаторов аккаунта AWS через ":" или "=" с возможными кавычками
    - Разрешённые шаблоны для примеров ключей AWS (``AKIAIOSFODNN7EXAMPLE`` и
      ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
    - Известные учётные данные из ``~/.aws/credentials``

    .. note::

        Хотя шаблоны, зарегистрированные этой командой, должны обнаруживать большинство
        экземпляров учётных данных AWS, эти шаблоны **не гарантируют** их обнаружения
        **всех**. ``git-secrets`` следует использовать как дополнительное средство
        защиты — вам всё равно нужно проявлять должную осмотрительность, чтобы
        не допустить добавления учётных данных в репозиторий.

``--aws-provider``
    Поставщик секретов, который выводит учётные данные, найденные в INI-файле. Вы можете
    дополнительно указать путь к INI-файлу.


Параметры для ``--install``

-f, --force Перезаписывает существующие хуки, если они присутствуют.

<целевой-каталог> При указании устанавливает git-хуки в заданный каталог. Если <целевой-каталог> не указан, используется текущий каталог.

root@kitploit:~
Если указанный ``<целевой-каталог>`` не находится в git-репозитории,
каталог будет создан, а хуки будут помещены в
``<целевой-каталог>/hooks``. Это может быть полезно для создания каталогов шаблонов git,
используемых с ``git init --template <целевой-каталог>``.

Вы можете выполнить ``git init`` в репозитории, который уже был инициализирован.
Из `документации git init <https://git-scm.com/docs/git-init>`_:

    Из документации git: Выполнение ``git init`` в существующем репозитории
    безопасно. Он не перезаписывает уже существующие файлы.
    Основная причина повторного запуска ``git init`` — применить вновь добавленные
    шаблоны (или переместить репозиторий в другое место, если указан
    ``--separate-git-dir``).

Устанавливаются следующие git-хуки:

1. ``pre-commit``: Используется для проверки, не содержат ли файлы, изменённые в коммите,
   запрещённых шаблонов.
2. ``commit-msg``: Используется для определения, содержит ли сообщение коммита
   запрещённые шаблоны.
3. ``prepare-commit-msg``: Используется для определения, приведёт ли коммит слияния
   к истории, содержащей запрещённый шаблон в какой-либо точке.
   Обратите внимание, что этот хук вызывается только для не-ff слияний.

.. note::

    Git позволяет выполнять только один скрипт на хук. Если репозиторий
    содержит подкаталоги в стиле Debian, такие как ``pre-commit.d``
    и ``commit-msg.d``, то git-хуки будут установлены в эти
    каталоги, предполагая, что вы настроили соответствующие
    хуки на выполнение всех скриптов, находящихся в этих каталогах. Если
    эти подкаталоги git отсутствуют, то git-хуки будут установлены
    в каталог ``.git/hooks`` git-репозитория.

Примеры ^^^^^^^^

Установить git-хуки в текущий каталог::

root@kitploit:~
cd /path/to/my/repository
git secrets --install

Установить git-хуки в репозиторий, отличный от текущего каталога::

root@kitploit:~
git secrets --install /path/to/my/repository

Создать git-шаблон с установленным git-secrets, а затем скопировать этот шаблон в git-репозиторий::

root@kitploit:~
git secrets --install ~/.git-templates/git-secrets
git init --template ~/.git-templates/git-secrets

Перезаписать существующие хуки, если они присутствуют::

root@kitploit:~
git secrets --install -f

Параметры для --scan

root@kitploit:~

``-r, --recursive``
    Сканирует указанные файлы рекурсивно. Если встречается каталог,
    он будет просканирован. Если ``-r`` не указан, каталоги игнорируются.

    ``-r`` нельзя использовать вместе с ``--cached``, ``--no-index`` или
    ``--untracked``.

``--cached``
    Ищет blobs, зарегистрированные в индексном файле.

``--no-index``
    Ищет файлы в текущем каталоге, не управляемые git.

``--untracked``
    В дополнение к поиску в отслеживаемых файлах в рабочем дереве,
    ``--scan`` также ищет в неотслеживаемых файлах.

``<файлы>...``
    Путь к одному или нескольким файлам на диске для сканирования на секреты.

    Если файлы не указаны, сканируются все файлы, возвращаемые ``git ls-files``.


Примеры
^^^^^^^^

Сканировать все файлы в репозитории::

    git secrets --scan

Сканировать один файл на секреты::

    git secrets --scan /path/to/file

Сканировать каталог рекурсивно на секреты::

    git secrets --scan -r /path/to/directory

Сканировать несколько файлов на секреты::

    git secrets --scan /path/to/file /path/to/other/file

Можно сканировать по маске::

    git secrets --scan /path/to/directory/*

Сканировать из stdin::

    echo 'hello!' | git secrets --scan -


Параметры для ``--list``

--global Выводит только конфигурацию git-secrets из глобального git-конфига.

Параметры для --add

root@kitploit:~

``--global``
    Добавляет шаблоны в глобальный git-конфиг

``-l, --literal``
    Экранирует специальные символы регулярных выражений в указанном шаблоне, так
    что шаблон ищется буквально.

``-a, --allowed``
    Помечает шаблон как разрешённый вместо запрещённого. Разрешённые шаблоны
    используются для фильтрации ложных срабатываний.

``<шаблон>``
    Регулярное выражение для поиска.


Примеры
^^^^^^^^

Добавить запрещённый шаблон в текущий репозиторий::

    git secrets --add '[A-Z0-9]{20}'

Добавить запрещённый шаблон в глобальный git-конфиг::

    git secrets --add --global '[A-Z0-9]{20}'

Добавить строку, которая ищется буквально (``+`` экранирован)::

    git secrets --add --literal 'foo+bar'

Добавить разрешённый шаблон::

    git secrets --add -a 'allowed pattern'


Параметры для ``--register-aws``

--global Добавляет специфичные для AWS переменные конфигурации в глобальный git-конфиг.

Параметры для --aws-provider

root@kitploit:~

``[<файл-учётных-данных>]``
    Если указан, задаёт пользовательский путь к INI-файлу для сканирования. Если не
    указан, используется ``~/.aws/credentials``.


Параметры для ``--add-provider``

--global Добавляет поставщика в глобальный git-конфиг.

<команда> Команда поставщика для вызова. При вызове команда должна выводить запрещённые шаблоны, разделённые новыми строками, в stdout. Любые дополнительные аргументы передаются команде.

Примеры ^^^^^^^^

Регистрирует поставщика секретов с аргументами::

root@kitploit:~
git secrets --add-provider -- git secrets --aws-provider

Извлекает секреты из файла::

root@kitploit:~
git secrets --add-provider -- cat /path/to/secret/file/patterns

Определение запрещённых шаблонов

Для определения, содержит ли коммит или сообщение коммита запрещённые шаблоны, используются регулярные выражения, совместимые с egrep. Эти регулярные выражения определяются с помощью команды git config. Важно отметить, что в разных системах используются разные версии egrep. Например, при работе на macOS вы будете использовать другую версию egrep, чем при работе, например, на Ubuntu (BSD vs GNU).

Вы можете добавить запрещённые шаблоны регулярных выражений в свой git-конфиг с помощью git secrets --add <шаблон>.

Игнорирование ложных срабатываний

Иногда регулярное выражение может давать ложные срабатывания. Например, SHA коммитов git очень похожи на ключи доступа AWS. Вы можете указать множество различных шаблонов регулярных выражений как ложные срабатывания с помощью следующей команды:

::

root@kitploit:~
git secrets --add --allowed 'my regex pattern'

Вы также можете добавить шаблоны регулярных выражений для фильтрации ложных срабатываний в файл .gitallowed, находящийся в корневом каталоге репозитория. Строки, начинающиеся с #, пропускаются (строка комментария), а пустые строки также пропускаются.

Сначала git-secrets извлекает все строки из файла, содержащие запрещённое совпадение. В результаты совпадений включается полный путь к имени файла, который был сопоставлен, затем ':', затем номер строки, которая была сопоставлена, и затем вся строка из файла, которая была сопоставлена с шаблоном секрета. Затем, если вы определили разрешённые регулярные выражения, git-secrets проверяет, соответствуют ли все сопоставленные строки хотя бы одному из ваших зарегистрированных разрешённых регулярных выражений. Если все строки, которые были помечены как секретные, отменяются разрешённым совпадением, то проверяемый текст не содержит секретов. Если хотя бы одна из сопоставленных строк не соответствует разрешённому регулярному выражению, то git-secrets отклоняет коммит/слияние/сообщение.

.. important::

root@kitploit:~
Точно так же, как плохой практикой является добавление слишком «жадных» запрещённых шаблонов,
также плохой практикой является добавление слишком «снисходительных» разрешённых шаблонов.
Обязательно тестируйте свои шаблоны с помощью ad-hoc вызовов
``git secrets --scan $имя_файла``, чтобы убедиться, что они работают как задумано.

Поставщики секретов

Иногда вам нужно проверить точное совпадение шаблона с набором известных секретов. Например, вы можете гарантировать, что ни одни учётные данные, присутствующие в ~/.aws/credentials, никогда не появятся в коммите. В таких случаях лучше оставить эти секреты в одном месте, а не распространять их по git-репозиториям в git-конфигах. Вы можете использовать «поставщиков секретов» для получения таких типов учётных данных. Поставщик секретов — это исполняемый файл, который при вызове выводит запрещённые шаблоны, разделённые новыми строками.

Вы можете добавить поставщиков секретов с помощью команды --add-provider::

root@kitploit:~
git secrets --add-provider -- git secrets --aws-provider

Обратите внимание на использование --. Это гарантирует, что любые аргументы, связанные с поставщиком, передаются поставщику каждый раз при его вызове при сканировании секретов.

Пример пошагового использования

Давайте рассмотрим пример. Дано следующее проверяемое текст (сохранён в /tmp/example)::

root@kitploit:~
This is a test!
password=ex@mplepassword
password=******
More test...

И следующие зарегистрированные шаблоны:

::

root@kitploit:~
git secrets --add 'password\s*=\s*.+'
git secrets --add --allowed --literal 'ex@mplepassword'

Выполнение git secrets --scan /tmp/example приведёт к следующей ошибке в выводе::

root@kitploit:~
/tmp/example:3:password=******

[ERROR] Matched prohibited pattern

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- Use --no-verify if this is a one-time false positive

Разберём это. Значение запрещённого шаблона password\s*=\s*.+ будет соответствовать следующим строкам::

root@kitploit:~
/tmp/example:2:password=ex@mplepassword
/tmp/example:3:password=******

...Но первое совпадение будет отфильтровано благодаря тому, что оно соответствует разрешённому регулярному выражению ex@mplepassword. Поскольку осталась строка, которая не была сопоставлена, она считается секретом.

Поскольку совпадающие строки помещаются в строки, начинающиеся с имени файла и номера строки (например, /tmp/example:3:...), вы можете создавать разрешённые шаблоны, которые учитывают имена файлов и номера строк в регулярном выражении. Например, вы можете внести весь файл в белый список, используя что-то вроде::

root@kitploit:~
git secrets --add --allowed '/tmp/example:.*'
git secrets --scan /tmp/example && echo $?
# Вывод: 0

В качестве альтернативы вы можете разрешить конкретный номер строки файла, если эта строка вряд ли изменится, используя что-то подобное:

::

root@kitploit:~
git secrets --add --allowed '/tmp/example:3:.*'
git secrets --scan /tmp/example && echo $?
# Вывод: 0

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

Пропуск проверки

Используйте параметр --no-verify в случае ложного срабатывания при коммите, слиянии или сообщении коммита. Это пропустит выполнение git-хука и позволит вам выполнить коммит или слияние.

О проекте

  • Автор: Michael Dowling <https://github.com/mtdowling>_
  • Трекер задач: Исходный код и трекер задач этого проекта находятся по адресу https://github.com/awslabs/git-secrets <https://github.com/awslabs/git-secrets>_
  • Особая благодарность Адриану Ватчински и Ари Джуэлсу из Корнелльского университета за предоставление предложений и обратной связи.

Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.

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