Seberapa amankah Java dibandingkan dengan bahasa lain?

Seperti aspek keamanan siber lainnya, tingkat keamanan bahasa pemrograman bergantung pada apa yang kami maksud dengan "aman". Memang benar bahwa Java memiliki lebih sedikit kerentanan yang teridentifikasi daripada beberapa bahasa lain yang umum digunakan. Benar juga bahwa beberapa bahasa baru tampak lebih aman daripada Java, setidaknya pada pandangan pertama.

Banyak lubang keamanan yang ditemukan di Jawa adalah hasil dari popularitasnya. Penggunaan yang meluas berarti bahwa ribuan pemburu bug berdedikasi untuk menemukan kerentanan bahasa Java, yang memberi Java "keuntungan" yang tidak adil di bidang ini. Demikian pula, keamanan tersirat dari beberapa bahasa baru, seperti Ruby, dapat mencerminkan penggunaan niche mereka lebih dari integritasnya.  

[Juga di JavaWorld: Ada beberapa tanda bahwa developer Java semakin baik dalam hal keamanan.] 

Pada artikel ini, kita akan melihat bagaimana peringkat bahasa pemrograman yang paling umum digunakan dalam hal keamanan. Saya akan menjelaskan beberapa faktor yang membuat satu bahasa kurang aman dibandingkan bahasa lainnya, dan mengapa kerentanan yang teridentifikasi telah meningkat pesat dalam beberapa tahun terakhir. Terakhir, saya akan menyarankan beberapa cara pengembang Java dapat mengurangi kerentanan dalam kode.  

Intinya: Dari perspektif keamanan, kerentanan yang kita ketahui lebih baik daripada yang tidak kita ketahui. 

Seberapa amankah Java?

Penelitian terbaru tentang kerentanan bahasa pemrograman yang paling umum digunakan berasal dari WhiteSource, platform keamanan dan kepatuhan lisensi sumber terbuka. WhiteSource melihat tujuh bahasa pemrograman sumber terbuka paling populer: C, Java, JavaScript, Python, Ruby, PHP, dan C ++. Analis kemudian menggunakan berbagai sumber untuk menentukan peringkat bahasa berdasarkan jumlah kerentanan yang teridentifikasi.

Mengapa open source?

Keputusan untuk menentukan peringkat bahasa open source bukanlah kebetulan. Banyak bahasa berpemilik — termasuk implementasi berpemilik dari bahasa sumber terbuka — jauh kurang transparan dalam hal kerentanan. Tidak masuk akal bisnis bagi perusahaan swasta untuk memublikasikan kelemahan keamanan dalam produknya, jadi kami sebagian besar tidak mengetahui tingkat kerentanan bahasa tersebut. Cacat yang kita ketahui jauh lebih bisa ditangani daripada yang tidak kita ketahui.

Berdasarkan studi WhiteSource, bahasa pemrograman yang paling rentan sejauh ini adalah C, dengan 47% dari semua kerentanan yang dilaporkan . Peringkat itu tidak akan mengejutkan pemrogram berpengalaman, tetapi hasil lain mungkin. PHP berada di urutan kedua, dengan 17%, diikuti oleh Java dengan 12%, dan JavaScript membulatkan empat besar dengan 11%. Mengikuti "pemimpin" ini adalah Python, C ++, dan Ruby. 

Memahami keamanan bahasa pemrograman

Selanjutnya, kita harus bertanya mengapa beberapa bahasa pemrograman lebih rentan daripada yang lain. Berdasarkan penelitian yang saya kutip, Anda mungkin menyimpulkan bahwa C mewakili ancaman keamanan yang sangat besar. Tetapi pertimbangkan bahwa C telah digunakan lebih lama daripada bahasa lain di daftar. Seperti yang dikatakan Stephen Turner, dalam Journal of Technology Research, "bahasa pemrograman itu seperti genetika, karena ada beberapa nenek moyang dengan ciri-ciri umum yang telah berkembang biak." 

Sebagai bahasa tertua dalam daftar, C dikembangkan di lingkungan ancaman yang sangat berbeda dari bahasa yang relatif lebih baru seperti Java dan Ruby. Seperti yang ditunjukkan oleh WhiteSource, usia relatif C berarti ia memiliki volume kode tertulis yang lebih tinggi. C juga merupakan salah satu bahasa yang digunakan untuk infrastruktur utama seperti OpenSSL dan kernel Linux. Kombinasi volume dan sentralitas tersebut dapat menyebabkan lebih banyak kerentanan sumber terbuka yang diketahui.

Meskipun Java bekerja dengan baik dalam analisis ini, penulis menyoroti dua jenis kerentanan yang terutama berdampak pada Java. Pertama, mereka mencatat bahwa US-CERT telah lama memperingatkan kita tentang kerentanan Java terhadap serangan injeksi log, terutama melalui browser web. Serangan semacam itu dapat dicegah melalui validasi atau autentikasi input yang dikirimkan, tetapi pengembang sering kali enggan memvalidasi input secara menyeluruh karena khawatir hal ini dapat membuat aplikasi mereka menjadi kurang ramah pengguna. 

Kedua, Java sangat rentan terhadap eksploitasi kepercayaan yang mengikuti kerentanan kontrol akses. Meskipun proses sertifikasi telah meningkat sejak 2013, banyak pengembang mengandalkan sertifikat dari otoritas yang kurang dapat diandalkan. Dimungkinkan untuk mendapatkan sertifikat yang kurang ketat dari yang seharusnya. US-CERT, dikutip dalam Journal of Technology Research, memperingatkan tentang pintu terbuka ini bagi penyerang jarak jauh yang mengeksekusi kode arbitrer.

