This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Veritabanı GüvenliğiNisan 2018
Y. Anıl Akduyguhttps://yusufanilakduygu.wordpress.com/
• Veritabanının bulunduğu server; fiziksel olarak güvenli bir ortamda bulunmalıdır• Server’a gereksiz kişilerin erişimi engellenmelidir.• Veritabanı sunucusunda; uygulama veya web servisi veren yazılımlar çalışmamalıdır.• Veritabanı sunucusu bir Firewall’un arkasında olmalıdır.
• Oracle veritabanı yöneticilerinin; işletim sisteminde ayrı hesapları olmalıdır.• Oracle için ortak kullanılan oracle işletim sistemi kullanıcısı sadece
yazılım güncellemelerinde kullanılmalıdır.• MS SQL Server yönetimi için ayrı bir İşletim sistemi hesabı yaratılmalı ve bu hesap
Administrator’den farklı olmalıdır.
Veritabanı Güvenliği
Popüler Veritabanları
Veritabanı Güvenliği
VERİTABANI YAZILIM GÜVENLİĞİ
• Desteklenen Sürümler• Güvenlik Yamaları
Veritabanı Güvenliği
Veritabanı Sürümleri
Veritabanlarımız Destek edilen versiyonlarda olmalıdır.
Veritabanı Güvenlik yamaları takip edilmeli ve en son güvenlik yamaları uygulanmalıdır.
MS SQL Server Veritabanı Güvenlik Yamaları Kontrol
SELECTSERVERPROPERTY('ProductVersion') AS ProductVersion,SERVERPROPERTY('ProductLevel') AS ProductLevel,SERVERPROPERTY('edition') AS Edition,SERVERPROPERTY('ProductUpdateLevel') AS ProductUpdateLevel,SERVERPROPERTY('ProductBuildType') AS ProductBuildType,SERVERPROPERTY('ProductUpdateReference') AS ProductUpdateReference,SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,SERVERPROPERTY('ProductBuild') AS ProductBuild
Veritabanı Güvenliği
MS SQL Server Veritabanı Güvenlik Yamaları Kontrol
Veritabanı Güvenliği
Veritabanına Erişim – Database Access
Bir Veritabanına Erişirken Kullanılan Parametreler
• Host• Port• Kullanıcı Adı• Şifre• Veritabanı Adı
Bu parametreler bilindiği taktirde ağ üzerinde bir kısıtlama yoksa veritabanına erişim sağlanır.
Veritabanı Güvenliği
Oracle ve MS SQL Server Veritabanına Erişim
Oracle Veritabanına Erişirken Kullanılan Parametreler
• Host• Port• Kullanıcı Adı• Şifre• SID veya Servis Adı
MS SQL Server Veritabanına Erişirken Kullanılan Parametreler
• Host• Port• Kullanıcı Adı• Şifre• Veritabanı Adı
Veritabanı Güvenliği
Oracle Veritabanına Ağ üzerinde Erişim
Oracle ‘ın koştuğu sunucu üzerinde LISTENER adı verilen bir dinleyici prosess çalışır.Bu prosess’de veritabanına bağlantı için kullanılacak
• Host• Port• SID veya Servis Adı
Parametreleri tanımlanır.
Veritabanı Güvenliği
Oracle Veritabanına Ağ üzerinde Erişim
Veritabanı Güvenliği
Oracle Veritabanına Ağ üzerinde Erişim
Veritabanı Güvenliği
Oracle Veritabanına Ağ üzerinde Erişim Güvenliği sağlamak için
• Default Oracle Listener portlarını kullanmamalıyız• Default Oracle SID ve Server Adlarını kullanmamalıyız• Tahmin edilebilecek ( Örneğin Kurum Adı ) SID ve Servis adları kullanmamalıyız
Oracle Default Portları 1521 ve 1526 arası portlardır.
• BECOME USER• ALTER USER• DROP USER• CREATE ROLE• ALTER ANY ROLE• DROP ANY ROLE• GRANT ANY ROLE• CREATE PROFILE• ALTER PROFILE• DROP PROFILE• CREATE ANY TABLE• ALTER ANY TABLE• DROP ANY TABLE• INSERT ANY TABLE• UPDATE ANY TABLE• DELETE ANY TABLE• SELECT ANY TABLE
• CREATE ANY PROCEDURE• ALTER ANY PROCEDURE• DROP ANY PROCEDURE• EXECUTE ANY PROCEDURE• CREATE ANY TRIGGER• ALTER ANY TRIGGER• DROP ANY TRIGGER• CREATE TABLESPACE• ALTER TABLESPACE• DROP TABLESPACES• ALTER DATABASE• ALTER SYSTEM• SELECT ANY DICTIONARY• EXEMPT ACCESS POLICY• CREATE ANY LIBRARY• GRANT ANY OBJECT PRIVILEGE• GRANT ANY PRIVILEGE• AUDIT ANY
DBMS_ADVISOR: Veritabanı sunucusundaki dosyalara yetkisiz kişiler tarafından erişilmesini ve dosyaların bozulmasını neden olabilir.
DBMS_CRYPTO: Bu paket ile veritabanında bilgiler gizlenir ( kripto edilir ). Bu paket tüm kullanıcılara değil sadece gerekli uygulama kullanıcılarına
erişimine izin verilmelidir. Çünkü bu paket yetkisiz kişiler tarafından kullanıldığında veritabanında yapılan kriptolama işlemleri hakkında bilgiler elde
edilir.
DBMS_JAVA: Bu paket ile saldırgan veritabanı sunucusunda işletim sistemi komutları çalıştırabilir.
DBMS_JAVA_TEST: Bu paket ile saldırgan veritabanı sunucusunda işletim sistemi komutları çalıştırabilir.DBMS_JOB: Bu pakete erişen yetkisiz kişiler veritabanındaki iş kuyruklarına gereksiz olarak fazla iş yükleyerek sistemi aşırı yükleyip veritabanını ( Denial-of-Service) cevap veremez duruma getirebilirler.DBMS_LDAP: Veritabanında dışarıya veri aktarmak veya kullanıcıları yanıltmak için çeşitli hata mesajları üretmek amacıyla kullanılır.DBMS_LOB: Veritabanı sunucusu üzerinde yetkisiz kişiler tarafından CLOB, BFILE gibi dosyalara erişmek ve disk sistemlerinin dolmasına neden olarak veritabanını hizmet veremez ( Denial-of-Service) duruma getirmek amacıyla kullanılabilir.DBMS_OBFUSCATION_TOOLKIT: Amacı dışında kullanıldığında disk sistemi üzerinde bozukluklara neden olabilir.DBMS_RANDOM: Bu paket PUBLIC rolüne yetkilendirildiğinde; yetkisiz kişiler tarafından rastgele rakamlar üreten fonksiyon yaratmak için kullanılır. Bu fonksiyon kesinlikle kriptolama amaçlı kullanılmamalıdır.DBMS_SCHEDULER: Yetkisiz kişilerin veritabanı veya işletim sistemi job’larını çalıştırma imkânı sağlar.DBMS_SQL: Bu pakete giren parametre ( Dinamik SQL ) kontrol edilmediği taktirde; bir tür SQL injection olan yetki yükseltme ( privilege escalation) yapılabilir.DBMS_XMLGEN: Bu paket ile SQL-injection yapılıp tüm veritabanı üzerinde taramalar yapılabilir.DBMS_XMLQUERY: Veritabanındaki kritik bilgileri aramak için kullanılabilir ( Müşteri bilgileri, kredi kart numaraları gibi)
Veritabanı Yetkileri - ORACLE
VERİTABANINDAKİ KRİTİK SİSTEM PAKETLERİ
UTL_FILE: İşletim sisteminde bulunan dosyalara erişimi sağlar. Bu paket ile saldırgan hassas bilgilerin bulunduğu dosyaları okuyabilir.UTL_INADDR: Paketi ile SQL-injection saldırıları yapılabilir.UTL_TCP: Paketi veritabanının kurulduğu sunucudan TCP paketleri okunmasını veya yazılmasını sağlarUTL_MAIL: Paketi ile mail hizmeti veren bir sunucudan mail gönderimi yapılabilir.UTL_SMTP: Paketi ile mail hizmeti veren bir sunucudan mail gönderimi yapılabilir.UTL_DBWS: Web servislerinden gelen paketlere erişim sağlanabilir ve bu paketlerin içeriği bozulabilir.UTL_ORAMTS: Veritabanındaki hassas bilgilerin web servislerine gönderilmesi amacı ile kullanılabilir.UTL_HTTP: Veritabanındaki hassas bilgilerin web servislerine gönderilmesi amacı ile kullanılabilir.HTTPURITYPE: Veritabanındaki hassas bilgilerin web servislerine gönderilmesi amacı ile kullanılabilir.DBMS_SYS_SQL: Veritabanında başka bir kullanıcının kimliği ile kod çalıştırmak için kullanılabilir.DBMS_BACKUP_RESTORE: Veritabanı sunucusundaki dosyalara erişim amaçlı kullanılabilir.DBMS_AQADM_SYSCALLS: Yetkisiz kişilerin SYS kullanıcı gibi SQL komutları çalıştırmasını sağlar.DBMS_REPCAT_SQL_UTL: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.INITJVMAUX: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.DBMS_STREAMS_ADM_UTL: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.DBMS_AQADM_SYS: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.DBMS_STREAMS_RPC: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.DBMS_PRVTAQIM: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.LTADM: Yetkisiz kişilerin SYS kullanıcısı gibi SQL komutları çalıştırmasını sağlar.WWV_DBMS_SQL: Oracle Application Express modülün ’den dinamik SQL lerin çalıştırılması için kullanılabilir.WWV_EXECUTE_IMMEDIATE: Oracle Application Express modülün ‘den dinamik SQL lerin çalıştırılması için kullanılabilir.DBMS_IJOB: Saldırganın veritabanı job’larını başka kullanıcılar ile çalıştırıp, job’larını özelliklerini değiştirmek için kullanılabilir.DBMS_FILE_TRANSFER: Bir veritabanı sunucusundan başka bir veritabanı sunucusuna dosya aktarmak için kullanılır.
Veritabanı Yetkileri - ORACLE
KRİTİK TABLOLARA ERİŞİMİN İNCELENMESİ
Veritabanında aşağıdaki listede verilen kritik tablolara erişen kullanıcılar belirlenmelidir.
MS SQL Server Opsiyonları(Aşağıdaki Sql Server opsiyonlarının hepsi DISABLE olmalıdır. )
select name,value_in_use from master.sys.configurations WHERE namein('Remote access' , -- 0'Ad hoc distributed queries', --0'clr enabled' , --0'Database Mail XPs' , --0'SQL Mail XPs' , --0'scan for startup procs' , --0'remote admin connections' , --0'Ole Automation Procedures' , --0'Cross db ownership chaining', --0'xp_cmdshell' --0);
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
O7_DICTIONARY_ACCESSIBILITY
O7_dictionary_accessibility parametresi Oracle kullanıcılarının SYS şemasındaki objelere ( dictionary, veritabanı kataloğu )SELECT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE, INSERT ANY TABLE, EXECUTE ANY PROCEDURE yetkileri olmasına karşın erişmesini engellemek için kullanılır. Bu parametrenin değeri FALSE olmalıdır. Örneğin bu parametrenin değeri FALSE ise; SELECT ANY TABLE yetkine sahip bir kullanıcı SYS şemasındaki objelere erişemez.
OS ROLES Os_roles parametresi ile veritabanındaki rollerin, işletim sistemi ile mi yoksa Oracle veritabanı ile mi yönetileceği belirlenir. OS_ROLES değeri TRUE ise veritabanındaki tüm roller işletim sistemi ile yönetilir. Eğer bu değer FALSE ise veritabanındaki roller Oracle tarafından yönetilir. OS_ROLES parametresinin değeri FALSE olmalıdır.
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
REMOTE_OS_AUTHENT
Remote_os_authent parametresi veritabanına dışarıdan yapılan bağlantılarda kimlik denetiminin OS_AUTHENT_PREFIX parametresine bakılarak yapılıp yapılmayacağını gösterir.REMOTE_OS_AUTHENT parametresinin değeri FALSE olmalıdır.
REMOTE_OS_ROLES
Remote_os_roles parametresi ile işletim sistemi rollerinin uzak istemciler ( remote clients ) için kullanıp kullanılmayacağını belirlenir. Bu değer FALSE ise uzak istemciler için roller Oracle tarafından yönetilir.REMOTE_OS_ROLES parametresinin değeri FALSE olmalıdır.
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
UTIL_FILE_DIR
Utl_file_dir parametresi ile PL/SQL prosedürleri içinde I/O işlemleri için kullanılacak dizin adları belirlenir. Güvenlik açısında bu parametrenin kullanımı yerine veritabanında DIRECTORY tanımları yapılmalıdır.UTL_FILE_DIR parametresinin değeri boş olmalıdır.
SEC_CASE_SENSITIVE_LOGON
Oracle veritabanı şifrelerinde büyük ve küçük harf ayrımının yapılmasını sağlayan parametredir.SEC_CASE_SENSITIVE_LOGON parametresinin değeri TRUE olmalıdır. Bunun anlamı şifrelerde büyük ve küçük harflerin kullanılabileceğini gösterir.
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
SEC_MAX_FAILED_LOGIN_ATTEMPTS
Oracle veritabanında bir istemcinin, veritabanına kimlik denetimi yaparken en fazla kaç tane deneme yapacağını belirler. Bu parametreden fazla sayıda deneme yapılırsa sunucu tarafından, istemcinin bağlantısı kesilir.SEC_MAX_FAILED_LOGIN_ATTEMPTS parametresinin değeri 10 olmalıdır.
SEC_PROTOCOL_ERROR_FURTHER_ACTION
Bir istemciden veritabanına hatalı paketler gönderildiğinde veritabanının bu paketlere nasıl cevap vereceği bu parametre ile belirlenir. Veritabanına yapılacak olan DDOS ataklarını önlemek için kullanılacak bir parametredir.SEC_PROTOCOL_ERROR_FURTHER_ACTION parametresinin değeri '(DROP,3)' olmalıdır.
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
SEC_PROTOCOL_ERROR_TRACE_ACTION
Bir istemciden kötü amaçlı network paketleri veritabanı gönderildiğinde, veritabanının hangi seviyede log üreteceğini belirleyen parametredir. Veritabanına DDOS atakları yapıldığında minimal seviyede log üretmek için kullanılır.SEC_PROTOCOL_ERROR_TRACE_ACTION parametresinin değeri 'LOG' olmalıdır.
SEC_RETURN_SERVER_RELEASE_BANNER
Veritabanı sürümü hakkında istemcilere detaylı bilgi gönderip gönderilmemesi bu parametre ile belirlenir. Saldırganların veritabanı sürümü hakkında bilgi edinmeleri kullanacakları açıkları daha çabuk seçmelerini sağlar.SEC_RETURN_SERVER_RELEASE_BANNER parametresinin değeri FALSE olmalıdır.
Veritabanı Parametreleri– Oracle
ORACLE Veritabanı Parametreleri
SQL92_SECURITY
Bir kullanıcının bir tablo üzerinde DELETE ve UPDATE komutlarını çalıştırabilmesi için o tabloya SELECT yetkisinin olma zorunluluğunu belirleyen parametredir.SQL92_SECURITY parametresinin değeri TRUE olmalıdır.
RESOURCE_LIMIT
Resource_limit parametresi veritabanı profillerinde kaynak kısıtlamalarının geçerli olup olmamasını belirler.RESOURCE_LIMIT parametresinin değeri TRUE olmalıdır.Oracle 11g ve Oracle 12c sürümünde RESOURCE_LIMIT parametresi aşağıdaki SQL ile kontrol edilir.
Veritabanı Güvenliği - Audits
AUDITS
Denetleme en genel tanımıyla veri tabanında yapılan işlemlerin belirlenmiş kurallara göre izlenmesi ve kayıt edilmesidir.
Burada önemli noktalardan bir tanesi, hangi kurallara göre izleme ve kayıt yapacağımızın belirlenmesidir. Veritabanında kısa bir süre içinde milyonlarca işlem olabilir; Önemli olan kanıt altına alınmaya değer işlerin belirlenmesidir. Kayıt altına alınması gereken işlemlerin belirlenmesi bizim Denetleme Politikamızı ( Auditing Policy ) bağlıdır.
Denetimde esas
• Denetim kayıtlarının değiştirilemeyeceği ve silinemeyeceği• Denetim kurallarının değiştirilemeyeceği veya devre dışı bırakılamayacağı
Garanti altında olmalıdır.
Veritabanı Güvenliği - Audits
AUDITS
Veritabanı denetlemesi sayesinde;
• Veritabanında bulunan bilgilerin tutarlı olduğu, yetkisiz kişilerce değiştirilmediği kanıtlanır.• Veritabanında yapılan şüpheli hareketler sorgulanabilir ve kimin tarafında yapıldığı bulunur.• Veritabanında yetkisiz işlem yapmak isteyen kullanıcılar için caydırıcıdır.• Veritabanında yetkisiz kişilerin yaptığı işlemler belirlenir.• Güvenlik yönetmeliklerine uyum sağlanır.• Veritabanı performansı ile ilgili bilgiler toplanır.
Veritabanı Güvenliği – Oracle Audits
Oracle Standart Auditing
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Audits
Veritabanı Güvenliği – Oracle Unified Audit
ORACLE Unified Auditing
Birleşik denetleme multitenant veritabanlarında hem takılabilir veritabanı ( PDB ) hem de Konteyner veritabanı (CDB) etki alanında yönetilebilir.
Birleşik denetleme ile beraber veritabanında yapılan standart işlemlere ( Database kapama açma, veritabanı parametrelerini değiştirme, DML, DDL, logon, logoff ve benzeri ) ek olarak aşağıdaki veritabanı özellikleri de denetlenir ve tek bir görüntü( UNIFIED_AUDIT_TRAIL) ile sorgulanır.
Oracle Database Real Application Security, Oracle Recovery Manager,Oracle Data Pump,Oracle Data Mining, Oracle Database Vault,Oracle Label SecurityOracle SQL*Loader direct path yüklemeleri
Veritabanı Güvenliği – Oracle Unified Audit
ORACLE Unified Auditing
Veritabanı ilk yaratıldığında birleşik denetleme izleri SYSAUX tablespace içinde SYSAUD kullanıcısında saklanır. Veritabanı denetim izlerine; UNIFIED_AUDIT_TRAIL görüntüsü ile erişilir. Birleşik denetleme ye geçiş ile beraber denetim izlerinin SYSAUX dışında ayrı bir tablespace’e taşınması önerilmektedir. Birleşik denetleme denetim izlerini tutan tablolar Read-only kiptedir.
Denetleme işlemeleri SYS kullanıcısına ek olarak AUDIT_ADMIN rolüne sahip kullanıcılar tarafından yönetilir. Denetim izlerine ise AUDIT_VIEWER rolüne sahip kullanıcılar erişebilir.Veritabanı write kipinde iken denetim izleri veritabanındaki birleşik denetim izine yazılır. Veritabanı write kipinden çıktığında oluşan denetim izleri ise $ORACLE_BASE/audit/$ORACLE_SID dizinindeki dosyalara yazılır. Veritabanı tekrar write kipine getirildiğinde bu dosyalar istenirse veritabanına yüklenir.
SYSDBA rolüne sahip SYS kullanıcısının işlemleri veritabanındaki birleşik denetim izine yazılır ve SYS kullanıcısı da diğer kullanıcılar gibi denetlemeye tabi tutulur.
Birleşik denetlemede denetim izleri Queued Write kipinde SGA’ de tutulur ve toplu olarak veritabanı tablolarınız yazılır. SGA’ de bulunan tüm kayıtlar istenildiği an veritabanına Flush edilebilir. Birleşik denetleme izleri istenirse Immediate-Write kipine getirilip yapılan tüm değişiklikler veritabanına anında yazılır. Queued Write kipinde veritabanı performansı denetlemeden çok az etkilenir.
Veritabanı Güvenliği – Oracle Unified Audit
ORACLE Unified Auditing
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.200.11.14)(PORT=1521)))The command completed successfully
[oracle@ol7 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@ol7 lib]$ make -f ins_rdbms.mk uniaud_on ioracle
Veritabanı Güvenliği – Oracle Unified Audit
ORACLE Unified Auditing
SQL> CREATE AUDIT POLICY AUDIT_SQLPLUS2 ACTIONS ALL 3 WHEN 'INSTR(UPPER(SYS_CONTEXT(''USERENV'', ''CLIENT_PROGRAM_NAME'')), ''SQLPLUS'') > 0'4 EVALUATE PER SESSION;
Audit policy created.
AUDIT POLICY Komutu
Denetleme politikası yaratıldıktan sonra AUDIT komutu kullanarak denetim politikasını aktif hale getirmemiz gerekir. Ek olarak denetim politikasının hangi kullanıcılar için aktif olacağı ve denetlenecek komutun hangi durumda ( başarılı, başarısız veya hem başarılı hem başarısız olduğunda ) denetleneceği AUDIT komutu ile tanımlanır. Birleşik denetleme kipi haricinde AUDIT komutu ise denetleme politikaları tanımlamak için kullanılmaktadır. Veritabanı birleşik denetlemeye geçtiği andan itibaren AUDIT komutunun kullanımı değişmektedir
Veritabanı Güvenliği – MS SQL Server Network Encryption
Veritabanı Güvenliği – MS SQL Server Network Encryption
Veritabanı Güvenliği – MS SQL Server Network Encryption
Veritabanı Güvenliği – Data Encryption
Data Encryption- ORACLE Advanced Security
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
MS SQL Server Transparent Data Encryption ( TDE )
SQL Server’da bir Veritabanının *.mdf datafile’ları başka bir SQL Server’a taşınarak veritabanı erişim sağlanabilir. Burada yapılması gereken nokta; Veritabanı dosyalarına erişimi engellemek veya veritabanı içindeki bilgileri şifreliyerekveritabanı taşınsa bile verilerin decrypt edilmesini engellemektir.
SQL server içinde encryption key master database’de tutulur.