Aplikasi
Kami memiliki aplikasi Java kecil yang menggunakan beberapa rute Camel untuk mengambil file yang diunggah dari server web, memprosesnya dan mengirimkan beberapa email dengan hasilnya.
Server tempat aplikasi ini dijalankan telah didekomisi ulang. Untuk saat ini kita harus menjalankannya pada perangkat yang kurang kuat, karena saya tidak dapat meyakinkan admin untuk menginstal JRE di server web (yang sebenarnya merupakan server multi-tujuan).
Ketakutan
Saya sendiri seorang Java Application Engineer, saya menulis kode JEE untuk mencari nafkah, menangani transaksi B2B senilai puluhan ribu € uro per minggu. Tetapi saya memiliki masalah menemukan sumber yang dapat dipercaya yang menyangkal mitos bahwa java tidak aman per se.
Dua argumen utama admin terhadap pemasangan JRE:
- Aplikasi Java memakan semua RAM saya
- Java penuh dengan kerentanan
Kebenaran?
Ketika datang ke aplikasi java memakan ram. Yah ... Saya akan mengatakan kita harus menetapkan nilai yang tepat untuk Xmx. Selesai
Sekarang ada banyak sumber berbicara tentang banyak kerentanan di Jawa. Sumber-sumber ini sebagian besar ditujukan untuk pengguna akhir yang menjalankan Sistem operasi tertentu dari sebuah perusahaan di Redmond / AS. AFAIK mungkin benar untuk versi Java Browser Plugin yang belum dituntaskan yang dikonfigurasi untuk menjalankan semua applet secara otomatis, bahwa ada peluang yang cukup besar untuk menjadi korban drive oleh infeksi. Seperti halnya ada risiko tertular penyakit menular seksual ketika berhubungan seks tanpa kondom dengan eveyone di kereta Anda saat berangkat kerja.
Tetapi saya tidak dapat menemukan siapa pun di dunia interwebz yang berbicara tentang aplikasi server atau JRE yang berjalan tanpa kepala. Itu semua hal lain.
Atau saya kehilangan sesuatu di sini?
[sunting 2014-08-28] klarifikasi: Saya hanya peduli tentang Java di server. Saya tidak peduli tentang masalah dengan Plugin Java dan / atau perangkat lunak spesifik yang dikembangkan di java.
Jawaban:
Permukaan keamanan tambahan yang dimasukkan java ke lingkungan Anda kompleks, dan penting untuk tidak mengabaikannya atau mencoba menyederhanakannya.
Pertama, ada catatan mengerikan yang dimiliki JRE karena memiliki bug keamanan. Sulit untuk menunjukkan yang spesifik, dan ini adalah bagian yang menakutkan - bug sangat rentan tidak ditentukan dengan vektor yang tidak ditentukan.
Ketika saya, sebagai konsultan keamanan, membaca klausa seperti "memungkinkan penyerang jarak jauh" tanpa kualifikasi lebih lanjut tentang maknanya, saya melihat bahwa itu bisa sangat berarti bahwa parameter tertentu yang masuk ke fungsi tertentu dapat memicu kondisi rentan, bahkan jika Anda hanya menjalankan kode yang Anda tulis. Dan, karena tidak ditentukan, Anda tidak tahu apakah Anda terpengaruh.
Lebih baik lagi, JRE kanonik yang diterbitkan oleh Oracle memiliki siklus pembaruan triwulanan untuk pembaruan kritis, termasuk hampir semua pembaruan keamanan. Mereka telah menciptakan patch siklus sebanyak 11 kali dalam empat tahun terakhir. Ini berarti bahwa ada kemungkinan Anda mungkin rentan terhadap bug keamanan hingga tiga bulan setelah dilaporkan sebelum Anda memiliki cara untuk memperbaikinya.
Ada masalah lain dengan java yang tidak akan saya bahas di sini, tapi sungguh, sepertinya ada kekhawatiran yang dapat dibenarkan, terutama untuk server multi-tujuan. Jika Anda harus menjalankan hal-hal seperti itu, Anda setidaknya harus membuat VM tujuan tunggal dan mengisolasinya dari hal-hal lain.
Secara khusus, jika ada remote di JRE yang memungkinkan penyerang mendapatkan RCE, dan satu lagi di PHP yang melakukan hal yang sama, dan yang lain di Ruby yang melakukan hal yang sama lagi, Anda harus menambal ketiganya. Ketiganya tampaknya agak mungkin, karena hal-hal ini berjalan, dan penyerang harus memilih mana yang paling nyaman dan kemudian memiliki seluruh server. Itu sebabnya kita harus menggunakan VM untuk memisahkan perangkat lunak, terutama perangkat lunak seperti kerangka kerja bahasa yang dikelola, dan terutama yang menggabungkan patch keamanan hanya empat kali setahun dan merupakan hak milik vendor yang menegaskan dalam menghadapi semua bukti bahwa mereka adalah teladan dari keamanan.
Untuk memperbarui, berikut adalah beberapa CVE yang saya pilih dari pencarian CVE terkait ChrisS, dengan cara demonstrasi.
Dan favorit saya, sejak saya di sana:
Ngomong-ngomong, itu hanya contoh kecil.
sumber
Alternatif untuk menggunakan RAM adalah membuang-buang RAM. Anda tidak dapat menyimpannya untuk nanti.
Itu tidak terlalu penting karena Anda tidak akan mengekspos JVM ke dunia. Saya kira Anda tidak akan menjalankan program yang bermusuhan, dan jika Anda melakukannya, Java lebih aman daripada kebanyakan bahasa lainnya. Yang penting adalah apakah aplikasi Anda memiliki kerentanan.
sumber
Pekerjakan perusahaan untuk melakukan analisis statis pada program Anda. Veracode, misalnya, adalah perusahaan yang saya gunakan di masa lalu untuk mengaudit keamanan kode program Java, khususnya.
Tagihkan kode biaya tim admin Anda, tentu saja.
sumber
Jelaskan bahwa semua bahasa lain (atau mesin virtual) dapat dibuat tidak aman oleh kode yang digunakan untuk mereka, seperti halnya dengan Java. Jika menurutnya platform lain secara inheren aman (atau lebih aman daripada Java) tanpa menangani keamanan dengan benar, maka ia adalah delusi.
Perusahaan Anda jelas berinvestasi untuk mempekerjakan pengembang Java, mengapa sysadmin menolak untuk mendukung teknologi yang perusahaan memutuskan untuk gunakan?
Saya akan membalik pertanyaan dan bertanya kepadanya apa alternatif yang ia usulkan dan bagaimana mereka lebih aman daripada Server JRE terbaru yang tersedia, dalam istilah yang sangat spesifik. Sementara itu, berusahalah untuk menunjukkan Anda memahami teknologi Anda, permukaan serangan yang mungkin dan bahwa Anda telah bekerja untuk menguranginya (mis. Kerangka kerja yang tidak perlu, kode pihak ketiga, dll). Sudahkah kode Anda diverifikasi, cari kerentanan yang dipublikasikan untuk kerangka kerja yang Anda andalkan dalam X tahun terakhir, bandingkan dengan bahasa / kerangka kerja lain (pastikan untuk menyertakan pangsa pasar juga, kerangka kerja yang tidak jelas tanpa kerentanan yang dipublikasikan tidak berarti apa-apa).
Kami tidak mungkin tahu bagaimana keseluruhan konversi antara kalian berdua terjadi tetapi jika itu adalah dua argumennya, saya yakin Anda berurusan dengan administrator sistem junior. Apakah dia memiliki pengalaman dengan server aplikasi Java? Mungkin dia tidak nyaman dengan teknologi dan takut untuk memasukkan sesuatu ke dalam produksi tanpa benar-benar memahaminya (sikap sysadmin yang baik kemudian).
sumber