Kategori
Security

SQL Injection

Seperti yang telah Anda ketahui bahwa teknologi informasi sudah berkembang sangat pesat hingga saat sekarang ini. Sebagai contoh, internet sudah membawa kita kedalam dunia baru yang disebut dengan cyberspace, dimana kita dapat berkomunikasi melalui komputer yang menawarkan berbagai aktivitas dari dunia nyata ke dunia virtual atau maya tanpa adanya batas jarak dan waktu.

Akan tetapi, teknologi internet menyebabkan sebagian pihak memanfaatkan kesempatan yang ada untuk melakukan berbagai jenis kejahatan, seperti pengancaman, pencurian atau kejahatan lainnya di dunia maya. Salah satu teknik yang paling umum dilakukan oleh para hacker muda dalam melakukan serangan adalah SQL injection.

Structured Query Language (SQL) digunakan untuk melakukan query, mengoperasikan, dan mengelola sistem database seperti SQL server, Oracle, atau MySQL. Penggunaan umum SQL konsisten di semua sistem databatase, namun ada detail perbedaan tertentu yang khusus untuk setiap sistem.

Definisi

SQL Injection merupakan teknik eksploitasi dengan cara memodifikasi perintah sql pada form input aplikasi yang memungkinkan penyerang untuk dapat mengirimkan sintaks ke database aplikasi. SQL Injection juga dapat didefinisikan sebagai teknik eksploitasi celah keamanan pada layer database untuk mendapatkan query data pada sebuah aplikasi.

Beberapa Cara Menutup Bug SQL Injection - MetaXploit

SQL Injection dapat digolongkan kedalam. 5 (lima) risk severity, yaitu sistem penilaian risiko yang dihitung dengan menggunakan kalkulator OWASP berdasarkan hasil analisis faktor kemungkinan terjadi (likelihood) dan faktor dampak (impact) pada kerentanan yang berhasil diidentifikasikan.Tabel 1. dibawah menunjukkan risk severity.

Tabel 1. Risk Severity

Tujuan SQL Injection

Cara Kerja SQL Injection

SQL Injection yang dilakukan oleh hacker pasti memiliki tujuan, tidak mungkin hanya sebatas iseng saja. Berikut beberapa tujuan SQL Injection yang sering banyak ditemui:

  • Bypass Otentikasi

Jika berhasil masuk kedalam sistem, hacker akan mudah melakukan bypass tanpa perlu menggunakan username dan password yang benar untuk bisa mendapatkan akses. Cukup dengan memasukan script SQL Injection pada form yang masih terbuka.

  • Pencurian Informasi

Hacker memungkinkan untuk mengambil semua informasi yang ada pada website terutama informasi yang bersifat sensitif seperti username dan password.

  • Delete Data

SQL Injection memungkinkan untuk hacker menghapus semua data yang tersimpan di database, jika sudah terjadi seperti ini dan tidak ada backup database maka akan sangat berbahaya. Jadi Anda perlu melakukan backup data secara berkala untuk tujuan keamanan data.

  • Modify Data

Selain menghapus data, hacker dengan mudah mengubah data yang tersimpan di database sehingga menyebabkan data tidak valid. Jadi Anda perlu memiliki backup data jika sewaktu-waktu data dirubah oleh orang yang tidak bertanggung jawab.

  • Command Execution

Pada beberapa database, Anda sebagai user bisa mengakses operating system menggunakan server database, kalau sudah seperti ini hacker bisa dengan mudah menyerang semua yang ada pada website Anda.

Cara Kerja SQL Injection

SQL injection menjadi salah satu tindakan hacking yang digemari oleh para attacker. Salah satu alasannya adalah masih banyak website yang kurang memerhatikan celah keamanan sistemnya yang bisa dimanfaatkan oleh pengguna yang tidak bertanggung jawab.

Padahal, jika dibiarkan tindakan SQL injection ini akan memberikan dampak buruk terhadap website tersebut, seperti menampilkan daftar pengguna yang tidak sah, penghapusan seluruh isi tabel, mematikan database atau bahkan penyerang memperoleh hak administratif kedalam sistem database. Lalu, bagaimana cara kerja dari SQL injection?

Cara Kerja SQL Injection

Disini saya akan menjelaskan cara kerja SQL injection secara sederhana. Setiap pengguna dapat mengakses suatu sistem melalui proses login. Proses login ini digunakan untuk menyaring dan mengetahui identitas dari pengguna yang mengakses sistem tersebut. Pengguna dapat mengisikan username dan password pada kolom isian yang biasanya terdapat di halaman pertama website.

Pada dasarnya, proses login sering diterapkan untuk meningkatkan keamanan (security) dari sistem tersebut sehingga pengguna yang tidak terdaftar dalam database tidak dapat masuk ke sistem itu. Akan tetapi, SQL injection ini dapat merusak keamanan yang telah dirancang sedemikian rupa.

Misalnya, terdapat pengguna yang memiliki username “Hakim” dan password “adaaja”. Jika pengguna melakukan inputan sesuai data tersebut, maka tidak akan menjadi masalah pada sistem database karena memang data itu yang tersimpan didalamnya. Kode SQL dapat dilihat berikut ini.

Select * from User where userName = ‘joko’ AND password = ’adaaja'
 
