Seberapa selamat Java berbanding dengan bahasa lain?

Seperti aspek keselamatan siber yang lain, tahap keselamatan bahasa pengaturcaraan bergantung pada apa yang kita maksudkan dengan "selamat." Memang betul bahawa Java mempunyai kelemahan yang dikenal pasti lebih sedikit daripada beberapa bahasa lain yang biasa digunakan. Juga benar bahawa beberapa bahasa yang lebih baru kelihatan lebih selamat daripada Java, sekurang-kurangnya pada pandangan pertama.

Banyak lubang keselamatan yang telah dijumpai di Jawa adalah hasil dari popularitinya. Penggunaan yang meluas bermaksud bahawa ribuan pemburu bug berdedikasi untuk mencari kerentanan bahasa Java, yang memberikan Java "kelebihan" yang tidak adil dalam bidang ini. Begitu juga, keselamatan tersirat dari beberapa bahasa yang lebih baru, seperti Ruby, dapat menggambarkan penggunaan niche mereka lebih daripada integriti mereka.  

[Juga di JavaWorld: Ada beberapa tanda bahawa pemaju Java semakin baik dalam keamanan.] 

Dalam artikel ini, kita akan melihat bagaimana kedudukan bahasa pengaturcaraan yang paling biasa digunakan dari segi keselamatan. Saya akan menerangkan beberapa faktor yang menjadikan satu bahasa kurang selamat daripada yang lain, dan mengapa kelemahan yang dikenal pasti meningkat begitu banyak dalam beberapa tahun kebelakangan ini. Akhirnya, saya akan mencadangkan beberapa cara pembangun Java dapat mengurangkan kerentanan dalam kod.  

Intinya: Dari perspektif keselamatan, kelemahan yang kita ketahui lebih baik daripada yang tidak kita ketahui. 

Seberapa selamat Java?

Penyelidikan terkini mengenai kerentanan bahasa pengaturcaraan yang paling sering digunakan berasal dari WhiteSource, platform keselamatan terbuka dan pematuhan lesen. WhiteSource melihat tujuh bahasa pengaturcaraan sumber terbuka yang paling popular: C, Java, JavaScript, Python, Ruby, PHP, dan C ++. Penganalisis kemudian menggunakan pelbagai sumber untuk menilai bahasa mengikut bilangan kelemahan mereka yang dikenal pasti.

Mengapa sumber terbuka?

Keputusan untuk menilai bahasa sumber terbuka bukanlah kebetulan. Banyak bahasa proprietari - termasuk pelaksanaan bahasa sumber terbuka milik proprietari - jauh lebih telus dalam hal kelemahan. Tidak masuk akal bagi syarikat swasta untuk menerbitkan kelemahan keselamatan dalam produknya, jadi kami tetap dalam kegelapan mengenai tahap kerentanan bahasa tersebut. Kekurangan yang kita ketahui jauh lebih mudah dikendalikan daripada yang tidak kita ketahui.

Berdasarkan kajian WhiteSource, bahasa pengaturcaraan yang paling rentan sejauh ini adalah C, dengan 47% dari semua kelemahan yang dilaporkan . Peringkat itu tidak akan mengejutkan pengaturcara yang berpengalaman, tetapi hasil lain mungkin. PHP berada pada detik yang jauh, dengan 17%, diikuti oleh Java dengan 12%, dan JavaScript mengungguli empat teratas dengan 11%. Mengikuti "pemimpin" ini adalah Python, C ++, dan Ruby. 

Memahami keselamatan bahasa pengaturcaraan

Seterusnya, kita harus bertanya mengapa beberapa bahasa pengaturcaraan lebih rentan daripada yang lain. Berdasarkan kajian yang saya sebutkan, anda mungkin menyimpulkan bahawa C merupakan ancaman keselamatan yang sangat besar. Tetapi pertimbangkan bahawa C telah digunakan lebih lama daripada bahasa lain dalam senarai. Seperti yang dinyatakan oleh Stephen Turner, dalam Journal of Technology Research, "bahasa pengaturcaraan adalah seperti genetik, kerana terdapat beberapa nenek moyang dengan sifat umum yang telah berkembang." 

Sebagai bahasa tertua dalam senarai, C dikembangkan dalam lingkungan ancaman yang sama sekali berbeza dari bahasa yang lebih baru seperti Java dan Ruby. Seperti yang ditunjukkan oleh WhiteSource, usia relatif C bermaksud ia mempunyai jumlah kod bertulis yang lebih tinggi. C juga merupakan salah satu bahasa yang digunakan untuk infrastruktur utama seperti OpenSSL dan kernel Linux. Gabungan isi padu dan sentraliti boleh menyebabkan kerentanan sumber terbuka yang diketahui lebih tinggi.

Walaupun Java berkinerja baik dalam analisis ini, penulis menyoroti dua jenis kerentanan yang mempengaruhi Java. Pertama, mereka perhatikan bahawa US-CERT telah lama memberi amaran kepada kami mengenai kerentanan Java terhadap serangan suntikan log, terutama melalui penyemak imbas web. Serangan seperti itu dapat dielakkan melalui pengesahan atau pengesahan input yang dihantar, tetapi pembangun sering tidak sabar untuk mengesahkan input secara menyeluruh kerana bimbang ini akan menjadikan aplikasi mereka kurang mesra pengguna. 

Kedua, Java sangat rentan terhadap eksploitasi kepercayaan yang mengikuti kerentanan kawalan akses. Walaupun proses pensijilan telah meningkat sejak tahun 2013, banyak pembangun bergantung pada sijil dari pihak berkuasa yang kurang dipercayai. Adalah mungkin untuk mendapatkan sijil yang kurang ketat daripada yang sepatutnya. US-CERT, yang dipetik dalam Journal of Technology Research, memberi amaran mengenai pintu terbuka ini untuk penyerang jarak jauh yang melaksanakan kod sewenang-wenangnya.

