Поделиться через


Понимание охвата оценки возможностей модернизации с помощью GitHub Copilot

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

  • Обнаружение проблем в трех доменах, критически важных для вашего пути модернизации:

    • Готовность к облаку: определяет 16 категорий проблем, включая использование файловой системы, управление учетными данными, службы обмена сообщениями, подключения к базам данных, пробелы в контейнеризации, обработку сеансов, шаблоны удаленного взаимодействия и многое другое.
    • Обновление Java: помечает устаревшие версии Java, фреймворки с прекращенной поддержкой OSS (Spring Boot, Spring Cloud, Jakarta EE), сотни удаленных или устаревших API и устаревшие инструменты сборки, такие как Ant.
    • Безопасность: обнаруживает 42 недостатка безопасности, полученные из стандарта ISO/IEC 5055, включая уязвимости внедрения (SQL, LDAP, XPath, команда ОС), жестко заданные учетные данные и ключи шифрования, проблемы синхронизации, проблемы с жизненным циклом ресурсов программ и другие серьезные категории CWE.
  • Понимание приложений: для устаревших баз кода оценка выявляет используемые зависимости и технологии, чтобы вы получили четкое представление о том, на чем основано ваше приложение, перед началом миграции.

В следующих разделах подробно описано покрытие проблем для каждого домена.

Домен: готовность к облаку

Домен Категория Сводка по обнаружению Почему это важно
cloud-readiness credential-migration Обнаруживает жестко закодированные учетные данные AWS (aws_access_key_id, aws_secret_access_key), использование диспетчера секретов AWS и внедренные библиотеки управления секретами, такие как Spring Cloud Vault. Безопасности: Жестко закодированные учетные данные и хранилища секретов, относящиеся к поставщику, очень уязвимы. Облачные приложения требуют централизованной безопасности на основе удостоверений, чтобы предотвратить кражу учетных данных.
cloud-readiness region-configuration Определяет кодированные идентификаторы региона AWS (aws.region, AWS_REGION) в файлах кода или конфигурации. Переносимость: Жесткие географические области связывают приложение с физической инфраструктурой конкретного поставщика, препятствуя глобальному развертыванию и устойчивости.
cloud-readiness storage-migration Определяет использование пакета SDK AWS S3 (контейнеры, объекты, предварительно подписанные URL-адреса), клиентские библиотеки S3 TransferManager и Google Cloud Storage. Надежность и соответствие: Эти зависимости ограничивают вас использованием объектного хранилища одного поставщика и не работают с собственными сервисами хранилища целевой платформы.
cloud-readiness messaging-service-migration Указатели зависимостей и строк подключения для Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar и Google Cloud Pub/Sub. Масштабируемость и надежность: Устаревшие брокеры обмена сообщениями часто используют фиксированные конечные точки и сохраняемость на основе дисков, которые препятствуют горизонтальному масштабированию и высокой доступности в облачных средах.
cloud-readiness database-migration Обнаруживает строки подключения, драйверы и параметры времени ожидания для MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore и Google Cloud Spanner. Надежность: Самоуправляемые или не собственные базы данных не имеют автоматического масштабирования облака. Закодированные интервалы времени ожидания и фиксированные интервалы повторных попыток могут привести к блокировке и "повторным штормам" во время частичных сбоев.
cloud-readiness file-system-management Определяет использование относительных, абсолютных и домашних путей (/home/), схем file://, и стандартных вызовов Java IO/NIO или Apache Commons IO для локального доступа к хранилищу. Бесcостояние: Облачные контейнеры являются непостоянными. Запись в локальную файловую систему приводит к потере данных при перезапуске экземпляра или операциях масштабирования; постоянные данные должны быть внешние.
cloud-readiness local-credential Помечает файлы Java KeyStore (.jks), вызовы методов (KeyStore.load) и открытые пароли (password,pwd) в свойствах или XML-файлах. Риск безопасности: Конфиденциальные материалы, хранящиеся в чистом тексте или локальных файлах, можно легко скомпрометировать, если несанкционированные лица обращаются к среде приложения или файлам конфигурации.
cloud-readiness configuration-management Обнаруживает System.getenv, System.getProperty, внешние .properties/.xml/.ini файлы и доступ к реестру Windows для настройки параметров приложения. Экстернализация: Хранилище или локальные файлы операционной системы не могут эффективно управляться в большом масштабе и не могут быть динамически обновлены без изменений кода на всех экземплярах системы.
cloud-readiness session-management Определяет хранение данных в HttpSession объектах и использование тега "распределяемого" в дескрипторах веб-сайтов. Масштабируемость: Стандартные http-сеансы непригодны для масштабирования облака; состояние должно быть внешним в распределенном кэше, чтобы предотвратить потерю данных во время смены трафика между экземплярами.
cloud-readiness remote-communication Обнаруживает тесно связанные протоколы (CORBA, RMI, JCA), незащищенные протоколы HTTP/FTP, API Java Mail, прямое использование каналов Socket/NIO и жестко закодированные URL-адреса. Совместимость с облаком и безопасность: Тесно связанные взаимодействия препятствуют масштабируемости. Незащищенные протоколы и жестко закодированные URL-адреса уязвимы и хрупки в динамических облачных сетевых средах.
cloud-readiness jakarta-migration Обнаруживает использование специфических API Jakarta/Java EE для NoSQL, JPA, Data, WebSockets и JAX-RS, а также серверных артефактов из JBoss EAP, WebLogic или WebSphere. Поддерживаемость: Миграция на облачную среду выполнения требует соответствия современным пространствам имен Jakarta и удаления зависимостей от проприетарных серверов приложений, чтобы обеспечить переносимость.
cloud-readiness containerization Помечает отсутствие Dockerfile или проблемные инструкции в Dockerfile, такие как apt-get upgrade, использование строчных букв в синтаксисе и проблемы с интервалами в синтаксисе. Надежность: Стандартизация в сборках контейнеров необходима для стабильных, воспроизводимых развертываний и обеспечения предсказуемого поведения образов в разных средах.
cloud-readiness scheduled-job-migration Идентифицирует обработчики AWS Lambda, Google Cloud Functions, зависимости Quartz Scheduler и рабочие процессы обработки Spring Batch. Выравнивание облачных вычислений: Запланированные задания и бессерверные функции должны быть рефакторингированы для использования целевых облачных моделей на основе событий и бессерверных вычислительных моделей для снижения нагрузки на инфраструктуру.
cloud-readiness apm-migration Определяет внедренные агенты и библиотеки APM для New Relic, Elastic APM и Dynatrace. Наблюдаемость: Эти инструменты требуют интеграции с конкретной облачной платформой для правильной записи данных телеметрии, задержки и состояния в управляемой среде.
cloud-readiness auth-migration Обнаруживает SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, использование LDAP и устаревшие шаблоны проверки подлинности веб-формы. Современная идентификация: Устаревшая веб-форма и проверка подлинности LDAP не имеют возможностей гибкости и безопасности (MFA, SSO) современных поставщиков облачных удостоверений на основе утверждений.
cloud-readiness os-compatibility Определяет зависимости проекта от Windows-специфичных динамически подключаемых библиотек (файлы .dll). Переносимость: библиотеки DLL зависят от ОС и не выполняются в стандартных средах облачных контейнеров на базе Linux. Их необходимо заменить кроссплатформенными общими библиотеками.

