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

Функционал доступен в Self-hosted версиях GitFlic


Поиск секретов (Secrets Detection) — это процесс автоматического обнаружения чувствительных данных, таких как пароли, ключи, токены доступа и другие конфиденциальные настройки, которые могут случайно попасть в исходный код, конфигурационные файлы или другие артефакты разработки. Наличие таких секретов в репозитории может представлять угрозу безопасности, поэтому важно их своевременно выявлять и удалять.

Чтобы минимизировать риск появления секретов в коммитах, рекомендуется использовать Gitleaks — это SAST-инструмент с открытым исходным кодом, разработанный для поиска секретов в коде.

Интеграция Gitleaks с GitFlic через использование pre-receive хука

pre-receive хуки — это скрипты, которые запускаются на сервере Git перед принятием новых коммитов. Они позволяют проверять входящие изменения и отклонять их при нарушении условий, например, если найдены секреты.

Установка Gitleaks

Чтобы интегрировать Gitleaks в ваш рабочий процесс, его нужно установить на сервере с GitFlic, где будут выполняться pre-receive хуки. Инструкции по установке доступны в официальном репозитории Gitleaks.

Пример установки Gitleaks на Linux (Ubuntu):

apt update
apt install gitleaks

После успешной установки вы можете настроить хук для автоматической проверки каждого коммита на наличие секретов перед его приёмом в репозиторий.

Структура хуков в GitFlic

На сервере с GitFlic, в котором размещён ваш Git-репозиторий, хуки хранятся в директории проекта. При стандартной инсталляции GitFlic, путь до директории хуков выглядит примерно так: /var/tmp/gitflic/repo/c20242c3-1234-5678-90ab-49afff94c56c.git/hooks, где c20242c3-1234-5678-90ab-49afff94c56c — uuid проекта. В этой папке хранятся все исполняемые скрипты, которые выполняются при возникновении соответствующего события (например, pre-receive, post-receive и другие).

Каждый файл хука должен быть назван в соответствии с его типом. Если вы хотите создать pre-receive хук, файл скрипта должен быть назван pre-receive и должен иметь права на выполнение.

Пример использования gitleaks с помощью pre-reсeive хука

Ниже приведён пример скрипта pre-receive хука, который проверяет новые коммиты на наличие секретов с использованием Gitleaks.

Создайте в директории хуков hooks файл pre-receive:

#!/bin/bash

echo "Check commits for secrets"

zero_commit="0000000000000000000000000000000000000000"
excludeExisting="--not --all"

while read old_sha new_sha refname; do
    echo "$old_sha $new_sha $refname"

    # Check for new branch
    if [ "$old_sha" = "$zero_commit" ]; then
      new_commits=(`git rev-list $new_sha $excludeExisting`)
    else
      new_commits=(`git rev-list $old_sha..$new_sha $excludeExisting`)
    fi
    
    output=$(gitleaks git -v --log-opts="${new_commits[-1]}^! ${new_commits[0]}" --exit-code 1 ../ 2>&1)

    #код возврата последнего процесса
    status=$?

    if [ $status -ne 0 ]; then
      echo "$output"
      exit 1
    fi
done
exit 0 

Сделайте файл исполняемым:

chmod +x pre-receive

Теперь при каждой отправке изменений в репозиторий будет срабатывать данный скрипт.

Как он работает:

  • Скрипт считывает диапазон новых коммитов, которые должны быть проверены.
  • Проверка на новую ветку: Если ветка создаётся заново, проверяются все коммиты в этой ветке. В противном случае проверяются только коммиты, добавленные в процессе слияния или изменений.
  • Запуск Gitleaks: Для каждого коммита запускается Gitleaks с опцией –exit-code 1, чтобы остановить процесс, если найдены секреты.
  • Отклонение изменений: Если в коммитах обнаружены секреты, хук выводит результат проверки и прерывает процесс, возвращая код ошибки 1, который блокирует приём коммитов на сервере.