utl_tcp, utl_http dan utl smtp adalah yang menghubungkan antara server diluar lingkungan database.utl_tcp adalah berguna untuk melakukan
koneksi TCP/IP diantara 2 host, tidak lewat penghubung database. Utl_http berguna untuk request http dari sebuah webserver dan utl_smtp untuk koneksi smtp mail antar host. Tool-tool ini memiliki celah keamanan yang besar. Menggunakan utl_tcp seorang user database bisa connect ke mesin lain yang dekat dari host tsb tanpa harus melewati system prompt.
Oracle 11g mempunyai solusi baru , kita dapat memberi grant untuk mengeksekusi privilege package ke semua orang tapi bisa menentukan resource mana yang dapat mereka panggil. Mudahnya utl_tcp dapat membatasi dalam memanggil hanya untuk beberapa IP address saja. Dan Mekanisme ini disebut Access Control List (ACL). Jika host ada didaftar ACL maka user bisa menggunakan utl_tcp. Beberapa eksekusi privillege di utl_tcp tidak cukup, meskipun begitu tidak mungkin proses dari luar mengambil alih utl_tcp package dan membuat koneksi yang tidak diperkenankan.
Cara kerjanya adalah sebagai berikut, kita create dahulu sebuah Access List
begin
dbms_network_acl_admin.create_acl (
acl => ‘utlpkg.xml’,
description => ‘Normal Access’,
principal => ‘CONNECT’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null
);
end;
Ini adalah parameter principal : ‘CONNECT’ berarti bahwa ACL bisa melakukan koneksi role, kita bisa mendefinisikan user atau role disini.
ACL dibuat sebagai file bernama utlpkg.xml
Setelah dibuat kita cek apakah ACL sudah ada
SELECT any_path
FROM resource_view
WHERE any_path like ‘/sys/acls/%.xml’;
Keluarannya adalah
ANY_PATH
—————————————————————————-
/sys/acls/ANONYMOUS/ANONYMOUS3553d2be53ca40e040a8c0680777c_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f93feb8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f944b8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f948b8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f94cb8dde040a8c068075b7_acl.xml
/sys/acls/all_all_acl.xml
/sys/acls/all_owner_acl.xml
/sys/acls/bootstrap_acl.xml
/sys/acls/ro_all_acl.xml
/sys/acls/ro_anonymous_acl.xml
/sys/acls/utlpkg.xml
Ada pada baris terakhir, ACL yang tadi dibuat. Selanjutnya kita ADD sebuah privilege ke ACL ini. Sebagai contoh kita coba membatasi ACL ini ke user SCOTT
Kita juga bisa menambahkan tanggal awal dan akhir.
begin
dbms_network_acl_admin.add_privilege (
acl => ‘utlpkg.xml’,
principal => ‘SCOTT’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null);
end;
Tambahkan host dan detail tambahan yang menuju ACL ini
begin
dbms_network_acl_admin.assign_acl (
acl => ‘utlpkg.xml’,
host => ‘www.pratesis.com’,
lower_port => 22,
upper_port => 55);
end;
Disini kita coba menspesifikan bahwa “user SCOTT hanya dapat memanggil host www.pratesis.com dan hanya lewat port 22 sampai 55 dan tidak diluar ini”
SQL> grant execute on utl_http to scott
Grant succeeded.
SQL> conn scott/tiger
Connected.
SQL> select utl_http.request(‘http://www.pratesis.com’) from dual;
select utl_http.request(‘http://www.pratesis.com’) from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at “SYS.UTL_HTTP”, line 1577
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
Kita lihat bahwa error 24247 : network access denied by access control list (ACL)
sedangkan user memanggil http pada port 80 , dimana itu diluar port antara 22-55 . Sehingga aksi tersebut diblock
Sekarang kita buat rule agar koneksi tersebut tidak dicegah
1 begin
2 dbms_network_acl_admin.assign_acl (
3 acl => ‘utlpkg.xml’,
4 host => ‘www.pratesis.com’,
5 lower_port => 1,
6 upper_port => 10000);
7* end;
8 /
PL/SQL procedure successfully completed.
SQL> conn scott/tiger
Connected.
SQL> select utl_http.request(‘http://www.pratesis.com’) from dual;
UTL_HTTP.REQUEST(‘HTTP://WWW.PRATESIS.COM’)
—————————————————————————
</iframe><!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”><HTML><HEAD><TITLE>Pratesis Home</TITLE>
<META http-equiv=Content-Language content=en-us>
Tapi ini hanya bekerja untuk www.pratesis.com , tidak dengan situs lain. Jika kita coba memanggil situs lain maka akan muncul pesan kesalahan
ORA 24247 lagi.
Untuk melihat detail dari ACL, kita query DBA_NETWORK_ACLS
select host, lower_port, upper_port, acl, aclid
from dba_network_acls
where ACL=’/sys/acls/utlpkg.xml’;
Dan ini adalah salah satu fitur security terbaru yang dari Oracle 11g yang bener2 sangat “improvement”.





Comments