Все, что требуется от одного разработчика в вашей команде, — это забыть .gitignore свой .env файл или удалить жестко закодированную переменную среды, которую они использовали при разработке для утечки конфиденциальных данных в систему управления версиями. В современную эпоху, когда злоумышленники используют ботов для мониторинга репозиториев на GitHub, утечка переменных среды может стать фатальной ошибкой.

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

Почему это должно меня беспокоить?

Для разработчиков важно знать передовые методы управления переменными среды — точнее, управлять секретами, которые являются конфиденциальными данными, такими как, например, ключ API, который мы не хотим, чтобы злоумышленники получили.

Возможно, первым шагом к лучшему управлению секретами является внедрение инструментов, необходимых для предотвращения утечки секретов.

Что за инструмент?

Хотя существует множество инструментов командной строки, которые вы можете использовать для обнаружения секретов в своей кодовой базе, в этой статье я буду использовать Infisical CLI, потому что он прост и имеет синергию с Infisical, популярной системой управления секретами с открытым исходным кодом. стек, который также можно использовать для хранения переменных среды.

Сама CLI бесплатна для использования, а сама платформа Infisical также может быть размещена в вашей собственной инфраструктуре.

Монтаж

Для начала вам необходимо установить Infisical CLI на свой компьютер.

MacOS (с использованием brew):

brew install infisical/get-cli/infisical

Windows (с помощью scoop):

scoop bucket add org https://github.com/Infisical/scoop-infisical.git
scoop install infisical

Arch Linux (с использованием yay):

yay -S infisical-bin

Ознакомьтесь с документацией для получения дополнительных вариантов установки, таких как Redhat/CentOS/Amazon и Debian/Ubuntu, если ваша система отсутствует выше.

Большой! Теперь вы готовы обнаруживать секреты в своей кодовой базе.

Сканирование каталога, файла или полной истории Git на наличие секретов.

Команду scan можно запустить в каталоге, чтобы обнаружить в нем любые секреты; он ищет более 140 секретных типов, таких как потенциальные ключи API и т. д.

# scan your codebase for secrets
infisical scan

# display the full secret findings
infisical scan --verbose

infisical scan просто выводит количество утечек, обнаруженных в ваших коммитах.

11:13AM INF scanning for exposed secrets...
11:13AM INF 932 commits scanned.
11:13AM INF scan completed in 2.23s
11:13AM WRN leaks found: 32

Между тем, infisical scan --verbose выводит более подробные сведения о каждом секрете, например, что было раскрыто, кто это сделал и где это можно найти.

Finding:     JWT_SECRET=138817529bf4c73772243214896b168df91d3501d56757dbcbeda31d3da7acad
Secret:      138817529bf4c73772243214896b168df91d3501d56757dbcbeda31d3da7acad
RuleID:      generic-api-key
Entropy:     3.593139
File:        .env.example
Line:        7
Commit:      622ed0d1b294bd31bd771eb40115d337
Author:      John Doe
Email:       [email protected]
Date:        2022-12-24T19:21:21Z
Fingerprint: 622ed0d1b294bd31bd771eb40115d337:.env.example:generic-api-key:7

Сканирование незафиксированных файлов

Сканирование всей вашей истории git — это хорошо, но что, если вы хотите сканировать только незафиксированные файлы во время разработки?

Не беспокойтесь, вам поможет подкоманда infisical scan git-changes.

# scan your uncommitted files
infisical scan git-changes

# display the full secret findings for the uncommitted files
infisical git-changes --verbose

Настройка автоматического сканирования перед каждым коммитом

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

Чтобы установить git hook, выполните следующую команду в локальном репозитории git.

infisical scan install --pre-commit-hook

Вот и все! Теперь вы знаете, как обнаруживать секреты в кодовой базе и предотвращать утечки.

Тем не менее, я бы посоветовал вам ознакомиться с полной документацией для получения дополнительной информации и дополнительных параметров использования CLI для сканирования секретов. Он включает в себя, как настроить сканирование, чтобы игнорировать выбранные секреты или даже те, которые соответствуют шаблону.

Заключение

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

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