Vysvětlení pokrytí posouzení pomocí modernizace GitHub Copilotu

Tento článek popisuje, jakou funkci posouzení aplikace modernizace GitHub Copilot dokáže rozpoznat. Posouzení se zabývá dvěma klíčovými funkcemi:

  • Detekce problémů napříč třemi doménami, které jsou pro vaši cestu modernizace důležité:

    • Připravenost na cloud: Identifikuje 16 kategorií problémů, včetně využití systému souborů, správy přihlašovacích údajů, služeb zasílání zpráv, databázových připojení, mezer v kontejnerizaci, zpracování relací, vzorů vzdálené komunikace a dalších.
    • Aktualizace Javy: Označí zastaralé verze Javy, rámce s ukončenou podporou OSS (například Spring Boot, Spring Cloud, Jakarta EE), stovky zastaralých nebo odebraných API a starší nástroje sestavení, například Ant.
    • Zabezpečení: Detekuje 42 slabých míst zabezpečení ze standardu ISO/IEC 5055, který zahrnuje zranitelnosti při injekci (SQL, LDAP, XPath, příkaz OS), pevně zakódovaná přihlašovací data a kryptografické klíče, problémy se synchronizací, problémy životního cyklu prostředků a další vysoce závažné CWE.
  • Porozumění aplikacím: Pro starší verze základu kódu posouzení odhalí používané závislosti a technologie, abyste získali jasný přehled o tom, na čem vaše aplikace spoléhá, než začnete migrovat.

Následující části popisují podrobně pokrytí problému pro každou doménu.

Doména: připravenost na cloud

