Жесткое встраивание (хардкодинг) корпоративных секретов в код — серьезный риск безопасности, которого можно избежать, пишет на портале The New Stack Роберт Керли, менеджер по маркетингу продуктов компании Sonar.
Слишком часто в выпущенном коде обнаруживаются секреты, подвергающие его владельца риску безопасности. К таким секретам относятся пароли, ключи API, ключи шифрования, токены, учетные данные баз данных и другая конфиденциальная информация компании.
Наличие жестко закодированных в исходном коде секретов опасно, однако, несмотря на самые серьезные усилия разработчиков, секреты все равно могут туда прокрасться. Разработчики могут использовать при написании кода короткие обходные пути (шорткаты) и помещать в них секреты, или они могут не осознавать риски размещения секретов в своем коде. Кроме того, большинство решений для сканирования кода оставляют разработчику право определять, почему его код был отмечен как проблемный. И наконец, большинство инструментов ищут секреты в репозиториях кода уже после того, как утечка произошла, что приводит к болезненному исправлению ситуации (например, замене секрета).
Правильное управление, хранение и защита секретов могут быть сложными, непонятными или просто опущенными из-за нехватки времени. Кроме того, если компании не знают, когда и где секреты попадают в проекты, они не могут предотвратить их разглашение вместе с проектом и подрыв его безопасности.
Утечки учетных данных и других секретов, проникших в код, регулярно попадают в новостные заголовки, и число таких случаев растет из-за человеческого фактора. Правила игры меняют инструменты, которые отлавливают секреты в IDE и на протяжении всего конвейера CI/CD — до того, как они успеют вызвать проблемы.
Понимание того, как секреты попадают в код
Возможность обнаружить секреты до их проникновения в код позволяет организациям снизить уровень риска. Обнаружив их в IDE, вы сможете избежать мучений, связанных с необходимостью исправлять ситуацию, изменяя секрет. Но сначала нужно понять, как секреты вообще оказываются в коде. Вот некоторые причины:
- Недостаток знаний. Возможно, из-за неопытности или неправильного обучения некоторые разработчики просто не знают о правильном управлении секретами и безопасности исходного кода. Достаточно одного разработчика, не знающего о передовых методах работы с секретами в коде, чтобы компания оказалась в руках злоумышленников. Если знание — сила, то лучшая линия обороны — это знающая команда.
- По ошибке. Разработчик может временно, для быстрого локального тестирования, закодировать учетные данные или конфиденциальную информацию, намереваясь впоследствии удалить ее. Однако иногда эти файлы случайно фиксируются в публичном репозитории, делая временные изменения постоянными. Даже если после этого код будет удален, кто-то может успеть сделать копию, содержащую секрет. Ошибаться — свойственно человеку, но когда последствия могут иметь потенциально огромный эффект, лучше стараться предупреждать ошибки.
- Слепое доверие. Самостоятельное решение проблем — отличный способ научиться, и иногда проблема настолько специфична, что единственный способ решить ее — это разобраться самостоятельно. Но если это отнимает много времени, и вы не можете найти решение, лучше обратиться за помощью к документации по продукту и сайтам вроде Stack Overflow. Однако, несмотря на то что эти материалы содержат полезные объяснения и примеры, их не следует просто копировать и вставлять, принимая за чистую монету.
Код на Stack Overflow и в документации может дать ответы на вопросы, но это не самый надежный способ найти решение. Например, в документации часто приводятся фрагменты кода, иллюстрирующие возможности продукта, но при этом может не упоминаться, когда их следует использовать с осторожностью и есть ли более безопасный вариант. Результат? Плохой код. Любое решение, которое вы вводите в кодовую базу, должно быть должным образом оценено, чтобы убедиться, что оно соответствует стандартам качества и не приведет к появлению проблем в коде.
Еще одна проблема доверия, приводящая к утечке секретов в код, связана с ростом использования кода, сгенерированного искусственным интеллектом. Поскольку генеративный ИИ становится все более популярным средством разработки кода, можно ожидать увеличения количества строк кода, которые необходимо сканировать, и количества проблем с секретами. Сгенерированный ИИ код может натолкнуть вас на мысль, что правильный способ подключения к сервису — это хардкодинг токена или секрета. Но, в зависимости от качества подсказки и осведомленности о проблеме, ИИ может не создать чистый код, что приведет к утечке секретов. Сгенерированный ИИ код может стать хорошей основой для понимания того, как подключиться к сервису, но вы должны тщательно проверить и изменить его, чтобы его можно было использовать для работы с хранилищем секретов.
В конечном итоге вы должны подвергать сомнению любой код, который вы находите или генерируете с помощью ИИ. Организации должны убедиться, что их команды разработчиков имеют надлежащие инструменты для обеспечения качества кода, чтобы предотвратить проникновение секретов в код и устранить утечку как можно раньше на этапе разработки кода.
Ловите секреты с самого начала
Если раскрытый секрет помечается в точке внедрения в код, будь то в реальном времени во время кодирования или во время фиксации, это может избавить команды от множества проблем. Человеческие ошибки случаются, но с помощью правильных проверок в нужное время вы можете предотвратить последствия ошибки на ранней стадии.
Лучшее место для обнаружения и решения этих проблем в рабочем процессе разработки — в самом начале, в IDE. Существуют инструменты, которые позволяют организациям обнаруживать общеизвестные секреты в исходном коде, устранять их утечку и снижать риск безопасности незаконного или несанкционированного доступа к частным данным. Использующие их разработчики также могут создавать пользовательские правила обнаружения секретных шаблонов. Их применение в сочетании с подходами Clean as You Code (CaYC) и Learn as You Code способствует созданию чистого кода — кода, который формирует обслуживаемое, надежное и безопасное ПО.
Устраняя секреты в коде в IDE с самого начала разработки, команды могут предотвратить попадание секретов в репозитории. Обнаружение и устранение секретов на ранних этапах разработки проекта сокращает количество сложных и дорогостоящих исправлений, которые требуются при обнаружении секретов на поздних этапах цикла выпуска.