Bagikan melalui


Memahami cakupan penilaian dengan modernisasi GitHub Copilot

Artikel ini menjelaskan apa yang dapat dideteksi fitur penilaian aplikasi modernisasi GitHub Copilot. Penilaian mencakup dua kemampuan utama:

  • Deteksi masalah di tiga domain yang penting untuk perjalanan modernisasi Anda:

    • Kesiapan cloud: Mengidentifikasi 16 kategori kekhawatiran, termasuk penggunaan sistem file, manajemen kredensial, layanan olahpesan, koneksi database, kesenjangan kontainerisasi, penanganan sesi, pola komunikasi jarak jauh, dan banyak lagi.
    • Peningkatan Java: Menandai versi Java yang ketinggalan jaman, kerangka kerja dukungan end-of-OSS (Spring Boot, Spring Cloud, Jakarta EE), ratusan API yang dihapus atau tidak digunakan lagi, dan alat build warisan seperti Ant.
    • Keamanan: Mendeteksi 42 kelemahan keamanan yang diambil dari standar ISO/IEC 5055, mencakup kerentanan injeksi (SQL, LDAP, XPath, perintah OS), kredensial dan kunci kriptografi yang dikodekan secara permanen, masalah sinkronisasi, masalah siklus hidup sumber daya, dan CWEs berdampak tinggi lainnya.
  • Pemahaman aplikasi: untuk basis kode warisan, penilaian menampilkan dependensi dan teknologi yang digunakan, sehingga Anda mendapatkan gambaran yang jelas tentang apa yang diandalkan aplikasi Anda sebelum Anda mulai bermigrasi.

Bagian berikut menjelaskan cakupan masalah untuk setiap domain secara rinci.

Domain: kesiapan cloud

