Oracle SQL Firewall nedir ?
23ai versiyonu ile gelen yeniliklerden olan Oracle SQL Firewall, veritabanı erişimini yalnızca yetkili SQL ifadelerine veya belirlenmiş bir kullanıcı için bağlantılara kısıtlayarak yaygın veritabanı saldırılarına karşı gerçek zamanlı koruma sağlar.
SQL enjeksiyon saldırıları, anormal erişim ve kimlik bilgisi hırsızlığı veya kötüye kullanımı risklerini azaltır, olası SQL enjeksiyon saldırılarını önler veya tespit eder.
SQL Güvenlik Duvarını, veritabanı tarafından hangi SQL ifadelerinin işlenmesine izin verildiğini kontrol etmek için kullanabilirsiniz. Ayrıca, SQL Firewall, veritabanı bağlantılarını kısıtlamak için IP adresi gibi oturum bağlamı verilerini kullanabilir. Yetkisiz SQL ve veritabanı bağlantısı kaydedilebilir ve engellenebilir.
Oracle veritabanlarına yönelik SQL enjeksiyon saldırıları ve yetkisiz SQL sorgularını engellemek için tasarlanmış bir güvenlik özelliğidir.
Oracle SQL Firewall Lisanslama Bilgileri
Oracle SQL Firewall özelliğini kullanabilmek için lisans alınması gerekmektedir. Bu özellik iki farklı şekilde lisanslanabilir:
1. Oracle Database Vault ile Birlikte
-
Oracle Database Vault içinde dahili olarak gelmektedir
-
Oracle Database Vault, Oracle Database’in ek ücretli bir seçeneğidir
-
Lisans detayları için: Oracle Database Lisanslama Bilgileri Kullanıcı Kılavuzu‘na bakılmalıdır
2. Oracle Audit Vault and Database Firewall (AVDF) ile Birlikte
-
Oracle AVDF ürününün bir parçası olarak sunulmaktadır
-
AVDF ayrı bir Oracle ürünüdür ve lisans gerektirir
-
Lisans detayları için: Oracle Database Lisanslama Bilgileri Kullanıcı Kılavuzu referans alınmalıdır
SQL Firewall Nedir?
SQL Firewall, veritabanına gelen SQL isteklerini analiz ederek:
-
Yetkisiz erişimleri engeller
-
SQL enjeksiyon saldırılarını tespit eder
-
Anormal sorgu desenlerini bloke eder
-
Veritabanı aktivitelerini izler ve raporlar
Temel Özellikleri
-
SQL İfade Kontrolü: Sadece beyaz listedeki SQL ifadelerine izin verir
-
Anomali Tespiti: Normal dışı sorgu desenlerini tanır
-
Bağlam Bilgisi: Kullanıcı, uygulama, zaman gibi bağlamları dikkate alır
-
Gerçek Zamanlı Koruma: Şüpheli sorguları anında engeller
Kurulum ve Yapılandırma
-- SQL Firewall'u etkinleştirme
BEGIN
DBMS_SQL_FIREWALL.ENABLE;
END;
/
-- SQL Firewall'u kapatma
BEGIN
DBMS_SQL_FIREWALL.DISABLE;
END;
/
-- SQL Firewall durumu :
select status from dba_sql_firewall_status;
-- Örnek bir politika oluşturma
BEGIN
DBMS_SQL_FIREWALL.CREATE_POLICY(
policy_name => 'HR_POLICY',
description => 'HR şeması için koruma politikası',
enabled => TRUE
);
END;
/
-- Politikaya kural ekleme
BEGIN
DBMS_SQL_FIREWALL.ADD_ALLOWED_SQL(
policy_name => 'HR_POLICY',
sql_text => 'SELECT * FROM employees WHERE employee_id = :1'
);
END;
/
Örnek Senaryolar
Senaryo 1: SQL Enjeksiyon Engelleme
Saldırı Girişimi:
SELECT * FROM users WHERE username = 'admin' AND password = '123' OR '1'='1'
SQL Firewall Tepkisi:
-
Bu sorgu normal kullanıcı girişi desenine uymadığı için engellenecek
-
Alarm kaydı oluşturulacak
Senaryo 2: Yetkisiz Tablo Erişimi
Saldırı Girişimi:
SELECT * FROM salary_data WHERE employee_id = 100
SQL Firewall Tepkisi:
-
Eğer kullanıcının bu tabloya erişim izni yoksa veya sorgu politika kurallarına uymuyorsa engellenecek
Senaryo 3: Bir kullanıcıyla olan tüm etkileşimleri izlemek için bir yakalama süreci
Yakalamanın başlatılması:
begin
dbms_sql_firewall.create_capture (
username => 'user1',
top_level_only => true,
start_capture => true);
end;
/
Yakalanan işlemlerin görüntülenmesi:
select command_type,
current_user,
client_program,
os_user,
ip_address,
sql_text
from dba_sql_firewall_capture_logs
where username = 'USER1';
Yakalamanın durdurulması:
exec dbms_sql_firewall.stop_capture('user1');
Yakalama kayıtlarının temizlenmesi:
exec dbms_sql_firewall.flush_logs;
exec dbms_sql_firewall.purge_log('user1', null, dbms_sql_firewall.capture_log);
exec dbms_sql_firewall.purge_log('user1', systimestamp-30, dbms_sql_firewall.violation_log);
exec dbms_sql_firewall.purge_log('user1', systimestamp-30, dbms_sql_firewall.all_logs);
İzleme ve Raporlama
SQL Firewall ile ilgili bilgileri aşağıdaki tablo ve view’lerden görebiliriz :
EVENT_LOG$
FW_ALLOW_LIST$
FW_ALLOW_LIST_CONTEXT$
FW_ALLOW_LIST_SQL$
FW_CAPTURE$
FW_STATUS$
SQL_LOG$
VIOLATION_LOG$
DBA_SQL_FIREWALL_ALLOWED_IP_ADDR
DBA_SQL_FIREWALL_ALLOWED_OS_PROG
DBA_SQL_FIREWALL_ALLOWED_OS_USER
DBA_SQL_FIREWALL_ALLOWED_SQL
DBA_SQL_FIREWALL_ALLOW_LISTS
DBA_SQL_FIREWALL_CAPTURES
DBA_SQL_FIREWALL_CAPTURE_LOGS
DBA_SQL_FIREWALL_SESSION_LOGS
DBA_SQL_FIREWALL_SQL_LOGS
DBA_SQL_FIREWALL_STATUS
DBA_SQL_FIREWALL_VIOLATIONS
Avantajları
-
Güvenlik Artışı: SQL enjeksiyon riskini azaltır
-
Uyumluluk: PCI DSS, GDPR gibi standartlara uyumu kolaylaştırır
-
Performans: Zararlı sorguların veritabanı yükü oluşturmasını engeller
-
Esneklik: İnce ayarlanabilir politika kuralları sunar
Sınırlamalar
-
Başlangıçta yapılandırma gerektirir
-
Yanlış yapılandırma yanlış pozitif sonuçlara neden olabilir
-
Oracle Database Enterprise Edition gerektirir
En İyi Uygulamalar
-
Önce “öğrenme modu”nda çalıştırın
-
Politika kurallarını kademeli olarak sıkılaştırın
-
Düzenli olarak logları gözden geçirin
-
Kritik şemalar için özel politikalar oluşturun
SQL Firewall, Oracle veritabanı güvenliğini önemli ölçüde artıran ve özellikle hassas verileri korumak için değerli bir araçtır.
SQL Firewall LiveLabs workshop videosuna buradan erişebilirsiniz.