Alibaba Cloud Computing Co., Ltd. baru-baru ini menemukan kerentanan eksekusi kode jarak jauh (RCE) di Apache Log4j 2 dan melaporkannya kepada Apache. Topik ini menjelaskan dampak dari kerentanan tersebut serta menyediakan solusi untuk mengatasinya.
Dampak
Layanan yang terpengaruh dalam kluster E-MapReduce (EMR) mencakup Hive, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin. Spark dan Zeppelin terpengaruh karena memiliki dependensi pada Hive.
Solusi
Ganti file JAR Log4j 2 kluster EMR Anda dengan versi 2.17.2. Selain itu, atur parameter log4j2.formatMsgNoLookups untuk layanan Hive dan Spark menjadi true untuk menonaktifkan fitur pencarian JNDI. Untuk informasi lebih lanjut tentang prosedur, lihat Prosedur.
Perhatikan hal-hal berikut terkait solusi ini:
Solusi ini berlaku untuk EMR V3.38.2 dan versi minor sebelumnya, EMR V5.4.2 dan versi minor sebelumnya, serta EMR V4.X. Pada versi minor setelah EMR V3.38.2 dan versi minor setelah V5.4.2, kerentanan telah diperbaiki, sehingga tidak diperlukan operasi perbaikan tambahan.
Setelah menerapkan solusi ini, Anda harus memulai ulang layanan yang terpengaruh di kluster Anda.
Skrip yang digunakan untuk memperbaiki kerentanan tidak berdampak pada layanan online. Namun, kami tetap menyarankan Anda menjalankan skrip selama jam-jam sepi karena Anda harus memulai ulang layanan terkait setelah menjalankan skrip.
Prosedur
Perbaiki kerentanan untuk kluster EMR
Unduh paket patch patches-log4j.tar.gz.
Masuk ke node master kluster EMR Anda dan letakkan paket yang diunduh di Langkah 1 di direktori home pengguna
emr-useratauhadoop.Jalankan perintah berikut untuk beralih ke pengguna
emr-useratauhadoopdan dekompresi paket:Kluster DataLake, Dataflow, OLAP, DataServing, atau kluster kustom
su emr-user tar zxf patches-log4j.tar.gzKluster lainnya
su hadoop tar zxf patches-log4j.tar.gz
Jalankan perintah berikut untuk membuka file hosts di direktori patches. Kemudian tambahkan nama host semua node di kluster, seperti emr-header-1 dan emr-worker-1, ke file hosts. Masukkan satu nama host di setiap baris.
cd patches vim hostsContoh isi file:
emr-header-1 emr-worker-1 emr-worker-2PentingUntuk kluster EMR V3.41 atau versi minor lebih baru, atau kluster EMR V5.7.0 atau versi minor lebih baru, format nama host node berbeda. Contoh isi file:
core-1-1 core-1-2 task-1-1 task-1-2Jalankan skrip fix.sh untuk memperbaiki kerentanan:
./fix.shSetelah skrip dijalankan, informasi berikut akan dikembalikan:
### NOTICE: YOU CAN RESTORE THIS PATCH BY RUN RESTORE SCRIPT ABOVE $> sh ./restore.sh 20211213001755 ### DONEJika Anda ingin melakukan rollback, jalankan perintah berikut:
./restore.sh 20211213001755CatatanUntuk pekerjaan yang sedang berjalan di YARN, seperti pekerjaan Spark Streaming atau Flink, Anda harus melakukan restart bergulir pada YARN NodeManager setelah pekerjaan dihentikan.
Mulai ulang layanan.
Mulai ulang layanan yang terpengaruh, termasuk Hive, HDFS, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin.
Sebagai contoh, pilih di pojok kanan atas halaman layanan Hive untuk memulai ulang layanan Hive.
Perbaiki kerentanan untuk kluster gateway
Kluster gateway tidak mendukung masuk tanpa kata sandi dalam mode SSH. Oleh karena itu, jika Anda menggunakan kluster gateway, Anda harus mengunggah paket patch secara manual ke setiap node kluster gateway dan melakukan operasi perbaikan di setiap node.
Anda hanya perlu memasukkan
hostnamedari node eksekusi saat ini ke file hosts.Kluster gateway tidak berisi layanan. Anda tidak perlu memulai ulang layanan setelah mengunggah paket patch.
Perbaiki kerentanan saat membuat kluster atau memperluas kluster yang ada
Saat membuat kluster EMR, Anda dapat menambahkan tindakan bootstrap di konsol EMR untuk memperbaiki kerentanan. Saat memperluas kluster yang ada, sistem secara otomatis memperbaiki kerentanan. Saat membuat kluster EMR, lakukan langkah-langkah berikut:
Unduh paket patches-log4j.tar.gz dan file skrip bootstrap_log4j.sh, lalu unggah ke jalur Object Storage Service (OSS).
Dalam contoh ini, paket dan file skrip diunggah ke oss://<bucket-name>/path/to/.
Tambahkan tindakan bootstrap di konsol EMR. Untuk informasi lebih lanjut, lihat Gunakan tindakan bootstrap untuk mengeksekusi skrip.
Di kotak dialog Add Bootstrap Actions, konfigurasikan parameter.
Parameter
Deskripsi
Name
Nama tindakan bootstrap yang ingin Anda tambahkan. Sebagai contoh, Anda dapat mengatur parameter ini menjadi fixlog4jvulnerability.
Script Address
Jalur OSS tempat file skrip berada.
Anda harus menentukan parameter ini dalam format oss://**/*.sh. Dalam contoh ini, jalurnya adalah oss://<bucket-name>/path/to/bootstrap_log4j.sh.
Parameter
Parameter skrip tindakan bootstrap. Parameter ini digunakan untuk menentukan nilai variabel yang dirujuk dalam skrip.
Dalam contoh ini, parameternya adalah oss://<bucket-name>/path/to/patches-log4j.tar.gz.
Execution Scope
Pilih Cluster.
Execution Time
Pilih After Component Startup.
Execution Failure Policy
Klik Proceed.
Setelah membuat kluster, mulai ulang layanan HDFS, Hive, Presto, Impala, Druid, Flink, Solr, Ranger, Storm, Oozie, Spark, dan Zeppelin. Jika Anda memperluas kluster, Anda hanya perlu memulai ulang layanan terkait yang diterapkan pada node yang baru ditambahkan.