Freigeben über


Verstehen der Bewertungsabdeckung durch die GitHub Copilot-Modernisierung

In diesem Artikel wird beschrieben, was die App-Bewertungsfunktion der GitHub Copilot-Modernisierungsfunktion erkennen kann. Die Bewertung umfasst zwei Schlüsselfunktionen:

  • Problemerkennung in drei Bereichen, die für Ihre Modernisierungsreise von entscheidender Bedeutung sind:

    • Cloudbereitschaft: Identifiziert 16 Kategorien von Bedenken, einschließlich Dateisystemnutzung, Anmeldeinformationsverwaltung, Messagingdienste, Datenbankverbindungen, Containerisierungslücken, Sitzungsverarbeitung, Remotekommunikationsmuster und vieles mehr.
    • Java-Upgrade: Kennzeichnet veraltete Java-Versionen, End-of-OSS-Support-Frameworks (Spring Boot, Spring Cloud, Jakarta EE), Hunderte von entfernten oder veralteten APIs und Legacybuildtools wie Ant.
    • Sicherheit: Erkennt 42 Sicherheitsschwächen, die aus dem ISO/IEC 5055-Standard stammen, und deckt Einfügungsrisiken (SQL, LDAP, XPath, Betriebssystembefehl), hartcodierte Anmeldeinformationen und kryptografische Schlüssel, Synchronisierungsprobleme, Ressourcenlebenszyklusprobleme und andere besonders betroffene CWEs ab.
  • Anwendungsverständnis: Bei Legacy-Codebasen werden die Abhängigkeiten und Technologien sichtbar gemacht, sodass Sie ein klares Bild davon erhalten, worauf Ihre Anwendung angewiesen ist, bevor Sie mit der Migration beginnen.

In den folgenden Abschnitten wird die Problemabdeckung für jede Domäne ausführlich beschrieben.

Domäne: Cloudbereitschaft

