Keamanan Aplikasi Database

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

https://xkcd.com/327/Exploits of a Mom

Satu tanggapan pada “Keamanan Aplikasi Database”

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *