Сегодня практически каждый способен создать собственное приложение. Для этого достаточно лишь сформулировать несколько простых инструкций на обычном человеческом языке и отправить их в специальную нейросеть. Чтобы не пополнить ряды тех, кто уже пострадал от ошибок искусственного интеллекта, и не потерять свои деньги или ценные данные, стоит прислушаться к ряду простых, но действенных рекомендаций
Например речь идёт о создании фирменного сайта для своей компании, личного бота для отслеживания новостей или удобной аналитической панели для рабочих задач. Однако между красивой и работающей демо-версией, которая была получена за несколько часов, и по-настоящему надёжным, постоянно функционирующим и безопасным продуктом лежит огромная пропасть. Они в первую очередь ориентированы на маленькие компании или отдельных разработчиков без серьёзной технической подготовки, тогда как для крупного бизнеса существуют более сложные и комплексные правила.
Искусственный интеллект обучался на огромном массиве кода, который был найден в открытом доступе. Среди этих примеров полно неоптимальных учебных наработок, откровенно ошибочных фрагментов и просто неизвестно чего. В лучшем случае такой код просто отказывается работать, но гораздо опаснее ситуация, когда он имитирует правильную работу, а под капотом содержатся грубейшие логические ошибки или серьёзные уязвимости. Согласно исследованиям специалистов в области кибербезопасности, по меньшей мере сорок пять процентов кода, сгенерированного нейросетями, содержит опасные бреши. Например, в нём может отсутствовать проверка прав пользователя перед предоставлением доступа к важной информации. Профессиональный программист, использующий ИИ как вспомогательный инструмент, создаёт свой продукт в три-четыре раза быстрее обычного, но при этом количество уязвимостей в его коде возрастает в десять раз. Каждая пятая строка, написанная нейросетью, может ссылаться на библиотеки или модули, которых в природе просто не существует. Когда приложение работает с конфиденциальной информацией вроде платежей или личных документов, генерация кода может вообще пропустить этап проверки учётных данных, и тогда любой человек из интернета получит доступ к чужим секретам. Даже если пароль запрашивается, часто не контролируется уровень доступа, и обычный пользователь видит данные всех остальных. Ключи доступа к базам данных или сторонним сервисам порой записываются прямо в теле кода, что делает их кражу невероятно лёгкой, а замену после атаки — крайне сложной. Готовое приложение или его исходники нередко выкладываются на сервер без каких-либо ограничений, и злоумышленники могут украсть не только логику работы, но и те самые ключи. Доступ к базам данных часто организован с грубыми нарушениями, что позволяет выполнять на сервере посторонний код или воровать информацию в обход самого приложения. Наконец, в программных интерфейсах нередко отсутствует проверка прав пользователей и ограничение на частоту обращений, что открывает путь для злоупотреблений.
Чтобы обезопасить себя, стоит усвоить несколько фундаментальных принципов. Код, который написал искусственный интеллект, всегда следует рассматривать исключительно как черновик. Его необходимо тщательно проверять и тестировать. Лучше всего, если этим займутся специалисты, но если их нет, то можно провести первичную проверку своими силами, попросить помощи у знакомых или коллег, а также использовать для оценки другой запрос к нейросети, где будет явно сказано проверить код на предмет соответствия стандартам безопасной разработки и поискать типовые уязвимости. Никогда не стоит вставлять пароли, ключи API или иные конфиденциальные данные в запросы к искусственному интеллекту. Наоборот, следует просить нейросеть писать код таким образом, чтобы все секреты надёжно хранились в специальных скрытых переменных окружения. Основные риски возникают тогда, когда приложение доступно посторонним людям по сети, обрабатывает информацию, представляющую ценность, или работает в инфраструктуре, которая может быть полезна злоумышленникам. Именно эти части системы нужно защищать в первую очередь, тогда как простой статичный сайт-визитка из трёх HTML-файлов подвергается гораздо меньшей опасности, чем программа лояльности на сайте интернет-магазина. Даже самая наивная строчка в промпте с просьбой следовать стандартам и лучшим практикам безопасности значительно повышает качество кода, а если указывать конкретные требования, результат будет ещё лучше. Очень часто опасен не сам код, а настройки по умолчанию, например когда приложение с чужими данными публикуется на общедоступном конструкторе и автоматически становится видимым всему интернету. Поэтому все компоненты, от хостинга и базы данных до конфигурации публикации, нужно проверять вручную. Если смысл той или иной настройки неясен, можно проконсультироваться с чат-ботом, описав свою цель — повышение безопасности. Безопасность — это не разовое действие, а непрерывный процесс. При каждом обновлении программы, смене хостинг-провайдера или росте числа пользователей необходимо заново оценивать риски и возвращаться ко всем перечисленным вопросам.
При постановке задачи нейросети лучше прямо указывать требования к безопасности. Например, просить не просто сделать форму входа, а реализовать безопасную аутентификацию с проверкой учётных данных, контролем прав пользователей, защитой от подбора паролей, современным хешированием, передачей данных строго по защищённому протоколу и без хранения секретов в коде. Полезно иметь под рукой короткий шаблон с типовыми требованиями вроде проверки внешних данных, отсутствия секретов в коде, защиты от злоупотреблений и безопасных настроек по умолчанию. Если в приложении нужна система для работы с пользователями, стоит настоять на использовании популярных и проверенных библиотек, а не изобретении собственного велосипеда — это самая частая причина утечек. То же самое касается загрузки файлов или обработки вызовов программного интерфейса. Нейросети часто пытаются подсунуть несуществующие или устаревшие компоненты, поэтому всегда полезно искать предложенные названия в интернете и удостоверяться в их реальности, популярности и безопасности. Требуйте применения современных индустриальных стандартов шифрования, вроде последней версии протокола TLS для передачи данных или надёжных алгоритмов для хеширования паролей. Всегда просите искусственный интеллект добавлять проверки любых данных, которые вводят пользователи, используя термины вроде параметризации или экранирования ввода. Устанавливайте лимиты на количество попыток входа или запросов, чтобы защититься от автоматических атак и подбора паролей. В случае сбоя пользователь должен видеть простую картинку с извинениями, а не детальный отчёт об ошибке с фрагментами вашего кода, потому что такая информация является настоящим подарком для хакеров. Не забывайте и о собственной безопасности как разработчика — ваши учётные записи в GitHub, хостинг-провайдере и других сервисах представляют собой лакомую добычу, поэтому обязательно включите двухфакторную аутентификацию везде, где это возможно. Регулярно создавайте резервные копии проекта, включая исходный код и базы данных, храня их как локально, так и в облаке, чтобы защититься от критических ошибок или целенаправленных атак. Тестируйте новые функции в безопасной среде, то есть на копии сайта и копии базы данных, и проводите подробные испытания перед каждым обновлением. Сторонние библиотеки и компоненты нужно регулярно обновлять до свежих версий, даже если само приложение не меняется — это помогает своевременно закрывать известные проблемы безопасности. Наконец, используйте специальные сканеры секретов, чтобы проверить, не проговорился ли случайно искусственный интеллект и не включил ли какой-нибудь ключ или пароль прямо в исходный код, который попадёт в репозиторий.