Delen via


Inzicht in beoordelingsdekking door modernisering van GitHub Copilot

In dit artikel wordt beschreven wat de app-evaluatiefunctie van GitHub Copilot-modernisering kan detecteren. De evaluatie omvat twee belangrijke mogelijkheden:

  • Probleemdetectie in drie domeinen die essentieel zijn voor uw moderniseringstraject:

    • Gereedheid voor de cloud: identificeert 16 categorieën problemen, waaronder bestandssysteemgebruik, referentiebeheer, berichtenservices, databaseverbindingen, hiaten in containers, sessieafhandeling, communicatiepatronen op afstand en meer.
    • Java-upgrade: markeert verouderde Java-versies, end-of-OSS-ondersteuningsframeworks (Spring Boot, Spring Cloud, Jakarta EE), honderden verwijderde of afgeschafte API's en verouderde buildhulpprogramma's zoals Ant.
    • Beveiliging: detecteert 42 zwakke plekken in de beveiliging die zijn getrokken uit de ISO/IEC 5055-standaard, met betrekking tot injectieproblemen (SQL, LDAP, XPath, OS-opdracht), vastgelegde referenties en cryptografische sleutels, synchronisatieproblemen, problemen met de levenscyclus van resources en andere belangrijke GKGG's.
  • Toepassingskennis: voor verouderde codebasissen wordt in de evaluatie afhankelijkheden en technologieën in gebruik weergegeven, zodat u een duidelijk beeld krijgt van waar uw toepassing van afhankelijk is voordat u begint met migreren.

In de volgende secties wordt de dekking van het probleem voor elk domein uitgebreid beschreven.

Domein: cloudgereedheid

