Kemanan Dasar untuk Web Developer

Saya bersyukur karena sewaktu di MA Qudsiyyah (setingkat SMA) sudah meluangkan uang untuk membeli buku keamanan terbitan Jasakom yang ditulis oleh St’o (saya lupa judulnya apa, bukunya juga udah lama ilang). Dari buku tersebut saya mengetahui beberapa hal penting tentang aspek keamanan aplikasi yang patut diperhatikan ketika mengembangkan sebuah aplikasi berbasis web (dan juga mobile). Meskipun saya bukanlah ahli keamanan jaringan dan komputer saya akan mencoba membagikan sedikit pengetahuan keamanan yang saya ingat dari buku tersebut. Berikut adalah beberapa poin keamanan (security) dasar yang harus diketahui oleh web developer atau programmer untuk memastikan aplikasi dan web yang dibuat bisa lebih aman dari serangan hacker (istilah yang lebih tepat adalah cracker, tapi saya akan tetap menggunakan istilah hacker karena lebih familiar).

1. Alasan kenapa sebuah web diserang

Poin pertama yang harus diketahui oleh web developer, alasan utama kenapa web kita diserang bukanlah karena kita memiliki musuh, bukan juga karena aplikasi / web kita sangat hebat sehingga membuat hacker penasaran. Alasan utama serangan ke web kita adalah karena ada celah keamanan pada web kita. Sekali lagi alasan utamanya adalah karena ada celah keamanan.

Hacker, terutama yang masih belajar (script kiddies) seringkali mencari target serangan dengan melakukan pengecekan ke semua alamat web yang bisa mereka temui. Pengecekan ini dilakukan secara masif dan otomatis dengan menggunakan program tertentu, dan tentu saja ketika website kita yang masih bolong-bolong masuk pada list pengecekan mereka, inilah saatnya musibah terjadi.

Hacker yang menyerang kita mungkin tidak mengenal kita dan bahkan mungkin tidak memahami konten apa yang ada pada web kita. Asalkan mereka menemukan celah keamanan di web kita, itu sudah menjadi alasan yang sangat bagus untuk menyerang web kita.

2. SQL Injection (serangan)

Salah satu serangan yang cukup simpel tapi sangat berbahaya adalah SQL Injection. Serangan ini pada dasarnya adalah memasukkan karakter tertentu pada form input yang dapat mengubah query SQL sekaligus menyisipkan query SQL baru sesuai dengan keinginan hacker.

Contoh: kita memiliki halaman login yang terdiri dari inputan username, password, dan tombol login. Di sisi server untuk memroses inputan dari form tersebut kita menggunakan query SQL sebagai berikut:

select * from userlogin where username = '<input_username>' and password = '<input_password>'

Query tersebut berarti kita mencari di tabel userlogin data yang username-nya sesuai dengan input_username dan passwordnya sesuai dengan input_password. Sekilas tidak ada yang salah dengan query tersebut sampai ada yang berbuat iseng dan memasukkan '; drop table userlogin; -- pada user_input dan whatever pada input_password, sehingga aplikasi kita akan menjalankan query seperti di bawah ini:

select * from userlogin where username = ''; drop table userlogin; -- ' and password = 'whatever'

Nah kali ini yang dilakukan query tersebut adalah mencari data user dengan username kosong (yang pastinya tidak akan ketemu) dan menghapus tabel login dari database. Musibah, terutama jika kita tidak memiliki backup data userlogin.

sql_injection-389427-1280715215

Query yang diinject pada contoh di atas hanya ilustrasi semata. Hacker yang asli bisa lebih kreatif dalam penggunaan SQL Injection ini. Bukan hanya sekedar menghapus tabel, tapi mungkin juga bisa mendapatkan akses admin pada aplikasi kita.

Kabar buruknya lagi, seorang hacker dapat mengecek apakah web kita memiliki celah keamanan SQL Injection dengan sangat mudah, yaitu cukup memasukkan karakter ” ‘ ” (petik satu) pada salah satu form, dan klik submit. Website yang memiliki celah SQL Injection akan menampilkan kesalahan (kode: 500), sedangkan website yang baik akan menampilkan pesan bahwa obyek yang dicari tidak ditemukan (kode: 401, 403, atau 404).

3. XSS dan Injection Lain

Ada beberapa jenis injection lain yang juga bisa dilakukan oleh hacker antara lain HTML Injection atau sering  disebut XSS (Cross-Site Scripting) dan File Injection. Jika pada serangan SQL Injection hacker akan memasukkan query SQL tambahan, maka pada XSS hacker akan menyisipkan kode HTML (sebagai percobaan) dan kode javascript (untuk serangan yang lebih serius).

xss-anatomy