Домен: java-upgrade

Домен Категория Сводка по обнаружению Почему это важно
java-upgrade java-version-upgrade Определяет использование версий Java, отличных от LTS (9, 10, 12–16, 19, 20) и устаревших версий (от 1.x до 8 и 11). Безопасность и поддержка: Старые и не LTS-версии содержат известные уязвимости и не имеют долгосрочных обновлений обслуживания, оставляя инфраструктуру подверженной атакам.
java-upgrade framework-upgrade Обнаруживает версии Spring Boot, Spring Cloud, Spring Framework и Jakarta EE, которые достигли конца поддержки OSS. Поддержке: Устаревшие платформы перестают получать исправления безопасности, что делает приложение угрозой безопасности и несовместимо с современными облачными инструментами.
java-upgrade deprecated-apis Каталогизирует сотни удаленных или устаревших API, включая методы sun.misc.BASE64, Thread.stop, SecurityManager и собственные хуки из JBoss, Seam 2, WebLogic и WebSphere. Стабильность и переносимость: Использование удаленных API приводит к сбою среды выполнения на современных виртуальных машинах JVM. Собственные хуки поставщиков (например, внутренние компоненты WebLogic/JBoss) препятствуют переносимости приложения в стандартных средах выполнения.
java-upgrade build-tool Идентифицирует устаревшие системы сборки, такие как Ant (build.xml), или специфичные для Eclipse конфигурации проектов (типы WTP/JEM). Автоматизации: Устаревшие инструменты не имеют стандартных соглашений и управления зависимостями, необходимых для эффективной интеграции с современными конвейерами CI/CD.

Домен: безопасность (руководство по ISO 5055)