Akan tetapi, jika pengguna membuat username menjadi “Hakim #” maka karakter ‘#’ akan menyebabkan karakter selanjutnya tidak dianggap sebagai kode SQL. Akibatnya, maka username Hakim dapat tetap input ke sistem tanpa harus mengetahui password tersebut.

Atau cara kerja SQL injection berikutnya adalah dengan mengganti password menjadi kode SQL, yaitu password = ‘ OR 1=1’. Yang terjadi adalah pengguna “Hakim” tetap berhasil login ke sistem karena inputan password tersebut merupakan kodel SQL yang menandakan bahwa proses login berhasil.

Remote Command Execution

Melakukan perintah eksekusi melalui database yang memungkinkan penyerang untuk melakukan compromise pada sistem operasi host atau target.

Satu dari banyak penggunaan SQL Injection melibatkan bypass pada sebuah proses autentikasi login aplikasi, umumnya form login username dan password pada memiliki konstruksi SQL Query seperti ini:

Otentikasi biasa:

SELECT count (*) FROM Users WHERE Username=’Ronaldo’ AND Password= ‘Butterfly’

Otentikasi yang dilakukan attacker:

SELECT count (*) FROM Users WHERE Username=’qwert’ or 1=1 — ’ AND Password= ‘zxcvb’

Input yang masuk ke database seharusnya berisikan username (Ronaldo) dan password (Butterfly). Input yang dimasukkan attacker “qwert” di form email tidaklah penting karena setelah itu ada tanda “or 1=1 — “ dimana artinya setiap input akan selalu dianggap true, karena 1=1 adalah alias dari true dan or adalah kondisi dimana jika ada salah 1 atau lebih dari 2 atau lebih input true maka otentikasi akan dianggap true oleh sistemdan form password pun bisa diisi sesuka hati karena dibelakang tanda “– “ itu hanya dianggap sebagai syntax comment pada SQL.

Berikut merupakan contoh source code yang memiliki celah untuk terkena sql injection, pada bagian request.get Parameter data yang diterima SQL query dikirim langsung dari HTTP request tanpa validasi dari data tersebut (jumlah min/max karakter, jenis karakter yang diizinkan atau karakter-karakter berbahaya). Kesalahan ini menimbulkan celah untuk menjadikan SQL sebagai payload dan mengubah fungsi statement yang ada.

String DRIVER = “com.ora.jdbc.Driver”;

String DataURL = “jdbc:db://localhost:5112/users”;

String LOGIN = “admin”;

String PASSWORD = “admin123”;

Class.forName(DRIVER);

//Make connection to DB

Connection connection = DriverManager.getConnection(DataURL, LOGIN, PASSWORD);

String Username = request.getParameter(“USER”); // From HTTP request

String Password = request.getParameter(“PASSWORD”); // From HTTP request

int iUserID = -1;

String sLoggedUser = “”;

String sel = “SELECT User_id, Username FROM USERS WHERE Username = ‘” +Username + “‘ AND Password = ‘” + Password + “‘”;

Statement selectStatement = connection.createStatement ();

ResultSet resultSet = selectStatement.executeQuery(sel);

if (resultSet.next()) {

iUserID = resultSet.getInt(1);

sLoggedUser = resultSet.getString(2);

}

PrintWriter writer = response.getWriter ();

if (iUserID >= 0) {

writer.println (“User logged in: ” + sLoggedUser);

} else {

writer.println (“Access Denied!”)

Mempelajari SQL sangat penting untuk melakukan serangan SQL Injection, namun ada cukup banyak juga tools serangan otomatis untuk melakukan SQL Injection.

 

Cara Mencegah SQL Injection

Proses SQL Injection

Proses SQL Injection

Untuk meminimalisir semua efek yang diakibatkan dari serangan SQL Injection, Anda bisa melakukan beberapa tindakan seperti berikut ini, yaitu:

1. Sesuaikan input box

Jika form input box tujuannya untuk menuliskan nama, maka berikan khusus untuk karakter saja, jika untuk mengisikan nomor telepon maka isilah dengan numbering saja sehingga tindakan SQL Injection bisa dihindarkan.

2. Batasi input box

Untuk lebih amannya dalam setiap box dibatasi jumlah karakternya, contoh saja untuk nama paling tidak diberikan 30 karakter atau disesuaikan sesuai dengan kebutuhan, sehingga jika ada percobaan SQL Injection yang masuk akan terkendala oleh jumlah  karakter yang tersedia.

3. Filter user

Melakukan filter kepada inputan setiap user, terutama yang menggunakan karakter kutip tunggal (Validation Input) karena ini menjadi salah satu trik yang dilakukan hacker untuk SQL Injection.

4. Mematikan error handling

Jika terjadi error, Anda perlu mematikan fitur notifikasi pesan error yang keluar dari SQL Server. Jika sampai ada, ini bisa menjadi celah bagi hacker untuk melakukan eksploitasi lebih dalam percobaan SQL Injection.

5. Nonaktifkan fitur standart SQL

Fitur-fitur standart yang ada di SQL seperti Stored Procedures dan Extend Stored Procedures lebih baik untuk dimatikan saja, karena rawan terkena SQL Injection.

6. Setting Privilege

Silahkan Anda rubah pada bagian ‘Stratup and run SQL Server’ dengan setting low privilege user pada menu SQL Server Security tab.

Ref : [1][2][3][4]