Doména Kategorie Souhrn detekce Proč je to důležité
cloud-readiness credential-migration Detekuje pevně zakódované přihlašovací údaje AWS (aws_access_key_id, aws_secret_access_key), využití AWS Secrets Manageru a vložené knihovny pro správu tajných kódů, jako je Spring Cloud Vault. Zabezpečení: Pevně zakódované přihlašovací údaje a úložiště tajných kódů specifických pro dodavatele jsou vysoce zranitelné. Aplikace nativní pro cloud vyžadují centralizované zabezpečení založené na identitách, aby se zabránilo krádeži přihlašovacích údajů.
cloud-readiness region-configuration Identifikuje pevně zakódované identifikátory oblastí AWS (aws.region, AWS_REGION) v kódu nebo konfiguračních souborech. Přenositelnost: Pevné zakódování geografických lokalit spojuje aplikaci s fyzickou infrastrukturou konkrétního dodavatele, což brání globálnímu nasazení a odolnosti.
cloud-readiness storage-migration Detekuje využití sady AWS S3 SDK (kbelíky, objekty, předem podepsané adresy URL), S3 TransferManager a klientské knihovny služby Google Cloud Storage. Spolehlivost a sladění: Tyto závislosti vás zamknou do úložiště objektů dodavatele a nefungují s nativními službami úložiště cílové platformy.
cloud-readiness messaging-service-migration Označí závislosti a připojovací řetězce pro Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsear a Google Cloud Pub/Sub. Škálovatelnost a spolehlivost: Starší zprostředkovatelé zasílání zpráv často spoléhají na pevné koncové body a trvalost na disku, které brání horizontálnímu škálování a vysoké dostupnosti v cloudových prostředích.
cloud-readiness database-migration Detekuje připojovací řetězce, ovladače a nastavení časového limitu pro MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore a Google Cloud Spanner. Spolehlivost: Samoobslužné nebo ne nativní databáze nemají automatizované cloudové škálování. Pevně zakódované časové limity a pevné intervaly opakování můžou způsobit blokování a opakování bouří během částečných výpadků.
cloud-readiness file-system-management Identifikuje použití relativních/absolutních cest, domovských cest (/home/), file:// schémat a standardních Java IO/NIO nebo Apache Commons IO volání pro přístup k místnímu úložišti. Bezstavové: Cloudové kontejnery jsou dočasné. Zápis do místního systému souborů vede ke ztrátě dat při restartování instance nebo operacích škálování; trvalá data musí být externalizována.
cloud-readiness local-credential Označuje soubory Java KeyStore (.jks), volání metod a nešifrovaná hesla (password, pwd) v konfiguračních nebo XML souborech. Riziko zabezpečení: Citlivý materiál uložený v prostém textu nebo místních souborech může být snadno ohrožen, pokud neoprávnění uživatelé přistupovali k prostředí aplikace nebo konfiguračním souborům.
cloud-readiness configuration-management System.getenvZjistí , , System.getPropertyexterní.properties/.xml/.inisoubory a přístup k registru systému Windows pro nastavení aplikace. Externalizace: Úložiště specifické pro operační systém nebo místní soubory se nedají spravovat ve velkém měřítku a nedají se dynamicky aktualizovat bez změn kódu ve všech instancích.
cloud-readiness session-management Identifikuje úložiště dat v HttpSession objektech a použití značky "distribuovatelné" ve webových popisovačích. Škálovatelnost: Standardní relace HTTP nejsou vhodné pro cloudové škálování; Stav musí být externalizován do distribuované mezipaměti, aby se zabránilo ztrátě dat během přenosu mezi instancemi.
cloud-readiness remote-communication Detekuje úzce propojené protokoly (CORBA, RMI, JCA), nezabezpečené protokoly HTTP/FTP, rozhraní JAVA Mail API, využití kanálů Direct Socket/NIO a pevně zakódované adresy URL. Kompatibilita a zabezpečení cloudu: Úzce propojené interakce brání škálovatelnosti. Nezabezpečené protokoly a pevně zakódované adresy URL jsou v dynamických cloudových síťových prostředích zranitelné a křehké.
cloud-readiness jakarta-migration Detekuje použití specifických rozhraní API Jakarta/Java EE pro NoSQL, JPA, Data, WebSockets a JAX-RS a artefakty specifické pro servery JBoss EAP, WebLogic nebo WebSphere. Supportability: Migrace na cloudové nativní prostředí vyžaduje soulad s moderními obory názvů Jakarta a odstranění závislostí na proprietárních aplikačních serverech pro zajištění přenositelnosti.
cloud-readiness containerization Označí absenci souboru Dockerfile nebo problematické instrukce Dockerfile, jako jsou apt-get upgrade, malá písmena a problémy s mezerami v syntaxi. Spolehlivost: Standardizace v sestaveních kontejnerů se vyžaduje pro stabilní, reprodukovatelná nasazení a k zajištění předvídatelných chování imagí v různých prostředích.
cloud-readiness scheduled-job-migration Identifikuje obslužné rutiny AWS Lambda, Google Cloud Functions, závislosti plánovače Quartz a pracovní postupy zpracování Spring Batch. Sladění cloudových výpočetních prostředků: Naplánované úlohy a bezserverové funkce musí být refaktorovány tak, aby využívaly výpočetní modely řízené událostmi a bezserverové výpočetní modely cílového cloudu, aby se snížily režijní náklady na infrastrukturu.
cloud-readiness apm-migration Identifikuje vložené agenty a knihovny APM pro New Relic, Elastic APM a Dynatrace. Pozorovatelnost: Tyto nástroje vyžadují konkrétní integraci cloudové platformy, aby správně zaznamenávaly telemetrická data, latence a stav ve spravovaném prostředí.
cloud-readiness auth-migration Zjistí vzory ověřování SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, Využití LDAP a starší vzory ověřování webového formuláře. Moderní identita: Starší verze webového formuláře a ověřování LDAP nemají flexibilitu a funkce zabezpečení (MFA, jednotné přihlašování) moderních zprostředkovatelů cloudových identit založených na deklaracích identity.
cloud-readiness os-compatibility Identifikuje závislosti projektu v knihovnách Dynamic-Link specifických pro Windows (soubory.dll). Přenositelnost: Knihovny DLL jsou specifické pro operační systémy a nejsou kompatibilní ve standardních cloudových prostředích založených na Linuxu. Musíte je nahradit sdílenými knihovnami pro různé platformy.

Doména: java-upgrade

