veritabanı güvenliği - wordpress.com · veritabanı güvenliği oracle - kullanıcı yönetimi...
TRANSCRIPT
Veritabanı GüvenliğiNisan 2018
Y. Anıl Akduyguhttps://yusufanilakduygu.wordpress.com/
https://yusufanilakduygu.wordpress.com/2018/05/07/veritabani-guvenligi-notlari/https://www.dbsecurity.info/
https://github.com/yusufanilakduygu/Oracle-DB-Security-Checkshttp://www.dr.com.tr/Kitap/Oracle-Veritabani-Guvenligi/Anil-Akduygu/Egitim-Basvuru/Bilgisayar/urunno=0000000712597
Veritabanı Güvenliği
Veritabanı Güvenliği
Güvenlik Tabakaları – Security Layers
Veritabanı Güvenliği
Veritabanına Yönelik Tehditler
Veritabanı Güvenliği
Veritabanı Server Güvenliği
• 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.
Veritabanı Güvenliği
Oracle Veritabanı Support Lifecycle
https://www.oracle.com/support/lifetime-support/index.html
Veritabanı Güvenliği
MS SQL Server Support Lifecycle
https://support.microsoft.com/en-us/lifecycle/search/1044
Veritabanı Güvenliği
Microsoft SQL Server Sürümleri
https://support.microsoft.com/en-us/lifecycle/search/?ln=en-us&c2=1044
Veritabanı Güvenliği
Oracle Veritabanı Sürüm Kontrolleri
Select banner from v$version
Veritabanı Güvenliği
MS SQL Server Sürüm Kontrolleri
Select @@version
Veritabanı Güvenliği
Oracle Veritabanı Güvenlik Yamaları
https://www.oracle.com/technetwork/topics/security/alerts-086861.html
Veritabanı Güvenliği
Oracle Veritabanı Güvenlik Yamaları
Veritabanı Güvenliği
MS SQL Server Veritabanı Güvenlik Yamaları
https://technet.microsoft.com/en-us/library/ff803383.aspx
Veritabanı Güvenliği
MS SQL Server Veritabanı Güvenlik Yamaları
https://support.microsoft.com/en-us/help/321185/how-to-determine-the-version-edition-and-update-level-of-sql-server-an
Veritabanı Güvenliği
Oracle Veritabanı Güvenlik Yamaları Kontrol
Select * from registry$history;
SELECT * FROM DBA_REGISTRY_HISTORY
Veritabanı Güvenliği
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.
Default Oracle SID list
http://www.red-database-security.com/scripts/sid.txt
• ORCL
• XE
• ASDB
• IASDB
• OEMREP
Veritabanı Güvenliği
Oracle Veritabanı Network üzerinden Bilgi Toplama Port tahmin Etme
nmap -sV -O -p 1521 192.168.0.26
nmap -sV -O -p 1521 – 1527 192.168.0.26
Veritabanı Güvenliği
Oracle Veritabanı Network üzerinden Bilgi Toplama SID tahmin Etme
nmap --script=oracle-sid-brute -p 1521 192.200.11.9
Veritabanı Güvenliği
MS SQL Server Veritabana Ağ üzerinden Erişim
Veritabanı Güvenliği
MS SQL Server Veritabana Ağ üzerinden Erişim
Aşağıdaki Default MS SQL Server Database Deafult Portları kapalı olmalıdır.
Veritabanı Güvenliği
MS SQL Server Veritabana Ağ üzerinden Erişim
Eğer bir tek default instance ile çalışıyorsanız SQL Server Browser kapalı olmalıdır.
Veritabanı Güvenliği
MS SQL Server Veritabanı Network Üzerinden Bilgi Toplama
nmap -p 1433 192.168.0.29
Veritabanı Güvenliği
MS SQL Server Veritabanı Network Üzerinden Bilgi Toplama
nmap -p 1433 --script ms-sql-info --script-args mssql.instance-port=1433 192.168.0.29
Veritabanı Güvenliği
MS SQL Server Veritabana Ağ üzerinden Bilgi Paylaşımını Engelleme
Veritabanı Güvenliği
MS SQL Server Veritabanı Network Üzerinden Bilgi Toplama
nmap -p 1433 --script ms-sql-info --script-args mssql.instance-port=1433 192.168.0.29
Veritabanı Güvenliği
MS SQL Server Veritabanı Network Üzerinden Bilgi Toplama
nmap -sV -O -p 1433 192.168.0.24
Veritabanı Güvenliği
VERİTABANI KULLANICILARI
Veritabanı Güvenliği
ORACLE - Kullanıcı Yönetimi – User Management
Oracle 11g sürümünde bulunan varsayılan kullanıcı adları aşağıdaki gibidir.
'ANONYMOUS','CTXSYS','DBSNMP','EXFSYS','LBACSYS','MDSYS','MGMT_VIEW','OLAPSYS',
'OWBSYS','ORDPLUGINS','ORDSYS','OUTLN','SI_INFORMTN_SCHEMA','SYS','SYSMAN',
'SYSTEM','TSMSYS','WK_TEST','WKSYS','WKPROXY','WMSYS','XDB',
'APEX_PUBLIC_USER','DIP','FLOWS_30000','FLOWS_FILES','MDDATA','ORACLE_OCM',
'SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','XS$NULL','OWBSYS_AUDIT',
'ORDDATA','APEX_030200','APPQOSSYS','DVSYS','DVF'
Veritabanı Güvenliği
Kullanıcı Yönetimi – User Management
Oracle 11g sürümünde Kullanıcı listesinin incelenmesi. Gereksiz kullanıcılar veritabanında
olmamalıdır.
Veritabanı Güvenliği
Kullanıcı Yönetimi – User Management
Oracle 12c sürümünde Kullanıcı listesinin incelenmesi.
Veritabanı Güvenliği
Kullanıcı Yönetimi – User Management
Kullanıcı Default Tablespace lerinin incelenmesi
ORACLE Profillerin incelenmesi
ORACLE Kaynak Kullanım değerlerinin incelenmesi
ORACLE Kaynak Kullanım değerlerinin incelenmesi
Kaynak kullanım parametrelerinin adları ve açıklamaları aşağıda verilmiştir.
SESSIONS_PER_USER: Kullanıcını açabileceği maksimum oturum (session) sayısını belirler.
CPU_PER_SESSION: Saniyenin yüzde biri cinsinden kullanıcının kullanabileceği bir oturum başına CPU
süresi.
CPU_PER_CALL: Kullanıcının her bir işlem için harcayacağı süre - saniyenin yüzde biri cinsinden verilir.
CONNECT_TIME: Kullanıcının veritabanına bağlı kalacağı toplam süre, dakika olarak verilir.
IDLE_TIME: Kullanıcının hiçbir iş yapmadan veritabanına bağlı olarak kalacağı maksimum süre, dakika
olarak verilir.
LOGICAL_READS_PER_SESSION: Kullanıcının yapacağı toplam mantıksal okuma (logical reads ) sayısı
veritabanı bloğu cinsinden verilmelidir. Diskten ve bellekten okumalar dâhil.
PRIVATE_SGA: Eğer Shared Server mimarisinde veritabanı kullanılıyorsa, her bir oturumun SGA ’de
alabileceği maksimum shared pool alanını gösterir.
COMPOSITE_LIMIT Oracle service unit bazında hesapladığı kaynak toplamı. Bu hesap yapılırken;
CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION ve PRIVATE_SGA ’in ağırlıklı
ortalaması alınır.
ORACLE Kaynak Kullanım değerlerinin incelenmesi
ORACLE Şifre Güvenlik Politikaları
Oracle kullanıcı şifreleri için; Profile’lerdeki aşağıdaki tanımları yapabiliriz.
FAILED_LOGIN_ATTEMPTS: Bir kullanıcının başarısız şifre deneme sayısını gösterir. Şifre bu parametre
kadar denenir ve başarısız olunursa kullanıcı kilitlenir.
PASSWORD_LIFE_TIME: Bir şifrenin kullanım süresini verir. Bu süre sonunda şifre değiştirilmeye zorlanır.
PASSWORD_LOCK_TIME: Bir şifrenin yanlış girilmesi ile beraber kilitlendikten sonra kaç gün kilitli
kalacağını gösterir.
PASSWORD_GRACE_TIME: Bir şifrenin kullanım süresi dolduktan sonra kaç gün daha ek olarak kullanıma
açık kalacağını gösterir. Bu süre boyunca şifre değiştirilmelidir.
PASSWORD_VERIFY_FUNCTION Bir şifrenin ne kadar karışık olacağını gösteren PL/SQL kodunu gösterir.
PASSWORD_REUSE_TIME ve PASSWORD_REUSE_MAX: Beraber kullanılır. Şifre değiştirildiğinde kaç gün
sonra aynı şifreyi tekrar kullanabileceğimizi ve maksimum kaç değişik şifre kullandıktan sonra aynı şifreyi
tekrar kullanabileceğimizi gösterir.
ORACLE Şifre Güvenlik Politikaları
ORACLE Şifre Güvenlik Politikaları
PASSWORD_VERIFY_FUNCTION parametresi bir şifrenin karmaşıklığını
belirleyen uygulama kodudur. Bu kod genellikle SYS kullanıcısı altında
bulunur ve veritabanı yöneticileri tarafından yaratılır. Bu kod veritabanı
yöneticilerinden istenmeli ve kurumun şifre politikası ile uyumlu olup
olmadığı kontrol edilmelidir.
PASSWORD_VERIFY_FUNCTION fonksiyonu içinde bir şifrenin aşağıdaki
özelliklerine bakılır.
● Şifrenin minimum boyu kontrol edilir. Varsayılan değeri sekizdir.
● Şifre ile kullanıcı kodunun aynı olup olmadığı kontrol edilir.
● Şifre ile kullanıcı kodunun tersinin aynı olup olmadığına bakılır.
● Şifre ile sunucu adı benzer mi kontrolü yapılır.
● Şifrelerin çok basit kelime içerip içermediklerine bakılır.
● Şifrenin en az bir rakam ve bir karakter içerip içermediği kontrol
edilir.
● Şifrenin daha önceki şifrelerden 3 karakter farklı olup olmadığına
bakılır.
ORACLE Şifre Güvenlik Politikaları
ORACLE Varsayılan Uygulama Şifreleri
MS SQL – Kullanıcı Login Modu
xp_loginconfig 'login mode'
MS SQL – Sunucuya Bağlanan Kullanıcıların ( Logins )Listelenmesi
xp_loginconfig 'login mode'
MS SQL – sa hesabı disable edilmelidir
MS SQL – Kullanıcı Şifre Politikaları
MS SQL – Kullanıcı Şifre Politikaları
MS SQL – Kullanıcı Şifre Politikaları
MS SQL – Password’ü boş olan kullanıcılar
MS SQL – Kullanıcı adı ile şifresi birbirine eşit kullanıcılar
MS SQL – Veritabanı Bağlanabilen Kullanıcılarının Listelenmesi
exec sp_msforeachdb 'USE [?] ;SELECT
DB_NAME() DBNAME,DP.NAME DB_USERNAME,DP.TYPE_DESC,SP.NAME SERVER_PRINCIPAL
FROMSYS.DATABASE_PRINCIPALS DP
LEFT JOIN SYS.SERVER_PRINCIPALS SP ON
DP.SID = SP.SIDWHERE
DP.TYPE = ''S'''
MS SQL – Veritabanı Bağlanabilen Kullanıcılarının Listelenmesi
Veritabanı Güvenliği Veritabanı Yetkileri
VERİTABANI YETKİLERİ
Veritabanı Yetkileri - ORACLE
ORACLE VERİTABANINDA YETKİLER
• DBA_ROLE_PRIVS
• DBA_TAB_PRIVS
• DBA_SYS_PRIVS
Veritabanı Yetkileri - ORACLE
Veritabanı Yetkileri - ORACLE
DBA_TAB_PRIVS
Veritabanı Yetkileri - ORACLE
Veritabanı Yetkileri - ORACLE
DBA ROLÜNE SAHİP KULLANICILAR
SELECT
DISTINCT A.GRANTEE,
A.GRANTED_ROLE,
'DBA' GRANTED_CRITIC_ROLE
FROM
(
SELECT
DISTINCT LEVEL LEVEL_DEEP,
GRANTEE,
GRANTED_ROLE
FROM
DBA_ROLE_PRIVS START WITH GRANTED_ROLE = 'DBA'
CONNECT BY PRIOR GRANTEE = GRANTED_ROLE
) A,
DBA_USERS B
WHERE
A.GRANTEE = B.USERNAME
AND B.USERNAME NOT IN(
'SYSTEM',
'SYS'
)
AND B.ACCOUNT_STATUS = 'OPEN'
Veritabanı Yetkileri - ORACLE
EXPORT/IMPORT Yetkisine Sahip Kullanıcılar
Veritabanı Yetkileri - ORACLE
VERİTABANI CATALOG YETKİLERİ
Veritabanı Yetkileri - ORACLE
VERİTABANI YÖNETİM YETKİLERİ
Veritabanı Yetkileri - ORACLE
VERİTABANI YÖNETİM YETKİLERİ
Veritabanı Yetkileri - ORACLE
VERİTABANINDAKİ KRİTİK YETKİLERİ
Veritabanı Yetkileri - ORACLE
VERİTABANINDAKİ KRİTİK SİSTEM YETKİLERİ DBA_SYS_PRIVS
• 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
Veritabanı Yetkileri - ORACLE
VERİTABANINDAKİ KRİTİK SİSTEM PAKETLERİ – PUBLIC’e yetkili olmamalıdır.
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.
• AUD$ • USER_HISTORY$• LINK$ • USER$• SCHEDULER$_CREDENTIAL
Veritabanı Yetkileri - ORACLE
PUBLIC Rolüne Atanmış Yetkilerin İncelenmesi
Veritabanında aşağıdaki listede verilen kritik tablolara erişen kullanıcılar belirlenmelidir.
SELECT
GRANTEE,
GRANTED_ROLE
FROM
DBA_ROLE_PRIVS
WHERE
GRANTEE = 'PUBLIC';
SELECT
GRANTEE,
PRIVILEGE
FROM
DBA_SYS_PRIVS
WHERE
GRANTEE = 'PUBLIC'
SELECT
GRANTEE,
OWNER,
TABLE_NAME,
PRIVILEGE
FROM
DBA_TAB_PRIVS
WHERE
GRANTEE = 'PUBLIC'
Veritabanı Yetkileri - ORACLE
ADMIN OPTION ile atanmış Sistem / Rol Yetkilerinin İncelenmesi
Veritabanı Yetkileri - ORACLE
WTH GRANT OPTION ile Atanmış Nesne Yetkilerinin İncelenmesi
Veritabanı Yetkileri – MS SQL Server
SUNUCU Bazlı Roller
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
SUNUCU Bazlı Roller
Veritabanı Yetkileri – MS SQL Server
SUNUCU Bazlı Roller
SELECTROLE.NAME AS ROLE,LOGIN.NAME AS LOGIN
FROMSYS.SERVER_ROLE_MEMBERS SRM,SYS.SERVER_PRINCIPALS ROLE,SYS.SERVER_PRINCIPALS LOGIN
WHERESRM.ROLE_PRINCIPAL_ID = ROLE.PRINCIPAL_IDAND SRM.MEMBER_PRINCIPAL_ID = LOGIN.PRINCIPAL_ID;
select suser_name(role_principal_id),suser_name(member_principal_id) from sys.server_role_members;
Veritabanı Yetkileri – MS SQL Server
SUNUCU Yetkilerinin Kontrolü
Veritabanı Yetkileri – MS SQL Server
SUNUCU Yetkilerinin Kontrolü
SELECTS.NAME,P.CLASS_DESC,P.PERMISSION_NAME,P.STATE_DESC
FROMSYS.SERVER_PERMISSIONS P
JOIN SYS.SERVER_PRINCIPALS S ONP.GRANTEE_PRINCIPAL_ID = S.PRINCIPAL_ID
ORDER BYS.NAME;
Sunucu bazında Public’e atanan yetkilerin ( Server Permissions ) sorgulanması.
SELECTSP.STATE_DESC,SP.PERMISSION_NAME,SP.CLASS_DESC,SP.MAJOR_ID,SP.MINOR_ID,E.NAME
FROMSYS.SERVER_PERMISSIONS AS SP
JOIN SYS.SERVER_PRINCIPALS AS L ONSP.GRANTEE_PRINCIPAL_ID = L.PRINCIPAL_ID
LEFT JOIN SYS.ENDPOINTS AS E ONSP.MAJOR_ID = E.ENDPOINT_ID
WHEREL.NAME = 'public';
Veritabanı Yetkileri – MS SQL Server
VERİTABANI Bazlı Yetkilerinin Kontrolü
exec sp_msforeachdb 'USE [?] ;SELECT
DB_NAME() DBNAME,USER_NAME(GRANTEE_PRINCIPAL_ID)
GRANTEE,PERMISSION_NAME,STATE_DESC,OBJECT_SCHEMA_NAME(MAJOR_ID)
SCHEMA_NAME,OBJECT_NAME(MAJOR_ID) OBJECT_NAME
FROMSYS.DATABASE_PERMISSIONS
WHEREOBJECT_SCHEMA_NAME(MAJOR_ID)<>
''sys''AND DB_NAME() NOT IN
(''MSDB'',''MASTER'')
Veritabanı Yetkileri – MS SQL Server
VERİTABANI Yetkileri
• ALTER
• CONTROL
• DELETE
• EXECUTE
• IMPERSONATE
• INSERT
• RECEIVE
• REFERENCES
• SELECT
• TAKE OWNERSHIP
• UPDATE
• VIEW CHANGE TRACKING
• VIEW DEFINITION
Veritabanı Yetkileri – MS SQL Server
Public ve Guest Kullanıcılarına Atanmış Yetkiler
Public ve Guest kullanıcılarının veritabanı yetkileri olmamalıdır.
exec sp_msforeachdb 'USE [?] ;SELECT
DB_NAME() DBNAME,USER_NAME(GRANTEE_PRINCIPAL_ID) GRANTEE,PERMISSION_NAME,STATE_DESC,OBJECT_SCHEMA_NAME(MAJOR_ID) SCHEMA_NAME,OBJECT_NAME(MAJOR_ID) OBJECT_NAME
FROMSYS.DATABASE_PERMISSIONS
WHEREUSER_NAME(GRANTEE_PRINCIPAL_ID) IN(
''guest'',''public''
)AND OBJECT_SCHEMA_NAME(MAJOR_ID)<> ''sys''AND DB_NAME() NOT IN (''MSDB'',''MASTER'')
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
Veritabanlarındaki Roller
Genel olarak veritabanında atanmış roller aşağıdaki SQL ile listelenir
exec sp_msforeachdb 'USE [?] ;SELECTDB_NAME() DB_NAME,USER_NAME(MEMBER_PRINCIPAL_ID) MEMBER,USER_NAME(ROLE_PRINCIPAL_ID) ROLEFROMSYS.DATABASE_ROLE_MEMBERS;'
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
Guest Kullanıcısı ve Public Role
Veritabanı Yetkileri – MS SQL Server
Veritabanı Rolleri
db_owner ve db_securityadmin rollerine sahip kullanıcılar özellikle incelenir. Bu roller gerekmiyorsa kullanıcılardan alınır.
exec sp_msforeachdb 'USE [?] ;SELECT
DB_NAME() DB_NAME,USER_NAME(MEMBER_PRINCIPAL_ID) MEMBER,USER_NAME(ROLE_PRINCIPAL_ID) ROLE
FROMSYS.DATABASE_ROLE_MEMBERS
WHEREUSER_NAME(ROLE_PRINCIPAL_ID) IN (
''db_owner'',''db_securityadmin'')AND USER_NAME(MEMBER_PRINCIPAL_ID) <> ''dbo''
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
Veritabanı Yetkileri – MS SQL Server
General Extended Procedure’lere Erişim Kontrolü
Extended Procedurlerin public’e yetkileri varsa alınmalıdır. Yetkiler sadece gerekli kullanıcılara verilmelidir. GRANT ve REVOKE
işlemleri sırasında master DB kullanılmalıdır.
SELECTOBJECT_NAME(MAJOR_ID) AS PROCEDURENAME,PERMISSION_NAME,USER_NAME(GRANTEE_PRINCIPAL_ID) AS PRINCIPAL
FROMSYS.DATABASE_PERMISSIONS
WHEREPERMISSION_NAME = 'EXECUTE'AND USER_NAME(GRANTEE_PRINCIPAL_ID)= 'public'AND OBJECT_NAME(MAJOR_ID) IN(
'xp_availablemedia','xp_dirtree','xp_enumgroups','xp_fixeddrives','xp_servicecontrol','xp_subdirs','xp_regaddmultistring','xp_regdeletekey','xp_regdeletevalue','xp_regenumvalues','xp_regremovemultistring','xp_regwrite','xp_regread','xp_cmdshell'
);
Veritabanı Yetkileri – MS SQL Server
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';
VALUE----------------------------------------------------------------FALSE
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 Audit
MS SQL Server Audits
Server Level Audits
Database Level Audits
Veritabanı Güvenliği – MS SQL Server Audit
Veritabanı Güvenliği – MS SQL Server Audit
Sunucu Seviyesinde Audit Tanımlama
Veritabanı Güvenliği – MS SQL Server Audit
Sunucu Seviyesinde Audit Tanımlama
Veritabanı Güvenliği – MS SQL Server Audit
Server Seviyesinde Audit Tanımlama
Veritabanı Güvenliği – MS SQL Server Audit
Veritabanı Seviyesinde Audit Tanımlama
Veritabanı Güvenliği – MS SQL Server Audit
Veritabanı Seviyesinde Audit Tanımlama
EXEC sp_msforeachdb 'USE [?] SELECTDB_NAME(),*FROMSYS.DATABASE_AUDIT_SPECIFICATIONS;SELECTDB_NAME(),*FROMSYS.DATABASE_AUDIT_SPECIFICATION_DETAILS'
Veritabanı Güvenliği – MS SQL Server Audit
Veritabanı Seviyesinde Audit Tanımlama
Veritabanı Güvenliği – Network Encryption
Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
Veritabanı Güvenliği – Oracle Network Encryption
Oracle Network Encryption
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.
Çalışma adımları:
1. Master database içindeMaster Encyption key yaratCertificate yarat
2. Encrypt edilecek database içindeMaster da bulunan certifikayı kullanarak encryption key yaratDatabase’i encrypt et.
Veritabanı Güvenliği – Data Encryption
MS SQL Server Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Data Encryption
MS SQL Server Transparent Data Encryption ( TDE )
Veritabanı Güvenliği – Oracle Security Assessment Tools
DBSAT ver 2.0http://www.oracle.com/technetwork/database/security/dbsat/overview/index.html
Veritabanı Güvenliği – Oracle Security Assessment Tools
https://github.com/yusufanilakduygu/Oracle-DB-Security-Checks
Veritabanı Güvenliği – MS SQL Server Security Assessment Tools
MS SQL Server Vulnerability Assessment (VA) Toolhttps://yusufanilakduygu.wordpress.com/2018/05/05/ms-sql-server-vulnerability-assessment-va-tool/
Direk SQL Server Management Studio içinden çalışır.
MS SQL Server 2012 and later
SQL Server Management Studio (SSMS)version 17. 4
Veritabanı Güvenliği – MS SQL Server Security Assessment Tools
Veritabanı Güvenliği – MS SQL Server Security Assessment Tools