ISO/IEC 5055 — это стандарт ISO для измерения внутренней структуры программного продукта на четырех критически важных для бизнеса факторах: безопасность, надежность, эффективность производительности и удобство обслуживания. Эти факторы определяют, насколько надежным, зависимым и устойчивым является программное обеспечение. В сущности, ISO 5055 предназначен для "поиска и предотвращения 8% недостатков, которые вызывают 90% производственных проблем". ISO 5055 определяет наиболее критически важные и значимые CWEs для каждой характеристики качества: надежность, производительность, безопасность и поддерживаемость. Для модернизации GitHub Copilot вы проводите проверку по курируемым слабым местам безопасности (CWEs), определенным в ISO 5055, как показано в следующей таблице.

CWE_ID Заголовок Описание
CWE-22 Неправильное ограничение имени пути к ограниченному каталогу ('Path Traversal') Продукт использует внешние входные данные для создания имени пути, предназначенного для идентификации файла или каталога в ограниченном родительском каталоге. Но он неправильно нейтрализует специальные элементы, которые могут привести к определению пути за пределами ограниченного каталога.
CWE-23 Относительный обход пути Продукт использует внешние данные для создания пути в ограниченном каталоге, но не может нейтрализовать такие последовательности, как .., которые позволяют выходить за пределы этого каталога.
CWE-36 Абсолютный обход пути Продукт использует внешние входные данные для создания имени пути в ограниченном каталоге, но ему не удается нейтрализовать абсолютные последовательности путей, такие как /abs/path, что может привести к выходу за пределы этого каталога.
CWE-77 Некорректная нейтрализация специальных элементов, используемых в команде ('Command Injection') Продукт создает команду с помощью внешних входных данных, но не нейтрализует специальные элементы, которые могут изменить предполагаемую команду, отправленную в подчиненный компонент.
CWE-78 Неправильная нейтрализация специальных элементов, используемых в команде ОС (инъекция команд ОС) Продукт создает команду ОС с помощью внешних входных данных, но не может нейтрализовать специальные элементы, которые могут изменить предназначенную команду ОС, отправленную в подчиненный компонент.
CWE-88 Неправильная нейтрализация разделителей аргументов в команде ('внедрение аргументов') Продукт создает командную строку для отдельного компонента, но неправильно разделяет аргументы, опции или параметры в этой строке.
CWE-79 Неправильное нейтрализация входных данных во время создания веб-страниц (межстраничные скрипты) Продукт не может нейтрализовать управляемые пользователем входные данные, прежде чем помещать его в выходные данные, используемые в качестве веб-страницы, обслуживаемой другими пользователями.
CWE-89 Неправильная нейтрализация специальных элементов, используемых в команде SQL (SQL-инъекция) Продукт создает команду SQL, используя внешние входные данные, но не удается нейтрализовать элементы, которые могут изменить команду, из-за чего входные данные интерпретируются как синтаксис SQL, а не как обычные данные.
CWE-564 SQL-инъекция: Hibernate Использование Hibernate для выполнения динамических инструкций SQL, созданных с помощью пользовательских входных данных, может позволить злоумышленнику изменить значение инструкции или выполнить произвольные команды SQL.
CWE-90 Неправильная нейтрализация специальных элементов, используемых в запросе LDAP ('LDAP-инъекция') Продукт создает запрос LDAP с помощью внешних входных данных, но не нейтрализует элементы, которые могут изменить предназначенный для отправки в подчиненный компонент запрос.
CWE-91 XML-Внедрение (также известное как слепое внедрение XPath) Продукт не будет правильно нейтрализовать специальные элементы, используемые в XML, что позволяет злоумышленникам изменять синтаксис, содержимое или команды перед обработкой.
CWE-99 Неправильный контроль идентификаторов ресурсов (внедрение ресурсов) Продукт получает входные данные, но не правильно ограничивает его, прежде чем использовать его в качестве идентификатора ресурса за пределами предполагаемой сферы управления.
CWE-130 Неправильная обработка несоответствия длины параметра Продукт анализирует отформатированный сообщение или структуру, но неправильно обрабатывает поле длины, которое не соответствует фактической длине связанных данных.
CWE-259 Использование жестко закодированного пароля Продукт содержит жестко закодированный пароль, используемый для собственной входящей проверки подлинности или исходящей связи с внешними компонентами.
CWE-321 Использование жестко закодированного ключа шифрования Продукт использует жестко закодированный, неизменяемый криптографический ключ.
CWE-434 Неограниченная загрузка файла опасного типа Продукт позволяет отправлять опасные типы файлов, которые автоматически обрабатываются в своей среде.
CWE-456 Отсутствует инициализация переменной Продукт не инициализирует критические переменные, что приводит к использованию непредвиденных значений среды выполнения.
CWE-457 Использование неинициализированной переменной В коде используется переменная, которая не инициализирована, что приводит к непредсказуемым или непредвиденным результатам.
CWE-477 Использование устаревшей функции Код использует устаревшие или вышедшие из употребления функции, что говорит о том, что он не подвергается ревизии и не поддерживается.
CWE-502 Десериализация ненадежных данных Продукт десериализирует ненадежные данные без достаточной проверки допустимости полученных данных.
CWE-543 Использование однопоточного шаблона без синхронизации в многопоточном контексте Продукт использует одноэлементный шаблон при создании ресурса в многопоточной среде без надлежащей синхронизации.
CWE-567 Несинхронизированный доступ к общим данным в многопотоковом контексте Продукт не может правильно синхронизировать общие данные, такие как статические переменные, между потоками, что приводит к неопределенному поведению.
CWE-570 Выражение всегда ложно Продукт содержит выражение, которое всегда вычисляется как false.
CWE-571 Выражение всегда истинно Продукт содержит выражение, которое всегда оценивается как истинно.
CWE-606 Непроверенные входные данные для условия цикла Продукт должным образом не проверяет входные данные, используемые для условий цикла, что может привести к отказу в обслуживании из-за чрезмерного повторения цикла.
CWE-643 Неправильная нейтрализация данных в выражениях XPath (инъекция XPath) Продукт использует внешние входные данные для динамического создания выражения XPath для XML-базы данных, но не справляется с нейтрализацией этих входных данных.
CWE-652 Неправильное нейтрализация данных в выражениях XQuery (внедрение XQuery) Продукт использует внешние входные данные для динамического создания выражения XQuery, но не может правильно нейтрализовать входные данные.
CWE-662 Неправильная синхронизация Продукт позволяет нескольким потокам или системам получать доступ к общему ресурсу без надлежащей синхронизации, что потенциально приводит к проблемам одновременного доступа.
CWE-665 Неправильная инициализация Продукт не инициализирует или неправильно инициализирует ресурс, потенциально оставляя его в непредвиденном состоянии при доступе.
CWE-667 Неправильная блокировка Продукт не получает или не освобождает блокировку ресурса, что вызывает неожиданные изменения состояния.
CWE-672 Операция с ресурсом после истечения срока действия или выпуска Продукт обращается к ресурсу или работает с ресурсом после истечения срока его действия, был освобожден или отменен.
CWE-681 Неправильное преобразование между числовыми типами Данные могут быть опущены или переведены в непредвиденные значения во время преобразования типов, что может быть опасно при использовании в конфиденциальных контекстах.
CWE-682 Неправильное вычисление Продукт выполняет вычисление, которое создает неверные результаты, которые позже используются в критически важных решениях безопасности или управлении ресурсами.
CWE-732 Неправильное назначение разрешений для критического ресурса Разрешения для ресурса, критического для безопасности, указываются таким образом, чтобы непреднамеренные субъекты считывали или изменяли его.
CWE-772 Неосвобожденный ресурс после эффективного использования Продукт не освобождает ресурс после окончания его эффективного существования, и он больше не нужен.
CWE-775 Не освобожден дескриптор файла или дескриптор после истечения срока действия Продукт не освобождает дескриптор файла или дескриптор ресурса после того, как они больше не нужны.
CWE-778 Недостаточное журналирование Продукт не может записать критическое событие безопасности или не указать важные сведения при его регистрации.
CWE-783 Ошибка логики приоритета оператора Выражение использует неправильную логику, вызванную приоритетом оператора.
CWE-789 Выделение памяти с слишком большим значением размера Продукт выделяет память на основе непроверенного, значительно большого значения, не гарантируя, что оно соответствует ожидаемым ограничениям.
CWE-798 Использование жестко закодированных учетных данных Продукт содержит жестко закодированные учетные данные, такие как пароль или криптографический ключ.
CWE-820 Отсутствует синхронизация Продукт использует общий ресурс одновременно, не пытаясь синхронизировать доступ.
CWE-821 Неправильная синхронизация Продукт использует общий ресурс одновременно, но не правильно синхронизирует доступ.
CWE-835 Цикл с неустранимым условием выхода ("Бесконечный цикл") Продукт содержит итерацию или цикл с условием выхода, которое невозможно достичь.
CWE-611 Неправильное ограничение ссылки на внешние сущности XML Продукт обрабатывает XML-документы, содержащие сущности с URI, которые разрешаются вне предполагаемой сферы управления.
CWE-1057 Операции доступа к данным за пределами ожидаемого компонента Диспетчера данных Продукт выполняет операции доступа к данным, которые обходят выделенный, центральный компонент менеджера данных, необходимый по замыслу.

Дальнейшие действия