Domäne Kategorie Erkennungszusammenfassung Warum es wichtig ist
cloud-readiness credential-migration Erkennt hartcodierte AWS-Anmeldeinformationen (aws_access_key_id, aws_secret_access_key), AWS Secrets Manager-Verwendung und eingebettete Geheimverwaltungsbibliotheken wie Spring Cloud Vault. Sicherheit: Hartcodierte Zugangsdaten und anbieterspezifische Geheimspeicher sind hochanfällig. Cloudeigene Anwendungen erfordern eine zentrale, identitätsbasierte Sicherheit, um den Diebstahl von Anmeldeinformationen zu verhindern.
cloud-readiness region-configuration Identifiziert hartcodierte AWS-Regions-IDs (aws.region, AWS_REGION) in Code- oder Konfigurationsdateien. Portabilität: Hardcoding-Regionen binden die Anwendung an die physische Infrastruktur eines bestimmten Anbieters und behindern die globale Bereitstellung und Resilienz.
cloud-readiness storage-migration Erkennt die AWS S3 SDK-Verwendung (Buckets, Objekte, vorsignierte URLs), S3 TransferManager und Google Cloud Storage-Clientbibliotheken. Zuverlässigkeit und Ausrichtung: Diese Abhängigkeiten sperren Sie in den Objektspeicher eines Anbieters und funktionieren nicht mit den systemeigenen Speicherdiensten der Zielplattform.
cloud-readiness messaging-service-migration Kennzeichnet Abhängigkeiten und Verbindungszeichenfolgen für Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar und Google Cloud Pub/Sub. Skalierbarkeit und Zuverlässigkeit: Ältere Messagingbroker basieren häufig auf festen Endpunkten und datenträgerbasierter Persistenz, die die horizontale Skalierung und hohe Verfügbarkeit in Cloudumgebungen behindern.
cloud-readiness database-migration Erkennt Verbindungszeichenfolgen, Treiber und Timeouteinstellungen für MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore und Google Cloud Spanner. Zuverlässigkeit: Selbstverwaltete oder nicht systemeigene Datenbanken fehlen automatisierte Cloudskalierung. Hartcodierte Timeouts und feste Wiederholungsintervalle können zu Blockierungen und "Wiederholungsstürmen" während teilweiser Ausfälle führen.
cloud-readiness file-system-management Identifiziert die Verwendung relativer/absoluter Pfade, Heimverzeichnisse (/home/), file:// Schemas sowie Standardaufrufe für Java IO/NIO oder Apache Commons IO, um auf lokalen Speicher zuzugreifen. Staatenlosigkeit: Cloudcontainer sind kurzlebig. Das Schreiben in ein lokales Dateisystem führt zu Datenverlusten bei Neustarts oder Skalierungsvorgängen der Instanz; Persistente Daten müssen externisiert werden.
cloud-readiness local-credential Kennzeichnet Java KeyStore-Dateien (.jks), KeyStore.load-Methodenaufrufe und Klartext-Kennwörter (password, pwd) in Eigenschaften- oder XML-Dateien. Sicherheitsrisiko: Vertrauliches Material, das in Klartext oder lokalen Dateien gespeichert ist, kann leicht kompromittiert werden, wenn nicht autorisierte Personen auf die Anwendungsumgebung oder Konfigurationsdateien zugreifen.
cloud-readiness configuration-management Detektiert System.getenv, System.getProperty externer .properties/.xml/.ini Dateien sowie den Zugriff auf die Windows-Registrierung für Anwendungseinstellungen. Externalisierung: Betriebssystemspezifische Speicher- oder lokale Dateien sind im großen Maßstab nicht verwaltbar und können nicht dynamisch aktualisiert werden, ohne Codeänderungen in allen Instanzen.
cloud-readiness session-management Identifiziert die Datenspeicherung in HttpSession Objekten und die Verwendung des "verteilungsfähigen" Tags in Webdeskriptoren. Skalierbarkeit: Standard-HTTP-Sitzungen eignen sich nicht für die Cloudskalierung; Der Zustand muss in einen verteilten Cache externisiert werden, um Datenverluste während der Datenverkehrsverschiebungen zwischen Instanzen zu verhindern.
cloud-readiness remote-communication Erkennt eng gekoppelte Protokolle (CORBA, RMI, JCA), unsichere HTTP/FTP-Protokolle, Java Mail-API, direkte Socket-/NIO-Kanalverwendung und hartcodierte URLs. Cloudkompatibilität und Sicherheit: Eng gekoppelte Interaktionen behindern die Skalierbarkeit. Unsichere Protokolle und hartcodierte URLs sind anfällig und spröde in dynamischen Cloudnetzwerkumgebungen.
cloud-readiness jakarta-migration Erkennt die Verwendung von Jakarta/Java EE-spezifischen APIs für NoSQL, JPA, Data, WebSockets und JAX-RS sowie serverspezifische Artefakte von JBoss EAP, WebLogic oder WebSphere. Unterstützbarkeit: Die Migration zu einer cloud-nativen Laufzeitumgebung erfordert die Anpassung an die modernen Jakarta-Namespaces und die Entfernung von Abhängigkeiten von proprietären Anwendungsservern, um die Portabilität sicherzustellen.
cloud-readiness containerization Kennzeichnet das Fehlen einer Dockerfile oder problematische Dockerfile-Anweisungen, wie apt-get upgrade, Kleinbuchstaben-Syntax und Syntax-Abstandsprobleme. Zuverlässigkeit: Die Standardisierung in Containerbuilds ist für stabile, reproduzierbare Bereitstellungen erforderlich und um sicherzustellen, dass Sich Bilder in verschiedenen Umgebungen vorhersehbar verhalten.
cloud-readiness scheduled-job-migration Identifiziert AWS Lambda-Handler, Google Cloud Functions, Quartz Scheduler-Abhängigkeiten und Spring Batch Workflows. Cloud Compute Alignment: Geplante Aufträge und serverlose Funktionen müssen umgestaltet werden, um die ereignisgesteuerten und serverlosen Computemodelle der Zielcloud zu verwenden, um den Infrastrukturaufwand zu reduzieren.
cloud-readiness apm-migration Identifiziert eingebettete APM-Agents und -Bibliotheken für New Relic, Elastic APM und Dynatrace. Observability: Diese Tools erfordern eine spezifische Cloud-Plattform-Integration, um Telemetrie-, Latenz- und Gesundheitsdaten in einer verwalteten Umgebung ordnungsgemäß zu erfassen.
cloud-readiness auth-migration Erkennt SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP-Verwendung und ältere Webform-Authentifizierungsmuster. Moderne Identität: Ältere Webformulare und LDAP-Authentifizierung fehlen den Flexibilitäts- und Sicherheitsfeatures (MFA, SSO) moderner anspruchsbasierter Cloudidentitätsanbieter.
cloud-readiness os-compatibility Identifiziert Projektabhängigkeiten von Windows-spezifischen Dynamic-Link Bibliotheken (.dll Dateien). Portabilität: DLLs sind betriebssystemspezifisch und werden nicht in standardmäßigen Linux-basierten Cloudcontainerumgebungen ausgeführt. Sie müssen sie durch plattformübergreifende Shared Libraries ersetzen.

