ChatGPT, большая языковая модель OpenAI для чат-ботов, не только создает в основном небезопасный код, но и не может предупредить пользователей о его недостатках, несмотря на то, что может указать на его недостатки.
На фоне безумного академического интереса к возможностям и ограничениям больших языковых моделей четыре исследователя из Университета Квебека в Канаде занялись вопросами безопасности кода, сгенерированного ChatGPT.
В предпечатной статье под названием «Насколько безопасен код, сгенерированный ChatGPT?» Ученые-компьютерщики Рафаэль Хури, Андерсон Авила, Джейкоб Брюнель и Баба Мамаду Камара отвечают на этот вопрос исследованиями, которые можно охарактеризовать как «не очень».
«Результаты были тревожными», — заявляют авторы в своей статье. «Мы обнаружили, что в нескольких случаях код, сгенерированный ChatGPT, значительно ниже минимальных стандартов безопасности, применимых в большинстве контекстов. На самом деле, когда его спросили, был ли созданный код безопасным, ChatGTP смог распознать, что это не так. “
Четверо авторов пришли к такому выводу после того, как попросили ChatGPT сгенерировать 21 программу на пяти разных языках программирования: C (3), C++ (11), python (3), html (1) и Java (3).
Задачи программирования, поставленные перед ChatGPT, были выбраны таким образом, чтобы каждая из них иллюстрировала определенную уязвимость безопасности, такую как повреждение памяти, отказ в обслуживании и недостатки, связанные с десериализацией и неправильно реализованной криптографией.
Первой программой, например, был FTP-сервер C++ для обмена файлами в общедоступном каталоге. И код, созданный ChatGPT, не включал очистку входных данных, что делает программное обеспечение уязвимым для уязвимости обхода пути.
Всего ChatGPT с первой попытки удалось сгенерировать только пять безопасных программ из 21. После дальнейших запросов исправить свои ошибки модель большого языка сумела создать еще семь безопасных приложений, хотя это «безопасно» только в том случае, если оно относится к конкретной оцениваемой уязвимости. Это не утверждение, что окончательный код свободен от каких-либо других условий эксплуатации.
Выводы исследователей перекликаются с аналогичными, хотя и не идентичными оценками Copilot от GitHub, еще одного LLM, основанного на семействе моделей GPT-3 (и недавно обновленного до GPT-4), который был настроен специально для генерации кода. В других исследованиях ошибки ChatGPT рассматривались более широко. В то же время эти модели также используются для выявления проблем безопасности.
Ученые отмечают в своей статье, что часть проблемы возникает из-за того, что ChatGPT не использует состязательную модель выполнения кода. Модель, по их словам, «неоднократно информировала нас о том, что проблемы безопасности можно обойти, просто «не вводя неверные данные» в созданную ею уязвимую программу».
Тем не менее, по их словам, «ChatGPT, кажется, знает — и действительно с готовностью признает — наличие критических уязвимостей в коде, который он предлагает». Он просто ничего не говорит, пока его не попросят оценить безопасность собственных предложений кода.
«Очевидно, что это алгоритм. Он ничего не знает, но может распознавать небезопасное поведение», — сказал Рафаэль Хури, профессор компьютерных наук и инженерии в Университете Квебека в Утауэ и один из соавторов статьи. Регистр
Первоначально ответ ChatGPT на проблемы безопасности заключался в том, чтобы рекомендовать использовать только действительные входные данные — что-то вроде нестартера в реальном мире. Только после этого, когда было предложено исправить проблемы, модель ИИ предоставила полезные рекомендации.
Авторы предполагают, что это не идеально, потому что знание того, какие вопросы задавать, предполагает знакомство с конкретными уязвимостями и методами кодирования.
Другими словами, если вы знаете, как правильно заставить ChatGPT исправить уязвимость, вы, вероятно, уже понимаете, как с ней бороться.
Авторы также указывают на этическую непоследовательность в том факте, что ChatGPT откажется создавать атакующий код, но создаст уязвимый код.
Они приводят пример уязвимости десериализации Java, в котором «чат-бот сгенерировал уязвимый код и дал совет, как сделать его более безопасным, но заявил, что не смог создать более безопасную версию кода».
Хури утверждает, что ChatGPT в его нынешнем виде представляет собой риск, что не означает, что неустойчивый, неэффективный ИИ-помощник не имеет подходящего применения. «На самом деле мы уже видели, как студенты используют это, и программисты будут использовать это в дикой природе», — сказал он. «Поэтому иметь инструмент, который генерирует небезопасный код, действительно опасно. Мы должны информировать студентов о том, что если код генерируется с помощью этого типа инструмента, он вполне может быть небезопасным».
«Одна вещь, которая меня удивила, это когда мы спросили [ChatGPT] генерировать одну и ту же задачу — программу одного типа на разных языках — иногда для одного языка это было бы безопасно, а для другого — уязвимо. Поскольку этот тип языковой модели представляет собой что-то вроде черного ящика, у меня действительно нет хорошего объяснения или теории по этому поводу».