Contoh XSS: pada form komentar, hacker akan mencoba memasukkan kode HTML <b>coba dulu</b> untuk mengecek apakah website kita akan memproses kode tersebut. Selanjutnya ketika web kita menampilkan teks coba dulu (dengan font bold), hacker akan mencoba tag lain yang lebih serius misalkan <script> alert("hai") </script> . Musibah kembali terjadi jika ternyata website kita menampilkan popup dengan tulisan “hai”, karena artinya hacker dapat memasukkan skrip javascript lain yang dapat berakibat fatal pada web kita seperti mencuri cookies atau melakukan otomatisasi pengiriman paket data.

Adapun file injection biasanya dilakukan pada website yang menggunakan PHP sebagai bahasa pemrogramannya.  Contohnya ketika kita membuat form upload tanpa filter jenis file, maka hacker akan mencoba mengupload file skrip kode PHP. Jika ternyata file tersebut dieksekusi oleh website kita, hacker akan kembali lagi mengupload skrpi kode PHP yang lebih berbahaya.

4. Form Spamming

Lagi-lagi form input atau parameter URL bisa menjadi sumber masalah, bahkan ketika kita sudah melakukan filtering pada inputan untuk mencegah injection. Potensi masalah lain yang terjadi dari form adalah spamming. Seperti yang dijelaskan sebelumnya, dalam melakukan aksinya hacker biasanya tidak melakukan secara manual, tapi menggunakan program dan skrip pemrograman. Ketika menemukan form yang tidak memiliki filter spam dan juga tidak memiliki captcha, hacker akan menggunakan program untuk mengirim komentar secara masal dan otomatis pada website kita. Tujuannya tentu saja spamming, atau lebih parah lagi DoS (Denial of Service) agar website kita overload dan tidak mampu bekerja lagi.

Perlu diingat bahwa form spamming ini tidak hanya dapat digunakan pada form komentar saja, tapi juga dapat digunakan pada form login. Hacker akan melakukan bruteforce attack pada halaman login yang tidak aman dengan mengirimkan kombinasi username & password secara otomatis dan berulang-ulang untuk mendapat hak akses. Sekali lagi kabar buruknya, membuat skrip untuk melakukan hal tersebut sangatlah mudah, tidak sampai 20 baris kalau kita menggunakan bahasa pemrograman seperti PHP atau Python.

5. Firewall, SSL, Honeypot tidak lagi berguna

Semua serangan yang saya jelaskan di atas adalah serangan melalui sisi aplikasi, serangan yang dilakukan melalui port HTTP, serangan yang tidak bisa ditangkal bahkan jika kita menginstall Firewall, SSL, Honeypot, dan berbagai macam software keamanan di sisi server. Bukan berarti semua tools tersebut sekarang sudah tidak berguna dan tidak diperlukan, tapi perangkat keamanan tersebut tidak dapat menangkal serangan yang diakibatkan dari aplikasi yang memiliki celah keamanan. Berbagai macam perangkat keamanan tetap wajib dipasang di sisi server untuk menangkal berbagai jenis serangan lain, hanya ketika aplikasi web memiliki celah yang cukup menyolok, kita tidak bisa mengandalkan semua perangkat keamanan sisi server tersebut.

Keamanan aplikasi web adalah murni tanggung jawab kita sebagai web developer. Meskipun kita memiliki server admin tingkat dewa yang bisa menaklukkan segala macam serangan, jika aplikasi yang kita buat memiliki celah yang cukup besar, kita tidak bisa menyalahkan server admin jika suatu saat web kita di-deface, di-lumpuhkan, atau bahkan mungkin diambil alih oleh hacker karena celah di sisi aplikasi. Dalam beberapa kasus bahkan kita tidak bisa menyalahkan hacker, karena seperti yang dijelaskan sebelumnya, alasan utama hacker menyerang web kita adalah karena ada celah keamanan.

Kabar baiknya untuk menutup celah keamanan yang sudah dijelaskan di atas bukan hal yang susah juga. Memang seringkali sedikit membosankan dan memerlukan kedisiplinan, tapi bukan hal yang susah untuk dilakukan. Terlebih lagi jika kita bisa mendapatkan bantuan dari pentester (penetration tester), menutup berbagai macam celah keamanan aplikasi web sangat mungkin dilakukan dengan hanya berbekal kemampuan dasar programming dan sedikit googling.

Sebagai penutup, sekali lagi saya tegaskan saya bukanlah ahli keamanan jaringan dan komputer. Saya hanya mencoba membagikan apa yang saya ingat dari buku Hacking yang saya baca ketika berada di bangku Madrasah Aliyah (MA). Meskipun saya yakin tulisan ini tidak komprehensif dan banyak poin penting yang terlewat, saya tetap berharap pengetahuan dasar ini dapat meningkatkan awareness para web developer untuk membuat aplikasi web yang lebih aman. Bagaimanapun juga keamanan bukan semata tentang pengetahuan, tapi lebih pada tentang kedisiplinan.

Leave a Reply

Your email address will not be published. Required fields are marked *