Doména Kategorie Přehled detekce Proč je to důležité
java-upgrade java-version-upgrade Identifikuje použití verzí Javy jiných než LTS (9, 10, 12–16, 19, 20) a starších verzí (1.x až 8 a 11). Zabezpečení a podpora: Starší a ne-LTS verze obsahují známé zranitelnosti a chybí jim dlouhodobé údržbové aktualizace, což vystavuje infrastrukturu útokům.
java-upgrade framework-upgrade Detekuje verze Spring Boot, Spring Cloud, Spring Framework a Jakarta EE, které dosáhly konce podpory operačního systému. Supportability: Zastaralé architektury přestanou přijímat opravy zabezpečení, což z aplikace dělá bezpečnostní riziko a nekompatibilní s moderními nástroji nativními pro cloud.
java-upgrade deprecated-apis Katalogy stovek odebraných nebo zastaralých rozhraní API, včetně sun.misc.BASE64, , Thread.stopmetod SecurityManager a proprietárních háků z JBoss, Seam 2, WebLogic a WebSphere. Stabilita a přenositelnost: Použití odebraných rozhraní API způsobuje chybové ukončení modulu runtime v moderních JVM. Proprietární prvky dodavatele (jako interní mechanismy WebLogic/JBoss) brání tomu, aby byla aplikace přenosná napříč standardními runtimy.
java-upgrade build-tool Identifikuje starší systémy sestavení, jako jsou Ant (build.xml) nebo konfigurace projektů specifické pro Eclipse (povaha WTP/JEM). Automatizace: Starší nástroje nemají standardní konvence a správu závislostí potřebné k efektivní integraci do moderních kanálů CI/CD.

Doména: Zabezpečení (ISO 5055 vedené)

ISO/IEC 5055 je standard ISO pro měření vnitřní struktury softwarového produktu na čtyřech důležitých obchodních faktorech: zabezpečení, spolehlivost, efektivita výkonu a udržovatelnost. Tyto faktory určují, jak důvěryhodný, spolehlivý a odolný je softwarový systém. Iso 5055 má v podstatě "najít a zabránit 8% vad, které způsobují 90% produkčních problémů". ISO 5055 identifikuje nejkritičtější a nejvýznamnější CWE v rámci každé charakteristiky kvality: spolehlivost, efektivnost výkonu, zabezpečení a udržovatelnost. Pro modernizaci GitHub Copilotu kontrolujete kurátorované CWE u zabezpečení definované v ISO 5055, jak ukazuje následující tabulka.

