1762327610
2025-11-05 07:00:00
Обеспечение безопасности старых версий программного обеспечения часто означает перенос исправлений из более новых версий. Это рутинная, но утомительная работа, особенно для крупных проектов с открытым исходным кодом, таких как ядро Linux. В результате новой исследовательской работы был создан инструмент, который использует большую языковую модель для автоматического выполнения этой работы.
Команда исследователей из Китая, США и Канады создала PortGPT — систему искусственного интеллекта, предназначенную для автоматизации процесса миграции обновлений безопасности из основных филиалов на более старые версии программного обеспечения. Они описывают свой метод как попытку повторить шаги рассуждения, которые используют разработчики, когда вручную адаптируют патчи.
Рабочий процесс PortGPT
Когда старый код требует новых исправлений
Проекты с открытым исходным кодом поддерживают различные ветки для поддержки стабильности и долгосрочного использования. Когда ошибка или уязвимость исправлена в основной ветке, сопровождающие должны перенести это исправление в стабильные версии с долгосрочной поддержкой. Этот процесс, называемый бэкпортированием, может занять время и часто требует понимания того, как код менялся между версиями.
Разработчики обычно сравнивают версии, отслеживают историю кода и вносят изменения для обеспечения совместимости. Но по мере роста кодовой базы этот процесс становится все труднее масштабировать. Многие проекты полагаются на ручной труд и экспертные знания, что замедляет доставку исправлений и может привести к тому, что старые системы будут уязвимы дольше, чем это необходимо.
Авторы PortGPT отмечают, что более ранние инструменты автоматизации следовали строгим правилам синтаксиса или структуры и часто терпели неудачу, когда код развивался неожиданным образом. Даже небольшие различия, такие как переименование функций или перемещение файлов, могут остановить их. Команда намеревалась создать что-то, что могло бы больше напоминать человека-мейнтейнера.
Научить ИИ думать как разработчик
PortGPT построен на основе большой языковой модели, которая взаимодействует с кодом посредством набора специализированных инструментов. Эти инструменты позволяют ему получать доступ к исходным файлам, просматривать историю кода, находить функции и шаг за шагом применять исправления.
Исследователи наблюдал как разработчики-люди решают задачи резервного копирования, а затем предоставили PortGPT аналогичные возможности. Например, если ИИ не может найти функцию в старой версии, он может выполнить поиск в истории Git, чтобы узнать, когда эта функция была введена или переименована. Если патч не компилируется, он может использовать сообщения об ошибках компилятора для уточнения своей работы и повторить попытку.
Ли добавил, что эта интеграция помогает системе принимать более разумные решения о том, где и как применять исправления. Отслеживая исторические изменения, ИИ может согласовывать новые исправления со старыми версиями кода, выявляя переименованные переменные или перемещенную логику, которые в противном случае могли бы вызвать сбои.
Процесс PortGPT происходит в два этапа. Во-первых, он адаптирует каждую часть патча, известную как «кусок», для соответствия целевой версии. Он проверяет, применяется ли изменение, ищет соответствующие символы и собирает вспомогательные фрагменты кода. Во-вторых, он объединяет все адаптированные фрагменты, применяет исправление к базе кода и запускает тест компиляции. Если есть ошибки, система их анализирует и корректирует патч.
Этот подход позволяет PortGPT использовать контекст и обратную связь, а не полагаться только на предопределенные правила преобразования. Он может анализировать взаимоотношения кода, понимать, когда код был перемещен, и выявлять недостающие детали из истории репозитория.
Цифры, которые рассказывают историю
Команда протестировала PortGPT почти на двух тысячах патчей из существующих исследований резервного копирования. Он достиг 89,15% успеха на этих установленных наборах данных, превзойдя другие автоматизированные инструменты, такие как FIXMORPH и TSBPORT. На более сложном, самостоятельно созданном наборе данных из 146 сложных случаев в программах на C, C++ и Go система добилась успеха в 62,33 процентах случаев.
Чтобы проверить реальную производительность, исследователи применили PortGPT к патчам Linux и Ubuntu, выпущенным после отключения обучающих данных. В стабильной ветке Linux 6.1 инструмент успешно перенес девять из 18 патчей. Все девять позже были приняты сообществом Linux, что показало, что патчи, созданные ИИ, соответствуют практическим стандартам.
Команда также провела тестирование обновлений Ubuntu, предоставив 10 из 16 патчей для нескольких CVE. Эти результаты позволяют предположить, что PortGPT может помочь сопровождающим поддерживать долгосрочные ветки в актуальном состоянии, особенно когда человеческие ресурсы ограничены.
Где ИИ все еще борется
Высокие результаты PortGPT частично зависят от структурированных высококачественных данных, доступных в зрелых проектах с открытым исходным кодом. Ли отметил, что производительность может снизиться при работе с репозиториями, в которых отсутствует согласованная информация о коммитах. «В наших экспериментах, которые в основном были сосредоточены на ядре Linux, мы не столкнулись с серьезными проблемами, поскольку его метаданные коммитов, как правило, высокого качества», — сказал он. «В репозиториях с плохой или непоследовательной историей коммитов, например с неполными сообщениями или сжатыми коммитами, производительность PortGPT может ухудшиться из-за отсутствия или вводящей в заблуждение контекстной информации».
Он добавил, что это ограничение не уникально для ИИ. «По сути, это ограничение похоже на то, с чем сталкиваются специалисты по сопровождению людей, поскольку плохие записи исторических коммитов часто делают задачи резервного копирования более сложными и менее надежными», — сказал Ли.
Почему это работает, когда другие терпят неудачу
В отличие от систем, основанных на правилах, PortGPT рассматривает резервное копирование кода как проблему рассуждения. Он использует способность языковой модели интерпретировать контекст кода и реагировать на отзывы от инструментов проверки. Система может получать доступ к различиям Git и суммировать их, отслеживать изменения функций в разных версиях и использовать отзывы компилятора для исправления ошибок.
Исследователи также разработали механизмы, позволяющие обнаружить, когда патч нельзя применить напрямую. Если путь к файлу изменился, PortGPT ищет переименованные или похожие файлы. Если строки контекста не совпадают, он вычисляет ближайший блок кода, используя меру расстояния редактирования. Только после нескольких неудачных попыток он автоматически исправляет контекстные строки и повторяет попытку.
Что это означает для безопасности программного обеспечения
Хотя PortGPT все еще находится в стадии исследования, его успех намекает на то, как ИИ может изменить управление исправлениями для программного обеспечения с открытым исходным кодом. Автоматизация резервного копирования может сократить время между обнаружением уязвимостей и выпуском исправлений для старых систем. Это также может помочь командам безопасности, которые зависят от долгосрочной поддержки, поддерживать их актуальность без большой ручной работы.
Работа также подчеркивает более широкую тенденцию к использованию больших языковых моделей в качестве автономных агентов для обслуживания программного обеспечения. Интегрируя понимание кода, осведомленность о контроле версий и циклы обратной связи, такие инструменты, как PortGPT, показывают, как ИИ может участвовать в реальных рабочих процессах разработки.
#PortGPT #как #исследователи #научили #ИИ #автоматически #переносить #исправления #безопасности
Ещё по этой теме

