|
[103]. SQL INJECTION PADA
SISTEM KEAMANAN DATABASE
------------------------------------------------------
Author : Muhammad Ilhamdi
Rusydi
Contact : -
CopyLEFT (c) 2006
www.spyrozone.tk All Rights Reserved
� 20/10/2005 21:50:21 WIB
------------------------------------------------------
//--- DESKRIPSI ---//
Pesatnya perkembangan teknologi jaringan dan sistem penyimpanan database
sangatlah mempengaruhi kemajuan internet. Kemudahan-kemudahan yang diberikan
membuat user menjadi tergantung dengan teknologi jaringan. Tapi sayangnya
keamanan sistem informasi belum cukup memuaskan user yang membutuhkan data-data
yang akurat.
Salah satu teknik dalam mengganggu sistem database jaringan adalah dengan
menggunakan SQL injection. SQL injection adalah teknik memanipulasi perintah SQL
dengan memasukkan ke database server sehingga dapat dimanfaatkan untuk
mendapatkan informasi dan merubah database yang telah ada.
Pada makalah saya akan menjawab 3 poin di bawah ini:
1. Apa itu SQL?
2. Apa itu SQL injection?
3. Bagaimana SQL injection bisa terjadi?
//------- I SQL
SQL kependekan dari Structured Query Language, bahasa yang sering dipergunakan
untuk mengelola database relasional. Terdapat beberapa jenis SQL, salah satunya
adalah SQL-92. Merujuk kepada ANSI (American National Standar Institute), maka
SQL adalah bahasa standar untuk sistem manajemen database rasional.
Beberapa sistem database yang menggunakan SQL antara lain : Oracle,DB2, sybase,
MS SQL Server, Informix, Ingres, Interbase, PostgreSQL, MySQL, MS Acces.
Walaupun semua database yang disebutkan menggunakan SQL, kebanyakan mereka
memiliki perintah tambahan yang proprietary(hanya ada dan berlaku pada sistem
sendiri).
SQL sendiri memiliki 3 macam jenis perintah :
1. Data Defenition Language (DDL)
merupakan kelompok perintah yang digunakan untuk melakukan pendefenisian
database dan pendefenisian tabel. Dengan kelompok perintah dalam DDL inimaka
kita dapat membuat tabel, mengubah strukturnya, menghapus tabel, membuat indeks
untuk tabel, dan lain-lain yang bermuara pada pembentukan struktur database.
2. Data Manipulation Language (DML)
Perintah (statement) SQL digunakan untuk melakukan manipulasi data dalam
database, menambahkan (insert), mengubah (update), menghapus(delete), mengambil
dan mencari data (query). Perintah SQL standar seperti : select, insert, update,
delete, create, dan drop dapat digunakan untuk menyelesaikan tugas yang
diberikan berhubungan dengan data suatu database.
3. Data Control Language (DCL)
Termasuk dalam DCL adalah perintah untuk melakukan pendefenisian pemakai yang
boleh mengakses database dan apa saja privilegenya. Fasilitas ini tersedia pada
sistem manajemen database yang memiliki fasilitas keamanan dengan membatasi
pemakai dan kewenangannya.
Pada bahasan kali ini kita akan mempalajari Transact-SQL, bahasa SQL yang
terdapat pada Microsoft SQL Server.
Berikut ini adalah query pada SQL yang sering kita pergunakan dalan SQL
injection :
Insert
INSERT INTO namatabel (field1 [, field2 [, �]])
VALUES (nilai1 [,nilai2 [,�]]);
Select
SELECT{*| field1 [, field2 [,�]]} FROM namatabel [where kondisi];
//------- II SQL inejction
SQL Injection dapat terjadi ketika seseorang dapat memasukkan serangkaian
perintah SQL dalam query dengan memanipulasi data pada aplikasi database. Kita
akan membahas beberapa teknik SQL injection yang umum ditemukan pada Microsoft
Internet Information Server/Active Server Pages/SQL Server platform. Terdapat
beberapa cara dimana SQL dapat diinjeksikan pada sebuah aplikasi.
Contoh dari SQL statement :
select id, forename, surname from authors
Perintah ini akan menghasilkan kolom 'id', 'forename' dan 'surname' dari tabel
'authors', dengan menghasilkan semua baris pada setiap kolom yang relevan pada
tabel tersebut.
Hasil yang diinginkan dapat lebih spesifik dengan menyebutkan 'author' seperti
di bawah ini :
select id, forename, surname from authors where forename = 'john' and surname =
'smith'
Hal utama yang perlu dicatat adalah kita telah memiliki batas-batas dalam
pencarian yakni dengan menyebutkan 'john' sebagai forename dan 'smith' sebagai
surename. Seakan-akan 'forename' and 'surname' field telah didapatkan dari user
yang memberikan input.
Seorang attacker dapat menginjeksikan beberapa SQL dalam query ini dengan
memasukkan nilai pada aplikasi seperti dibawah ini :
Forename: jo'hn
Surname: smith
Query akan menjadi seperti ini :
select id, forename, surname from authors where forename = 'jo'hn' and surname =
'smith'
Ketika database menjalankan query,akan menghasilkan suatu kesalahan seperti yang
ditunjukkan berikut ini :
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'hn'.
Ini disebabkan karena dimasukkannya karakter single quote (tanda petik satu)
yang menyatakan breaks out. Selanjutnya database akan mencoba untuk mengeksekusi
'hn' dan gagal juga.
Jika attacker menspesifikasi data seperti ini :
Forename: jo'; drop table authors--
Surname:
Akan menyebakan tabel penulis akan dihapus. Ini dapat memberikan gambaran bahwa
beberapa metoda seperti membuang single quote dari input atau dengan mengabaikan
mereka dalam beberapa hal dapat memecahkan kasus ini. Tapi tidak semua itu benar,
karena masih terdapat beberapa kesulitan dalam aplikasinya. Pertama, tidak semua
user memasukkan data bertipe string. Jika user dapat memilih author dengan 'id'(yang
biasanya berupa angka), kita akan memiliki query seperti di bawah ini :
select id, forename, surname from authors where id=1234
Pada siatuasi seperti ini seorang attacker dapat dengan sederhana menambahkan
perintah SQL pada akhir dari input yang berupa angka. Beberapa delimiter juga
digunakan pada dialek(perintah khusus) SQL lainnya, seperti pada Microsoft Jet
DBMS, tanggal dapat diakhiri dengan karakter '#' character. Kedua, mengabaikan
single quote tidak permasalahan yang gampang.
Kita akan mengilustrasikan kasus di atas lebih jauh lagi dengan menggunakan
Active Server Pages (ASP) untuk 'login' , dengan mengakses SQL Server database
dan mencoba untuk masuk dengan autentifikasi yang tidak mungkin rasanya terjadi.
Berikut ini adalah kode dari halaman 'form' page, dimana user akan memasukkan
username dan password :
<HTML>
<HEAD>
<TITLE>Login Page</TITLE>
</HEAD>
<BODY bgcolor='000000' text='cccccc'>
<FONT Face='tahoma' color='cccccc'>
|