Исследователи из МТИ (Массачусетского технологического института) разработали систему глубокого машинного обучения для поиска проблем в коде ПО. Она станет основой инструментов автоматического анализа, которые помогут найти и устранить слабые места в IDE для создания программ.
Разработка изнутри
Многие программисты используют интегрированные среды разработки (IDE) вроде Visual Studio или Eclipse, чтобы писать код продуктивнее. В таких средах автоматически предлагаются подходящие фрагменты кода: типы данных, функции объектов и т.д.
Для подбора вариантов внутри IDE используются сложные языковые модели, обученные на миллионах примеров реальных фрагментов кода – например, с GitHub. Но такие системы имеют множество встроенных уязвимостей – так часто бывает при обучении на больших наборах данных без учителя, в отсутствие четко установленных правил и инструкций.
Хакеры могут манипулировать входными данными таких моделей. В результате IDE будут предлагать разработчикам варианты, из-за которых в коде появляются уязвимости. Новая система машинного обучения должна предотвратить это.
Новый подход
Шашанк Шрикант, аспирант факультета электротехники и информатики МТИ совместно с исследовательницей института Уной-Мэй О’Рейли и специалистом IBM Сиджи Лю описали автоматизированный метод поиска слабых мест в моделях обработки кода и их переподготовки. Такой подход должен повысить устойчивость IDE к хакерским атакам.
Ученые утверждают, что модели обработки кода в IDE обмануть легко. Достаточно, например, переименовать переменную, вставить ложный оператор вывода на экран или внести другие незначительные изменения в программный код, который модель попытается обработать.
В результате IDE сможет принять вредоносное ПО за безопасное и не выдаст никаких предупреждений. А функции автоматического дополнения строк станут предлагать неверные или потенциально опасные варианты. Разработчик, скорее всего, даже не будет подозревать, что IDE изменилась.
Похожая проблема есть и у моделей компьютерного зрения. Исследователи МИТ показали, что если изменить несколько ключевых пикселей во входном изображении, система может, например, спутать свиней с самолетами и черепах с винтовками.
В зеленой рамке показана верно распознанная черепаха, в красных – черепахи, распознанные как винтовки, в черных – как другие предметы (ни черепахи, ни винтовки)
Как и у передовых моделей распознавания естественного языка, у моделей обработки кода есть один существенный недостаток: они являются экспертами в области статистических отношений между словами и фразами, но смутно понимают их истинное значение. Например, языковая модель OpenAI GPT-3 может писать прозу, и только человек сможет понять, бессмысленный текст она выдает или гениальный.
Алгоритм, который предложил Шрикант и его коллеги, действует иначе. Сначала он находит места в программе, где добавление или замена текста могут спровоцировать наиболее серьезные ошибки. Затем алгоритм определяет, какие изменения будут здесь опаснее всего.
Исследователи признают, что их модель пока далека от совершенства. В трети случаев она неверно распознавала единственное потенциально опасное исправление, в половине примеров ошибалась хотя бы раз, когда в код вносили пять подозрительных правок. Но все же исследователи говорят о положительной динамике: модель способна учиться на своих ошибках и со временем начнет лучше понимать и глубже анализировать программный код.