Dela via


Förstå bedömningstäckning vid moderniseringen av GitHub Copilot

Den här artikeln beskriver vad apputvärderingsfunktionen i GitHub Copilot-modernisering kan identifiera. Utvärderingen omfattar två viktiga funktioner:

  • Problemidentifiering över tre domäner som är viktiga för moderniseringen:

    • Molnberedskap: Identifierar 16 kategorier av problem, inklusive filsystemanvändning, hantering av autentiseringsuppgifter, meddelandetjänster, databasanslutningar, luckor i containerisering, sessionshantering, fjärrkommunikationsmönster med mera.
    • Java-uppgradering: Flaggar inaktuella Java-versioner, ramverk vars OSS-support har upphört (Spring Boot, Spring Cloud, Jakarta EE), hundratals borttagna eller föråldrade API:er, och föråldrade byggverktyg som Ant.
    • Säkerhet: Identifierar 42 säkerhetsbrister som hämtats från STANDARDEN ISO/IEC 5055, som omfattar sårbarheter vid inmatning (SQL, LDAP, XPath, OS-kommando), hårdkodade autentiseringsuppgifter och kryptografiska nycklar, synkroniseringsproblem, problem med resurslivscykeln och andra CWE:er med hög påverkan.
  • Programtolkning: för äldre kodbaser visar utvärderingen beroenden och tekniker som används, så att du får en tydlig bild av vad ditt program förlitar sig på innan du börjar migrera.

I följande avsnitt beskrivs problemtäckningen för varje domän i detalj.

Domän: molnberedskap