Domäne: Java-Upgrade

Domäne Kategorie Erkennungszusammenfassung Warum es wichtig ist
java-upgrade java-version-upgrade Identifiziert die Verwendung von Nicht-LTS-Java-Versionen (9, 10, 12-16, 19, 20) und Legacyversionen (1.x bis 8 und 11). Sicherheit und Support: Ältere und nicht LTS-Versionen enthalten bekannte Sicherheitslücken und fehlen langfristige Wartungsupdates, sodass die Infrastruktur Angriffen ausgesetzt ist.
java-upgrade framework-upgrade Erkennt Spring Boot-, Spring Cloud-, Spring Framework- und Jakarta EE-Versionen, die das Ende der OSS-Unterstützung erreicht haben. Unterstützbarkeit: Veraltete Frameworks erhalten keine Sicherheitsupdates mehr, wodurch die Anwendung zu einem Sicherheitsrisiko wird und mit modernen cloudeigenen Tools nicht mehr kompatibel ist.
java-upgrade deprecated-apis Katalogisiert Hunderte von entfernten oder veralteten APIs, einschließlich sun.misc.BASE64, Thread.stop, SecurityManager-Methoden und proprietären Hooks von JBoss, Seam 2, WebLogic und WebSphere. Stabilität und Portabilität: Die Verwendung entfernter APIs führt zu Laufzeitabstürzen auf modernen JVMs. Proprietäre Anbieter-Hooks (wie WebLogic/JBoss Internals) verhindern, dass die Anwendung über Standardlaufzeiten portierbar ist.
java-upgrade build-tool Identifiziert Ältere Buildsysteme wie Ant (build.xml) oder Eclipse-spezifische Projektkonfigurationen (WTP/JEM natures). Automatisierung: Legacytools verfügen nicht über die Standardkonventionen und abhängigkeitsverwaltung, die für eine effiziente Integration in moderne CI/CD-Pipelines erforderlich sind.

Domäne: Sicherheit (ISO 5055 geführt)

ISO/IEC 5055 ist ein ISO-Standard zur Messung der internen Struktur eines Softwareprodukts auf vier geschäftskritische Faktoren: Sicherheit, Zuverlässigkeit, Leistungseffizienz und Wartungsfähigkeit. Diese Faktoren bestimmen, wie vertrauenswürdig, zuverlässig und robust ein Softwaresystem ist. Im Wesentlichen soll ISO 5055 "die 8% von Fehlern finden und verhindern, die 90% von Produktionsproblemen verursachen". ISO 5055 identifiziert die kritischsten und wirkungsvollsten CWEs unter den einzelnen Qualitätsmerkmalen: Zuverlässigkeit, Leistungseffizienz, Sicherheit und Wartungsbarkeit. Bei der GitHub Copilot-Modernisierung erkennen Sie anhand der kuratierten CWEs für Sicherheit, die in ISO 5055 definiert sind, wie die folgende Tabelle zeigt.