Domain Kategori Ringkasan Deteksi Mengapa Penting
cloud-readiness credential-migration Mendeteksi kredensial AWS yang dikodekan secara permanen (aws_access_key_id, aws_secret_access_key), penggunaan AWS Secrets Manager, dan pustaka manajemen rahasia yang disematkan seperti Spring Cloud Vault. Keamanan: Kredensial yang dikodekan secara permanen dan penyimpanan rahasia khusus vendor sangat rentan. Aplikasi cloud-native memerlukan keamanan terpusat berbasis identitas untuk mencegah pencurian kredensial.
cloud-readiness region-configuration Mengidentifikasi pengidentifikasi wilayah AWS yang dikodekan secara permanen (aws.region, AWS_REGION) dalam file kode atau konfigurasi. Portabilitas: Geografi hardcoding mengikat aplikasi ke infrastruktur fisik vendor tertentu, menghambat penyebaran dan ketahanan global.
cloud-readiness storage-migration Mendeteksi penggunaan AWS S3 SDK (wadah, objek, URL pra-ditandatangani), S3 TransferManager, dan API klien Google Cloud Storage. Keandalan & Penyesuaian: Dependensi ini membatasi fleksibilitas Anda dengan mengunci ke penyimpanan objek dari vendor dan tidak berfungsi dengan layanan penyimpanan bawaan dari platform target.
cloud-readiness messaging-service-migration Menandai dependensi dan string koneksi untuk Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar, dan Google Cloud Pub/Sub. Skalabilitas & Keandalan: Broker olahpesan warisan sering mengandalkan titik akhir tetap dan persistensi berbasis disk yang menghambat penskalaan horizontal dan ketersediaan tinggi di lingkungan cloud.
cloud-readiness database-migration Mendeteksi string koneksi, driver, dan pengaturan waktu habis untuk MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore, dan Google Cloud Spanner. Keandalan: Database yang dikelola sendiri atau non-asli tidak memiliki penskalakan cloud otomatis. Batas waktu yang ditetapkan secara langsung dan interval ulang tetap dapat menyebabkan pemblokiran dan "badai percobaan ulang" selama gangguan parsial.
cloud-readiness file-system-management Mengidentifikasi penggunaan jalur relatif/absolut, jalur direktori rumah (/home/), skema file://, dan fungsi standar Java IO/NIO atau Apache Commons IO untuk mengakses penyimpanan lokal. Statelessness: Kontainer cloud bersifat sementara. Menulis ke sistem file lokal menyebabkan kehilangan data saat instans memulai ulang atau menskalakan operasi; data persisten harus diekternisasi.
cloud-readiness local-credential Menandai file Java KeyStore (.jks), panggilan metode KeyStore.load, dan kata sandi teks-jelas (password, pwd) dalam file properti atau XML. Risiko Keamanan: Materi sensitif yang disimpan dalam teks yang jelas atau file lokal dapat dengan mudah disusupi jika individu yang tidak sah mengakses lingkungan aplikasi atau file konfigurasi.
cloud-readiness configuration-management Mendeteksi System.getenv, System.getProperty, file eksternal .properties/.xml, dan akses Windows Registry /.ini untuk pengaturan aplikasi. Eksternalisasi: Penyimpanan khusus OS atau file lokal tidak dapat dikelola dalam skala besar dan tidak dapat diperbarui secara dinamis tanpa perubahan kode di semua instans.
cloud-readiness session-management Mengidentifikasi penyimpanan data dalam HttpSession objek dan penggunaan tag "dapat didistribusikan" di deskriptor web. Skalabilitas: Sesi HTTP standar tidak cocok untuk penskalaan cloud; status harus diekternetisasi ke cache terdistribusi untuk mencegah kehilangan data selama pergeseran lalu lintas antar instans.
cloud-readiness remote-communication Mendeteksi protokol yang digabungkan dengan erat (CORBA, RMI, JCA), protokol HTTP/FTP yang tidak aman, Java Mail API, penggunaan saluran Soket/NIO langsung, dan URL yang dikodekan secara permanen. Kompatibilitas Cloud & Keamanan: Interaksi yang digabungkan dengan erat menghambat skalabilitas. Protokol yang tidak aman dan URL yang dikodekan secara permanen rentan dan rapuh di lingkungan jaringan cloud dinamis.
cloud-readiness jakarta-migration Mendeteksi penggunaan API khusus Jakarta/Java EE untuk NoSQL, JPA, Data, WebSockets, dan JAX-RS, dan artefak khusus server dari JBoss EAP, WebLogic, atau WebSphere. Dukungan: Migrasi ke waktu proses cloud-native memerlukan penyelarasan dengan namespace Jakarta modern dan menghapus dependensi server aplikasi eksklusif untuk memastikan portabilitas.
cloud-readiness containerization Menandai tidak adanya instruksi Dockerfile atau Dockerfile yang bermasalah seperti apt-get upgrade, sintaks huruf kecil, dan masalah penspasian sintaks. Keandalan: Standardisasi dalam build kontainer diperlukan untuk penyebaran yang stabil dan dapat direproduksi dan untuk memastikan gambar bersifat terprediksi di berbagai lingkungan.
cloud-readiness scheduled-job-migration Mengidentifikasi handler AWS Lambda, Google Cloud Functions, dependensi Quartz Scheduler, dan alur kerja pemrosesan Spring Batch. Perataan Komputasi Cloud: Pekerjaan terjadwal dan fungsi tanpa penggunaan server harus dibangun kembali untuk menggunakan model komputasi berbasis peristiwa dan tanpa server dari cloud target guna mengurangi overhead infrastruktur.
cloud-readiness apm-migration Mengidentifikasi agen dan pustaka APM yang disematkan untuk New Relic, Elastic APM, dan Dynatrace. Observability: Alat-alat ini memerlukan integrasi platform cloud tertentu untuk menangkap data telemetri, latensi, dan kesehatan dengan benar di lingkungan terkelola.
cloud-readiness auth-migration Mendeteksi SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, penggunaan LDAP, dan pola autentikasi webform warisan. Identitas Modern: Formulir web warisan dan autentikasi LDAP tidak memiliki fitur fleksibilitas dan keamanan (MFA, SSO) dari penyedia identitas cloud berbasis klaim modern.
cloud-readiness os-compatibility Mengidentifikasi dependensi proyek pada Pustaka Dynamic-Link khusus Windows ( file.dll). Portabilitas: DLL khusus OS dan tidak berjalan di lingkungan kontainer cloud standar berbasis Linux. Anda perlu menggantinya dengan pustaka bersama lintas platform.

Domain: java-upgrade

