1] 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?
[2] 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];
[3] II SQL inejction
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 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.
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 :
Kode untuk 'process_login.asp' :