Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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. |