Domain Kategori Ringkasan Deteksi Mengapa Penting
java-upgrade java-version-upgrade Mengidentifikasi penggunaan versi Java non-LTS (9, 10, 12-16, 19, 20) dan versi warisan (1.x hingga 8, dan 11). Keamanan & Dukungan: Versi lama dan non-LTS berisi kerentanan yang diketahui dan tidak memiliki pembaruan pemeliharaan jangka panjang, sehingga infrastruktur terpapar serangan.
java-upgrade framework-upgrade Mendeteksi versi Spring Boot, Spring Cloud, Spring Framework, dan Jakarta EE yang mencapai akhir dukungan OSS. Dukungan: Kerangka kerja kedaluarsa berhenti menerima perbaikan keamanan, membuat aplikasi berisiko keamanan dan tidak kompatibel dengan alat cloud-native modern.
java-upgrade deprecated-apis Katalog ratusan API yang dihapus atau tidak digunakan lagi, termasuk sun.misc.BASE64, Thread.stop, SecurityManager metode, dan kait kepemilikan dari JBoss, Seam 2, WebLogic, dan WebSphere. Stabilitas & Portabilitas: Menggunakan API yang dihapus menyebabkan runtime crash pada JVM modern. Kait vendor kepemilikan (seperti internal WebLogic/JBoss) mencegah aplikasi portabel di seluruh runtime standar.
java-upgrade build-tool Mengidentifikasi sistem build warisan seperti Ant (build.xml) atau konfigurasi proyek khusus Eclipse (natures WTP/JEM). Otomatisasi: Alat warisan tidak memiliki konvensi standar dan manajemen dependensi yang diperlukan untuk integrasi yang efisien ke dalam alur CI/CD modern.

Domain: Keamanan (dipandu ISO 5055)

ISO/IEC 5055 adalah standar ISO untuk mengukur struktur internal produk perangkat lunak pada empat faktor penting bisnis: Keamanan, Keandalan, Efisiensi Performa, dan Ketahanan. Faktor-faktor ini menentukan seberapa tepercaya, dapat diandalkan, dan tangguh sistem perangkat lunak. Intinya, ISO 5055 dimaksudkan untuk "menemukan dan mencegah 8% kelemahan yang menyebabkan 90% masalah produksi". ISO 5055 mengidentifikasi CWEs yang paling penting dan berdampak di bawah setiap karakteristik kualitas: Keandalan, Efisiensi Performa, Keamanan, dan Pemeliharaan. Untuk modernisasi GitHub Copilot, Anda mendeteksi terhadap CWEs yang dikumpulkan pada keamanan yang ditentukan dalam ISO 5055, seperti yang diungkapkan tabel berikut.

