Sistem basis data perlu tersambung dengan aplikasi yang menggunakan data di basis data tersebut. Aplikasi ini dapat menjadi sebagai jalur serangan ke suatu basis data.
Berikut ini mekanisme serangan melalui aplikasi:
- Username:password untuk akses database tersimpan sebagai cleartext di aplikasi, atau di file konfigurasi aplikasi.
- Jika file aplikasi atau file konfigurasi tersebut dapat diakses, maka penyerang dapat mengakses database sesuai dengan hak akses username yang bocor.
- File konfigurasi umumnya menggunakan format yang mudah dibaca, seperti TXT, JSON, CSV , YAML dan sebagainya. Jika file ini dapat terbaca oleh penyerang, maka database dapat langsung diakses.
- Konfigurasi yang ada di file aplikasi lebih sulit dibaca, namun tetap dapat dilakukan dengan reverse engineering
Hubungan Aplikasi dengan server basis data
Berikut ini ilustrasi hubungan antara server aplikasi dengan server basis data.
Server aplikasi dan server server database dapat berada di server terpisah maupun di server yang sama.
Komponen Aplikasi berbasis web
Berikut ini komponen-komponen pada aplikasi berbasis teknologi web
Database berfungsi menyimpan data yang sifatnya non-volatile atau persisten.
Aplikasi berfungsi mengakses dan memanimulasi data di database. Contoh aplikasi ini dibuat dengan bahasa PHP, Java, Python dan sebagainya. Biasanya ada library khusus di masing-masing bahasa pemrograman itu sebagai konektor ke database.
Web Server berfungsi menampilkan data dari aplikasi sesuai dengan format HTML. Contoh web server ini misalnya Apache web server.
Web Client berfungsi menampilkan data dari web server ke pengguna. Contoh web browser ini misalnya Firefox, Chrome, Safari, dan sebagainya.
Password Database dari Command Line
Berikut ini contoh kebocoran username & password karena mengakses database dari command line.
Perintah login mysql:
mysql -uusername –ppassword
Perintah itu akan kelihatan pada process list Linux dengan perintah ps –aux:
waskita@downloader:~ % ps aux | grep mysql
waskita 39543 0.0 0.1 32296 4588 0 I+ 1:52PM 0:00.01 mysql -uroot -ppassword
waskita 39554 0.0 0.0 18804 1872 1 S+ 1:53PM 0:00.00 grep mysql
Hal ini menjadi masalah kalau server yang dipakai adalah server dengan banyak user. Solusinya adalah tidak mengetik password dari command line, tapi diketik ketika diminta oleh aplikasi mysql client.
Reverse Engineering Aplikasi
Aplikasi dapat berisi username dan password untuk mengakses database. Jika kode aplikasi ini bocor, maka akses ke database menjadi terbuka.
Reverse Engineer application software dapat dilakukan dengan berbagai cara:
- binary aplikasi umumnya dapat diakses
- kadang-kadang source code juga dapat diakses, misal aplikasi open source, atau kalau source code juga berhasil dibobol oleh penyerang.
- vulnerability dapat dipelajari dari binary ataupun source code
Deployment aplikasi:
- binary (C/C++)
- bytecode (Java, .NET)
- source (PHP, Python, Javascript)
Solusi menghindari reverse engineering adalah sebagai berikut:
- Deployment compiled binary code. Kode yang dijalankan di server produksi adalah hasil kompilasi, bukan source code ataupun interpreted.
- Obfuscated binary. Kode yang sudah dicompile dapat diacak sehingga secara fungsional sama, namun sangat sulit untuk direverse engineering.
- Obfuscated source. Pada bahasa interpreted, tidak ada opsi kompilasi, sehingga software harus dijalankan dalam bentuk source code. Untuk menyulitkan penyerang, dapat dilakukan pengacakan source code supaya sulit dilacak cara kerjanya. Biasanya dengan cara mengganti nama-nama variabel dan mengubah struktur software secara umum.
Application Obfuscation
The main obfuscation categories are as follows:
- Layout obfuscation, including identifier scrambling, removing of comments, and method locations
- Data obfuscation, affecting the data structures and data encoding
- Control obfuscation, including reordering techniques, adding irrelevant statements as “camouflage,” and more
- Adding code that tries to “break” decompilers. For example, for many years the most commonly used decompiler for Java was a freeware program called Mocha. An obfuscator appropriately called HoseMocha appends extra instructions after the return instruction, which does not affect the execution of the program but causes Mocha to crash.
Monitor Login
- Akses database dicatat dalam logfile , termasuk login
- Dapat mengetahui siapa saja yang mengakses database
- Perubahan akses (user baru, aplikasi baru, alamat baru). Serangan dapat nampak sebagai pola akses baru.
Data Obfuscation
- Data obfuscation, affecting the data structures and data encoding. For example, a two-dimensional array may be converted into a onedimensional array and spread around. An iteration of the form:
- int i=1;
- while (i < 100) {
- .. arr[i] ..
- i++
- }
SQL INJECTION MYTHS AND FALLACIES
- http://bobby-tables.com/
- http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies
WHAT IS SQL INJECTION?
Contoh
http://example.com/show.php?bugid=1234
Hasil query SQL ke database
SELECT * FROM Bugs
WHERE bug_id = $_GET[‘bugid’]
user input
Contoh URL:
http://example.com/show.php?bugid=1234 OR TRUE
Hasil Query SQL:
SELECT * FROM Bugs
WHERE bug_id = 1234 OR TRUE
WORSE SQL INJECTION (1)
URL
http://example.com/changepass.php?acctid=1234 &pass=xyzzy
Hasil query SQL ke database
UPDATE Accounts
SET password = SHA2(‘$password’)
WHERE account_id = $account_id
URL:
http://example.com/changepass.php?acctid=1234 OR TRUE &pass=xyzzy’), admin=(‘1
Hasil query SQL:
UPDATE Accounts
SET password = SHA2(‘xyzzy’), admin=(‘1’)
WHERE account_id = 1234 OR TRUE
Catatan
•admin=(‘1’) -> mengubah akun administrator
•OR TRUE -> mengubah password semua akun
Satu tanggapan pada “Keamanan Aplikasi Database”