CWE_ID Title Beschreibung
CWE-22 Falsche Einschränkung eines Pfadnamens zu einem eingeschränkten Verzeichnis ('Path Traversal') Das Produkt verwendet externe Eingaben, um einen Pfadnamen zu erstellen, der eine Datei oder ein Verzeichnis unter einem eingeschränkten übergeordneten Verzeichnis identifiziert. Es neutralisiert jedoch nicht richtig spezielle Elemente, die dazu führen können, dass der Pfadname außerhalb des eingeschränkten Verzeichnisses aufgelöst wird.
CWE-23 Relative Pfad-Traversal Das Produkt verwendet externe Eingaben, um einen Pfadnamen innerhalb eines eingeschränkten Verzeichnisses zu konstruieren, neutralisiert jedoch keine Sequenzen wie .., die außerhalb dieses Verzeichnisses aufgelöst werden können.
CWE-36 Absoluter Pfaddurchlauf Das Produkt verwendet externe Eingaben, um einen Pfadnamen innerhalb eines eingeschränkten Verzeichnisses zu erstellen, neutralisiert jedoch keine absoluten Pfadsequenzen wie /abs/path, die außerhalb dieses Verzeichnisses aufgelöst werden können.
CWE-77 Unsachgemäße Neutralisierung spezieller Elemente, die in einem Befehl verwendet werden ('Command Injection') Das Produkt erstellt einen Befehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine speziellen Elemente, die den vorgesehenen Befehl ändern können, der an eine nachgeschaltete Komponente gesendet wird.
CWE-78 Unsachgemäße Neutralisierung spezieller Elemente, die in einem Betriebssystembefehl ('Os Command Injection') verwendet werden Das Produkt erstellt einen Betriebssystembefehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine speziellen Elemente, die den vorgesehenen Betriebssystembefehl ändern können, der an eine nachgeschaltete Komponente gesendet wird.
CWE-88 Unsachgemäße Neutralisierung von Argumenttrennzeichen in einem Befehl ('Argument Injection') Das Produkt erstellt eine Befehlszeichenfolge für eine separate Komponente, trennt jedoch nicht ordnungsgemäß Argumente, Optionen oder Schalter innerhalb dieser Zeichenfolge.
CWE-79 Unsachgemäße Neutralisierung der Eingabe während der Webseitengenerierung ('Websiteübergreifendes Skripting') Das Produkt kann keine benutzersteuerungsfähige Eingabe neutralisieren, bevor es in der Ausgabe platziert wird, die als Webseite für andere Benutzer verwendet wird.
CWE-89 Unsachgemäße Neutralisierung spezieller Elemente, die in einem SQL-Befehl ('SQL Injection') verwendet werden Das Produkt erstellt einen SQL-Befehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine Elemente, die den Befehl ändern könnten, sodass Eingaben als SQL-Syntax statt als normale Daten interpretiert werden können.
CWE-564 SQL-Injektion: Ruhezustand Die Verwendung von Ruhezustand zum Ausführen dynamischer SQL-Anweisungen, die mit benutzergesteuerter Eingabe erstellt wurden, kann es einem Angreifer ermöglichen, die Bedeutung der Anweisung zu ändern oder beliebige SQL-Befehle auszuführen.
CWE-90 Unsachgemäße Neutralisierung spezieller Elemente, die in einer LDAP-Abfrage ('LDAP Injection') verwendet werden Das Produkt erstellt eine LDAP-Abfrage mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine Elemente, die die beabsichtigte Abfrage ändern können, die an eine nachgeschaltete Komponente gesendet wird.
CWE-91 XML Injection (auch als Blind XPath Injection bezeichnet) Das Produkt neutralisiert spezielle Elemente, die in XML verwendet werden, nicht ordnungsgemäß, sodass Angreifer die Syntax, inhalte oder Befehle vor der Verarbeitung ändern können.
CWE-99 Unzureichende Kontrolle von Ressourcenbezeichnern ('Resource Injection') Das Produkt empfängt Eingaben, beschränkt sie jedoch nicht ordnungsgemäß, bevor es als Bezeichner für eine Ressource außerhalb des vorgesehenen Kontrollbereichs verwendet wird.
CWE-130 Falsche Behandlung von Längenparameterinkonsistenz Das Produkt analysiert eine formatierte Nachricht oder Struktur, behandelt aber fälschlicherweise ein Längenfeld, das mit der tatsächlichen Länge der zugeordneten Daten inkonsistent ist.
CWE-259 Verwendung von hartcodiertem Kennwort Das Produkt enthält ein hartcodiertes Kennwort, das für die eigene eingehende Authentifizierung oder ausgehende Kommunikation mit externen Komponenten verwendet wird.
CWE-321 Verwendung hartcodierter kryptografischer Schlüssel Das Produkt verwendet einen hartcodierten, unveränderlichen kryptografischen Schlüssel.
CWE-434 Uneingeschränkter Upload der Datei mit gefährlichem Typ Das Produkt ermöglicht das Hochladen gefährlicher Dateitypen, die automatisch in ihrer Umgebung verarbeitet werden.
CWE-456 Fehlende Initialisierung einer Variablen Das Produkt initialisiert keine kritischen Variablen, wodurch die Ausführungsumgebung unerwartete Werte verwendet.
CWE-457 Verwendung einer nicht initialisierten Variablen Der Code verwendet eine Variable, die nicht initialisiert ist, was zu unvorhersehbaren oder unbeabsichtigten Ergebnissen führt.
CWE-477 Verwendung veralteter Funktion Der Code verwendet veraltete oder obsolete Funktionen, was darauf hindeutet, dass er nicht aktiv überprüft oder gepflegt wird.
CWE-502 Deserialisierung von nicht vertrauenswürdigen Daten Das Produkt deserialisiert nicht vertrauenswürdige Daten, ohne ausreichend sicherzustellen, dass die resultierenden Daten gültig sind.
CWE-543 Verwendung des Singleton-Musters ohne Synchronisierung in einem Multithread-Kontext Das Produkt verwendet das Singletonmuster beim Erstellen einer Ressource in einer Multithreadumgebung ohne ordnungsgemäße Synchronisierung.
CWE-567 Nicht synchronisierter Zugriff auf gemeinsame Daten in einem mehrfädigen Kontext Das Produkt synchronisiert nicht ordnungsgemäß freigegebene Daten, z. B. statische Variablen, über Threads hinweg, was zu nicht definiertem Verhalten führt.
CWE-570 Der Ausdruck ist immer falsch. Das Produkt enthält einen Ausdruck, der immer als "false" ausgewertet wird.
CWE-571 Der Ausdruck ist immer wahr Das Produkt enthält einen Ausdruck, der immer als wahr ausgewertet wird.
CWE-606 Ungeprüfte Eingabe für Schleifenbedingung Das Produkt überprüft Eingaben, die für Schleifenbedingungen verwendet werden, nicht ordnungsgemäß, was möglicherweise zu einer Dienstblockade durch übermäßiges Schleifen führen kann.
CWE-643 Unsachgemäße Neutralisierung von Daten in XPath-Ausdrücken ('XPath Injection') Das Produkt verwendet externe Eingaben, um einen XPath-Ausdruck für eine XML-Datenbank dynamisch zu erstellen, diese Eingabe jedoch nicht zu neutralisieren.
CWE-652 Unsachgemäße Neutralisierung von Daten in XQuery-Ausdrücken ('XQuery Injection') Das Produkt verwendet externe Eingaben, um einen XQuery-Ausdruck dynamisch zu erstellen, neutralisiert diese Eingaben jedoch nicht ordnungsgemäß.
CWE-662 Falsche Synchronisierung Das Produkt ermöglicht mehreren Threads oder Systemen den Zugriff auf eine freigegebene Ressource ohne ordnungsgemäße Synchronisierung, was möglicherweise gleichzeitige Zugriffsprobleme verursacht.
CWE-665 Falsche Initialisierung Das Produkt initialisiert eine Ressource entweder nicht oder falsch, was dazu führen kann, dass sie sich bei Zugriff in einem unerwarteten Zustand befindet.
CWE-667 Unsachgemäßes Sperren Das Produkt kann eine Sperre auf eine Ressource nicht ordnungsgemäß erwerben oder freigeben, was zu unerwarteten Zustandsänderungen führt.
CWE-672 Operation an einer Ressource nach deren Ablauf oder Freigabe Das Produkt greift auf eine Ressource zu oder arbeitet auf einer Ressource, nachdem es abgelaufen, freigegeben oder widerrufen wurde.
CWE-681 Falsche Konvertierung zwischen numerischen Typen Daten können während der Typkonvertierung ausgelassen oder in unerwartete Werte übersetzt werden, was bei Verwendung in sensiblen Kontexten gefährlich sein kann.
CWE-682 Falsche Berechnung Das Produkt führt eine Berechnung durch, die zu einem späteren Zeitpunkt falsche Ergebnisse generiert, die in sicherheitskritischen Entscheidungen oder im Ressourcenmanagement verwendet werden.
CWE-732 Falsche Berechtigungszuweisung für kritische Ressource Berechtigungen für eine sicherheitskritische Ressource werden so angegeben, dass unbeabsichtigte Akteure sie lesen oder ändern können.
CWE-772 Fehlende Freigabe der Ressource nach der effektiven Lebensdauer Das Produkt gibt eine Ressource nicht frei, nachdem ihre effektive Nutzungsdauer beendet ist und sie nicht mehr benötigt wird.
CWE-775 Fehlende Freigabe von Dateideskriptoren oder Handles nach Ablauf der effektiven Lebensdauer Das Produkt kann einen Dateideskriptor oder ein Handle nicht freigeben, nachdem er nicht mehr benötigt wird.
CWE-778 Unzureichende Protokollierung Das Produkt zeichnet ein sicherheitskritisches Ereignis nicht auf oder überlässt beim Protokollieren wichtige Details.
CWE-783 Operatorrangfolge-Logikfehler Ein Ausdruck verwendet falsche Logik, die durch die Rangfolge des Operators verursacht wird.
CWE-789 Speicherzuordnung mit übermäßigem Größenwert Das Produkt weist Speicher auf der Grundlage eines nicht vertrauenswürdigen Größenwertes zu, ohne sicherzustellen, dass er innerhalb der erwarteten Grenzwerte liegt.
CWE-798 Verwendung hartcodierter Anmeldeinformationen Das Produkt enthält hartcodierte Anmeldeinformationen, z. B. ein Kennwort oder einen kryptografischen Schlüssel.
CWE-820 Fehlende Synchronisierung Das Produkt verwendet eine freigegebene Ressource gleichzeitig, ohne zu versuchen, den Zugriff zu synchronisieren.
CWE-821 Falsche Synchronisierung Das Produkt verwendet gleichzeitig eine freigegebene Ressource, synchronisiert den Zugriff jedoch nicht ordnungsgemäß.
CWE-835 Schleife mit unerreichbarer Abbruchbedingung ('Endlosschleife') Das Produkt enthält eine Iteration oder Schleife mit einer Beendigungsbedingung, die nicht erreicht werden kann.
CWE-611 Unzulässige Einschränkung der EXTERNEN XML-Entitätsreferenz Das Produkt verarbeitet XML-Dokumente, die Entitäten mit URIs enthalten, die außerhalb des vorgesehenen Kontrollbereichs aufgelöst werden.
CWE-1057 Datenzugriffsvorgänge außerhalb der erwarteten Data Manager-Komponente Das Produkt führt Datenzugriffsvorgänge durch, die eine dedizierte, zentrale Daten-Manager-Komponente umgehen, die gemäß Entwurf erforderlich ist.

Nächste Schritte