Beberapa waktu belakangan ini perbincangan hangat tentang dunia security linux tidak terlepas dari persoalan linux capabilities. Linux capabilities adalah sebuah system atau metode yang memungkinkan sebuah applikasi jalan dengan privileges root sesuai dengan keperluan. Sangat jelas bahwa tujuan dibuatnya Linux Capabilities system ini untuk keperluan agar, penggunaan hak akses setingkat dengan root bisa digunakan secara lebih efisien, dalam artian bahwa, alih-alih memberikan semua privileges root ke program tertentu, Linux Capabilities membaginya ke beberapa bagian terntentu sehingga jauh lebih secure.
Daftar dari Linux Capabilites bisa anda lihat di /usr/include/linux/capability.h, pada linux kernel 2.6.35.8, terdapat 33 Caps, penjelasan mengenai kegunaan Caps tersebut bisa anda lihat di header file yang berikan diatas.
Contoh implementasi Linux Capabilities
Seperti anda ketahui, ping adalah salah satu command yang ketika di-execute oleh user biasa akan menjalankan proses dengan uid dan gid root, ini tentu akan berimplikasi terhadap security ketika ping itu sendiri punya kelemahan, dan atau kalau anda lihai melihat bahwa ping ini juga dimanfaatkan sebagai backdoor karena punya privalge root tersebut( bisa anda lihat di last byteskrew collection sebagai contoh).
[email protected]:~$ ping -c 3 google.com PING google.com (74.125.235.18) 56(84) bytes of data. 64 bytes from 74.125.235.18: icmp_seq=1 ttl=253 time=21.7 ms 64 bytes from 74.125.235.18: icmp_seq=2 ttl=253 time=19.5 ms 64 bytes from 74.125.235.18: icmp_seq=3 ttl=253 time=21.0 ms --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 19.558/20.793/21.792/0.934 ms [email protected]:~$ stat /bin/ping File: `/bin/ping' Size: 30856 Blocks: 64 IO Block: 4096 regular file Device: 801h/2049d Inode: 262234 Links: 1 Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2011-01-12 09:43:11.000000000 +0700 Modify: 2007-12-11 00:33:50.000000000 +0700 Change: 2010-12-29 22:21:59.000000000 +0700 [email protected]:~$
Dan ketika ping kita rubah menjadi non-Set-UID program, maka:
[email protected]:/home/elz# chmod u-s /bin/ping [email protected]:~$ stat /bin/ping File: `/bin/ping' Size: 30856 Blocks: 64 IO Block: 4096 regular file Device: 801h/2049d Inode: 262234 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2011-01-12 09:48:46.000000000 +0700 Modify: 2007-12-11 00:33:50.000000000 +0700 Change: 2011-01-12 09:48:38.000000000 +0700 [email protected]:~$ ping -c 3 google.com ping: icmp open socket: Operation not permitted [email protected]:~$ strace ping google.com ... socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EPERM (Operation not permitted) ...
Ya.. Operation not permitted, ini karena ping butuh privileges root untuk mengakses RAW Socket yang dibutuhkan oleh program ping tersebut. Nah. dengan Linux capabilities, kita dengan mudah memberi kemampuan khusus hanya untuk mengakses RAW Socket tersebut, yaitu dengan memberi privileges tersebut ke program itu.
[email protected]:/home/elz# setcap cap_net_raw=ep /bin/ping [email protected]:~$ ping -c 3 google.com PING google.com (74.125.235.16) 56(84) bytes of data. 64 bytes from 74.125.235.16: icmp_seq=1 ttl=253 time=21.3 ms 64 bytes from 74.125.235.16: icmp_seq=2 ttl=253 time=21.1 ms 64 bytes from 74.125.235.16: icmp_seq=3 ttl=253 time=26.4 ms --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 21.153/22.986/26.493/2.486 ms [email protected]:~$ getcap /bin/ping /bin/ping = cap_net_raw+ep
Dengan kondisi diatas, program ping sekarang hanya memiliki privileges root dalam mengakses RAW Socket, dalam artian bahwa ping tidak bisa melakukan hak-hak istimewa seperti SETUID yang di diperlukan oleh beberapa backdoor ;).
Linux Capabilities insecurity
Tentu, seperti yang kita ketahui semua produk security tidak ada yang sempurna, begitu pun dengan Linux Caps ini. Berbagai exploit bahkan memanfaatkan Linux Caps ini untuk mendapatkan akses setingkat dengan root. Tentu anda masih ingat dengan exploit yang di develope oleh julian tinnes yang membypass mekanisme NULL Dereference exploit prevention dengan memanfaatkan applikasi PULSEAUDIO yang memiliki Caps CAP_SYS_RAWIO. Dengan kemampuan pulseaudio tersebut, attacker dengan mudah mengatur memory mapping agar teknik NULL Dereference-nya berhasil. ( Silahkan baca artikel cyberheb tentang Null Pointer Dereference untuk mengetahui trik ini lebih dalam 😀 ).
Bukan itu saja, beberapa exploit terakhir yang didevelop oleh Dan Rosenberg, seperti caps-to-root yang mengeksploitasi Phonet protocol juga memanfaatkan CAP_SYS_ADMIN untuk mendapatkan instan root privileges.
wah artikel yg bagus
nice…
nice artikel
jadi pengen nyoba
thanks