Website kampus di masa kini menjadi barang yang sangat penting. Website menjadi media informasi yang dapat diakses anytime anywhere, yang dapat menunjukkan tingkat eksistensi, esensi, hingga update segala informasi yang ada di dalam kampus. Bahkan ada sebuah konsorsium yang memberikan peringkat universitas berdasarkan konten web, publikasi ilmiah dan publikasi jurnal, yaitu Webometric. Hayo, kampus kalian ada di nomer berapa ni?
Okay, kita tidak akan membahas ranking webometric di sini. Kita bahas dulu ya web kampus itu paling banyak diminati dibuat pakai apa sih? Berdasarkan random sampling yang dilakukan Tim eCampuz, berikut Content Management System (CMS) yang paling sering digunakan untuk website kampus. Oh, tunggu sebentar, by the way bagi yang masih belum familiar dengan CMS, bisa tengok artikel kami yang berjudul 3 CMS Opensource Populer di Kalangan Kampus. Berikut rangking CMS yang paling sering digunakan sebagai website portal kampus, termasuk website untuk bagian atau kelembagaan, hingga himpunan mahasiswa di kampus:
- WordPress (di atas 50%)
- Joomla
- Drupal
- Framework sendiri (termasuk programming sendiri )
- CMS lainnya seperti AuraCMS, Lokomedia
- Dan lain-lain
━━ DISCLAIMER
Sebelum kita masuk bahasan utama artikel ini, ada beberapa hal penting yang perlu dipahami bersama:
- Artikel ini diharapkan untuk digunakan sebagai media panduan bagi para administrator kampus pada khususnya, dan masyarakat luas pada umumnya, untuk menjadikan baiknya CMS ini dan dunia IT Indonesia secara luas
- Untuk percobaan dan demo dalam artikel ini, tim eCampuz menggunakan domain dummy bernama sansak.id. Domain ini hingga sekarang belum pernah ada, dan hanya digunakan sebagai percobaan / riset lokal oleh tim content eCampuz.
- Segala macam percobaan riset di sini, TIDAK DISARANKAN untuk digunakan sebagai PoC, atau skenario serangan dan atau akses illegal pada pihak lain, ataupun berbagai bentuk pelanggaran UU ITE lainnya..
- Untuk percobaan dan riset, disarankan untuk melakukan instalasi sendiri pada PC anda sendiri, jangan menggunakan infrastruktur milik pihak lain.
- Kerjakan dengan risiko anda sendiri. Do With Your Own Risk
Sekilas Tentang CMS Lokomedia
CMS Lokomedia tiba-tiba muncul sebagai CMS yang cukup banyak digunakan oleh kalangan coder. Ini adalah CMS asli Indonesia, yang semula dibuat oleh mas Lukmanul Hakim dkk (http://www.bukulokomedia.com) yang merupakan sebuah CMS bawaan sebuah buku belajar programming. CMS tersebut berbahasa PHP. Konsep belajar yang ditawarkan pada buku ini begitu interaktif dan mudah, disertai dengan CMS yang siap oprek, menjadikan buku dan CMS ini laris manis di kalangan coder. Cukup banyak web-web perusahaan dibuat oleh para programmer muda dengan bantuan CMS dan buku ini. Instalasi yang cukup mudah di berbagai macam platform OS menjadikan Lokomedia juga pantas menjadi salah satu pilihan CMS untuk portal web.
Karena cukup banyak dipakai, CMS Lokomedia ini pun update. Hingga sekarang banyak update dan patch dari banyak pihak yang ingin memperlengkap dan memperkuat CMS ini. Cukup banyak juga web pemerintahan, web universitas, hingga web perusahaan menggunakan CMS ini. Pada versi-versi update terakhir, CMS ini juga dilengkapi juga dengan fitur interaktif dengan memanfaatkan jQuery. ChangeLog CMS ini juga cukup lengkap dan rapi untuk setiap kali update mayor maupun minor. Hingga sekarang ada juga Lokomedia dalam framework CodeIgniter.
CMS Lokomedia versi CodeIgniter (mulai versi 1.6.3) dikembangkan dengan dukungan PHP-7 dan tingkat keamanan lebih baik ketimbang versi non CodeIgniter yang berhenti pada versi 1.6.1. Versi 1.6.1 ini diupdate terakhir tahun 2012. Kendati demikian masih cukup banyak web portal pemerintahan dan perguruan tinggi masih menggunakan versi tersebut hingga sekarang.
Security Issue CMS Lokomedia
Amankah menggunakan CMS Lokomedia? Jika kita kena risiko ancaman keamanan, siapa yang bertanggung jawab? Sebenarnya semula CMS ini dikembangkan untuk dipelajari. Maka semestinya penggunaan CMS ini juga perlu sedikit sentuhan modifikasi dan patch/tambalan, terkait dengan beberapa risiko keamanan yang terdapat pada CMS ini. CMS ini sebenarnya tetap bisa digunakan, asalkan ada opsi-opsi yang dapat dipenuhi seperti di bawah ini:
- Memastikan sudah menggunakan versi yang aman. Disarankan menggunakan CMS Lokomedia versi CodeIgniter yang terbit sekitar 2019, atau versi 1.6.3 dan setelahnya. Versi Lokomedia CMS non CodeIgniter terakhir adalah 1.6.1 dengan sejumlah security issue yang terhitung memiliki risiko cukup tinggi.
- Menggunakan WAF (mengaktifkan mod_security pada server)
- Menggunakan external Firewall yang dapat support dengan filtering layer 7. Hati-hati, penggunaan HTTPS melalui external firewall, dapat membuat firewall gagal menginspeksi konten, kecuali firewall support dengan opsi decrypt with ssl key.
- Memastikan sendiri bahwa script telah aman.
- Mempersiapkan backup.
- Mengisolasi aplikasi terhadap aplikasi lainnya.
- (DWYOR) do with your own risk
Dalam melakukan pengembangan aplikasi berbasis web, sisi security adalah hal yang cukup sering terlepas perhatian. Begitu juga dalam implementasi CMS Lokomedia ini. Jika kita iseng-iseng browsing pada github tentang kata kunci lokomedia, cukup seram juga kita dibuatnya. Alih-alih kita mendapatkan CMS yang kita dapatkan, justru kita mendapatkan script-script atau tool-tool untuk melakukan cracking CMS Lokomedia.
Masalah Lokomedia Sebelum Versi 1.6.3
Pada CMS Lokomedia (yang bukan versi CodeIgniter), terdapat beberapa celah yang cukup berbahaya. Celah-celah itu antara lain :
- Penggunaan versi PHP yang sudah mulai ditinggalkan oleh web hosting management. (PHP 5.x). Penggunaan versi ini pada webhosting baru, akan memunculkan bug tersendiri. Kecuali jika server tersebut dipegang sendiri
- Celah SQL Injection yang ada pada semua URL yang melibatkan query SQL yang parameternya didapatkan dari query string method GET. Lokomedia sebenarnya sudah cukup bagus melakukan antisipasi masalah SQL Injection Vulnerability ini, yaitu dengan menggunakan melakukan Rewrite URL dari Query String menjadi SEO Friendly.
- Celah keamanan Arbitrary File Download Vulnerability. Apa itu? Yaitu halaman download yang tidak bekerja sebagaimana mestinya, yang dapat dipakai untuk melakukan pengunduhan file-file yang seharusnya tidak boleh didownload. Misalnya adalah file-file milik sistem operasi.
Struktur URL, Direktori, dan Database
Struktur URL yang dibangun oleh CMS Lokomedia sangat rapi, dan sudah mendukung SEO (SEO Friendly). Contoh struktur URL-nya adalah seperti berikut :
- http://sansak.id/semua-download.html (halaman page)
- http://sansak.id/kategori-23-hiburan.html (halaman berkategori)
- http://sansak.id/berita-120-saat-raja-belajar-bertutur-kata.html (halaman detail berita)
Seluruh struktur URL ini sebenarnya dibangun dengan menggunakan model Query String, namun dirapikan, dikemas dan diamankan dengan menggunakan mod_rewrite yang dipasang pada file .htaccess.
Dari mod_rewrite di atas, maka kita dapat mengetahui struktur URL yang sebenarnya. Mode yang rapi dinamakan Mode SEO Friendly atau Clean URL, sedangkan mode sebenarnya dinamakan mode Query String. Misalnya adalah :
- http://sansak.id/semua-download.html (SEO Friendly/Clean URL)
berasal dari
http://sansak.id/media.php?module=semua-download&id= (Query String) - http://sansak.id/kategori-23-hiburan.html
berasal dari
http://sansak.id/media.php?module=detailkategori&id=23 - http://sansak.id/berita-120-saat-raja-belajar-bertutur-kata.html
berasal dari
http://sansak.id/media.php?module=detailberita&id=120
Selanjutnya pada bagian di bawah ini akan kita bahas saja mengenai dua buah security issue yang memiliki risiko tinggi pada CMS ini. Setelah itu akan dibahas juga mengenai patching mandiri penggunaan CMS ini. Setuju?
Security Issue : SQL Injection GET Query String
Mode query string sangat menarik para pelaku security tester di luaran sana. Biasanya bagian-bagian yang mengandung Query String, akan erat dihubungkan dengan bug yang namanya : SQL Injection. Apa itu? Yaitu tidak amannya sebuah struktur URL atau FORM, yang akhirnya user mampu melakukan Query SQL secara illegal dari URL atau Form tersebut. Berbahaya? Cukup berbahaya. Sebenarnya SQL Injection tidak hanya bisa terjadi di jenis URL Query String saja. Di jenis clean URL pun tetap bisa terjadi.
Biasanya langkah pertama yang dilakukan adalah melakukan testing dengan penambahan tanda ‘ dan melanjutkan query di belakangnya. Dalam testing manual tim eCampuz, pada URL Query String berita didapatkan error yang memunculkan nama hasil Query pada bagian title bar. Perhatikan pada bagian yang dikenai highlight merah.
Oke cukup, dari sana seseorang dapat memulai Query untuk mendapatkan informasi :
- nama database
- user database
- letak server database
- jumlah tabel dan nama tabel
- jumlah kolom dan nama kolom
- mendapatkan tabel kredensial seperti tabel user
- mendapatkan akses login
- menuliskan atau membaca file di dalam server ( tergantung pada permission database )
Perlu dipahami bahwa di luar sana, banyak para cracker yang tidak lagi mempelajari konsep SQL Injection, namun ingin melakukan aksi hacking. Maka digunakanlah alat-alat penetration test seperti SQLMap, Havij dan lain sebagainya untuk ditujukan pada server korban. Dengan menggunakan tools seperti itu maka tujuan jahat mereka segera tercapai. Security Issue tentang SQL Injection sangat populer digemari para cracker. Hal ini menjadikan SQL Injection dinilai memiliki risiko tinggi (mendekati bencana) oleh para Security Risk Analyst, karena :
- memiliki dampak (impact) berbahaya (major)
- memiliki tingkat kemungkinan terjadi (likelihood) yang cukup tinggi
Membiarkan aplikasi berjalan dengan risk seperti ini, termasuk kategori not acceptable dalam IT Risk Management, dan memerlukan tindakan yang dinamakan sebagai mitigasi. Tak elok dong, kita bahas bug di sini tapi tidak memberikan solusi. Mitigasi nanti kita letakkan di bawah ya..
Security Issue: Arbitrary File Download Vulnerability
Security issue macam apa itu? Arbitrary File Download Vulnerability (AFD Vulnerability) adalah jenis kerentanan sebuah aplikasi web pada halaman atau fungsi download, yang user dapat secara illegal melakukan download file-file yang sebenarnya tidak diijinkan untuk didownload. Di dalam Vulnerability Assessment, AFD ini termasuk pada level information gathering (penelusuran informasi). Namun perlu diketahui jika yang dapat terdownload adalah file-file di dalam sistem operasi, ini yang akan menjadi masalah.
Security start from visibility ~ Censys
Situs Censys.io pernah memberikan quote bahwa masalah keamanan selalu bermula dari apa yang terlihat. Maka jangan suka pamer ya… eh.. Sedangkan para hacker-hacker pengalaman selalu mengatakan “Recons more, exploit less“.
Mari kita mulai dengan membuka halaman download Lokomedia :
Perhatikan pada bagian yang dikenai highlight merah. Yang atas adalah link menuju download, sedangkan bagian bawah pojok kiri adalah status bar, yang menunjukkan URL asli dari link tersebut. Saat diklik tentu saja file tersebut akan terdownload. Dalam kasus ini arah URLnya adalah :
http://sansak.id/downlot.php?file=Excell_VBA.ppt
Bisakah kita mengganti nama file yang didownload tersebut dengan nama lain? Bisa. Bug ini terletak pada file bernama downlot.php. Sebenarnya pada versi ini sudah ada usaha dari tim developer Lokomedia untuk memberikan contoh mengamankan bug ini, namun secara default hanya diberikan atas proteksi file PHP saja. Sementara file-file krusial tidak hanya PHP.
Bagaimana jika saya melakukan aksi download file milik Linux misal : /etc/passwd
Tim eCampuz, ketimbang melakukan aksi download, lebih suka melakukan pemanggilan file itu dengan menggunakan curl. Sehingga file dapat langsung terbaca.
Banyak file-file di server yang sifatnya krusial. Hal ini seharusnya tidak boleh terbaca oleh pihak yang tidak memiliki otoritas atau hak. Dari file-file krusial ini bisa saja tersimpan informasi yang potensial untuk pencurian data hingga pengambilalihan akses ke server atau aplikasi. Biasanya penyerang akan melakukan pengambilan file :
- /etc/passwd
- /etc/issue
- httpd.conf/apache.conf
- my.cnf
- konfigurasi network
- /proc/cpuinfo
- /proc/meminfo
- .htaccess
- startup file
- ssh_key dengan permision yang tidak secure
Cukup sampai sini bahasan ini. Pada dasarnya security Issue AFD memiliki tingkat risiko medium, dengan impact medium, dan tingkat kemungkinan terjadinya tidak terlalu tinggi. Namun bukan tidak mungkin seseorang mendapatkan bug ini, justru dapat escalation privileges mendapatkan hal yang lebih tinggi lagi.
Mitigasi
Mitigasi paling ideal untuk security issue di portal web dengan Lokomedia adalah : upgrade CMS. Namun kadang tidak semua kampus memiliki sumber daya manusia yang dapat melakukan upgrade, sehingga tidak serta merta dapat mengupgrade dengan waktu pendek. Belum lagi biasanya upgrade ke lintas platform (Misal Lokomedia dengan versi CodeIgniter), tentu akan berubah menjadi pekerjaan besar. Upgrade termasuk theme, hingga konversi database. Di sini kita bahas saja mengenai mitigasi parsial untuk dua kasus ini.
Mitigasi Security Issue SQL Injection pada Method GET
SQL Injection Vulnerability terjadi karena parameter URL atau Form yang merupakan request dari user, tidak terfilter dengan baik. Sehingga segala macam query ke database akibat pemanggilan URL atau Form, dapat dilanjutkan dengan Query SQL yang illegal, yang seharusnya tidak boleh terjadi.
Contoh :
URL : http://sansak.id/media.php?module=detailberita&id=120 akan memiliki Query SQL sebagai berikut :
SELECT * FROM berita WHERE id='120'
Namun karena proses filter yang kurang rapat, maka seseorang dapat mengisikan seperti ini
http://sansak.id/media.php?module=detailberita&id=120' UNION ALL SELECT 1,database(), user() --'1
Sehingga Query akan berubah sebagai berikut
SELECT * FROM berita WHERE id='120' UNION ALL SELECT 1,database(), user() --'1'
Dengan demikian yang perlu dilakukan dalam mitigasi security issue ini adalah, menambahkan filtering pada seluruh masukan form baik GET maupun POST. Filtering yang cukup efisien adalah dengan menggunakan fungsi mysql_real_escape_string (untuk extension php-mysql), atau mysqli_real_escape_string (untuk extension php-mysqlnd, php-mysqli). Sebenarnya Lokomedia sudah mencontohkan anti injeksi database itu pada target login admin. Yaitu pada file {appdir}/adminweb/cek_login.php
function anti_injection($data){ $filter = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES)))); return $filter; }
Begitu juga dengan fungsi validasi yang sebenarnya sudah ada pada config/fungsi_validasi.php. Di sana sudah diberikan beberapa langkah filtering dengan menggunakan fungsi stripslashes dan htmlspecialchar filtering. Fungsi tersebut dapat diperkuat dengan tambahan seperti di bawah ini.
$sql = "SELECT * FROM berita WHERE id_kategori='$_GET[id]'
Dapat ditambahkan dengan menyaring dengan fungsi validasi yang sudah disediakan.
$sql = "SELECT * FROM berita WHERE id_kategori=$val->validasi('$_GET[id]');
atau
$sql = "SELECT * FROM berita WHERE id_kategori=mysql_real_escape_string('$_GET[id]');
grep -rnw
find -type f | xargs fgrep
Mitigasi Security Issue Arbitrary Download File Vulnerability
Celah Arbitrary Download File Vulnerability ini terjadi pada satu file saja, yaitu file : downlot.php. Mengingat nama file ini begitu unik, maka nama ini akan mudah ditemukan oleh para pencari celah keamanan di internet, dengan menggunakan methode : google dorking. Kalau sudah masuk google gini, maka hal ini meningkatkan nilai risiko dari penggunaan CMS ini, yaitu karena tingkat kemungkinan terjadinya percobaan serangan jadi tinggi. Sudah, tidak usah dibahas caranya kita bahas saja mitigasi di bawah ini.
File downlot.php terletak pada root directory dari core aplikasi web CMS Lokomedia. Celah tersebut terletak pada bagian berikut :
$direktori = "files/"; // folder tempat penyimpanan file yang boleh didownload $filename = $_GET['file']; . . if ($file_extension=='php'){ echo "
Access forbidden!
Maaf, file yang Anda download sudah tidak tersedia atau filenya (direktorinya) telah diproteksi.
; Silahkan hubungi webmaster.
;”; exit; } . . readfile(“$direktori$filename”);
Masukan parameter $_GET[‘file’], ternyata dapat langsung dibaca dan dijadikan sebagai file download, pada bagian readfile(); Sebenarnya sudah terdapat filtering, namun dapat kita baca, bahwa filtering tersebut hanya berlaku untuk file berekstensi PHP. Lho boleh dong kita tambahkan filteringnya? Boleh. Sayangnya adalah penambahan filtering di sana harus satu-persatu, sedangkan di sistem operasi Linux terlalu banyak jenis ekstensi.
Ada dua jenis filtering yang disarankan untuk mengurangi risiko security issue AFD ini.
- Filtering secara whitelist. Whitelist adalah : semua yang dilist adalah yang diijinkan. Lainnya diblok. Pada kasus ini, whitelisting akan lebih efektif dari pada blacklisting dengan mendata satu persatu yang akan diblok. Berikut yang telah diujicoba oleh tim main-main eCampuz. Ada penambahan baris berisi array yang mendata seluruh file yang akan diijinkan. Kemudian pada bagian selanjutnya, ekstensi yang tidak ada dalam list akan tidak boleh diblok
$ekstensi_diizinkan = array('pdf','exe','zip','rar','doc','xls','ppt','gif','png','jpeg','jpg'); if (!in_array($file_extension,$ekstensi_diizinkan)){ echo "
;Access forbidden!
;
Maaf, file yang Anda download sudah tidak tersedia atau filenya (direktorinya) telah diproteksi.
Silahkan hubungi webmaster.“; exit; }else{ . .
- Filter string. Pada umumnya serangan akan mencari file pada direktori lain yang tidak diijinkan. Biasanya akan memanfaatkan karakter “../../../../../../../direktori/filetujuan” untuk mendapatkan file tersebut. Maka di sini perlu kita replace karakter ../ dengan menggunakan karakter kosong. Contoh
//$filename = $_GET['file']; $filename = str_replace( '../','',$_GET['file'] );
Heh? Jadi cukup sampai di sini pembahasannya?
Hmm, membahas security issue adalah hal yang tidak pernah habis. Selalu berkembang sesuai dengan perkembangan zaman. Banyak hal yang hari ini dianggap aman, ternyata besok ditemukan bugnya.