Pengamanan Program Interpretif

Yang saya maksud dengan program interpretif adalah program yang ditulis dengan plaintext atau memuat plaintext yang dieksekusi dengan interpreter pada saat dijalankan. Program-program semacam ini banyak dijumpai di Internet/intranet dalam bentuk program skrip baik yang dijalankan di server (perl cgi, PHP, dsb.) maupun di client/browser (Java Script). Selain itu kita juga banyak menjumpai script programming untuk berbagai aplikasi sistem operasi seperti berbagai tool konfigurasi. Berikut ini adalah ulasan pendek mengenai pemahaman dasar pengamanan program dengan mencari kesamanan pola berbagai lubang keamanan yang pernah dilaporkan. Harapan saya dengan memahami kesamanan pola lubang-ubang keamanan itu kita bisa lebih waspada sehingga permasalahan keamanan akak semakin jarang ditemui.

Dua masalah keamanan sistem program interpretif yang sudah cukup difahami namun masih sering ditemui adalah cross site scripting (XSS) dan sql injection (SI). Silakan search ke Internet kedua istilah tersebut dan coba fahami dari beberapa artikel yang muncul (kita bisa temui banyak sekali artikel yang membahas berbagai skenario dari XSS dan SI serta panduan untuk mengatasinya. Penjelasan yang menurut saya paling mudah difahami adalah yang tertulis di wikipedia. CERT mengemasnya dalam bentuk laporan formal.

Cross Site Scripting

XSS memanfaatkan berbagai form yang disediakan sistem untuk memasukkan teks ke dalam database website yang bersangkutan. Pada saat teks tersebut terakses pegunjung yang lain dalam bentuk isian buku tamu atau forum misalnya, maka bila pengembang situs tidak melakukan validasi teks yang masuk database, perlikalu tampilan bisa dikendalikan oleh sipengisi data dengan menyisipkan program pengendali tampilan sebagaimana yang biasa kita lakukan dengan Java Script atau tag Style. Contoh sederhana, coba masukkan isian

<script>alert('percobaan xss');</script>
ke isian buku tamu di website sendiri atau milik teman. Bila saat diakses muncul window alter dengan pesan tersebut maka bisa dipastikan website tersebut tidak terlindungi dari serangan XSS.

SQL Injection

Cracker menggunakan SQL Injection untuk menyisipkan perintah SQL melalui isian form yang digunakan untuk menyusun perintah SQL seperti login form. Contoh sederhananya untuk validasi login kita menyusun perintah perintah SQL semisal dengan PHP atau Perl:

"SELECT field_password FROM table_user WHERE field_login = '$var_login'"
Apabila tidak dilakukan validasi string isian, maka kita bisa memasukkan string:
sembarang' ; DROP TABLE table_user
sehingga web server yang bersangkutan akan mengirimkan perintah SQL:
SELECT field_password FROM table_user WHERE field_login = 'sembarang'; DROP TABLE table_user
tahu sendiri kan apa yang bakal terjadi bila perintah itu dijalankan server database yang bersangkutan? Banyak sekali contoh-contoh "siap pakai" yang dipaparkan di Internet untuk kita dicoba di website percobaan kita sendiri. Jangan sekali-kali mencobanya ke website orang lain. Akibatnya bisa fatal. Dalam contoh di atas, pengelola server bisa kehilangan tabel user secara keseluruhan. Sampai saat ini masih banyak situs web yang belum melakukan perbaikan sehubungan dengan masalah ini. Di website ini saya sesekali masih menemukan isia ke shoutbox, diskusi atau komentar yang memuat potongan perintah sql tersebut; selain sudah ada pengecekan entry ala kadarnya (antara lain dengan filter strip_tag), upaya sql injection tidak akan ada pengaruhnya karema kebetulan website ini tidak menggunakan server basis data sql.

Analisa XSS dan SI

Adakah kesamanan serangan XSS dan SI? Apabila belum sempat membaca keterangan di bawah ini, coba berhenti baca dan renungkan kembali penjelasan singkat tentang XSS dan SI. Pikirkan apa yang mendasari keberadaan lubang-ubang keamanan tesebut. Dalam banyak hal saya sering berpikir bahwa permasalah yang dihadapi masyarakat pengguna teknologi informasi dan komunikasi seperti virus, dan berbagai masalah keamanan lain muncul dari "keserakahan" pengembangan TIK itu sendiri ibarat banjir bandang yang diakibatkan oleh peningkatan kebutuhan pasokan kayu yang pada gilirannya berakibat terjadinya penebangan hutan besar-besaran.

Serangan XSS dan SI bisa terjadi karena "user diberi kesempatan untuk berpartisipasi menentukan eksekusi sistem program yang bersangkutan." Artinya, sistem memungkinkan sebagian atau seluruh isian masukan user untuk dieksekusi sebagai perintah, tidak sekedar masukan data. Fasilitas luarbiasa ini sekaligus membuka peluang besar untuk melakukan serangan terhadap sistem. Pada sistem aplikasi binary murni (hasil kompilasi program tradisionil dalam bahasa FORTRAN, C atau PASCAL), penyimpangan entry seperti pengisian karakter selain angka pada kolom yang isinya diolah sebagai angka biasanya mengakibatkan crash sehingga programmer dipaksa untuk menambahkan modul validasi sehingga alih-alih terjadi crash, sistem menampilkan peringatan adanya kesalahan entry. Bandingkan dengan sistem-sistem yang dibangun dengan lingkungan interpretif saat ini.

Edit file dobel.php yang isinya:

<?
$masukan = $_GET['masukan'];
if($masukan) print "Dobel dari $masukan =". $masukan * 2;
?>
<form>
Masukan <input name=masukan>
<input type=submit value=GO>
</form>
Akses program ini dan buat percobaan dengan memasukkan berbagai macam string mulai angka murni, dengan huruf, dengan karakter khusus seperti titikkoma dan sebagainya, sampai potongan Java Script seperti yang dicontohkan pada bab XSS. Terakhir, coba renungi kemungkinan penyusupan perintah-perintah yang tidak dikehendaki pada sistem-sistem program apapun yang pernah kita kembangkan.