В рамках разработки программного обеспечения компаниями с большим штатом программистов активно используются системы управления версиями (Version Control System), предназначенные для хранения всех версий отслеживаемых файлов, возвращения к более ранним версиям, логирования сведений о вносимых изменениях и их авторах, что позволяет оптимизировать совместную разработку ПО. Одной из таких систем является git.
Git представляет собой программу для хранения полного репозитория управления версиями, каждый разработчик создает (копируя файлы с сервера) локальную версию проекта, при необходимости может создавать ветви (копия основной версии кода, в которой производятся изменения и возможен быстрый переход к работающей версии ПО, переключением на магистральную ветвь), где производит изменения. После окончания разработки, осуществляется слияние ветвей, тестирование конечного кода и его объединение с основной ветвью на сервере. При этом, возможна совместная разработка кода, поскольку при слиянии ветвей, в исходный файл вносятся только изменения.
Для работы с системой контроля версий, клиент git устанавливается
на Вашем компьютере, после его запуска (команда git init) в любой из директорий возможно отслеживание изменений (добавление файлов для отслеживания командой git add) в конкретных файлах данной директории либо всех файлов каталога всей директории. Для совместной работы, код размещается на сервере. Возможно использование локального сервера (любой выделенный под данную задачу компьютер) либо использование хостингов (github, gitlab и др.). При этом, возможна как публичная (доступ у всех пользователей git) и приватная (доступ по запросу к владельцу репозитория) публикация Ваших репозиториев.
Угрозы безопасности, при использовании системы контроля версий:
- При публичном размещении репозиториев, Ваш код доступен всему мировому сообществу, что позволяет быстрее дорабатывать Ваш код, в том числе с участием мирового сообщества (open source проекты). В публичный репозиторий, возможна случайная публикация приватной информации. Например, в связи с добавлением в отслеживание файлов, раскрывающих конфиденциальную информацию организации (доку менты, таблицы, конфигурационные файлы и прочее). Также, возможно указание в коде закрытой информации (логины, пароли, API-ключей для обращения к используемым Вами ресурсам). Если в вопросах проверки отслеживаемых файлов Вам поможет только Ваша внимательность и своевременное заполнение файла .gitignore, который позволяет указывать файлы, которые не подлежат публикации, то для проверки файлов на наличие в них важной информации, могут помочь сторонние библиотеки (gitleaks, git-secrets, trivy secret scaning и др).
Например, в используемом коде мы напрямую указали токен от телеграмм-бота, API-ключ для обращения к сервису openweathermap.org, логин и пароль администратора, с которыми будем сравнивать введённые пользователем.
После запуска gitleaks, выявлены явно указанные в коде приватные данные (Secret), их месторасположение (file, line, commit), а также счастливый обладатель надвигающегося наказания. Данный инструмент может также использоваться (не только Вами, но и злоумышленником) для сканирования репозиториев, опубликованных на сервере.
- Использование приватных репозиториев не всегда удобно (необходимость предоставления доступа, возможные проблемы с подключением и прочее). Вместе с тем, недопустимо использование публичных репозиториев, даже если Ваш сервер никому не известен. Так, в 2018 г. в виду проблем администрирования, оказалось доступным 580 репозиториев Daimler Mercedes Benz из-за чего произошла утечка кода от логического блока грузовых автомобилей.
- Также ошибки администрирования репозиториев могут повлечь блокировку Вашей информации. В частности, в 2019 г. хакер осуществил гребневую проверку открытых репозиториев, при возможности заменил их содержимое на требование выкупа содержавшихся в каталогах данных.
- При использовании хостингов, необходимо иметь в виду, что публикуемые данные доступны их владельцам хостингов. В частности, компания Microsoft использовала репозитории на GitHub (принадлежит Microsoft с 04 июня 2018 года) для обучения собственной нейросети ChatGPT.
- Также необходимо учитывать, что в условиях текущей санкционной политики, использование хостинга не гарантирует доступность Вашего исходного кода. В частности, GitHub с 13 апреля 2022 г. начал блокировку аккаунтов отдельных российских компаний (Сбербанк, Альфабанк и др.), с сервисом GitLab возникают проблемы с оплатами.
- При использовании в ПО чужого кода, взятого из публичных репозиториев, может содержать бэкдоры. В частности, после начала СВО в отдельных репозиториях либо библиотеках фиксировалось появление соответствующих строк кода, публикующих дискредитирующую информацию, что может повлечь имиджевые потери
- При самостоятельном разворачивании сервера git необходимо особое внимание уделить доступности небезопасных каталогов (.git/config), где хранятся сведения об изменениях в коде, а также исключить использование стандартных логинов и паролей, даже если не удобно, даже ненадолго.
- Поскольку git является в первую очередь средством автоматизации программирования, само приложение также может содержать уязвимости. Так, уязвимость CVE-2017-14867 позволяла злоумышленникам, имеющим доступ к Git-shell, выполнять команды уровня операционной системы. На текущий момент, в БДУ ФСТЭК России имеются сведения о 33 известных уязвимостях git (устранены), только 12 из них выявлены в 2023 г. Таким образом, при использовании git необходимо включать его при оценке поверхности атак, отслеживать сведения о выявленных уязвимостях, принимать соответствующие компенсирующие меры (дополнительные настройки маршрутизации, отключение от сети, закрытие соответствующих портов, запрет удаленного доступа и др.) до появления патчей, отслеживать актуальную версию git-клиентов, используемых программистами.
- Также не стоит забывать, что используемый при разработке чужой код, взятый из публичных репозиториев, может содержать закладки, что может повлечь некорректную работу приложения, наличие бэкдоров, осуществление нелигитимного сбора информации, публикацию дискредетирующей информации.