Domän Kategori Upptäcktssammanfattning Varför det spelar roll
cloud-readiness credential-migration Identifierar hårdkodade AWS-autentiseringsuppgifter (aws_access_key_id, aws_secret_access_key), AWS Secrets Manager-användning och inbäddade bibliotek för hemlig hantering som Spring Cloud Vault. Säkerhet: Hårdkodade autentiseringsuppgifter och leverantörsspecifika hemliga butiker är mycket sårbara. Molnbaserade program kräver centraliserad, identitetsbaserad säkerhet för att förhindra stöld av autentiseringsuppgifter.
cloud-readiness region-configuration Identifierar hårdkodade AWS-regionidentifierare (aws.region, AWS_REGION) i kod- eller konfigurationsfiler. Portabilitet: Hårdkodningsgeografier kopplar programmet till en specifik leverantörs fysiska infrastruktur, vilket hindrar global distribution och motståndskraft.
cloud-readiness storage-migration Identifierar AWS S3 SDK-användning (bucketar, objekt, försignerade URL:er), S3 TransferManager och Google Cloud Storage-klientbibliotek. Tillförlitlighet och justering: Dessa beroenden låser in dig i en leverantörs objektlagring och fungerar inte med målplattformens interna lagringstjänster.
cloud-readiness messaging-service-migration Identifierar beroendena och anslutningssträngar för Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar och Google Cloud Pub/Sub. Skalbarhet och tillförlitlighet: Äldre meddelandeköer förlitar sig ofta på fasta slutpunkter och diskbaserad beständighet som hindrar horisontell skalning och hög tillgänglighet i molnmiljöer.
cloud-readiness database-migration Identifierar anslutningssträngar, drivrutiner och timeoutinställningar för MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore och Google Cloud Spanner. Tillförlitlighet: Självhanterade eller icke-interna databaser saknar automatiserad skalning i molnet. Hårdkodade timeouter och fasta återförsöksintervall kan orsaka blockering och "återförsöksstormar" vid partiella avbrott.
cloud-readiness file-system-management Identifierar användning av relativa/absoluta sökvägar, hemsökvägar (/home/), file:// scheman och Java IO/NIO-standardanrop eller Apache Commons IO-anrop för lokal lagringsåtkomst. Tillståndslöshet: Molncontainrar är tillfälliga. Att skriva till ett lokalt filsystem leder till dataförlust vid omstart av instanser eller skalningsåtgärder. beständiga data måste externaliseras.
cloud-readiness local-credential Flaggar Java KeyStore-filer .jks (KeyStore.load), metodanrop och lösenord med klartext (password, pwd) i egenskaps- eller XML-filer. Säkerhetsrisk: Känsligt material som lagras i klartext eller lokala filer kan enkelt komprometteras om obehöriga personer får åtkomst till programmiljön eller konfigurationsfilerna.
cloud-readiness configuration-management Identifierar , , externaSystem.getenvSystem.getProperty.properties/.xmlfiler och Windows Registry-åtkomst för programinställningar. /.ini Externalisering: OS-specifik lagring eller lokala filer kan inte hanteras i stor skala och kan inte uppdateras dynamiskt utan kodändringar i alla instanser.
cloud-readiness session-management Identifierar datalagring i HttpSession objekt och användningen av taggen "distribuerbar" i webbbeskrivningar. Skalbarhet: Standard-HTTP-sessioner är olämpliga för molnskalning. tillståndet måste externaliseras till ett distribuerat cacheminne för att förhindra dataförlust under trafikskift mellan instanser.
cloud-readiness remote-communication Identifierar nära kopplade protokoll (CORBA, RMI, JCA), oskyddade HTTP/FTP-protokoll, Java Mail API, direkt socket-/NIO-kanalanvändning och hårdkodade URL:er. Molnkompatibilitet och säkerhet: Nära kopplade interaktioner hindrar skalbarheten. Oskyddade protokoll och hårdkodade URL:er är sårbara och spröda i dynamiska molnnätverksmiljöer.
cloud-readiness jakarta-migration Identifierar användning av Jakarta/Java EE-specifika API:er för NoSQL, JPA, Data, WebSockets och JAX-RS samt serverspecifika artefakter från JBoss EAP, WebLogic eller WebSphere. Supportbarhet: Migrering till en molnnativ körmiljö kräver att man anpassar sig till moderna Jakarta-namnområden och avlägsnar proprietära programserverberoenden för att säkerställa portabilitet.
cloud-readiness containerization Flaggar avsaknaden av Dockerfile eller problematiska Dockerfile-instruktioner som apt-get upgrade, gemensyntax och syntaxavståndsproblem. Tillförlitlighet: Standardisering i containerversioner krävs för stabila, reproducerbara distributioner och för att säkerställa att avbildningar fungerar förutsägbart i olika miljöer.
cloud-readiness scheduled-job-migration Identifierar AWS Lambda-hanterare, Google Cloud Functions, Quartz Scheduler-beroenden och Arbetsflöden för Spring Batch-bearbetning. Cloud Compute Alignment: Schemalagda jobb och serverlösa funktioner måste omstruktureras för att kunna använda målmolnets händelsedrivna och serverlösa beräkningsmodeller för att minska infrastrukturkostnaderna.
cloud-readiness apm-migration Identifierar inbäddade APM-agenter och bibliotek för New Relic, Elastic APM och Dynatrace. Observerbarhet: Dessa verktyg kräver specifik molnplattformsintegrering för korrekt insamling av telemetri, svarstid och hälsodata i en hanterad miljö.
cloud-readiness auth-migration Identifierar SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP-användning och äldre autentiseringsmönster för webbformulär. Modern identitet: Äldre webbformulär och LDAP-autentisering saknar flexibilitet och säkerhetsfunktioner (MFA, SSO) för moderna anspråksbaserade molnidentitetsleverantörer.
cloud-readiness os-compatibility Identifierar projektberoenden på Windows-specifika Dynamic-Link-bibliotek (.dll filer). Portabilitet: DLL:er är OS-specifika och körs inte i Linux-baserade standardmiljöer för molncontainer. Du måste ersätta dem med plattformsoberoende delade bibliotek.

Domän: java-upgrade