Kerentanan Java yang rendah menawarkan kontras yang menarik dengan C. Java dikembangkan lama setelah C, di lingkungan di mana kesadaran ancaman jauh lebih tinggi, jadi tidak mengejutkan bahawa Java jauh lebih aman. Demikian juga, sementara Ruby tampak lebih aman daripada Java, ini dapat dijelaskan oleh pemuda relatif bahasa dan penerapannya yang khusus.

Kerentanan keselamatan semakin meningkat — semacam

WhiteSource melaporkan "peningkatan ketara dalam jumlah kelemahan keselamatan sumber terbuka yang diketahui di semua bahasa dalam dua tahun terakhir." Walaupun jumlah kerentanan di Jawa secara keseluruhan menurun sejak 2015, lonjakan jumlah kerentanan yang lebih baru memerlukan penjelasan. Kita dapat mengaitkan kenaikan ini kepada dua faktor.  

Pertama, terdapat karunia bug, tren yang agak baru di mana ribuan profesional teknologi memilih bahasa untuk mencari kelemahan. Ini menyumbang sekurang-kurangnya beberapa peningkatan kelemahan keselamatan sumber terbuka. Selain itu, secara amnya diandaikan bahawa pemburu ancaman mengimbas semua bahasa dengan sama rata, tetapi itu tidak benar. Sebagai salah satu bahasa yang paling sering digunakan dalam pengembangan web, Java adalah sasaran penting bagi pemburu ancaman. Dalam konteks ini, kedudukan tempat ketiga Java untuk kerentanan yang diketahui mulai kelihatan sangat rendah.

Sistem perisian juga merupakan susunan besar yang lebih rumit daripada 10 tahun yang lalu, yang merupakan faktor utama lain dalam peningkatan jumlah kerentanan yang terdapat di Jawa dan bahasa lain. Di dunia di mana aplikasi telefon pintar boleh menjadi sumber jangkitan, dan di mana setiap syarikat mesti mempunyai laman web yang menggunakan JavaScript, tidak hairanlah jumlah kerentanan laman web telah meningkat dengan pesat. Tambahkan ini kekurangan profesional keselamatan siber jangka panjang, dan perkara-perkara mulai kelihatan suram untuk masa depan keselamatan siber. 

Cara mengelakkan kerentanan keselamatan Java

Membaca penyelidikan mengenai kelemahan keselamatan mungkin membuat jantung anda berdegup lebih cepat, tetapi jangan takut: Pembangun Java berada dalam posisi yang kuat ketika datang ke keamanan aplikasi. Dengan beribu-ribu profesional yang mengimbas kerentanan bahasa, ada kemungkinan kita tahu mengenai sebilangan besar kelemahan dalam bahasa tersebut. Pengetahuan itu adalah kekuatan.

Artikel JavaWorld baru-baru ini menawarkan 13 peraturan untuk mengembangkan aplikasi Java yang aman. Anda juga dapat menemukan banyak artikel dan kertas putih tentang penerapan Java dengan aman di lingkungan tertentu, seperti keamanan cloud untuk Java dan keamanan aplikasi web untuk Java. Mari kita pertimbangkan beberapa cara untuk mengurangkan kerentanan yang mungkin anda abaikan.

Pindah ke aliran kerja DevSecOps

Salah satu cara untuk mengurangkan kerentanan dalam kod Java adalah berpindah ke aliran kerja DevSecOps. Aliran kerja jenis ini menjadikan keselamatan menjadi perhatian utama pada semua peringkat proses pembangunan. Sebagai pembangun, kita sering lupa bahawa perisian kita digunakan (dan kadang-kadang disesuaikan) oleh semua bahagian organisasi yang kita kerjakan. Tidak ada gunanya mengeraskan aplikasi web anda daripada mengganggu jika pasukan pemasaran anda bertekad untuk melemahkan usaha anda. Sertakan semua pasukan anda dalam proses pembangunan, dan pastikan keselamatan adalah pertimbangan untuk setiap aspek projek.

Nilai keselamatan aliran kerja

Anda juga harus melihat keselamatan aliran kerja anda sendiri. Aplikasi web anda mungkin selamat, tetapi salah satu sumber kerentanan yang paling cepat berkembang untuk pembangun adalah sistem pembangunan itu sendiri. Sekiranya sistem pembangunan anda diretas, ia akan menjadi portal untuk memasukkan kod jahat ke dalam perisian anda. Untuk mengelakkan ini, pastikan anda menggunakan VPN untuk menyulitkan semua komunikasi dalaman anda. Juga, pastikan untuk melaksanakan penyimpanan data yang dienkripsi.

Kesimpulannya

Walaupun penyelidikan mendapati bahawa Java kurang selamat daripada beberapa bahasa lain, pemaju harus mengambil penemuan itu dengan sedikit garam. Bahasa yang lebih baru dan jarang digunakan mungkin kelihatan lebih selamat, tetapi itu mungkin kerana banyak kelemahan mereka belum ditemui — atau lebih buruk lagi, mereka telah dijumpai tetapi tidak dilaporkan.

Walaupun anda harus mengetahui risikonya dan mengambil langkah berjaga-jaga yang sewajarnya untuk mengamankan aplikasi Java anda, jangan terlalu risau tentang kedudukannya. Sebagai pemaju Java, anda sekurang-kurangnya tahu apa yang anda hadapi.

Kisah ini, "Seberapa selamat Java dibandingkan dengan bahasa lain?" pada asalnya diterbitkan oleh JavaWorld.