Mengetahui Resiko Keamanan Sebuah Server
Tulisan ini sebenarnya saya ambil di Jasakom, namun gak ada salahnya saya posting disini juga, ya minimal bisa jadi arsip pribadi gitu.... he...he....he....
Tidak ada maksud lain bagi saya, kecuali membagi sedikit pengetahuan yang saya punya kepada orang lain.
Jika diamati berita seputar keamanan internet, maka banyak sekali informasi tentang bug/hole ataupun exploit yang beredar di Internet. Semuanya hadir dengan informasi yang cukup detail dan membuat SysAdmin harus terus berlomba dengan para Cracker/Hacker dalam mengamankan server yang dikelola.
Jika diamati banyak sekali cara yang dilakukan oleh cracker untuk masuk ke sebuah komputer. Cara yang tercepat dan paling mudah serta yang dulu paling sering dilakukan adalah dengan menggunakan exploit yang sudah tersedia di internet. Instant sekali. Kita cukup cari target, scanning, compile exploit, execute exploit dan hapalkan dasar-dasar perintah OS yang digunakan, so anda sudah memiliki server tersebut.
Secara garis besar exploit yang dipergunakan oleh cracker untuk masuk ke sebuah server dapat dibagi dalam dua bagian yaitu :
1. Lokal Exploit
Yang dimaksud dengan lokal exploit adalah exploit yang hanya dapat diexecute pada komputer itu sendiri. Artinya exploit ini tidak dapat diexecute dari komputer pribadi untuk memasuki komputer lain. Biasanya lokal exploit diexecute dan akan bisa menguasai sistem dengan memanfaatkan kelemahan yang ada pada sistem operasi ataupun pada aplikasi yang dijalankan oleh server.
2. Remote Exploit
Remote exploit adalah exploit yang dapat diexecute dari jarak jauh. Artinya dengan menggunakan exploit ini, maka anda dapat masuk ke komputer lain melalui komputer pribadi dengan memanfaatkan kelemahan aplikasi yang berjalan di komputer lain tersebut. Bagi sebagian orang lebih menyenangkan untuk menggunakan remote exploit daripada lokal exploit karena biasanya remote exploit juga bisa menjadi lokal exploit dan tidak berlaku sebaliknya.
Terlepas dari itu semua, sebenarnya ada resiko keamanan yang tetap dimiliki sebuah komputer ketika telah berisikan Sistem Operasi beserta aplikasi yang digunakan. Sebagai contoh, ketika kita telah menginstall sebuah server dengan Sistem Operasi Linux Redhat 7.0 dengan berbagai aplikasi misalkan apache web server, database mysql dan PHP. Maka Anda sebagai SysAdmin secara ’sadar’ telah membuka diri (komputer server) kepada orang orang lain agar dapat berkomunikasi dengannya. Ada satu pameo yang saya ingat, bahwa tidak ada satupun komputer yang aman ketika sudah terkoneksi dengan sebuah jaringan. Apalagi jika jaringannya adalah internet!. Dan ini juga berlaku untuk server yang telah kita koneksikan ke internet.
Dari contoh di atas, ada beberapa hal yang menjadi catatan penting bagi saya dan (mungkin) ini akan menjadi pedoman penting bagi SysAdmin untuk tahu tingkat resiko keamanan pada server yang ia kelola. Misalkan saja informasi server yang dikelola seperti tercantum di bawah ini :
Sistem Operasi yang digunakan adalah Redhat Linux 7.0
Aplikasi Web Server yang digunakan adalah Apache Web Server (Misalkan saja versi 1.3.20)
Database Mysql versi 3.2.23
PHP Engine versi 4.1.x
Aplikasi web base yang menggunakan PHP dan MySQL.
Jika digambarkan dalam bentuk diagram pohon kurang lebihnya adalah sebagai berikut :
Sistem Operasi [Level 1] :
+ Apache [Level 2]
+ Engine PHP [Level 3]
+ Aplikasi Web Based/Scripting PHP [Level 4]
+ MySQL [Level 2]
Dari informasi spesifikasi diatas maka dapat diketahui tingkat keamanan komputer tersebut :
1. Keamanan pada Sistem Operasi (Versi Kernel yang digunakan) -Tingkat Keamanan Level 1-
Jantung dari sistem operasi linux adalah kernel. Kesalahan pemrograman yang terjadi pada kernel akan berakibat fatal dengan tidak berjalannya sistem secara maksimal. Untuk hal ini coba cari tahu kernel yang digunakan versi berapa dan apakah memiliki bug/hole?. Jika memang terbukti memiliki bug/hole, maka sebaiknya secepatnya di upgrade dengan versi yang lebih tinggi. Biasanya pada level ini lokal exploit yang paling sering berperan untuk mendapatkan akses ke sebuah sistem, walaupun tidak menutup kemungkinan bagi remote exploit untuk mendapatkannya.
2. Keamanan pada Aplikasi Web Server (Versi Apache yang digunakan) -Tingkat Keamanan Level 2-
Apache adalah salah satu aplikasi web server yang banyak digunakan di dunia. Pada level ini yang harus anda perhatikan adalah versi apache yang digunakan. Jika memang terbukti versi ini memiliki bug/hole, segeralah upgrade apache yang anda miliki. Sesuaikan lagi konfigurasi apache dengan keinginan anda. Matikan module-module apache yang memang tidak digunakan. Ganti username dan group aplikasi ini ke user yang tidak memiliki akses shell seperti nobody. Jangan pasrahkan konfigurasi apache dengan konfigurasi default dari proses instalasi. Pada level ini exploit yang paling sering dipergunakan adalah remote exploit, karena pada level ini aplikasi apache terbuka pada port 80, sehingga ada kemungkinan untuk dibobol/disusupi dari jarak jauh.
3. Keamanan pada Aplikasi MySQL (versi MySQL yang digunakan) -Tingkat Keamanan Level 2-
MySQL adalah salah satu database SQL yang cukup populer dan banyak dipergunakan di internet. Integrasinya yang simple, clean and fast dengan PHP membuktikan salah satu kelebihan PHP untuk menguasai pasar aplikasi berbasis web based. Tidak berbeda jauh dengan Apache dan PHP, maka hal terpenting yang harus dilihat disini adalah versi MySQL yang anda gunakan. Pastikan bahwa pada versi ini tidak memiliki bug/hole. Hal lainnya yang perlu menjadi perhatian adalah segera merubah password default administrator database MySQL. Default instalasi MySQL memberikan hak akses kepada user root dengan priveleges penuh dan tanpa password!. Bayangkan jika anda lalai untuk merubahnya?
Jika database ini terkoneksi dengan internet/web, buatlah user MySQL dengan priveleges yang berbeda dengan priveleges administrator (don’t ask me how to do this, please ask to uncle google . Database MySQL membuka port 3306. Sehingga ada kemungkinan untuk di exploitasi dengan menggunakan remote exploit ataupun lokal exploit.
Secara umum pada level 2 yang harus diperhatikan bahwa semua exploit yang beredar di internet sangat banyak sekali yang memanfaatkan bug/hole pada level aplikasi. Anda dapat mengikuti berita keamanan aplikasi yang anda gunakan melalui situs-situs resmi aplikasi tersebut. Disini dibutuhkan kecermatan dan kecepatan anda dalam mengikuti informasi tentang keamanan internet. Jangan pernah lupa untuk mengupgrade, jika memang situs resmi aplikasi tersebut menyarankannya. Jadi pada level ini salah satu cara untuk menghindari berperang dengan cracker adalah dengan selalu mengikuti berita/news untuk aplikasi yang anda jalankan. Lengah sedikit, bisa jadi server anda yang menjadi target .
4. Keamanan pada Aplikasi PHP (Versi PHP yang digunakan) -Tingkat Keamanan Level 3-
PHP adalah sebuah bahasa pemrograman yang saat ini banyak sekali dipergunakan di internet. banyak sekali situs komersial yang menggunakan PHP agar situsnya terlihat dinamis dan lebih interaktif. Namun pada level 2, PHP yang dibicarakan disini bukan pada kode pemrograman (scripting) yang telah dilakukan, namun pada engine PHP yang digunakan. Sama seperti pada apache di level ini harus diperhatikan apakah versi PHP yang digunakan memiliki bug/hole. Jika memang terbukti segeralah uprade versi PHP tersebut. Selain itu jangan serahkan konfigurasi PHP pada hasil default instalasi. Rubahlah beberapa variabelnya sesuai dengan keinginan anda. Beberapa hal yang terpenting pada konfigurasi PHP antara lain adalah SAFE_MODE dan REGISTER_GLOBAL. Cobalah bertanya lebih lanjut tentang konfigurasi PHP pada paman google . AFAIK, engine PHP tidak dapat diexploitasi dengan remote exploit karena engine PHP tidak pernah membuka diri pada port tertentu. Jadi kalaupun ingin mengexploitasi engine! PHP hanya dapat menggunakan lokal exploit. CMIIW.
5. Keamanan pada Aplikasi Web Based yang berjalan -Tingkat Keamanan Level 4-
Membangun sebuah aplikasi yang berbasis web adalah hal yang menyenangkan. Bagaimana tidak?, dengan membangun aplikasi berbasis web, maka aplikasi tersebut akan berjalan pada berbagai platform sistem operasi, selain itu untuk pengembangan lebih lanjut juga akan mudah sekali. Namun dibalik itu semua, ternyata aplikasi berbasis web juga menyimpan sebuah bahaya yang sangat besar bagi keamanan komputer. Tercatat pada memori saya beberapa hal yang dapat dilakukan hanya karena kesalahan scripting aplikasi web based, antara lain :
Mengupload file seperti eggdrop, psybnc, dll.
Mendownload backdoor seperti bindtty, yang berakibat cracker akan memiliki akses shell dan selanjutnya tinggal mencari lokal exploit.
Mengacak-acak database MySQL
Mengintip nama-nama user yang berada pada /etc/passwd
Mendefaced website
Sehebat apapun proteksi sebuah sistem tidak dapat menutupi kelemahan yang ada pada aplikasi web based. Salah satu contoh konkret yang terlihat sampai dengan saat ini adalah bobolnya Situs KPU karena bug/hole SQL Injection. Dani Firman Syah a.k.a xnuxer berhasil dengan baik memanfaatkan kesalahan scripting yang dilakukan oleh Tim IT KPU, sehingga dia berhasil merubah nama-nama partai yang ada dalam database.
Kelemahan web based biasanya bisa terjadi karena :
Kurang mampu dalam menganalis algoritma pemrograman web based.
Penggunaan fungsi-fungsi pemrograman web based yang tidak sesuai dengan tempatnya.
Ketidakhati-hatian dalam menggunakan CMS yang sudah jadi seperti PHP-Nuke, Post-Nuke, Mambo, dll.
Tidak adanya perbedaan method POST dan GET pada aplikasi web based yang digunakan
Masih banyak lagi yang lain
Saran saya untuk level ini (jika anda membuat sendiri aplikasi web based). Coba dan cobalah terus berlatih untuk membuat sebuah algoritma pemrograman web yang ‘bersih’, ‘rapi’, ‘teratur’ dan sesuai dengan fungsinya. Jangan pernah merasa bahwa aplikasi yang anda buat adalah aplikasi yang handal dan tidak bisa ditembus orang lain. Kalau perlu mintalah tolong kepada orang lain untuk mengecek algoritma pemrograman anda dan mengetest kode pemrograman anda. Jangan publish aplikasi web based tersebut jika anda belum yakin dengan algoritma yang telah anda susun.
Jika menggunakan CMS yang sudah jadi, cobalah ikuti berita bug/hole yang dimilikinya. Sampai dengan saat ini seperti PHP-Nuke sudah sering sekali memiliki kelemahan pada bug/hole SQL injection. Kelemahan yang ada pada PHP-Nuke ini dimanfaatkan beberapa gelintir orang untuk membuat remote exploitnya yang berbasis pada pemrograman perl ataupun PHP. Untuk hal ini saya cuma bisa menyarankan jangan pernah anda lengah dengan menggunakan versi CMS yang ternyata memiliki bug/hole .
Untuk lebih tahu detail tentang bahayanya aplikasi web based dengan menggunakan PHP, silahkan buka arsip diskusi milis jasakom-perjuangan@yahoogroups.com beberapa bulan yang lalu, disitu dibahas tentang bahayanya beberapa hal seperti GET, POST, INCLUDE, REFERRER (based on PHP), atau kalau belum puas silahkan cari tutorial di google untuk membuat aplikasi web based yang ‘bersih’.