Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, co może wykryć funkcjonalność oceny aplikacji w ramach modernizacji GitHub Copilot. Ocena obejmuje dwie kluczowe możliwości:
Wykrywanie problemów w trzech domenach krytycznych dla podróży modernizacji:
- Gotowość do chmury: identyfikuje 16 kategorii problemów, w tym użycie systemu plików, zarządzanie poświadczeniami, usługi obsługi komunikatów, połączenia bazy danych, luki konteneryzacji, obsługę sesji, wzorce komunikacji zdalnej i inne.
- Uaktualnienie Java: flaguje nieaktualne wersje Java, frameworki z zakończonym wsparciem OSS (Spring Boot, Spring Cloud, Jakarta EE), setki usuniętych lub przestarzałych interfejsów API oraz przestarzałe narzędzia kompilacji, takie jak Ant.
- Zabezpieczenia: Wykrywa 42 słabe strony zabezpieczeń pochodzące ze standardu ISO/IEC 5055, obejmujące luki w zabezpieczeniach iniekcji (SQL, LDAP, XPath, OS command), zakodowane poświadczenia i klucze kryptograficzne, problemy z synchronizacją, problemy z cyklem życia zasobów i inne luki o wysokim wpływie w CWE.
Zrozumienie aplikacji: w przypadku starszych baz kodu ocena przedstawia zależności i technologie używane, dzięki czemu uzyskasz jasny obraz tego, na czym opiera się aplikacja przed rozpoczęciem migracji.
W poniższych sekcjach opisano szczegółowo pokrycie problemów dla każdej domeny.
Domena: gotowość do chmury
| Domena | Kategoria | Podsumowanie wykrywania | Dlaczego ma to znaczenie |
|---|---|---|---|
cloud-readiness |
credential-migration |
Wykrywa zakodowane na stałe poświadczenia platformy AWS (aws_access_key_id, aws_secret_access_key), użycie menedżera wpisów tajnych platformy AWS i osadzone biblioteki zarządzania wpisami tajnymi, takie jak Spring Cloud Vault. |
Zabezpieczenia: Twardo zakodowane poświadczenia i magazyny tajnych danych powiązane z dostawcą są wysoce narażone. Aplikacje natywne dla chmury wymagają scentralizowanych zabezpieczeń opartych na tożsamościach, aby zapobiec kradzieży poświadczeń. |
cloud-readiness |
region-configuration |
Identyfikuje zakodowane na stałe identyfikatory regionów platformy AWS (aws.region, AWS_REGION) w kodzie lub plikach konfiguracji. |
Przenośność: Stałe tworzenie lokalizacji geograficznych wiąże aplikację z infrastrukturą fizyczną określonego dostawcy, co utrudnia globalne wdrażanie i odporność. |
cloud-readiness |
storage-migration |
Wykrywa użycie zestawu SDK platformy AWS S3 (zasobniki, obiekty, wstępnie podpisane adresy URL), S3 TransferManager i biblioteki klienta usługi Google Cloud Storage. | Niezawodność i dopasowanie: Te zależności wiążą cię z magazynem obiektów dostawcy i nie współpracują z natywnymi usługami magazynu platformy docelowej. |
cloud-readiness |
messaging-service-migration |
Wskazuje zależności i łańcuchy połączeń dla Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar i Google Cloud Pub/Sub. | Skalowalność i niezawodność: Starsze brokery obsługi komunikatów często polegają na stałych punktach końcowych i trwałości opartej na dyskach, które utrudniają skalowanie w poziomie i wysoką dostępność w środowiskach chmury. |
cloud-readiness |
database-migration |
Wykrywa parametry połączenia, sterowniki i ustawienia limitu czasu dla bazy danych MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore i Google Cloud Spanner. | Niezawodność: Samozarządzane lub nienatywne bazy danych nie mają zautomatyzowanego skalowania w chmurze. Zakodowane na stałe limity czasu i stałe interwały ponawiania mogą powodować blokowanie i lawiny ponowień prób podczas częściowych awarii. |
cloud-readiness |
file-system-management |
Identyfikuje użycie ścieżek względnych/bezwzględnych, ścieżek domowych (/home/), file:// schematów oraz standardowych wywołań API Java IO/NIO lub Apache Commons IO dla dostępu do lokalnego magazynu. |
Bezstanowość: Chmurowe kontenery są efemeryczne. Zapisywanie w lokalnym systemie plików prowadzi do utraty danych po ponownym uruchomieniu wystąpienia lub operacjach skalowania; dane trwałe muszą być zewnętrznie przechowywane. |
cloud-readiness |
local-credential |
Flaguje pliki Java KeyStore (.jks), wywołania metod i hasła w postaci zwykłego tekstu (password, pwd) w plikach właściwości lub XML. |
Zagrożenie bezpieczeństwa: Poufny materiał przechowywany w postaci zwykłego tekstu lub plików lokalnych może być łatwo naruszony, jeśli nieautoryzowane osoby uzyskują dostęp do środowiska aplikacji lub plików konfiguracji. |
cloud-readiness |
configuration-management |
System.getenvWykrywa , , System.getPropertypliki zewnętrzne .properties/.xml/.ini i dostęp do rejestru systemu Windows dla ustawień aplikacji. |
Zewnętrzność: Pamięć specyficzna dla systemu operacyjnego lub pliki lokalne nie można nimi zarządzać na szeroką skalę i nie można ich aktualizować dynamicznie bez zmiany kodu we wszystkich wystąpieniach. |
cloud-readiness |
session-management |
Identyfikuje przechowywanie danych w HttpSession obiektach i używa tagu "rozprowadzalny" w deskryptorach internetowych. |
Skalowalność: Standardowe sesje HTTP są nieodpowiednie do skalowania w chmurze; stan musi być zewnętrznie zlokalizowany w rozproszonej pamięci podręcznej, aby zapobiec utracie danych podczas przenoszenia ruchu między wystąpieniami. |
cloud-readiness |
remote-communication |
Wykrywa ściśle powiązane protokoły (CORBA, RMI, JCA), niezabezpieczone protokoły HTTP/FTP, interfejs API poczty Java, użycie kanału Socket/NIO i zakodowane na stałe adresy URL. | Zgodność z chmurą i zabezpieczenia: Ściśle powiązane interakcje utrudniają skalowalność. Niezabezpieczone protokoły i zakodowane na stałe adresy URL są podatne na zagrożenia i kruche w dynamicznych środowiskach sieci w chmurze. |
cloud-readiness |
jakarta-migration |
Wykrywa użycie określonych interfejsów API Dżakarty/Java EE dla systemów NoSQL, JPA, Data, WebSockets i JAX-RS oraz artefaktów specyficznych dla serwera z JBoss EAP, WebLogic lub WebSphere. | Supportability: Migracja do natywnego dla chmury środowiska uruchomieniowego wymaga dostosowania do nowoczesnych przestrzeni nazw Dżakarty i usunięcia zastrzeżonych zależności serwera aplikacji w celu zapewnienia przenośności. |
cloud-readiness |
containerization |
Flaguje brak pliku Dockerfile lub problematycznych instrukcji dotyczących pliku Dockerfile, takich jak apt-get upgrade, składnia małych liter i problemy ze odstępami składni. |
Niezawodność: Standaryzacja kompilacji kontenerów jest wymagana w przypadku stabilnych, powtarzalnych wdrożeń i zapewnienia, że obrazy zachowują się przewidywalnie w różnych środowiskach. |
cloud-readiness |
scheduled-job-migration |
Identyfikuje procedury obsługi lambda platform AWS, usługi Google Cloud Functions, zależności harmonogramu kwarcowego i przepływy pracy przetwarzania w usłudze Spring Batch. | Wyrównanie mocy obliczeniowej w chmurze: Zaplanowane zadania i funkcje bezserwerowe muszą być refaktoryzowane, aby zmniejszyć obciążenie infrastrukturą przy użyciu modeli obliczeniowych opartych na zdarzeniach i bezserwerowych chmury docelowej. |
cloud-readiness |
apm-migration |
Identyfikuje osadzone systemy APM i biblioteki dla New Relic, Elastic APM i Dynatrace. | Obserwowalność: Te narzędzia wymagają konkretnej integracji z platformą chmurową do prawidłowego przechwytywania danych telemetrii, opóźnień i kondycji w środowisku zarządzanym. |
cloud-readiness |
auth-migration |
Wykrywa wzorce uwierzytelniania SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP i starsze wzorce uwierzytelniania formularzy internetowych. | Nowoczesna tożsamość: Starszy formularz internetowy i uwierzytelnianie LDAP nie mają elastyczności i funkcji zabezpieczeń (MFA, SSO) nowoczesnych dostawców tożsamości w chmurze opartych na oświadczeniach. |
cloud-readiness |
os-compatibility |
Identyfikuje zależności projektu w bibliotekach Dynamic-Link specyficznych dla systemu Windows (pliki.dll). | Mobilność: Biblioteki DLL są specyficzne dla systemu operacyjnego i nie działają w standardowych środowiskach kontenerów chmury opartych na systemie Linux. Należy zastąpić je międzyplatformowymi bibliotekami współdzielonymi. |
Domena: java-upgrade
| Domena | Kategoria | Podsumowanie wykrywania | Dlaczego ma to znaczenie |
|---|---|---|---|
java-upgrade |
java-version-upgrade |
Identyfikuje użycie wersji java innych niż LTS (9, 10, 12-16, 19, 20) i starszych wersji (od 1.x do 8 i 11). | Zabezpieczenia i obsługa techniczna: Starsze i inne niż LTS wersje zawierają znane luki w zabezpieczeniach i brak długoterminowych aktualizacji konserwacji, pozostawiając infrastrukturę narażoną na ataki. |
java-upgrade |
framework-upgrade |
Wykrywa wersje Spring Boot, Spring Cloud, Spring Framework i Jakarta EE, które osiągnęły koniec wsparcia systemu operacyjnego. | Supportability: Nieaktualne struktury przestają otrzymywać poprawki zabezpieczeń, dzięki czemu aplikacja stanowi zagrożenie bezpieczeństwa i jest niezgodna z nowoczesnymi narzędziami natywnymi dla chmury. |
java-upgrade |
deprecated-apis |
Kataloguje setki usuniętych lub przestarzałych interfejsów API, w tym sun.misc.BASE64, Thread.stop, SecurityManager metod i zastrzeżonych punktów zaczepienia z platform JBoss, Seam 2, WebLogic i WebSphere. |
Stabilność i przenośność: Użycie usuniętych interfejsów API powoduje awarie środowiska uruchomieniowego na nowoczesnych maszynach JVM. Zastrzeżone interfejsy dostawcy (takie jak wewnętrzne elementy WebLogic/JBoss) czynią niemożliwym przenoszenie aplikacji między standardowymi środowiskami uruchomieniowymi. |
java-upgrade |
build-tool |
Identyfikuje starsze systemy kompilacji, takie jak Ant (build.xml) lub konfiguracje projektów specyficznych dla środowiska Eclipse (natury WTP/JEM). |
Automatyzacja: Starsze narzędzia nie mają standardowych konwencji i zarządzania zależnościami potrzebnych do wydajnej integracji z nowoczesnymi potokami ciągłej integracji/ciągłego wdrażania. |
Domena: Zabezpieczenia (z przewodnikiem ISO 5055)
ISO/IEC 5055 jest standardem ISO do mierzenia wewnętrznej struktury produktu oprogramowania na czterech czynnikach krytycznych dla działania firmy: zabezpieczenia, niezawodność, wydajność i łatwość konserwacji. Te czynniki określają, jak wiarygodny, niezawodny i odporny jest system oprogramowania. W istocie iso 5055 ma na celu "znalezienie i zapobieganie 8% wad, które powodują 90% problemów produkcyjnych". ISO 5055 identyfikuje najbardziej krytyczne i wpływające na nie CWE pod każdą charakterystyką jakości: niezawodność, efektywność wydajnościowa, bezpieczeństwo i łatwość utrzymania. W przypadku modernizacji GitHub Copilot wykrywasz słabe punkty dotyczące zabezpieczeń, zdefiniowane w normie ISO 5055, co przedstawia poniższa tabela.
| CWE_ID | Tytuł | Opis |
|---|---|---|
CWE-22 |
Nieprawidłowe ograniczenie nazwy ścieżki do katalogu ograniczonego ('Przechodzenie poza katalog') | Produkt używa danych wejściowych zewnętrznych do konstruowania nazwy pathname przeznaczonej do identyfikowania pliku lub katalogu poniżej ograniczonego katalogu nadrzędnego. Jednak nie neutralizuje prawidłowo specjalnych elementów, które mogą spowodować, że nazwa ścieżki zostanie rozpoznana poza ograniczonym katalogiem. |
CWE-23 |
Przechodzenie ścieżki względnej | Produkt używa zewnętrznych danych wejściowych do konstruowania ścieżki pliku w ograniczonym katalogu, ale nie neutralizuje sekwencji takich jak .., które mogą powodować przejście poza ten katalog. |
CWE-36 |
Przechodzenie ścieżki bezwzględnej | Produkt używa zewnętrznych danych wejściowych do konstruowania nazwy ścieżki w ograniczonym katalogu, ale nie neutralizuje bezwzględnych sekwencji ścieżek, takich jak /abs/path, które mogą być rozpoznawane poza tym katalogiem. |
CWE-77 |
Niewłaściwa neutralizacja elementów specjalnych używanych w komendach ('Iniekcja poleceń') | Produkt konstruuje polecenie przy użyciu danych wejściowych pod wpływem czynników zewnętrznych, ale nie neutralizuje specjalnych elementów, które mogą modyfikować zamierzone polecenie wysyłane do komponentu podrzędnego. |
CWE-78 |
Niewłaściwa neutralizacja elementów specjalnych używanych w poleceniu systemu operacyjnego (iniekcja polecenia systemu operacyjnego) | Produkt konstruuje polecenie systemu operacyjnego przy użyciu danych wejściowych podlegających wpływom zewnętrznym, ale nie potrafi zneutralizować specjalnych elementów, które mogą zmienić zamierzone polecenie systemu operacyjnego wysyłane do komponentu poniżej. |
CWE-88 |
Niewłaściwa neutralizacja ograniczników argumentów w poleceniu ('Iniekcja argumentów') | Produkt tworzy ciąg polecenia dla oddzielnego składnika, ale nie prawidłowo rozdziela argumentów, opcji lub przełączników w tym ciągu. |
CWE-79 |
Niewłaściwa neutralizacja danych wejściowych podczas generowania strony internetowej (skrypty między witrynami) | Produkt nie potrafi odpowiednio neutralizować danych wejściowych kontrolowanych przez użytkownika przed ich umieszczeniem w danych wyjściowych używanych jako strona internetowa, dostępna dla innych użytkowników. |
CWE-89 |
Niewłaściwa neutralizacja elementów specjalnych używanych w poleceniu SQL ('Iniekcja SQL') | Produkt konstruuje polecenie SQL przy użyciu danych wejściowych pochodzących z zewnątrz, ale nie neutralizuje elementów, które mogłyby zmodyfikować polecenie, co pozwala na interpretowanie danych wejściowych jako składni SQL, a nie jako zwykłe dane. |
CWE-564 |
Wstrzyknięcie kodu SQL: Hibernate | Używanie hibernacji do wykonywania dynamicznych instrukcji SQL utworzonych za pomocą danych wejściowych kontrolowanych przez użytkownika może umożliwić atakującemu zmodyfikowanie znaczenia instrukcji lub wykonanie dowolnych poleceń SQL. |
CWE-90 |
Niewłaściwa neutralizacja elementów specjalnych używanych w zapytaniu LDAP (iniekcja LDAP) | Produkt konstruuje zapytanie LDAP przy użyciu danych wejściowych pochodzących z zewnątrz, ale nie może zneutralizować elementów, które mogłyby zmodyfikować zamierzone zapytanie wysyłane do komponentu początkowego. |
CWE-91 |
Wstrzykiwanie KODU XML (znane również jako wstrzykiwanie blind XPath) | Produkt nie powoduje prawidłowego neutralizowania specjalnych elementów używanych w formacie XML, dzięki czemu osoby atakujące mogą modyfikować składnię, zawartość lub polecenia przed przetworzeniem. |
CWE-99 |
Niewłaściwa kontrola identyfikatorów zasobów ("Iniekcja zasobów") | Produkt odbiera dane wejściowe, ale nie ogranicza go poprawnie przed użyciem go jako identyfikator zasobu poza docelową sferą kontroli. |
CWE-130 |
Niewłaściwe przetwarzanie niespójności parametru długości | Produkt analizuje sformatowany komunikat lub strukturę, ale niepoprawnie obsługuje pole długości niezgodne z rzeczywistą długością skojarzonych danych. |
CWE-259 |
Używanie zakodowanego hasła | Produkt zawiera zakodowane hasło używane do własnego uwierzytelniania przychodzącego lub komunikacji wychodzącej ze składnikami zewnętrznymi. |
CWE-321 |
Używanie zakodowanego klucza kryptograficznego | Produkt używa zakodowanego, niezmienionego klucza kryptograficznego. |
CWE-434 |
Nieograniczone przekazywanie pliku z niebezpiecznym typem | Produkt umożliwia przekazywanie niebezpiecznych typów plików, które są automatycznie przetwarzane w swoim środowisku. |
CWE-456 |
Brak inicjowania zmiennej | Produkt nie inicjuje zmiennych krytycznych, co powoduje, że środowisko wykonywania używa nieoczekiwanych wartości. |
CWE-457 |
Użycie niezainicjowanej zmiennej | Kod używa zmiennej, która nie jest inicjowana, co prowadzi do nieprzewidywalnych lub niezamierzonych wyników. |
CWE-477 |
Korzystanie z przestarzałej funkcji | Kod używa przestarzałych lub nieaktualnych funkcji, co sugeruje, że nie jest aktywnie przeglądany ani utrzymywany. |
CWE-502 |
Deserializacja niezaufanych danych | Produkt deserializuje niezaufane dane bez wystarczającego zapewnienia, że wynikowe dane są prawidłowe. |
CWE-543 |
Korzystanie ze wzorca Singleton bez synchronizacji w kontekście wielowątkowym | Produkt używa wzorca Singleton przy tworzeniu zasobu w środowisku wielowątkowym bez właściwej synchronizacji. |
CWE-567 |
Niezsynchronizowany dostęp do udostępnionych danych w kontekście wielowątkowym | Produkt nie może prawidłowo zsynchronizować udostępnionych danych, takich jak zmienne statyczne, między wątkami, co prowadzi do niezdefiniowanego zachowania. |
CWE-570 |
Wyrażenie jest zawsze fałszywe | Produkt zawiera wyrażenie, które zawsze daje wartość false. |
CWE-571 |
Wyrażenie jest zawsze prawdziwe | Produkt zawiera wyrażenie, które zawsze daje wartość true. |
CWE-606 |
Nieznaczone dane wejściowe dla warunku pętli | Produkt nie sprawdza prawidłowo danych wejściowych używanych do warunków pętli, co potencjalnie prowadzi do odmowy usługi z powodu nadmiernego wykonywania pętli. |
CWE-643 |
Niewłaściwa neutralizacja danych w wyrażeniach XPath ('Iniekcja XPath') | Produkt używa danych wejściowych zewnętrznych do dynamicznego konstruowania wyrażenia XPath dla bazy danych XML, ale nie może ona neutralizować tych danych wejściowych. |
CWE-652 |
Niewłaściwa neutralizacja danych w wyrażeniach XQuery ('Wstrzyknięcie XQuery') | Produkt używa danych wejściowych zewnętrznych do dynamicznego konstruowania wyrażenia XQuery, ale nie może poprawnie neutralizować tych danych wejściowych. |
CWE-662 |
Niewłaściwa synchronizacja | Produkt umożliwia wielu wątkom lub systemom dostęp do udostępnionego zasobu bez odpowiedniej synchronizacji, co potencjalnie powoduje jednoczesne problemy z dostępem. |
CWE-665 |
Nieprawidłowe inicjowanie | Produkt nie inicjuje lub niepoprawnie inicjuje zasób, co potencjalnie powoduje pozostawienie go w nieoczekiwanym stanie podczas uzyskiwania dostępu. |
CWE-667 |
Nieprawidłowe blokowanie | Produkt nie uzyskuje prawidłowo ani nie zwalnia blokady zasobu, co prowadzi do nieoczekiwanych zmian stanu. |
CWE-672 |
Operacja na zasobie po wygaśnięciu lub wydaniu | Produkt uzyskuje dostęp do zasobu lub działa na nim po wygaśnięciu, zwolnieniu lub odwołaniu. |
CWE-681 |
Niepoprawna konwersja między typami liczbowymi | Dane można pominąć lub przetłumaczyć na nieoczekiwane wartości podczas konwersji typów, co może być niebezpieczne, jeśli są używane w kontekstach poufnych. |
CWE-682 |
Nieprawidłowe obliczenie | Produkt wykonuje obliczenie, które generuje nieprawidłowe wyniki później używane w decyzjach o znaczeniu krytycznym dla zabezpieczeń lub zarządzaniu zasobami. |
CWE-732 |
Nieprawidłowe przypisanie uprawnień dla zasobu krytycznego | Uprawnienia dla zasobu krytycznego dla zabezpieczeń są określane w sposób, który umożliwia niezamierzonym aktorom odczytywanie lub modyfikowanie go. |
CWE-772 |
Brak zwolnienia zasobu po okresie użyteczności | Produkt nie zwalnia zasobu po zakończeniu okresu obowiązywania i nie jest już potrzebny. |
CWE-775 |
Brak wydania deskryptora plików lub uchwytu po okresie obowiązywania | Produkt nie zwalnia deskryptora pliku ani uchwytu po tym, jak nie są już potrzebne. |
CWE-778 |
Niewystarczające rejestrowanie | Produkt nie rejestruje zdarzenia krytycznego dla bezpieczeństwa lub pomija ważne szczegóły podczas jego logowania. |
CWE-783 |
Błąd logiki pierwszeństwa operatora | Wyrażenie używa nieprawidłowej logiki spowodowanej pierwszeństwem operatora. |
CWE-789 |
Alokacja pamięci z nadmierną wartością rozmiaru | Produkt przydziela pamięć na podstawie niezaufanej, dużej wartości rozmiaru bez zapewnienia, że mieści się w oczekiwanych limitach. |
CWE-798 |
Używanie zakodowanych poświadczeń | Produkt zawiera zakodowane na twardo poświadczenia, takie jak hasło lub klucz kryptograficzny. |
CWE-820 |
Brak synchronizacji | Produkt korzysta współbieżnie z udostępnionym zasobem bez próby zsynchronizowania dostępu. |
CWE-821 |
Nieprawidłowa synchronizacja | Produkt korzysta współbieżnie z udostępnionym zasobem, ale nie synchronizuje poprawnie dostępu. |
CWE-835 |
Pętla z niemożliwym do osiągnięcia warunkiem zakończenia ('Nieskończona pętla') | Produkt zawiera iterację lub pętlę z warunkiem zakończenia, który nie można osiągnąć. |
CWE-611 |
Nieprawidłowe ograniczenie odwołania do zewnętrznego obiektu XML | Produkt przetwarza dokumenty XML zawierające encje z identyfikatorami URI, które rozwiązują się poza docelowym zakresem kontroli. |
CWE-1057 |
Operacje dostępu do danych poza oczekiwanym składnikiem programu Data Manager | Produkt wykonuje operacje dostępu do danych, które pomijają dedykowany, centralny składnik menedżera danych wymagany zgodnie z projektem. |