CWE_ID Titul Description
CWE-22 Nesprávné omezení názvu cesty k omezenému adresáři (průnik cestou) Produkt používá externí vstup k vytvoření názvu cesty určeného k identifikaci souboru nebo adresáře pod omezeným nadřazeným adresářem. Ale nesprávně neutralizuje speciální prvky, které mohou způsobit vyřešení názvu cesty mimo omezený adresář.
CWE-23 Procházení relativní cesty Produkt používá externí vstup k vytvoření názvu cesty v rámci omezeného adresáře, ale nedokáže eliminovat sekvence, jako je .., které mohou vést k vyřešení mimo tento adresář.
CWE-36 Absolutní procházení cesty Produkt používá externí vstup k vytvoření názvu cesty v rámci omezeného adresáře, ale nedokáže neutralizovat absolutní sekvence cest, jako je /abs/path, které mohou být vyřešeny mimo tento adresář.
CWE-77 Nesprávná neutralizace speciálních prvků použitých v příkazu (injektáž příkazu) Produkt vytvoří příkaz pomocí externě ovlivněného vstupu, ale ne neutralizuje speciální prvky, které by mohly upravit zamýšlený příkaz odeslaný podřízené komponentě.
CWE-78 Nesprávná neutralizace speciálních prvků použitých v příkazu operačního systému (injektáž příkazu operačního systému) Produkt vytvoří příkaz operačního systému pomocí externě ovlivněného vstupu, ale nedokáže neutralizovat speciální prvky, které by mohly upravit zamýšlený příkaz operačního systému odeslaný podřízené komponentě.
CWE-88 Nesprávná neutralizace oddělovačů argumentů v příkazu (injektáž argumentu) Produkt vytvoří řetězec příkazu pro samostatnou komponentu, ale nesprávně odděluje argumenty, možnosti nebo přepínače v rámci daného řetězce.
CWE-79 Nesprávná neutralizace vstupu během generování webové stránky (skriptování mezi weby) Produkt nedokáže neutralizovat uživatelsky řízený vstup před jeho umístěním do výstupu poskytovaného jako webová stránka jiným uživatelům.
CWE-89 Nesprávná neutralizace speciálních prvků použitých v příkazu SQL (injektáž SQL) Produkt vytvoří příkaz SQL pomocí externě ovlivněného vstupu, ale nedokáže neutralizovat prvky, které by mohly příkaz upravit, což umožňuje vstupy interpretovat jako syntaxi SQL místo obyčejných dat.
CWE-564 Injektáž SQL: Hibernace Použití hibernace ke spouštění dynamických příkazů SQL vytvořených pomocí uživatelem řízeného vstupu může útočníkovi umožnit změnit význam příkazu nebo spustit libovolné příkazy SQL.
CWE-90 Nesprávná neutralizace speciálních prvků použitých v dotazu LDAP (injektáž LDAP) Produkt vytvoří dotaz LDAP pomocí externě ovlivněného vstupu, ale nedokáže neutralizovat prvky, které by mohly upravit zamýšlený dotaz odeslaný podřízené komponentě.
CWE-91 Injektáž XML (označovaná také jako slepá injektáž XPath) Produkt správně neutralizuje speciální prvky použité v jazyce XML, což útočníkům umožňuje před zpracováním upravit syntaxi, obsah nebo příkazy.
CWE-99 Nesprávná kontrola identifikátorů prostředků (injektáž prostředků) Produkt obdrží vstup, ale neomezí ho před použitím jako identifikátor prostředku mimo zamýšlenou oblast řízení.
CWE-130 Nesprávné zpracování nesouladu parametru délky Produkt analyzuje formátovanou zprávu nebo strukturu, ale nesprávně zpracovává pole délky, které je nekonzistentní se skutečnou délkou přidružených dat.
CWE-259 Použití pevně zakódovaného hesla Produkt obsahuje pevně zakódované heslo, které se používá pro vlastní příchozí nebo odchozí komunikaci s externími komponentami.
CWE-321 Použití pevně zakódovaného kryptografického klíče Produkt používá pevně zakódovaný, neměnný kryptografický klíč.
CWE-434 Neomezené nahrávání souboru s nebezpečným typem Produkt umožňuje nahrání nebezpečných typů souborů, které se automaticky zpracovávají v rámci svého prostředí.
CWE-456 Chybějící inicializace proměnné Produkt neicializuje kritické proměnné, což způsobí, že spouštěcí prostředí použije neočekávané hodnoty.
CWE-457 Použití neinicializované proměnné Kód používá proměnnou, která není inicializována, což vede k nepředvídatelným nebo nezamýšleným výsledkům.
CWE-477 Použití zastaralé funkce Kód používá nepodporované nebo zastaralé funkce, což naznačuje, že se aktivně nekontroluje ani neudržuje.
CWE-502 Deserializace nedůvěryhodných dat Produkt deserializuje nedůvěryhodná data bez dostatečného zajištění platnosti výsledných dat.
CWE-543 Použití návrhového vzoru Singleton bez synchronizace v kontextu s více vlákny Produkt používá jedináčkový vzor při vytváření prostředku v multivláknovém prostředí bez správné synchronizace.
CWE-567 Nesynchronizovaný přístup ke sdíleným datům v kontextu s více vlákny Produkt nedokáže správně synchronizovat sdílená data, jako jsou statické proměnné, napříč vlákny, což vede k nedefinovaným chování.
CWE-570 Výraz je vždy nepravdivý Produkt obsahuje výraz, který se vždy vyhodnotí jako nepravda.
CWE-571 Výraz je vždy pravdivý (true) Produkt obsahuje výraz, který se vždy vyhodnotí jako true.
CWE-606 Nezaškrtnutý vstup pro podmínku smyčky Produkt správně nekontroluje vstupy používané pro podmínky cyklu, což může vést k odepření služby z přílišného cyklování.
CWE-643 Nesprávná neutralizace dat v rámci výrazů XPath (injektáž XPath) Produkt používá externí vstup k dynamickému vytvoření výrazu XPath pro databázi XML, ale tento vstup se nepovede neutralizovat.
CWE-652 Nesprávná neutralizace dat ve výrazech XQuery (injektáž XQuery) Produkt používá externí vstup k dynamickému vytvoření výrazu XQuery, ale nedokáže tento vstup správně neutralizovat.
CWE-662 Nesprávná synchronizace Produkt umožňuje přístup ke sdílenému prostředku více vláken nebo systémů bez správné synchronizace, což může způsobovat problémy se souběžným přístupem.
CWE-665 Nesprávná inicializace Produkt neicializuje nebo nesprávně inicializuje prostředek, případně ho při přístupu ponechá v neočekávaném stavu.
CWE-667 Nesprávné uzamykání Produkt řádně nezíská nebo neuvolní zámek na prostředku, což vede k neočekávaným změnám stavu.
CWE-672 Operace na prostředku po vypršení platnosti nebo uvolnění Produkt přistupuje nebo pracuje s prostředkem po jeho vypršení platnosti, uvolnění nebo odvolání.
CWE-681 Nesprávný převod mezi číselnými typy Data je možné během převodu typu vynechat nebo přeložit do neočekávaných hodnot, což může být nebezpečné v případě použití v citlivých kontextech.
CWE-682 Nesprávný výpočet Produkt provede výpočet, který později vygeneruje nesprávné výsledky při rozhodování o důležitých zabezpečeních nebo správě prostředků.
CWE-732 Nesprávné přiřazení oprávnění pro kritický zdroj Oprávnění pro prostředek kritický pro zabezpečení jsou určena způsobem, který umožňuje neúmyslným hercům číst nebo upravovat.
CWE-772 Chybějící uvolnění prostředku po skončení účinné doby životnosti Produkt po skončení jeho efektivní životnosti nevyvolá prostředek a už ho nepotřebujete.
CWE-775 Nedostatečné uvolnění popisovače souboru nebo jiného popisovače po skončení platnosti Produkt nedokáže uvolnit popisovač souboru poté, co již není potřebný.
CWE-778 Nedostatečné protokolování Produkt při protokolování nezaznamená událost kritickou pro zabezpečení nebo vynechá důležité podrobnosti.
CWE-783 Chyba logiky priority operátoru Výraz používá nesprávnou logiku způsobenou prioritou operátoru.
CWE-789 Přidělení paměti s nadměrnou hodnotou velikosti Produkt přidělí paměť na základě nedůvěryhodné a velké hodnoty velikosti, aniž by se zajistilo, že je v rámci očekávaných limitů.
CWE-798 Použití pevně zakódovaných přihlašovacích údajů Produkt obsahuje pevně zakódované přihlašovací údaje, například heslo nebo kryptografický klíč.
CWE-820 Chybějící synchronizace Produkt využívá sdílený prostředek souběžně bez pokusu o synchronizaci přístupu.
CWE-821 Nesprávná synchronizace Produkt využívá sdílený prostředek souběžně, ale nesynchronizuje správně přístup.
CWE-835 Smyčka s nedostupnou výstupní podmínkou (nekonečná smyčka) Produkt obsahuje iteraci nebo smyčku s ukončovací podmínkou, kterou nelze dosáhnout.
CWE-611 Nesprávné omezení odkazu na externí entitu XML Produkt zpracovává dokumenty XML obsahující entity s identifikátory URI, které se řeší mimo zamýšlený rámec řízení.
CWE-1057 Operace přístupu k datům mimo očekávanou komponentu Data Manageru Produkt provádí operace přístupu k datům, které obcházejí vyhrazenou komponentu centrálního správce dat vyžadovanou návrhem.

Další kroky