Domein Categorie Detectiesamenvatting Waarom het belangrijk is
cloud-readiness credential-migration Detecteert vastgelegde AWS-referenties (aws_access_key_id, ), aws_secret_access_keyAWS Secrets Manager-gebruik en ingesloten geheimbeheerbibliotheken zoals Spring Cloud Vault. Veiligheid: Hardcoded inloggegevens en leverancierspecifieke geheime opslagplaatsen zijn zeer kwetsbaar. Cloudeigen toepassingen vereisen gecentraliseerde beveiliging op basis van identiteiten om diefstal van referenties te voorkomen.
cloud-readiness region-configuration Identificeert vastgelegde AWS-regio-id's (aws.region, AWS_REGION) in code- of configuratiebestanden. Draagbaarheid: Met hardcoding-geografische gebieden wordt de toepassing gekoppeld aan de fysieke infrastructuur van een specifieke leverancier, waardoor de wereldwijde implementatie en tolerantie worden belemmerd.
cloud-readiness storage-migration Detecteert AWS S3 SDK-gebruik (buckets, objecten, vooraf ondertekende URL's), S3 TransferManager en Google Cloud Storage-clientbibliotheken. Betrouwbaarheid en uitlijning: Deze afhankelijkheden vergrendelen u in de objectopslag van een leverancier en werken niet met de systeemeigen opslagservices van het doelplatform.
cloud-readiness messaging-service-migration Markeert afhankelijkheden en verbindingsreeksen voor Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar en Google Cloud Pub/Sub. Schaalbaarheid en betrouwbaarheid: Verouderde berichtenbrokers zijn vaak afhankelijk van vaste eindpunten en persistentie op basis van schijven die horizontale schaalaanpassing en hoge beschikbaarheid in cloudomgevingen belemmeren.
cloud-readiness database-migration Detecteert verbindingsreeksen, stuurprogramma's en time-outinstellingen voor MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore en Google Cloud Spanner. Betrouwbaarheid: Zelfbeheerde of niet-native databases missen geautomatiseerde schaalvergroting in de cloud. Hardcoded time-outs en vaste intervallen voor opnieuw proberen kunnen leiden tot vastlopen en herhalingsstormen tijdens gedeeltelijke storingen.
cloud-readiness file-system-management Identificeert het gebruik van relatieve/absolute paden, huispaden (/home/), file:// schema's en standaard Java IO/NIO- of Apache Commons IO-aanroepen voor lokale opslagtoegang. Staatloosheid: Cloudcontainers zijn kortstondig. Schrijven naar een lokaal bestandssysteem leidt tot gegevensverlies bij het opnieuw opstarten of schalen van exemplaren; permanente gegevens moeten worden ge externaliseerd.
cloud-readiness local-credential Hiermee worden Java KeyStore-bestanden (.jks), methode-aanroepen en wachtwoorden in platte tekst (KeyStore.load, password, pwd) gemarkeerd in eigenschaps- of XML-bestanden. Beveiligingsrisico: Gevoelig materiaal dat is opgeslagen in duidelijke tekst of lokale bestanden, kan eenvoudig worden aangetast als onbevoegde personen toegang hebben tot de toepassingsomgeving of configuratiebestanden.
cloud-readiness configuration-management DetecteertSystem.getenv, System.getPropertyexterne.properties/.xml/.inibestanden en Windows-registertoegang voor toepassingsinstellingen. Externalisatie: Besturingssysteemspecifieke opslag of lokale bestanden kunnen niet op schaal worden beheerd en kunnen niet dynamisch worden bijgewerkt zonder codewijzigingen in alle exemplaren.
cloud-readiness session-management Identificeert gegevensopslag in HttpSession objecten en het gebruik van de tag 'distribueerbaar' in webdescriptors. Schaalbaarheid: Standaard HTTP-sessies zijn ongeschikt voor schalen in de cloud; de status moet worden ge externaliseerd naar een gedistribueerde cache om gegevensverlies te voorkomen tijdens het verplaatsen van verkeer tussen exemplaren.
cloud-readiness remote-communication Detecteert nauw gekoppelde protocollen (CORBA, RMI, JCA), onbeveiligde HTTP/FTP-protocollen, Java Mail-API, direct Socket/INTUNE-kanaalgebruik en vastgelegde URL's. Cloudcompatibiliteit en -beveiliging: Nauw gekoppelde interacties belemmeren schaalbaarheid. Niet-beveiligde protocollen en vastgelegde URL's zijn kwetsbaar en broos in dynamische cloudnetwerkomgevingen.
cloud-readiness jakarta-migration Detecteert het gebruik van Jakarta/Java EE-specifieke API's voor NoSQL, JPA, Data, WebSockets en JAX-RS, en serverspecifieke artefacten van JBoss EAP, WebLogic of WebSphere. Ondersteuning: Migreren naar een cloudeigen runtime vereist dat deze is afgestemd op moderne Jakarta-naamruimten en het verwijderen van afhankelijkheden van bedrijfseigen toepassingsservers om de draagbaarheid te garanderen.
cloud-readiness containerization Markeert het ontbreken van een Dockerfile of problematische Dockerfile-instructies, zoals apt-get upgrade, syntaxis in kleine letters en problemen met de syntaxisafstand. Betrouwbaarheid: Standaardisatie in container-builds is vereist voor stabiele, reproduceerbare implementaties en om ervoor te zorgen dat installatiekopieën zich voorspelbaar gedragen in verschillende omgevingen.
cloud-readiness scheduled-job-migration Identificeert AWS Lambda-handlers, Google Cloud Functions, Quartz Scheduler-afhankelijkheden en Spring Batch-verwerkingswerkstromen. Cloud Compute-uitlijning: Geplande taken en serverloze functies moeten worden geherstructureerd om de gebeurtenisgestuurde en serverloze rekenmodellen van de doelcloud te gebruiken om de overhead van de infrastructuur te verminderen.
cloud-readiness apm-migration Identificeert ingesloten APM-agents en -bibliotheken voor New Relic, Elastic APM en Dynatrace. Observability: Voor deze hulpprogramma's is specifieke integratie van cloudplatforms vereist om telemetrie-, latentie- en statusgegevens correct vast te leggen in een beheerde omgeving.
cloud-readiness auth-migration Detecteert SAML/OpenSAML-, OAuth 2.0-, OpenID-, Spring Security-, LDAP-gebruikspatronen en verouderde verificatiepatronen voor webformulieren. Moderne identiteit: Verouderde webformulier- en LDAP-verificatie missen de flexibiliteit en beveiligingsfuncties (MFA, SSO) van moderne cloudidentiteitsproviders die op claims gebaseerd zijn.
cloud-readiness os-compatibility Identificeert projectafhankelijkheden op Windows-specifieke Dynamic-Link Bibliotheken (.dll bestanden). Draagbaarheid: DLL's zijn specifiek voor het besturingssysteem en worden niet uitgevoerd in standaard op Linux gebaseerde cloudcontaineromgevingen. U moet deze vervangen door platformoverschrijdende gedeelde bibliotheken.

Domein: java-upgrade

Domein Categorie Detectiesamenvatting Waarom het belangrijk is
java-upgrade java-version-upgrade Identificeert het gebruik van niet-LTS Java-versies (9, 10, 12-16, 19, 20) en oudere versies (1.x tot en met 8 en 11). Beveiliging en ondersteuning: Oudere en niet-LTS-versies bevatten bekende beveiligingsproblemen en ontbreken langdurige onderhoudsupdates, waardoor de infrastructuur blootgesteld wordt aan aanvallen.
java-upgrade framework-upgrade Detecteert Spring Boot-, Spring Cloud-, Spring Framework- en Jakarta EE-versies die einde van oss-ondersteuning hebben bereikt. Ondersteuning: Verouderde frameworks ontvangen geen beveiligingsoplossingen meer, waardoor de toepassing een beveiligingsrisico heeft en niet compatibel is met moderne cloudeigen hulpprogramma's.
java-upgrade deprecated-apis Catalogiseer honderden verwijderde of afgeschafte API's, waarondersun.misc.BASE64, Thread.stopSecurityManager methoden en eigen hooks van JBoss, Seam 2, WebLogic en WebSphere. Stabiliteit en draagbaarheid: Als u verwijderde API's gebruikt, loopt runtime vast op moderne JVM's. Eigen leverancierhooks (zoals WebLogic/JBoss-internals) voorkomen dat de toepassing draagbaar is in standaard runtimes.
java-upgrade build-tool Identificeert legacy buildsystemen zoals Ant (build.xml) of projectconfiguraties specifiek voor Eclipse (WTP/JEM natures). Automatisering: Verouderde hulpprogramma's ontbreken de standaardconventies en afhankelijkheidsbeheer die nodig zijn voor een efficiënte integratie in moderne CI/CD-pijplijnen.

Domein: Beveiliging (ISO 5055 geleid)

ISO/IEC 5055 is een ISO-standaard voor het meten van de interne structuur van een softwareproduct op vier bedrijfskritieke factoren: beveiliging, betrouwbaarheid, prestatie-efficiëntie en onderhoudbaarheid. Deze factoren bepalen hoe betrouwbaar, betrouwbaar en tolerant een softwaresysteem is. Iso 5055 is in wezen bedoeld om "de 8% van fouten te vinden en te voorkomen die 90% productieproblemen veroorzaken". ISO 5055 identificeert de meest kritieke en impactvolle CWEs onder elk kwaliteitskenmerk: betrouwbaarheid, prestatie-efficiëntie, beveiliging en onderhoudbaarheid. Voor de modernisering van GitHub Copilot detecteert u de gecureerde CWEs voor beveiliging die in ISO 5055 zijn gedefinieerd, zoals blijkt uit de volgende tabel.

CWE_ID Titel Beschrijving
CWE-22 Onjuiste beperking van een padnaam naar een beperktere map ('Path Traversal') Het product gebruikt externe invoer om een padnaam te maken die is bedoeld om een bestand of map te identificeren binnen een beperkte hoofdmap. Het neutraliseert de speciale elementen niet goed, wat ervoor kan zorgen dat de padnaam buiten de beperkte map wordt opgelost.
CWE-23 Relatieve padkruising Het product maakt gebruik van externe invoer om een padnaam binnen een beperkte map samen te stellen, maar slaagt er niet in sequenties zoals .. te neutraliseren, die buiten die map kunnen worden omgezet.
CWE-36 Absoluut pad doorkruising Het product gebruikt externe invoer om een padnaam in een beperkte map te maken, maar neutraliseert absolute padnamen zoals /abs/path, die buiten die map kunnen leiden, niet.
CWE-77 Onjuiste neutralisatie van speciale elementen die worden gebruikt in een opdracht ('Opdrachtinjectie') Het product bouwt een opdracht op met behulp van extern beïnvloede invoer, maar neutraliseert geen speciale elementen die de beoogde opdracht naar een downstreamcomponent kunnen wijzigen.
CWE-78 Onjuiste neutralisatie van speciale elementen die worden gebruikt in een os-opdracht ('Os Command Injection') Het product bouwt een besturingssysteemcommando op met behulp van extern beïnvloede invoer, maar neutraliseert geen speciale elementen die het beoogde besturingssysteemcommando, dat naar een downstream-component wordt verzonden, kunnen wijzigen.
CWE-88 Onjuiste neutralisatie van argumentscheidingstekens in een opdracht ('Argumentinjectie') Het product maakt een opdrachtreeks voor een afzonderlijk onderdeel, maar scheidt argumenten, opties of schakelopties niet goed binnen die tekenreeks.
CWE-79 Onjuiste neutralisatie van invoer tijdens het genereren van webpagina's ('Scripts op meerdere sites') Het product neutraliseert gebruikerscontroleerbare invoer niet voordat deze in de uitvoer wordt geplaatst die als webpagina aan andere gebruikers wordt geserveerd.
CWE-89 Onjuiste neutralisatie van speciale elementen die worden gebruikt in een SQL-opdracht ('SQL-injectie') Het product maakt een SQL-opdracht met behulp van extern beïnvloede invoer, maar kan de elementen die de opdracht kunnen wijzigen niet neutraliseren, waardoor de invoer als SQL-syntaxis in plaats van als gewone gegevens kan worden geïnterpreteerd.
CWE-564 SQL-injectie: Hibernate Door Hibernate te gebruiken om dynamische SQL-instructies uit te voeren die zijn gebouwd met door de gebruiker beheerde invoer, kan een aanvaller de betekenis van de instructie wijzigen of willekeurige SQL-opdrachten uitvoeren.
CWE-90 Onjuiste neutralisatie van speciale elementen die worden gebruikt in een LDAP-query ('LDAP-injectie') Het product maakt een LDAP-query met behulp van extern beïnvloede invoer, maar slaagt er niet in elementen te neutraliseren die de beoogde query, die naar een downstreamonderdeel wordt verzonden, kunnen wijzigen.
CWE-91 XML-injectie (ook wel blind XPath-injectie genoemd) Het product neutraliseert speciale elementen die in XML worden gebruikt niet goed, waardoor aanvallers de syntaxis, inhoud of opdrachten kunnen wijzigen voordat ze worden verwerkt.
CWE-99 Onjuist beheer van resource-id's ('Resourceinjectie') Het product ontvangt invoer, maar beperkt het niet correct voordat het wordt gebruikt als id voor een resource buiten de beoogde controlesfeer.
CWE-130 Onjuiste verwerking van inconsistentie van lengteparameter Het product parseert een opgemaakt bericht of een opgemaakte structuur, maar verwerkt een lengteveld onjuist dat niet overeenkomt met de werkelijke lengte van de bijbehorende gegevens.
CWE-259 Gebruik van een in code vastgelegd wachtwoord Het product bevat een in code vastgelegd wachtwoord dat wordt gebruikt voor zijn eigen binnenkomende verificatie of uitgaande communicatie met externe onderdelen.
CWE-321 Gebruik van cryptografische sleutel met code Het product maakt gebruik van een in code vastgelegde, onveranderbare cryptografische sleutel.
CWE-434 Onbeperkte upload van bestand met gevaarlijk type Het product staat het uploaden van gevaarlijke bestandstypen toe die automatisch binnen de omgeving worden verwerkt.
CWE-456 Initialisatie van een variabele ontbreekt Het product initialiseert geen kritieke variabelen, waardoor de uitvoeringsomgeving onverwachte waarden gebruikt.
CWE-457 Gebruik van niet-geïnitialiseerde variabele De code maakt gebruik van een variabele die niet is geïnitialiseerd, wat leidt tot onvoorspelbare of onbedoelde resultaten.
CWE-477 Gebruik van verouderde functie De code maakt gebruik van afgeschafte of verouderde functies, wat aangeeft dat deze niet actief wordt gecontroleerd of onderhouden.
CWE-502 Deserialisatie van niet-vertrouwde gegevens Het product ontserialiseerd niet-vertrouwde gegevens zonder voldoende te zorgen dat de resulterende gegevens geldig zijn.
CWE-543 Gebruik van Singleton Pattern Without Synchronization in een multithreaded context Het product maakt gebruik van het singleton-patroon bij het creëren van een resource in een multithreaded omgeving zonder adequate synchronisatie.
CWE-567 Niet-gesynchroniseerde toegang tot gedeelde gegevens in een multithreaded context Het product kan gedeelde gegevens, zoals statische variabelen, niet correct synchroniseren tussen threads, wat leidt tot niet-gedefinieerd gedrag.
CWE-570 Expressie is altijd onwaar Het product bevat een expressie die altijd als onwaar wordt geëvalueerd.
CWE-571 Expressie is altijd waar Het product bevat een expressie die altijd resulteert in waar.
CWE-606 Ongecontroleerde invoer voor lusvoorwaarde Het product controleert de invoer voor lusvoorwaarden niet goed, wat kan leiden tot dienstenweigering door overmatig itereren.
CWE-643 Onjuiste neutralisatie van gegevens binnen XPath-expressies ('XPath-injectie') Het product gebruikt externe invoer om dynamisch een XPath-expressie te maken voor een XML-database, maar kan die invoer niet geneutraliseerd worden.
CWE-652 Onjuiste neutralisatie van gegevens binnen XQuery-expressies ('XQuery-injectie') Het product maakt gebruik van externe invoer om dynamisch een XQuery-expressie samen te stellen, maar kan die invoer niet correct geneutraliseerd worden.
CWE-662 Onjuiste synchronisatie Het product staat meerdere threads of systemen toegang tot een gedeelde resource toe zonder de juiste synchronisatie, waardoor mogelijk problemen met gelijktijdige toegang ontstaan.
CWE-665 Onjuiste initialisatie Het product initialiseert een resource mogelijk niet of initialiseert deze onjuist, waardoor de resource in een onverwachte toestand kan worden achtergelaten wanneer deze wordt geopend.
CWE-667 Onjuist vergrendelen Het product verkrijgt of laat de vergrendeling van een resource niet goed vrij, wat leidt tot onverwachte toestandveranderingen.
CWE-672 Bewerking op een hulpbron na verstrijken of vrijgave Het product heeft toegang tot of werkt op een resource nadat deze is verlopen, is vrijgegeven of is ingetrokken.
CWE-681 Onjuiste conversie tussen numerieke typen Gegevens kunnen worden weggelaten of omgezet in onverwachte waarden tijdens het converteren van het type, wat gevaarlijk kan zijn als ze worden gebruikt in gevoelige contexten.
CWE-682 Onjuiste berekening Het product voert een berekening uit waarmee onjuiste resultaten worden gegenereerd die later worden gebruikt bij beslissingen over beveiligingskritiek of resourcebeheer.
CWE-732 Onjuiste machtigingstoewijzing voor kritieke resource Machtigingen voor een beveiligingskritieke resource worden opgegeven op een manier waarmee onbedoelde actoren deze kunnen lezen of wijzigen.
CWE-772 Ontbrekende vrijgave van resource na effectieve levensduur Het product laat geen bron los nadat de effectieve levensduur is beëindigd en de bron niet meer nodig is.
CWE-775 Ontbrekende release van bestandsdescriptor of besturingshandvat na afloop van de levensduur Het product kan geen bestandsdescriptor vrijgeven of afhandelen nadat het niet meer nodig is.
CWE-778 Onvoldoende logboekregistratie Het product kan geen beveiligingskritieke gebeurtenis vastleggen of belangrijke details weglaten bij het vastleggen ervan.
CWE-783 Fout in de logica van operatorprioriteit Een expressie maakt gebruik van onjuiste logica die wordt veroorzaakt door de prioriteit van de operator.
CWE-789 Geheugentoewijzing met overmatige groottewaarde Het product wijst geheugen toe op basis van een niet-vertrouwde, grote waarde zonder ervoor te zorgen dat het binnen de verwachte limieten valt.
CWE-798 Gebruik van in code vastgelegde referenties Het product bevat in code vastgelegde referenties, zoals een wachtwoord of cryptografische sleutel.
CWE-820 Ontbrekende synchronisatie Het product maakt gelijktijdig gebruik van een gedeelde resource zonder toegang te synchroniseren.
CWE-821 Onjuiste synchronisatie Het product maakt gelijktijdig gebruik van een gedeelde resource, maar synchroniseert de toegang niet correct.
CWE-835 Lus met onbereikbare afsluitvoorwaarde ('Oneindige lus') Het product bevat een iteratie of lus met een beëindigingsvoorwaarde die niet kan worden bereikt.
CWE-611 Onjuiste beperking van externe XML-entiteitsverwijzing Het product verwerkt XML-documenten met entiteiten en URI's die buiten de beoogde besturingssfeer worden opgelost.
CWE-1057 Gegevenstoegangsbewerkingen buiten het verwachte Data Manager-onderdeel Het product voert bewerkingen voor gegevenstoegang uit die een toegewezen, centraal data manager-onderdeel overslaan dat standaard is vereist.

Volgende stappen