Domän Kategori Identifieringssammanfattning Varför det spelar roll
java-upgrade java-version-upgrade Identifierar användning av javaversioner som inte är LTS (9, 10, 12-16, 19, 20) och äldre versioner (1.x till 8 och 11). Säkerhet och support: Äldre och icke-LTS-versioner innehåller kända säkerhetsrisker och saknar långsiktiga underhållsuppdateringar, vilket gör att infrastrukturen exponeras för attacker.
java-upgrade framework-upgrade Identifierar Spring Boot-, Spring Cloud-, Spring Framework- och Jakarta EE-versioner som nått slutet av OSS-supporten. Support: Inaktuella ramverk slutar ta emot säkerhetskorrigeringar, vilket gör programmet till en säkerhetsrisk och inkompatibel med moderna molnbaserade verktyg.
java-upgrade deprecated-apis Katalogiserar hundratals borttagna eller inaktuella API:er, inklusive sun.misc.BASE64, Thread.stop, SecurityManager metoder och egna krokar från JBoss, Seam 2, WebLogic och WebSphere. Stabilitet och portabilitet: Användning av borttagna API:er orsakar körningskrascher på moderna JVM:er. Egenutvecklade leverantörskrokar (till exempel WebLogic/JBoss internals) förhindrar att programmet är portabelt över standardkörningar.
java-upgrade build-tool Identifierar äldre byggsystem som Ant (build.xml) eller Eclipse-specifika projektkonfigurationer (WTP/JEM-natur). Automation: Äldre verktyg saknar de standardkonventioner och beroendehantering som krävs för effektiv integrering i moderna CI/CD-pipelines.

Domän: Säkerhet (ISO 5055 guidad)

ISO/IEC 5055 är en ISO-standard för att mäta den interna strukturen för en programvaruprodukt på fyra affärskritiska faktorer: säkerhet, tillförlitlighet, prestandaeffektivitet och underhållsbarhet. Dessa faktorer avgör hur tillförlitligt, pålitligt och motståndskraftigt ett programvarusystem är. I huvudsak är ISO 5055 avsedd att "hitta och förhindra de 8% av brister som orsakar 90% av produktionsproblem". ISO 5055 identifierar de mest kritiska och effektfulla CWEs under varje kvalitetsegenskaper: Tillförlitlighet, prestandaeffektivitet, säkerhet och underhållsbarhet. För GitHub Copilot-modernisering identifierar du mot de utvalda CWEs för säkerhet som definieras i ISO 5055, vilket visas i följande tabell.

