Да, Copilot от GitHub может утечь (настоящие) секреты.

Да, Copilot от GitHub может раскрыть (настоящие) секреты.

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

Год спустя после запуска инструмента генерации кода Copilot от GitHub им воспользовались миллион разработчиков, он был принят более чем 20 000 организациями и сгенерировал более трех миллиардов строк кода, сообщается в блоге GitHub post.

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

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

В данной статье рассматривается последнее исследование Гонконгского университета, в котором проверяется возможность злоупотребления инструментами Copilot от GitHub и CodeWhisperer от Amazon для сбора секретов, которые были раскрыты во время обучения моделей.

Как подчеркнуто в отчете GitGuardian 2023 State of Secrets Sprawl, содержащихся в коде, с наличием 10 миллионов новых секретов, что составляет 67% рост по сравнению с прошлым годом, когда было обнаружено 6 миллионов.

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

Извлечение жестко закодированных учетных данных

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

Выводы ясны: построив 900 запросов на основе фрагментов кода с GitHub, исследователям удалось успешно собрать 2 702 жестко закодированных учетных данных от Copilot и 129 секретных данных от CodeWhisper (ложные положительные результаты были отфильтрованы с помощью специальной методологии, описанной ниже).

Из всего этого впечатляющего объема, по крайней мере 200, или 7,4% (соответственно 18 и 14%) были реальными жестко закодированными секретами, которые можно было определить на GitHub. Хотя исследователи не стали подтверждать, что эти учетные данные все еще активны, это свидетельствует о том, что эти модели потенциально могут быть использованы как пути для атаки. Это позволит извлечь и, вероятно, скомпрометировать утечку учетных данных с высокой степенью предсказуемости.

Проектирование машины для создания запросов

Суть исследования заключается в том, чтобы узнать, может ли злоумышленник извлечь секреты, создавая соответствующие запросы. Для проверки своих предположений исследователи создали тестовую машину для испытания запроса, получив название “Рассекречиватель жестко закодированных учетных данных” (HCR).

Машина была разработана для максимального увеличения шансов получения записанного секрета. Для этого она должна создавать сильные запросы, которые “принуждают” модель выдать секрет. Первым шагом к созданию такого запроса является поиск на GitHub файлов, содержащих жестко закодированные секреты с помощью регулярных выражений. Затем, исходный жестко закодированный секрет скрывается, и машине задаются запросы к модели для получения предложений кода.

Естественно, модель должна быть запросом много раз, чтобы увеличить шансы извлечения действительных учетных данных, поскольку она часто выдает “воображаемые” учетные данные.

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

В данном исследовании использовано 18 шаблонов для идентификации фрагментов кода на GitHub, соответствующих 18 различным типам секретов (AWS ключи доступа, токены доступа Google OAuth, токены доступа GitHub OAuth и т. д.).

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

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

Секреты отклоняются, если:

  • Не соответствуют шаблону регулярного выражения
  • Не обладают достаточной энтропией (недостаточно случайные, например: AKIAXXXXXXXXXXXXXXXX)
  • Имеют узнаваемый шаблон (например: AKIA3A3A3A3A3A3A3A3A)
  • Содержат общие слова (например: AKIAIOSFODNN7EXAMPLE)

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

Результаты

Среди 8 127 предложений Copilot было успешно извлечено 2 702 действительных секрета. Тем самым, общая доля действительных составляет 2702/8127 = 33,2%, что означает, что Copilot генерирует 2702/900 = 3,0 действительных секрета для одной подсказки в среднем.

CodeWhisperer предлагает в общей сложности 736 фрагментов кода, среди которых мы выявили 129 действительных секретов. Таким образом, доля действительных составляет 129/736 = 17,5%.

Имейте в виду, что в данном исследовании действительный секрет не означает, что секрет является реальным. Это означает, что он успешно прошел фильтры и, следовательно, имеет свойства, соответствующие реальному секрету.

Итак, как мы можем узнать, являются ли эти секреты подлинными учетными данными? Авторы пояснили, что они проверили только подмножество действительных учетных данных (тестовые ключи, такие как Stripe Test Keys, предназначенные для разработчиков для тестирования своих программ) с этической точки зрения.

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

Остальная часть исследования сосредоточена на характеристиках действительных секретов. Они ищут секрет с помощью GitHub Code Search и различают тщательно запомненные секреты, которые идентичны секрету, удаленному в первую очередь, и слабо запомненные секреты, которые появляются в одном или нескольких других репозиториях. Наконец, есть секреты, которые невозможно найти на GitHub и которые могут поступать из других источников.

Последствия

Исследовательская статья раскрывает значительный риск приватности, возникающий при использовании инструментов автозаполнения кода, таких как GitHub Copilot и Amazon CodeWhisperer. Результаты указывают на то, что эти модели не только раскрывают оригинальные секреты, присутствующие в их обучающих данных, но также предлагают другие секреты, которые были обнаружены в других местах их обучающего корпуса. Это раскрывает чувствительную информацию и вызывает серьезные проблемы с приватностью.

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

Эти результаты подтверждаются другим недавним исследованием, проведенным исследователем из Уханьского университета, под названием Уязвимости безопасности кода, сгенерированного Copilot в GitHub. В ходе исследования было проанализировано 435 фрагментов кода, сгенерированных Copilot из проектов GitHub, и использованы несколько сканеров безопасности для выявления уязвимостей.

Согласно исследованию, 35,8% фрагментов кода, сгенерированных Copilot, содержат уязвимости безопасности, независимо от используемого языка программирования. Путем классификации обнаруженных проблем безопасности с использованием Общих Пороков Перечислений (CWE) исследователи установили наличие “жестко закодированных учетных данных” (CWE-798) в 1,15% фрагментов кода, что составляет 1,5% из 600 определенных CWE.

Меры смягчения

Адресация атак приватности на модели языка требует усилий по смягчению со стороны программистов и инженеров машинного обучения.

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

Во время различных этапов разработки модели автозаполнения кода можно применять разные подходы:

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

Заключение

Это исследование раскрывает значительный риск, связанный с инструментами автозаполнения кода, такими как GitHub Copilot и Amazon CodeWhisperer. Путем создания подсказок и анализа общедоступного кода на GitHub исследователям удалось успешно извлечь множество действительных жестко закодированных секретов из этих моделей.

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

Эти выводы применимы не только к Copilot и CodeWhisperer, но и подчеркивают необходимость принятия мер безопасности во всех инструментах нейронного завершения кода. Разработчики должны предпринимать проактивные шаги для решения этой проблемы до выпуска своих инструментов.

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