Kerentanan Java yang relatif rendah menawarkan kontras yang menarik dengan C. Java dikembangkan lama setelah C, di lingkungan di mana kesadaran akan ancaman jauh lebih tinggi, jadi tidak mengherankan jika Java jauh lebih aman. Demikian pula, meskipun Ruby tampaknya lebih aman daripada Java, hal ini dapat dijelaskan oleh bahasa yang relatif muda dan aplikasinya yang khusus.

Kerentanan keamanan sedang meningkat — semacam itu

WhiteSource melaporkan "peningkatan substansial dalam jumlah kerentanan keamanan open source yang diketahui di semua bahasa selama dua tahun terakhir." Meskipun jumlah kerentanan secara keseluruhan di Jawa terus menurun sejak 2015, lonjakan jumlah kerentanan yang lebih baru memerlukan penjelasan. Kita dapat menghubungkan peningkatan ini dengan dua faktor.  

Pertama, ada bug bounty, sebuah tren yang relatif baru di mana ribuan ahli teknologi memilih suatu bahasa untuk menemukan kerentanan. Ini menjelaskan setidaknya beberapa peningkatan kerentanan keamanan open source. Selain itu, umumnya diasumsikan bahwa pemburu ancaman memindai semua bahasa secara merata, tetapi itu tidak benar. Sebagai salah satu bahasa yang paling umum digunakan dalam pengembangan web, Java merupakan target penting bagi pemburu ancaman. Dalam konteks ini, peringkat ketiga Java untuk kerentanan yang diketahui mulai terlihat sangat rendah.

Sistem perangkat lunak juga memiliki urutan yang jauh lebih rumit daripada 10 tahun yang lalu, yang merupakan faktor utama lain dalam meningkatnya jumlah kerentanan yang ditemukan di Java dan bahasa lain. Di dunia di mana aplikasi ponsel cerdas dapat menjadi sumber infeksi, dan di mana setiap perusahaan harus memiliki situs web yang mendukung JavaScript, tidak mengherankan jika jumlah kerentanan situs web telah meningkat secara eksponensial. Ditambah dengan kekurangan jangka panjang profesional keamanan siber, dan hal-hal mulai terlihat suram untuk masa depan keamanan siber. 

Bagaimana menghindari kerentanan keamanan Java

Membaca penelitian tentang kerentanan keamanan mungkin membuat jantung Anda berdebar lebih cepat, tetapi jangan takut: Pengembang Java berada dalam posisi yang kuat dalam hal keamanan aplikasi. Dengan ribuan profesional yang memindai bahasa untuk mencari kerentanan, ada kemungkinan besar kita tahu tentang proporsi yang baik dari kerentanan dalam bahasa tersebut. Pengetahuan itu adalah kekuatan.

Artikel JavaWorld terbaru menawarkan 13 aturan untuk mengembangkan aplikasi Java yang aman. Anda juga dapat menemukan banyak artikel dan kertas putih tentang penerapan Java secara aman di lingkungan tertentu, seperti keamanan cloud untuk Java dan keamanan aplikasi web untuk Java. Mari pertimbangkan beberapa cara untuk mengurangi kerentanan yang mungkin Anda abaikan.

Pindah ke alur kerja DevSecOps

Salah satu cara untuk mengurangi kerentanan dalam kode Java adalah dengan berpindah ke alur kerja DevSecOps. Jenis alur kerja ini menjadikan keamanan sebagai perhatian utama di semua tahapan proses pengembangan. Sebagai pengembang, kita sering lupa bahwa perangkat lunak kita digunakan (dan terkadang disesuaikan) oleh semua bagian organisasi tempat kita bekerja. Tidak ada gunanya memperkuat aplikasi web Anda dari gangguan jika tim pemasaran Anda bertekad untuk merusak upaya Anda. Libatkan semua tim Anda dalam proses pengembangan, dan pastikan bahwa keamanan menjadi pertimbangan untuk setiap aspek proyek.

Evaluasi keamanan alur kerja

Anda juga harus memperhatikan keamanan alur kerja Anda sendiri. Aplikasi web Anda mungkin aman dengan sendirinya, tetapi salah satu sumber kerentanan yang tumbuh paling cepat untuk pengembang adalah sistem pengembangan itu sendiri. Jika sistem pengembangan Anda diretas, itu menjadi portal untuk memasukkan kode berbahaya ke perangkat lunak Anda. Untuk menghindari ini, pastikan Anda menggunakan VPN untuk mengenkripsi semua komunikasi internal Anda. Selain itu, pastikan untuk menerapkan penyimpanan data terenkripsi.

Kesimpulan

Meskipun penelitian menemukan bahwa Java kurang aman dibandingkan beberapa bahasa lain, pengembang harus mengambil temuan itu dengan sedikit garam. Bahasa yang lebih baru dan jarang digunakan mungkin tampak lebih aman, tetapi itu mungkin karena banyak kerentanannya yang belum ditemukan — atau lebih buruk lagi, mereka telah ditemukan tetapi tidak dilaporkan.

Meskipun Anda harus mengetahui risikonya dan mengambil semua tindakan pencegahan yang wajar untuk mengamankan aplikasi Java Anda, jangan terlalu khawatir tentang peringkatnya. Sebagai pengembang Java, Anda setidaknya tahu apa yang Anda hadapi.

Cerita ini, "Seberapa amankah Java dibandingkan dengan bahasa lain?" awalnya diterbitkan oleh JavaWorld.