CWE_ID Titel Beskrivning
CWE-22 Felaktig begränsning av ett sökvägsnamn till en begränsad katalog ("Sökvägsbläddering") Produkten använder externa indata för att skapa ett sökvägsnamn som är avsett att identifiera en fil eller katalog under en begränsad överordnad katalog. Men det neutraliserar inte specialelement som kan orsaka att sökvägsnamnet löses utanför den begränsade katalogen.
CWE-23 Relativ sökvägstraversering Produkten använder externa indata för att skapa ett sökvägsnamn i en begränsad katalog, men lyckas inte eliminera sekvenser som .., vilket kan leda till att man går utanför den katalogen.
CWE-36 Absolut sökvägstraversering Produkten använder externa indata för att skapa ett sökvägsnamn inom en begränsad katalog men misslyckas med att neutralisera absoluta sökvägssekvenser som /abs/path, vilka kan lösas utanför den katalogen.
CWE-77 Felaktig neutralisering av specialelement som används i ett kommando ('Kommandoinjicering') Produkten konstruerar ett kommando med externt påverkade indata men neutraliserar inte specialelement som kan ändra det avsedda kommandot som skickas till en underordnad komponent.
CWE-78 Felaktig neutralisering av specialelement som används i ett OS-kommando ("OS-kommandoinjektionsattack") Produkten konstruerar ett OS-kommando med hjälp av externt indata men kan inte neutralisera specialelement som kan ändra det avsedda OS-kommandot som skickas till en underordnad komponent.
CWE-88 Felaktig neutralisering av argumentavgränsare i ett kommando ("Argumentinmatning") Produkten konstruerar en kommandosträng för en separat komponent men avgränsar inte argument, alternativ eller växlar i strängen korrekt.
CWE-79 Felaktig neutralisering av indata under generering av webbsida ("Skript för flera webbplatser") Produkten kan inte neutralisera användarkontrollerbara indata innan den placeras i utdata som används som en webbsida som hanteras av andra användare.
CWE-89 Felaktig neutralisering av specialelement som används i ett SQL-kommando ("SQL-inmatning") Produkten konstruerar ett SQL-kommando med externt indata men kan inte neutralisera element som kan ändra kommandot, vilket gör att indata kan tolkas som SQL-syntax i stället för vanliga data.
CWE-564 SQL-injektion: Hibernate Om du använder viloläge för att köra dynamiska SQL-instruktioner som skapats med användarkontrollerade indata kan en angripare ändra instruktionens innebörd eller köra godtyckliga SQL-kommandon.
CWE-90 Felaktig neutralisering av specialelement som används i en LDAP-fråga ("LDAP-inmatning") Produkten konstruerar en LDAP-fråga med hjälp av externt påverkade indata men kan inte neutralisera element som kan ändra den avsedda frågan som skickas till en nedströmskomponent.
CWE-91 XML-inmatning (kallas även blind XPath-inmatning) Produkten neutraliserar inte specialelement som används i XML korrekt, vilket gör att angripare kan ändra syntaxen, innehållet eller kommandona innan bearbetningen.
CWE-99 Felaktig kontroll av resursidentifierare ("Resursinmatning") Produkten tar emot indata men begränsar den inte korrekt innan den används som identifierare för en resurs utanför den avsedda kontrollsfären.
CWE-130 Felaktig hantering av längdparameterns inkonsekvens Produkten parsar ett formaterat meddelande eller en struktur men hanterar felaktigt ett längdfält som är inkonsekvent med den faktiska längden på associerade data.
CWE-259 Användning av hårdkodat lösenord Produkten innehåller ett hårdkodat lösenord som används för sin egen inkommande autentisering eller utgående kommunikation till externa komponenter.
CWE-321 Användning av hårdkodad kryptografisk nyckel Produkten använder en hårdkodad, oföränderlig kryptografisk nyckel.
CWE-434 Obegränsad uppladdning av fil med farlig typ Produkten tillåter uppladdning av farliga filtyper som bearbetas automatiskt i miljön.
CWE-456 Initiering av en variabel saknas Produkten initierar inte kritiska variabler, vilket gör att körningsmiljön använder oväntade värden.
CWE-457 Användning av eninitierad variabel Koden använder en variabel som inte initieras, vilket leder till oförutsägbara eller oavsiktliga resultat.
CWE-477 Användning av föråldrad funktion Koden använder inaktuella eller föråldrade funktioner, vilket tyder på att den inte aktivt granskas eller underhålls.
CWE-502 Deserialisering av ej betrodda data Produkten deserialiserar ej betrodda data utan att tillräckligt säkerställa att resulterande data är giltiga.
CWE-543 Användning av Singleton-mönster utan synkronisering i en flertrådad kontext Produkten använder singleton-mönstret när du skapar en resurs i en flertrådad miljö utan korrekt synkronisering.
CWE-567 Osynkroniserad åtkomst till delade data i en flertrådad kontext Produkten kan inte synkronisera delade data korrekt, till exempel statiska variabler, mellan trådar, vilket leder till odefinierat beteende.
CWE-570 Uttrycket är alltid falskt Produkten innehåller ett uttryck som alltid uttrycker sig som falskt.
CWE-571 Uttrycket är alltid sant Produkten innehåller ett uttryck som alltid utvärderas till sant.
CWE-606 Omarkerade indata för loopvillkor Produkten kontrollerar inte indata som används för loopvillkor korrekt, vilket kan leda till tjänsteavbrott från upprepad looping.
CWE-643 Felaktig neutralisering av data i XPath-uttryck ("XPath-inmatning") Produkten använder externa indata för att dynamiskt konstruera ett XPath-uttryck för en XML-databas, men det går inte att neutralisera indata.
CWE-652 Felaktig neutralisering av data i XQuery-uttryck ("XQuery-injektion") Produkten använder externa indata för att dynamiskt konstruera ett XQuery-uttryck men kan inte neutralisera indata korrekt.
CWE-662 Felaktig synkronisering Produkten ger flera trådar eller system åtkomst till en delad resurs utan korrekt synkronisering, vilket kan orsaka samtidiga åtkomstproblem.
CWE-665 Felaktig initialisering Produkten initialiserar inte eller initialiserar en resurs felaktigt, vilket kan lämna den i ett oväntat tillstånd när den används.
CWE-667 Felaktig låsning Produkten får eller släpper inte korrekt ett lås på en resurs, vilket leder till oväntade tillståndsändringar.
CWE-672 Åtgärd på en resurs efter förfallodatum eller frisläppning Produkten får åtkomst till eller fungerar på en resurs när den har upphört att gälla, har släppts eller återkallats.
CWE-681 Felaktig konvertering mellan numeriska typer Data kan utelämnas eller översättas till oväntade värden under typkonvertering, vilket kan vara farligt om de används i känsliga kontexter.
CWE-682 Felaktig beräkning Produkten utför en beräkning som genererar felaktiga resultat som senare används i säkerhetskritiska beslut eller resurshantering.
CWE-732 Felaktig behörighetstilldelning för kritisk resurs Behörigheter för en säkerhetskritisk resurs anges på ett sätt som gör att oavsiktliga aktörer kan läsa eller ändra den.
CWE-772 Saknad frisläppning av resurs efter effektiv livslängd Produkten släpper inte en resurs efter att dess faktiska livslängd har upphört och inte längre behövs.
CWE-775 Saknad frisläppning av filbeskrivare eller handtag efter deras effektiva livslängd Produkten misslyckas med att släppa en filbeskrivare eller ett handtag när de inte längre behövs.
CWE-778 Otillräcklig loggning Produkten kan inte registrera en säkerhetskritisk händelse eller utelämnar viktig information när den loggas.
CWE-783 Logikfel för operatorprioret Ett uttryck använder felaktig logik som orsakas av operatorprioret.
CWE-789 Minnesallokering med för stort storleksvärde Produkten allokerar minne baserat på ett obetrott, stort storleksvärde utan att säkerställa att det är inom förväntade gränser.
CWE-798 Användning av hårdkodade autentiseringsuppgifter Produkten innehåller hårdkodade autentiseringsuppgifter, till exempel ett lösenord eller en kryptografisk nyckel.
CWE-820 Synkronisering saknas Produkten använder en delad resurs samtidigt utan att försöka synkronisera åtkomsten.
CWE-821 Felaktig synkronisering Produkten använder en delad resurs samtidigt men synkroniserar inte åtkomsten korrekt.
CWE-835 Loop med oåtkomligt avslutningsvillkor ("Oändlig loop") Produkten innehåller en iteration eller loop med ett avslutningsvillkor som inte kan nås.
CWE-611 Felaktig begränsning av referens för extern XML-entitet Produkten bearbetar XML-dokument som innehåller entiteter med URI:er som upplöses utanför den avsedda kontrollzonen.
CWE-1057 Dataåtkomståtgärder utanför förväntad Data Manager-komponent Produkten utför dataåtkomståtgärder som kringgår en dedikerad, central datahanteringskomponent som krävs av design.

Nästa steg