Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, что функция оценки приложений в рамках модернизации 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 |
Операции доступа к данным за пределами ожидаемого компонента Диспетчера данных | Продукт выполняет операции доступа к данным, которые обходят выделенный, центральный компонент менеджера данных, необходимый по замыслу. |