CWE_ID Title Deskripsi
CWE-22 Pembatasan Nama Jalur yang Tidak Tepat pada Direktori Terbatas ('Path Traversal') Produk menggunakan input eksternal untuk membuat nama jalur yang dimaksudkan untuk mengidentifikasi file atau direktori di bawah direktori induk terbatas. Tetapi, itu tidak menetralisir elemen khusus dengan benar yang dapat menyebabkan nama jalur diselesaikan di luar direktori terbatas.
CWE-23 Jalur Traversal Relatif Produk menggunakan input eksternal untuk membuat nama jalur dalam direktori terbatas tetapi gagal menetralisir urutan seperti .., yang dapat diselesaikan di luar direktori tersebut.
CWE-36 Traversal Jalur Absolut Produk menggunakan input eksternal untuk membuat nama jalur dalam direktori terbatas tetapi gagal menetralisir urutan jalur absolut seperti /abs/path, yang dapat diselesaikan di luar direktori tersebut.
CWE-77 Netralisasi yang Tidak Tepat terhadap Elemen Khusus dalam Perintah ('Injeksi Perintah') Produk membuat perintah dengan menggunakan input yang dipengaruhi secara eksternal tetapi tidak menetralkan elemen khusus yang dapat memodifikasi perintah yang dimaksudkan yang dikirim ke komponen hilir.
CWE-78 Netralisasi Elemen Khusus secara Tidak Tepat yang Digunakan dalam Perintah OS ('Injeksi Perintah OS') Produk membangun perintah OS dengan menggunakan input yang dipengaruhi secara eksternal tetapi gagal menetralisir elemen khusus yang dapat memodifikasi perintah OS yang dimaksudkan yang dikirim ke komponen hilir.
CWE-88 Netralisasi Pembatas Argumen yang Tidak Tepat dalam Perintah ('Injeksi Argumen') Produk membuat string perintah untuk komponen terpisah tetapi tidak memisahkan argumen, opsi, atau sakelar dengan benar dalam string tersebut.
CWE-79 Netralisasi Input yang Tidak Tepat Selama Pembuatan Halaman Web ('Pembuatan Skrip Lintas Situs') Produk gagal menetralisir input yang dapat dikontrol pengguna sebelum menempatkannya dalam output yang digunakan sebagai halaman web yang disajikan kepada pengguna lain.
CWE-89 Netralisasi Elemen Khusus yang Tidak Tepat yang digunakan dalam Perintah SQL ('Injeksi SQL') Produk membangun perintah SQL dengan menggunakan input yang dipengaruhi secara eksternal tetapi gagal menetralkan elemen yang dapat mengubah perintah, memungkinkan input ditafsirkan sebagai sintaks SQL alih-alih data biasa.
CWE-564 Injeksi SQL: Hibernasi Menggunakan Hibernate untuk menjalankan pernyataan SQL dinamis yang dibangun dengan input yang dikontrol pengguna dapat memungkinkan penyerang memodifikasi arti pernyataan atau menjalankan perintah SQL sewenang-wenang.
CWE-90 Netralisasi Elemen Khusus yang Tidak Tepat yang digunakan dalam Kueri LDAP ('Injeksi LDAP') Produk membuat kueri LDAP dengan menggunakan input yang dipengaruhi secara eksternal tetapi gagal menetralisir elemen yang dapat memodifikasi kueri yang dimaksudkan yang dikirim ke komponen hilir.
CWE-91 Injeksi XML (juga dikenal sebagai Injeksi Buta XPath) Produk tidak menetralisir elemen khusus yang digunakan dalam XML dengan benar, memungkinkan penyerang memodifikasi sintaks, konten, atau perintah sebelum diproses.
CWE-99 Kontrol Pengidentifikasi Sumber Daya yang Tidak Tepat ('Injeksi Sumber Daya') Produk menerima input tetapi tidak membatasinya dengan benar sebelum menggunakannya sebagai pengidentifikasi untuk sumber daya di luar lingkup kontrol yang dimaksudkan.
CWE-130 Penanganan yang Tidak Tepat terhadap Ketidakkonsistenan Parameter Panjang Produk mengurai pesan atau struktur yang diformat tetapi salah menangani bidang panjang yang tidak konsisten dengan panjang aktual data terkait.
CWE-259 Penggunaan Kata Sandi Yang Dikodekan Secara Permanen Produk berisi kata sandi yang dikodekan secara permanen yang digunakan untuk autentikasi masuk atau komunikasi keluarnya sendiri ke komponen eksternal.
CWE-321 Penggunaan Kunci Kriptografi berkode keras Produk ini menggunakan kunci kriptografi yang dikodekan secara permanen dan tidak dapat diubah.
CWE-434 Unggahan File Yang Tidak Dibatasi dengan Tipe Berbahaya Produk ini memungkinkan pengunggahan jenis file berbahaya yang secara otomatis diproses dalam lingkungannya.
CWE-456 Inisialisasi Variabel yang Hilang Produk tidak menginisialisasi variabel penting, menyebabkan lingkungan eksekusi menggunakan nilai yang tidak terduga.
CWE-457 Penggunaan Variabel Yang Tidak Diinisialisasi Kode menggunakan variabel yang tidak diinisialisasi, yang mengarah ke hasil yang tidak dapat diprediksi atau tidak diinginkan.
CWE-477 Penggunaan Fungsi Usang Kode menggunakan fungsi yang tidak digunakan lagi atau usang, yang menyarankannya tidak ditinjau atau dipertahankan secara aktif.
CWE-502 Deserialisasi Data yang Tidak Dipercaya Produk mendeserialisasi data yang tidak tepercaya tanpa cukup memastikan data yang dihasilkan valid.
CWE-543 Penggunaan Pola Singleton Tanpa Sinkronisasi dalam Konteks Multithreaded Produk ini menggunakan pola singleton saat membuat sumber daya dalam lingkungan multithread tanpa sinkronisasi yang tepat.
CWE-567 Akses Tidak Disinkronkan ke Data Bersama dalam Konteks Multithreaded Produk gagal menyinkronkan dengan benar data bersama, seperti variabel statis, di seluruh utas, yang mengarah ke perilaku tak terduga.
CWE-570 Ekspresi Selalu Salah Produk berisi ekspresi yang selalu mengevaluasi ke false.
CWE-571 Ekspresi Selalu Benar Produk berisi ekspresi yang selalu bernilai benar.
CWE-606 Input yang tidak divalidasi dalam Kondisi Loop Produk tidak memeriksa input yang digunakan untuk kondisi perulangan dengan benar, yang dapat menyebabkan penolakan layanan akibat perulangan yang berlebihan.
CWE-643 Netralisasi Data yang Tidak Tepat dalam Ekspresi XPath ('Injeksi XPath') Produk ini menggunakan input eksternal untuk membangun ekspresi XPath secara dinamis untuk database XML tetapi gagal menetralisir input tersebut.
CWE-652 Netralisasi Data yang Tidak Tepat dalam Ekspresi XQuery ('Injeksi XQuery') Produk menggunakan input eksternal untuk membangun ekspresi XQuery secara dinamis tetapi gagal menetralisir input tersebut dengan benar.
CWE-662 Sinkronisasi yang Tidak Tepat Produk ini memungkinkan beberapa utas atau sistem mengakses sumber daya bersama tanpa sinkronisasi yang tepat, berpotensi menyebabkan masalah akses simultan.
CWE-665 Inisialisasi yang Tidak Tepat Produk tidak menginisialisasi atau salah menginisialisasi sumber daya, berpotensi membiarkannya dalam keadaan tidak terduga saat diakses.
CWE-667 Penguncian yang Tidak Tepat Produk tidak memperoleh atau melepaskan kunci pada sumber daya dengan benar, yang mengarah ke perubahan status yang tidak terduga.
CWE-672 Operasi pada Sumber Daya setelah Habis Masa Berlaku atau Pelepasan Produk mengakses atau beroperasi pada sumber daya setelah kedaluwarsa, dirilis, atau dicabut.
CWE-681 Konversi yang Salah antara Jenis Numerik Data dapat dihilangkan atau diterjemahkan ke dalam nilai yang tidak terduga selama konversi jenis, yang dapat berbahaya jika digunakan dalam konteks sensitif.
CWE-682 Penghitungan Salah Produk melakukan perhitungan yang menghasilkan hasil yang salah nantinya digunakan dalam keputusan kritis keamanan atau manajemen sumber daya.
CWE-732 Penetapan Izin yang Salah untuk Sumber Daya Penting Izin untuk sumber daya penting keamanan ditentukan dengan cara yang memungkinkan aktor yang tidak diinginkan untuk membaca atau memodifikasinya.
CWE-772 Rilis Sumber Daya yang Hilang setelah Masa Pakai Efektif Produk tidak merilis sumber daya setelah masa pakai efektifnya berakhir dan tidak lagi diperlukan.
CWE-775 Rilis File Descriptor atau Handle yang Hilang setelah Masa Pakai Efektif Produk gagal merilis deskriptor file atau menangani setelah tidak lagi diperlukan.
CWE-778 Pengelogan tidak mencukupi Produk gagal merekam peristiwa penting keamanan atau menghilangkan detail penting saat mencatatnya.
CWE-783 Kesalahan Logika Presedensi Operator Ekspresi menggunakan logika yang salah yang disebabkan oleh prioritas operator.
CWE-789 Alokasi Memori dengan Nilai Ukuran Berlebihan Produk mengalokasikan memori berdasarkan nilai ukuran besar yang tidak tepercaya tanpa memastikannya berada dalam batas yang diharapkan.
CWE-798 Penggunaan Kredensial yang Dikodekan secara permanen Produk ini berisi kredensial yang dikodekan secara permanen, seperti kata sandi atau kunci kriptografi.
CWE-820 Sinkronisasi Hilang Produk ini menggunakan sumber daya bersamaan tanpa mencoba menyinkronkan akses.
CWE-821 Sinkronisasi Salah Produk ini menggunakan sumber daya bersamaan tetapi tidak menyinkronkan akses dengan benar.
CWE-835 Perulangan dengan Kondisi Keluar yang Tidak Dapat Dijangkau ('Perulangan Tak Terbatas') Produk berisi perulangan dengan kondisi penghentian yang tidak dapat dicapai.
CWE-611 Pembatasan Referensi Entitas Eksternal XML yang Tidak Tepat Produk memproses dokumen XML yang berisi entitas dengan URI yang diselesaikan di luar lingkup kontrol yang dimaksudkan.
CWE-1057 Operasi Akses Data Di Luar Komponen Manajer Data yang Diharapkan Produk ini melakukan operasi akses data yang melewati komponen manajer data pusat khusus yang diperlukan oleh desain.

Langkah berikutnya