Tuesday, September 27, 2011

Sistem Web yang Rentan Terkena Hack

Ketemu lagi dengan tugas II5166, kali ini saya beserta teman-teman diminta untuk mencari website di internet yang vulnerable atau rentan terkena hack. Pada tugas kali ini, setidaknya saya diharuskan mencoba beberapa website sampai benar-benar ketemu, mana yang rentan, dan mana yang okeh :)

Yah, saya pun berubah menjadi hacker untuk sesaat. Atau lebih tepatnya skiddie, alias script kiddie alias hacker level terendah. alias hacker cupu ;p

Berikut ini uraian dari permasalahan lubang keamanan pada beberapa web yang mungkin lebih dikarenakan kesalahan pengimplementasian, seperti kurang cermatnya dalam pengkodean, khususnya kealpaan dalam memfilter inputan dalam program.[1]

Contoh website yang bermasalah dengan : 

1. Out of bound array (buffer overflow).
Yaitu keadaaan dimana suatu array di-overflow, atau diisi dengan melebihi kapasistas yang ada. Misalnya pengguna melakukan suatu inputan pada suatu program dengan karakter yang melebihi ketentuan program. Hal ini selanjutnya akan mengakibatkan program crash dan memiliki potensi celah keamanan. 

2. Problem karena inputan karakter
Yaitu suatu keadaan dimana suatu program tidak dapat menangani inputan yang berupa karakter tertentu, atau karakter yang aneh-aneh. Hal ini lebih dikarenakan tidak adanya pemfilteran inputan yang baik dalam program. sehingga program dapat mengakses berkas atau informasi yang semestinya tidak boleh diakses. 

3. SQL-Injection 
Hanya sebagai tambahan dalam postingan ini, SQl-Injection coba saya lakukan setelah mengetahui beberapa celah keamanan pada web. Sebagai contoh lubang keamanan yang terjadi karena ketidaktersediaan pemfilteran karakter karakter tertentu, khususnya karakter yang ada pada sql-language sehingga sql-injection dapat dilakukan. 

Sql-injection adalah jenis aksi hacking pada keamanan komputer di mana seorang penyerang bisa mendapatkan akses ke basisdata di dalam sistem. Hal ini dapat dilakukan dengan cara memanipulasi inputan yang berisi perintah sql atau sql-query pada halaman login.


=======================oo[ 23210311]oo==========================

1. Out of bound array (buffer overflow).
  • Nama website : http://www.mojokertokota.go.id/  
  • Bagian Target : Search Field (textfield pencarian)
  • Ket. : Melakukan inputan pada pencarian dengan 1.200.000 karakter
 
  • Berikut ini adalah saat terjadi array out of bound :


2. Problem karena inputan karakter
  • Nama website : http://globaloiljobs.com/
  • Bagian Target : Login Field
  • Ket. : Melakukan inputan berupa karakter petik satu atau alligator (')
  • Berikut ini adalah saat terjadi error pada database :
3. SQL-Injection
Setelah mengetahui celah kelemahan suatu web, misalnya seperti contoh web http://globaloiljobs.com/ di atas. Pada web tersebut terlihat jelas tidak memiliki pemfilteran karakter pada inputan program. Sehingga dapat kita lakukan permainan sql-query ala skiddie. misalnya menginputkan ' or 1=1 -- pada textfield admin id.

Penjelasan : ' or 1=1 --
Dengan inputan tersebut maka akan membuat sql-query bingung sehingga akan dibaca sebagai berikut :
SELECT * from [TABLE] where [ADMINID]=' ' or 1=1 -- and [PASSWORD] ='apapundah'
Yang artinya sqlnya men-SELECT semua query dari adminId ' ' (kosong) atau (OR) 1=1 (true) sehingga kolom admin id dengan begitu saja di-bypass, sedangkan pada kolom password diabaikan, dikarenakan terdapat mark sql ( -- ) atau yang biasanya digunakan untuk comment.


Dan, taraaaaa.............. 
Hal itupun terjadi. Kita dapat memasuki halaman administrator seperti dibawah ini :


Karena sudah memasuki halaman administrator, maka apapun dapat kita lakukan, termasuk melakukan pengeditan pada data yang ada. Contohnya seperti ini : 

[Terlihat jelas data-data telah dirubah/di-hack sebelumnya oleh pihak lain, mungkin dikarenakan celah keamanan dari website yang sangat lemah]
  • Data sebelum terjadi pengeditan :
  • Proses pengeditan pada salah satu data : Misal kita tambahkan no 23210311 pada salah satu nama :)
  • Konfirmasi keberhasilan pengeditan data :
  • Yay!! Pengeditan berhasil :

Karena tidak bermaksud merusak, saya yang baik hatipun mengembalikan data pada data semula. :p

Setiap kita membuat suatu website terkadang kita hanya memperhatikan validasi kebenaran data saja, seperti dibawah ini :


Tetapi hal di atas saja tidak cukup dilakukan, kita juga perlu mengantisipasi karakter-karakter yang diinputkan, terutama yang mengandung sql-query

Tindakan Pencegahan : 

1. Out of bound array (buffer overflow). 
Dengan menggunakan metode array bound checking akan menghentikan vunerability dan serangan buffer overflow. Jika sebuah array tidak dapat di-overflow, maka array tidak dapat digunakan untuk mengkorupsi program yang terletak di alamat memori berikutnya. Untuk mengimplementasikan metode ini, semua pembacaan dan penulisan ke array yang harus diperiksa untuk memastikan bahwa mereka tidak melampaui batasan array. 

2. SQL-Injection
  • Batasi panjang input box (jika memungkinkan), dengan cara membatasinya di kode program, jadi si cracker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang. 
  • Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation). 
  • Matikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan. 
  • Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan. 
  • Ubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab
Sumber : 
  1. Budi Raharjo, ”Keamanan Sistem Informasi Berbasis Internet”, PT Insan Indonesia  PT INDOCISC, Jakarta, 1998-2005 
  2. Ahmad Affandi, "SQL Injection dan Cara Pencegahannya", Universitas Sriwijaya Palembang, 2008


* Happy Hacking Learning... ;P

No comments: