• Sonuç bulunamadı

Oracle veritabanı güvenliği

N/A
N/A
Protected

Academic year: 2021

Share "Oracle veritabanı güvenliği"

Copied!
78
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

KOCAELĐ ÜNĐVERSĐTESĐ * FEN BĐLĐMLERĐ ENSTĐTÜSÜ

ORACLE VERĐTABANI GÜVENLĐĞĐ

YÜKSEK LĐSANS

Bünyamin DEMĐR

Anabilim Dalı: Matematik

Danışman: Yrd. Doç. Dr. Hülya KODAL SEVĐNDĐR

(2)
(3)

i ÖNSÖZ ve TEŞEKKÜR

Bu tez çalışmasında, veritabanı sistemlerinin en popülerlerinden biri olan Oracle veritabanı sistemleri için alınabilecek güvenlik önlemlerinden bahsedilmiştir. Çalışma; Oracle veritabanı kurulumundan, yaratmış olduğu trafiğin güvenliğine kadar bir çok konuda örnekleriyle birlikte yapılmış incelemeleri içermektedir.

Yapılan bu çalışmanın, güvenlik bilincini arttırması yönünde katkı sağlamasını dilerim.

Sürekli beni teşvik eden ve rastladığım her güçlükte yardımını esirgemeyen danışman hocam Sayın Yrd. Doç. Dr. Hülya KODAL SEVİNDİR’e teşekkürü bir borç bilirim.

Yine, üzerimde emeği olan Kocaeli Üniversitesi Fen-Edebiyat Fakültesi Dekanı Sayın Prof. Dr. H. Yüksel GÜNEY, Dekan Yardımcısı Yrd. Dç. Dr. Sayın Seyhun URLA, Hereke Ömer İsmet Uzunyol Meslek Yüksekokulu Müdürü ve Matematik Bölüm Başkanı Sayın Prof. Dr. Halis AYGÜN, çalışmalarımda bana yardımcı olan Sayın Bedirhan URGUN, Sayın Hüseyin DOĞAN, hayat arkadaşım Ebru DEMİR`e ve aileme teşekkürü borç bilirim.

(4)

ii İÇİNDEKİLER ÖNSÖZ ve TEŞEKKÜR... i İÇİNDEKİLER... ii ŞEKİLLER DİZİNİ ...iv KISALTMALAR...v ÖZET ...vi

İNGİLİZCE ÖZET ... vii

1. GİRİŞ ...1

1.1. Geliştirme ve Sunum Ortamı...4

1.1.1. SQL ...4 1.1.2. PL/SQL...5 1.1.3. Vmware Workstation ...5 1.2. Veritabanı Sistemleri...6 1.2.1. Oracle ...6 1.3. İşletim Sistemleri ...7 1.3.1. Centos Linux...7 1.3.2. Microsoft Windows...8 1.4. Yardımcı Yazılımlar...8 1.4.1. SQL/Plus...8 1.4.2. Oracle SQL Developer ...9 1.4.3. SSH Tunnel...9 1.4.4. Wireshark...9 1.5. Tez Organizasyonu ...9

2. ORACLE VERİTABANI KURULUMU VE GÜVENLİ YAPILANDIRMA...11

2.1. Oracle Veritabanı Güvenlik Yamaları...18

2.2. Listener Güvenliği...22

2.2.1. Lsnrctl Erişim Güvenliği ...24

2.2.2. Listener Değişikliklerinin Sınırlandırılması ...27

2.2.3. IP Tabanlı Erişim Kontrolü ...27

2.2.4. $TNS_ADMIN Dizininin Güvenliğinin Sağlanması ...28

2.2.5. Listener Servisi İçin Kayıt Tutma Özelliği...29

3. ORACLE VERİTABANI KULLANICI GÜVENLİĞİ...31

3.1. Kullanıcı Oluşturma ...31

3.2. Table Space`in Önemi ...33

3.3. Kullanıcı Profilleri ...36

3.4. Kullanıcı Hesabı Silme İşlemi ...39

3.5. Kullanıcı Hesabı Askıya Alma İşlemi ve Şifre Karmaşıklığı...39

3.6. Ön Tanımlı Kullanıcı Hesapları ve Şifrelerin Kontrolü...47

4. ORACLE VERİTABANI TRAFİĞİNİN GÜVENLİĞİ ...49

4.1. Oracle Veritabanı Trafiğinin Şifrelenmesi ...49

4.1.1. Oracle ASO İle Veritabanı Trafiğinin Şifrelenmesi...52

4.1.2. SSH Tünelleme İle Veritabanı Trafiğinin Şifrelenmesi ...58

4.2. Oracle Veritabanındaki Hassas Verilerin Güvenliği...62

(5)

iii

KAYNAKLAR...67 ÖZGEÇMİŞ...69

(6)

iv ŞEKİLLER DİZİNİ

Şekil 2.1: Ağ ayarları ...13

Şekil 2.2: Oracle kurulum başlangıç...14

Şekil 2.3: Kurulum seçenekleri ...14

Şekil 2.4: Üzerine kurulacak sistemin türü ...15

Şekil 2.5: Kurulum parametreleri ...15

Şekil 2.6: Kurulum dosyalarının taşınacağı dizin...16

Şekil 2.7: Kurulum öncesi disk ve hafıza kontrolleri ...16

Şekil 2.8: Kurulum bilgilerinin özeti ...17

Şekil 2.9: Kurulum işlemleri ...17

Şekil 2.10: Kurulumun bitmesi...18

Şekil 2.11: Yamalar ile ilgili metalinkler ...19

Şekil 2.12: Oracle veritabanı yama numaraları ...20

Şekil 2.13: Yama arama arayüzü ...21

Şekil 2.14: Yama listesi ...22

Şekil 3.1: Veritabanları, Tablespaceler ve Veri Dosyaları...33

Şekil 4.1: Düzmetin veritabanı trafiği (Oturum bilgisi)...50

Şekil 4.2: Düzmetin veritabanı trafiği (SQL) ...51

Şekil 4.3: Düzmetin veritabanı trafiği (Cevap) ...51

Şekil 4.4: Oracle net manager - I...53

Şekil 4.5: Oracle net manager - II...54

Şekil 4.6: Oracle ASO sunucu yapılandırması...55

Şekil 4.7: Oracle ASO istemci yapılandırması...56

Şekil 4.8: Şifreli veritabanı trafiği (SQL) - I...57

Şekil 4.9: Şifreli veritabanı trafiği (Cevap) – I...57

Şekil 4.10: SSH Tunnel yapılandırma arayüzü ...59

Şekil 4.11: SSH Tunnel bağlantı arayüzü ...59

Şekil 4.12: SQL Developer bağlantı arayüzü ...60

Şekil 4.13: Şifreli veritabanı trafiği (SQL) - II...61

(7)

v KISALTMALAR

VTY : Veritabanı Yönetim Sistemleri ASO : Advanced Security Options SSH : Secure Shell

SQL : Structured Query Language DDL : Data Definition Language DML : Data Manipulation Language

RDBMS : Relational Database Management System DBA : Database Admin

DoS : Denial of Service

TDE : Transparent Data Encryption CPU : Central Processing Unit

(8)

vi

ÖZET

ORACLE VERİTABANI GÜVENLİĞİ

Bünyamin DEMİR

Anahtar Kelimeler: Oracle Veritabanı Güvenliği, Oracle Veritabanı Kurulumu, Oracle ASO Kullanımı, Veritabanı Trafiğinin Şifrelenmesi, Oracle Veritabanı için SSH Tünelleme, Oracle Veritabanı Güvenli Yapılandırma, Oracle Veritabanı Kullanıcı Profilleri

Özet: İnternet kullanımının giderek yaygınlaşması, güvenlik problemlerinin önemini arttırarak ön plana çıkmasına neden olmuştur. Güvenlik problemleri de, problemin sonucu elde edilecek verinin önemine bağlı olarak ciddiyet kazanmıştır. İnternet ortamında verinin depolandığı birimlerin veritabanı sistemleri olduğunu da göz önünde bulundurarak, verinin depolandığı kaynağın güvenliği de çıkabilecek problemleri azaltmaya karşın yapılabilecek adımların başında gelecektir. Bu tez çalışmasında Oracle veritabanı çalışma ortamı kurularak üzerinde güvenlik önlem adımları uygulanıp, bu adımların etkin olup olmadıkları incelenmiş, alınan bu önlemler ile Oracle sisteminin güvenlik seviyesinin arttırıldığı gözlemlenmiştir.

(9)

vii

İNGİLİZCE ÖZET

ORACLE DATABASE SECURITY

Bünyamin DEMİR

Keywords: Oracle Database Security, Oracle Database Installation, Utilizing Oracle ASO, Database Traffic Encryption, SSH Tunneling for Oracle Database, Security Hardening of Oracle Database, Oracle Database User Profiles

Abstract: The ever increasing internet usage have resulted in the problem of security vulnerabilities. Security problems themselves have been prioritized by the critical data exposed to the attackers. With database systems being the largest source of data storing components in mind, actions in order to sustain the security of these systems will obviously decrease the security vulnerabilities. In this thesis, security countermeasures have been applied and then challenged on Oracle installed environment. We have observed that by taking these security steps the security level of the Oracle system increases.

(10)

1 1. GİRİŞ

Veritabanı yönetim sistemleri, bilgi sistemlerinin yaygınlaşması ile birlikte veri depolamanın vazgeçilmez araçlarından biri olarak karşımıza çıkmaktadır. Bir çok kurum, yaptığı işlerle ilgili olarak oldukça fazla veri yığınına sahiptir. Kurumların başarısı, doğru ve güvenilir verilere hızlı bir şekilde ulaşmalarına ve bu verileri analiz edebilmelerine bağlıdır. Aynı doğrultuda, günümüzde bireylerin hayatlarını daha rahat idame ettirmeleri de kurumlar tarafından saklanılan verilerin bütünlüğüne ve kesintisizliğine bağlıdır. Dolayısıyla doğru ve güvenilir verilere zamanında, hızlı bir şekilde ulaşabilmek ve yine bunları hızlı bir şekilde analiz edebilmek için veritabanı sistemlerinin kullanılması hayati bir önem taşımaktadır.

İnternet teknolojilerinin yaygınlaşması ve bir çok işlemin fiziksel olarak farklı yerlerde gerçekleştirilmesi ile, verinin sadece kurum içi değil, kurum dışı da hareket etmesi gerekmektedir. Örnek olarak uçak rezervasyon firmaları bir çok uçak firmasından uçuş bilgilerini çekerek, bunları kendi veritabanlarında konsolide ederler. Bu transferlerde uçuş bilgilerinin yanında kullanıcı bilgileri de yer alır. Bu nedenle bilgilerin içinde saklanıldığı veritabanı ve veritabanı sunucularının güvenliği, bilgi güvenliğinin sağlanmasında önemli rol oynamaktadırlar [1].

Bankacılık, ticaret, sağlık gibi kişisel ihtiyaçlardan, vergilendirme, nüfus idaresi, eğitim gibi kurumsal ihtiyaçlara kadar birçok işlemin internet üzerinden gerçekleştirilebiliyor olması, bu işlemler sırasında kullanılan bilgilere ve bilgilerin depolandığı veritabanlarına yönelik tehditleri de beraberinde getirmektedir. Tehditler özellikle hassas veriler üzerinde yoğunlaşmaktadırlar. Hassas veri kimi zaman müşteri bilgisi, kimi zaman finans bilgisi olabilmektedir. Son yıllarda saldırganların özellikle paraya dönüştürülebilir (Kredi kartı numaraları) bilgiler üzerinde yoğunlaştığı gözlemlenmektedir. Her ne kadar paraya dönüştürülebilir bilgiler son kullanıcıların kullanmış oldukları kişisel bilgisayarlar tarafında (phishing, trojan, virüs, xss gibi saldırı tipleri ile) toplanılmaya çalışılsa da, bu verilerin toplu olarak saklandığı veritabanları da saldırılara büyük ölçüde hedef

(11)

2

olmaktadırlar. Bu nedenle, hassas bilgilere karşı yapılan saldırılar ve bu saldırılara karşı alınması gereken önlemler veritabanı güvenliğinin önemini daha da arttırmaktadır [2].

Bilginin güvenliği üç temel konudan oluşur; gizlilik, bütünlük ve kullanılabilirlik. Gizlilik, bilginin yetkisiz şahıslar tarafından elde edilmemesidir. Bütünlük, bilginin yetkisiz şahıslar tarafından değiştirilmemesi anlamına gelir. Kullanılabilirlik ise yetkili kişilerin bilgiye kesintisiz olarak erişimleri demektir. Veritabanı güvenliği bu üç temel konuyu da içinde barındırır. Veritabanında saklanılan hassas bilgilerin hem saklanılırken hem de transfer edilirken gizliliği, bu bilgilerin değiştirilemez olması ve bu bilgilere erişimin kesintiye uğratılamaması istenilen ve beklenilen şartlardır.

Bu kadar temel güvenlik beklentileri bulunan veritabanı güvenliği özellikle web uygulama güvenliğinin artmaya başladığı 2000 yılları sonrası önem kazanmaya başlamıştır. Bu takvim internet kullanıcılarının artması, kişisel işlemlerin (hesap bilgileri, ödemeler v.b.) internet uygulamaları üzerinden yapılabiliyor olması ile doğru orantılıdır.

Herhangi bir kurum içerisinde dışarıya açık tehditler olabileceği gibi, hassas bilgilerin içeriye yönelik de tehditleri söz konusudur. Örneğin; çalışanların maaş bilgilerinin tutulduğu bir veritabanına internet üzerinden erişimler kısıtlı olabileceği gibi, erişimler tamamen de engellenebilir. Fakat veritabanının bulunduğu ağ içerisinde, ilgili veritabanına yetkili veya yetkisiz erişimler söz konusu olabilir. Her ne kadar yetkili erişimler problem olarak gözlenmiyor olsa bile, söz konusu personel maaşları olduğu için yetkili kullanıcıların da ilgili bilgilerin ne kadarına eriştiği zaman zaman hassas bilginin açığa çıkması problemine sebep olacaktır. Veritabanlarına erişimin sadece dahili kullanıcıların erişimine açılması ilk bakışta güvenli gelse de, iç ağ’da bulunan kötü niyetli bir çalışanın, ilgili veritabanı sunucusunun trafiğini dinleyip, elde ettiği trafik verilerini analizi sonucu hassas bilginin üçüncü şahıslar tarafından elde edilme riskini taşımaktadır. Bu ve buna benzer bir çok problem, bilginin hassaslığı kadar saklandığı yerin güvenliğinin önemini de ortaya çıkarmaktadır.

(12)

3

Bu tez çalışmasında veritabanı sistemlerinde güvenlik problemlerine sebep olabilecek hususlar araştırılıp, uygulamalı örnekler ile çözümler aranacaktır.

Kurumsal manada kullanılan çok sayıda veritabanı uygulaması bulunmaktadır. Bunlardan en fazla kullanılanlarını sıralayacak olursak; Oracle, MSSQL, Sybase, DB2 v.b.`dir. Genel veritabanı güvenlik tedbirleri her bir veritabanı uygulaması için aynı olsa da, uygulamadan uygulamaya yöntemsel ve yönetimsel farklılıklar söz konusudur. Bu farklılıkları göz önünde bulundurarak tedbirlerin hepsine değinmek yerine, bir veritabanı uygulaması seçilmiş ve tez çalışması boyunca ilgili problemlere karşın alınabilecek örnek tedbirler bu veritabanı uygulaması üzerinde denenmiştir. Bu tedbirlere veri trafiği şifrelenmesi, kullanıcı hakları kısıtlaması örnekleri verilebilir.

Bu bağlamda bu tez çalışması içerisinde kurumsal manada en yaygın kullanılan Oracle veritabanı sistemi ele alınmış, Oracle veritabanı sisteminin kurulumu, yapılandırması ve güvenlik adımları uygulamalı olarak işlenmiştir.

Tez çalışması boyunca kullanılacak ortamın hazırlanması için çeşitli yazılım ve donanım gereksinimleri oluşmuştur. Bu yazılımlar ve donanımlar aşağıda listelenip, tanımları yapılmıştır.

1. Geliştirme ve Sunum Ortamı 1.1. SQL 1.2. PL/SQL 1.3. Vmware Workstation 2. Veritabanı Sistemleri 2.1. Oracle 3. İşletim Sistemleri 3.1. Centos Linux 3.2. Windows 4. Yardımcı Yazılımlar 4.1. SQL/Plus

(13)

4 4.2. Oracle SQL Developer

4.3. SSH Tunnel 4.4. Wireshark

1.1. Geliştirme ve Sunum Ortamı

Geliştirme ve sunum ortamında sunulan başlıklar ile uygulamanın geliştirilmesinde kullanılan araçlardan bahsedilecektir. Bunlara ilişkin tanımlar ve bazı detaylar aşağıda başlıklar halinde belirtilecektir..

1.1.1. SQL

Veritabanını tanımlamak ve yönlendirmek için kullanılan yapısal programlama dilidir. SQL veritabanları ilişkisel veritabanlarıdır. Bunun anlamı verinin basit ilişkiler kümesi içinde depolanmasıdır. Oracle veritabanındaki tüm işlemler SQL cümleleriyle gerçekleştirilir. SQL cümleleri altı kategoriye ayrılır:

1. Veri Tanımlama Dili Cümleleri (DDL): Kullanıldığı yerler ;

 Şema nesnesi yaratmak, saklamak ve silmek gibi işlemler  Kullanıcılara veritabanı içindeki nesneler için yetki verilmesi

2. Veri Değiştirme Dili Cümleleri (DML): Kullanıldığı yerler ;

 Varolan veriyi sorgulamak, değiştirmek, silmek  Yeni veri girmek

3. Veritabanı Hareketi Kontrol Cümleleri: DML cümlelerinin veritabanına yansıma şeklini kontrol eden cümlelerdir. Örneğin, COMMIT, ROLLBACK, SAVEPOINT.

4. Oturum Kontrol Cümleleri : Kullanıcıların varolan oturumun özelliklerini kontrol etmelerini sağlayan cümlelerdir.

(14)

5

5. Sistem Kontrol Cümleleri : Oracle sunucu örneğine ait özellikleri kontrol etmek için kullanılan cümlelerdir.

6. Gömülü SQL Cümleleri : DML, DDL ve veritabanı hareketi kontrol cümlelerinin işlemsel (prosedürel) programlama dillerinin içinde gömülü olarak kullanılmasıdır.

1.1.2. PL/SQL

PL/SQL, Oracle'ın normal SQL'e yaptığı işlemsel programlama eklentilerinden oluşur. SQL'in kullanım kolaylığı ve esnekliği ile yapısal programlama dillerinin işlevselliği birleştirmiştir. Veritabanı uygulaması tasarlarken PL/SQL'in şu avantajları vardır:

 PL/SQL kodu doğrudan veritabanında saklanabildiği için performansı çok daha iyidir.

 PL/SQL kodu içinde veri erişimi kontrol edilebilir. Bu sayede PL/SQL kullanıcıları veriye uygulama geliştiricisinin istediği şekilde ulaşırlar.

 Normalde SQL cümleciklerinin cümle cümle girmek yerine PL/SQL`de,

cümlelerden oluşturulan bloklar halinde gönderilebilir, bu da karmaşık (kompleks) işlemlerde gereksiz ağ trafiği oluşmasını engeller.

1.1.3. Vmware Workstation

İşletim sistemleri ve ağ alt yapılarını sanallaştırma için kullanılan ve bu konuda farklı çözümleri olan bir masaüstü uygulamasıdır. Unix ve Linux türevleri başta olmak üzere hemen hemen bütün işletim sistemleri için desteği bulunmaktadır. Bütün bunların yanında özelleştirilmiş bilgisayar ağlar oluşturmak mümkündür. Vmware sanallaştırma dünyasında en çok rağbet edilen yazılım olarak göze çarpmaktadır. Hem ücretli hem de ücretsiz kullanım için bulunan yazılımları ile farklı amaçlar için farklı hizmetler sunmaktadır. Özellikle son zamanlarda sanallaştırma ile bakım,

(15)

6

devamlılık, yedekleme gibi işlemlerin ucuz ve zahmetsizce gerçekleştirilebilmesinden ötürü, sanallaştırma yazılımlarına olan rağbet gün geçtikçe artmaktadır. Vmware gibi XEN, VirtualBox, QEMU gibi yazılımlar açık kaynak kod dünyasında yerlerini almaktadırlar. Burada Vmware Workstation uygulamasının tercih edilmesindeki en büyük sebep ağ uygulamaları için oldukça esnek şartlar sağlamasıdır.

Vmware Workstation, bu tez çalışmasında ilgili ağ topolojisinin oluşturulması ve gerçeklenmesi için kullanılmaktadır.

1.2. Veritabanı Sistemleri

Veritabanı bilgi depolayan bir yazılımdır. Birçok yazılım bilgi depolayabilir ama veritabanının en önemli özelliği, bu bilgiyi verimli ve hızlı bir şekilde yönetip, analiz edebilmesidir. Bilgiye gerekli olduğu zaman ulaşabilmek esastır. İçerik bilgisi (indeksi) olmayan ve bütün kitapların aynı kapağa sahip olduğu bir kütüphanede, okurların işinin ne denli güçleşeceği tahmin edilebilir. Veritabanı bir kütüphane için mükemmel bir içerik bilgi sistemi olduğu gibi, aynı zamanda kütüphanenin kendisidir. İlişkisel Veritabanı Yönetim Sistemleri (RDBMS) büyük miktarlardaki verilerin güvenli bir şekilde tutulabildiği, bilgilere hızlı erişim imkanlarının sağlandığı, bilgilerin bütünlük içerisinde tutulabildiği ve birden fazla kullanıcıya aynı anda bilgiye erişim imkanının sağlandığı programlardır. Başlıca ilişkisel veritabanı sistemleri sıralayacak olursak; Oracle, MSSQL, Sybase, DB2, MySQL gibi örnek programlar mevcuttur. Oracle veritabanı da bunlar içinde en gelişmiş RDBMS`lerden biridir.

1.2.1. Oracle

Oracle veritabanı en gelişmiş RDBMS`lerden biridir ve içinde bir çok gelişmiş özellik barındırır.

(16)

7

 Büyük miktarda veri tutabilmekte ve verilerin depolandığı alanları ayarlama imkanı vermektedir.

 Aynı anda çok sayıda kullanıcıya verilerin bütünlüğünü bozmadan hizmet

verebilmektedir. Oracle 8 sürümü ile birlikte on binlerce kullanıcıya hizmet verebilmektedir.

 Günün 24 saati ve haftalar boyu hiç kapatılmadan çalışabilmektedir.  İşletim sistemi, veri erişim dilleri ve ağ iletişim protokolleri standartlarıyla uyumludur.

 Yetkisiz erişimleri engelleme ve kontrol edebilme imkanı sağlamaktadır.  Bütünlüğü veritabanı düzeyinde sağlayabilmektedir, böylece daha az kod yazılmaktadır.

 İstemci/sunucu mimarisinin bütün avantajlarını kullanabilmektedir.

1.3. İşletim Sistemleri

Bu bölümde sunulan başlıklar ile uygulamaların üzerinde koşacağı işletim sistemlerinden bahsedilmiştir [3]. Oracle veritabanının performans özelliği göz önünde tutularak Centos Linux, kullanıcı arayüzlerinin kolaylığından yararlanabilmek için ise Microsoft Windows işletim sistemleri seçilmiştir. Bunlara ilişkin detaylar aşağıda başlıklar halinde belirtilmiştir.

1.3.1. Centos Linux

Centos, linux çekirdeğini kullanan bir Linux dağıtımıdır. RedHat Enterprise Linux kaynak “rpm”lerinden (Redhat Packet Manager) oluşturulmuş bir dağıtımdır. Alternatif olarak yüzlerce Linux dağıtımı bulunmaktadır ancak RedHat tabanlı olması ve yum paket yönetim sisteminin kullanımının ücretsiz olması nedeniyle Centos dağıtımı tercih edilmiştir.

Centos Linux bu çalışma içerisinde Oracle veritabanının (uygulamanın) üzerinde koşacağı işletim sistemi olarak kullanılmıştır.

(17)

8 1.3.2. Microsoft Windows

Microsoft Windows, kullanıcıya grafik arabirimler ve görsel iletilerle yaklaşarak, programları çalıştırmak, komut vermek gibi klavyeden yazma zorunluluğunu ortadan kaldıran, Microsoft firmasının geliştirdiği bir işletim sistemleri ailesidir.

Windows işletim sistemi bu tez çalışma içerisinde istemci rolünü üstlenecektir.

1.4. Yardımcı Yazılımlar

Tezin bu bölümünde sunulan başlıklar ile uygulamanın geliştirilmesi esnasında gerekli işlemlerin yapılabilmesi, hata kontrolü ve doğruluk testleri için kullanılan yazılımlardan bahsedilmiştir. Bunlara ilişkin detaylar aşağıda başlıklar halinde belirtilmiştir.

1.4.1. SQL/Plus

SQL*Plus, veritabanı cümlelerini girmek ve çalıştırmak için kullanılan bir araçtır.

SQL*Plus kullanarak yapılabilecekler:

 SQL cümleleri ve PL/SQL bloklarının girilmesi, değişitirilmesi, saklanması ve çalıştırılması,

 Sorgu sonuçlarının formatlanması,

 Tabloların kolon tanımlarının listelenmesi,

 Son kullanıcılara mesaj gönderilmesi ve onlardan cevap alınması,  Veritabanı yönetimi.

(18)

9 1.4.2. Oracle SQL Developer

Veritabanı bağlantıları sağlayarak SQL cümleciklerini çalıştırmaya yarayan, kullanıcı arayüzüne sahip bir uygulamadır. Bu araç sayesinde veritabanı işlemleri arayüzler yardımıyla daha kolay yapılmaktadır.

1.4.3. SSH Tunnel

SSH Tunnel uygulamaları SSH protokolünü kullanarak, SSH yapılan sunucuya port yönlendilerek, trafiğin daha güvenli hale getirilmesini sağlar. Bu yöntem genel de düz metin olarak geçen trafiğin şifreli hale getirilmesi için kullanılır. Bu tez çalışmasında veritabanı trafiğinin daha güvenli şekilde veritabanı sunucusuna gönderilmesi ve alınması için kullanılacaktır.

1.4.4. Wireshark

Ethereal yazılımının 0.99.0 sürümünden sonra Wireshark adı ile devam eden detaylı paket analizi gerçekleştirmek için kullanılan Linux/Unix ve Windows ortamlarında kullanılabilen açık kaynak kodlu bir yazılımdır.

Wireshark, bu çalışma içerisinde TCP/IP protokol kümesine ait oluşturulup gönderilen ya da alınan paketlerin hedef sistemlerdeki görüntüsünün alınması için kullanılmıştır. Diğer bir deyiş ile istemci/sunucu arasında oluşturulacak veritabanı trafiğinin analizi için kullanılmıştır.

1.5. Tez Organizasyonu

Tezin birinci bölümünde; tez çalışmasının amacı ve bu çalışmada kullanılacak olan yazılım ve donanım araçlarından bahsedilmiştir.

Tezin ikinci bölümünde; tez çalışması sırasında kullanılan veritabanı sisteminin kurulumu ve yapılandırılması anlatılmıştır. Aynı zamanda veritabanı yapılandırma parametrelerinin kontrolü ve güvenlik arttırıcı önlemlerden bahsedilmiştir.

(19)

10

Tezin üçüncü bölümünde; tez çalışması için kullanılan veritabanı sisteminin kullanıcı güvenliği konusunda neler yapılması gerektiğinden bahsedilmiştir.

Tezin dördüncü bölümünde; tez çalışma konusunun önemli unsurlarından biri olan, bilgisayar ağları üzerinde veritabanı trafiğinin şifrelenerek aktarılması konusu işlenmiştir.

Tezin beşinci bölümünde; tez çalışması boyunca edinilmiş bilgiler yardımıyla kritik veritabanlarının da kontrol edilmesi gereken problemler listelenmiştir.

(20)

11

2. ORACLE VERİTABANI KURULUMU VE GÜVENLİ YAPILANDIRMA

Veritabanı güvenliğinin ilk adımlarından biri de kurulum sonrası yapılacak olan yapılandırmaların önemidir [4]. Oracle veritabanı kurulumu için Centos Linux dağıtımı seçilmiştir. Bunun en önemli sebebi ise Redhat Linux`a yakın bir içeriğe sahip olmasıdır.

Kurulum öncesi aşağıda belirtilen kütüphanelerin eksik olanlarının yüklenmesi gerekecektir. Aşağıdaki komut yardımı ile sunucu üzerinde bulunan kütüphaneler kontrol edilebilir.

[root@localhost ~]# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-elfutils-libelf-devel-static gcc gcc-c++ glibc common elfutils-libelf-devel glibc-headers kernel-glibc-headers-2.6.18 ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel

Eksik olanları yüklemek için aşağıda verilen komut kullanılabilir.

[root@localhost ~]# yum install compat-db gcc gcc-c++ libstdc++ pdksh sysstat compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static unixODBC unixODBC-devel libaio-devel

Daha sonra çekirdek parametrelerinde gerekli değişiklikler yapılmalıdır. Değişiklikleri yapmak için /etc/sysctl.conf dosyası kullanılabilir. Değişikliklerin devreye girmesi için “/sbin/sysctl –p” komutu kullanılabilir.

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128 fs.file-max = 6815744

(21)

12 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=4194304 net.core.wmem_max=1048576 fs.aio-max-nr=1048576

Oracle veritabanının kurulacağı dizinler oluşturulmalıdır.

mkdir -p /u01 mkdir -p /opt/oracle

mkdir -p /opt/oracle/product mkdir -p /opt/oraInventory

chown -R oracle:oracleinstall /u01 chown -R oracle:oracleinstall /opt/oracle chown -R oracle:oracleinstall /opt/oraInventory chmod -R 775 /u01

chmod -R 775 /opt/oracle

chmod -R 775 /opt/oracle/product

Oracle veritabanı kurulumu için Oracle resmi web sayfasından[6] indirilen dosyalar /opt/oracle dizini altına kopyalanmalıdır.

mv linux_11gR2_database_* /opt/oracle

İlgili dizine girilip, kullanıcı ve grup hakları düzenlenir.

cd /opt/oracle

chown oracle:oinstall linux_11gR2_database_*

Oracle veritabanı kurulumunu gerçekleştirebilmek için sıkıştırılmış formatta indirilen dosyalar açılmalıdır.

(22)

13 unzip linux_11gR2_database_1of2.zip unzip linux_11gR2_database_2of2.zip

Eğer linux işletim sistemi üzerinde güvenlik duvarı aktif durumda ise kapatılmalıdır. Kurulum sonrasında tekrar aktif hala getirilmelidir. Bununla birlikte /etc/hosts içinden veya ağ bilgilerinin değiştirildiği ekrandan “hostname” bilgisi girilmelidir.

Şekil 2.1: Ağ ayarları

Kurulum dizinine girilip aşağıda belirtilen komut çalıştırılır.

cd /opt/oracle/database ./runInstaller

Ardından gelecek adımlar Şekil 2.2, Şekil 2.3, Şekil 2.4, Şekil 2.5, Şekil 2.6, Şekil 2.7, Şekil 2.8, Şekil 2.9, Şekil 2.10 ile gösterilebilir.

(23)

14

Şekil 2.2: Oracle kurulum başlangıç

(24)

15

Şekil 2.4: Üzerine kurulacak sistemin türü

(25)

16

Şekil 2.6: Kurulum dosyalarının taşınacağı dizin

(26)

17

Şekil 2.8: Kurulum bilgilerinin özeti

(27)

18

Şekil 2.10: Kurulumun bitmesi

Ardından Oracle veritabanının çalıştığı kontrol edilebilir [5].

2.1. Oracle Veritabanı Güvenlik Yamaları

Bilgi sistemi varlıklarında son yıllarda rastlanan en ciddi güvenlik sorunlarından birisi de yazılım ya da donanım seviyesinde tespit edilen güvenlik açıklıklarının düzenli takip edilmemesidir [15]. Özellikle üretici firmalar tarafından ilgili yamalar yayınlandıktan sonra saldırganların iletişim kurduğu form, e-posta listesi gibi ortamlarda güvenlik açıkları ve örnek saldırı kodlarının hızla yayılması, yama güncellemesi yapılmayan bilgi sistemleri üzerindeki tehdidin artmasına sebep olmaktadır.

Veritabanı gibi kurumlara ait hassas bilgilerin yer aldığı bilgi sistemi varlıklarında yama takibine diğer sistemlere nazaran daha fazla önem gösterilmeli ve özellikle güvenlik amacıyla yayınlanan yama paketleri kısa süre içerisinde uygulanmalıdır. Son yıllarda bulunan açıklıklar sebebiyle yama yapılmayan Oracle veritabanı sistemlerinde servis dışı bırakma, yetki yükseltme, yetkisiz bağlantılarla yetki elde

(28)

19

etme gibi ciddi açıklıkların bulunduğu gerek üretici firma [6] gerekse diğer güvenlik otoriteleri tarafından ifade edilmektedir.

Oracle, tespit edilen güvenlik açıklıklarına yönelik Ocak, Nisan, Temmuz ve Ekim aylarında olmak üzere yılda dört kez kritik yama güncellemesi yayınlamaktadır. Yayınlanan yamaları düzenli olarak takip etmek için Oracle web sitesi [6] takip edilmelidir.

Kritik yama güncellemeleri işletim sistemi ve işlemci mimarisine bağlı olarak farklılık göstermektedir. Bu sebeple öncelikle kullanılan işletim sistemi ve veritabanı sürümü için hangi CPU’nun indirilmesi gerektiği belirlenmelidir. CPU ile ilgili referansın “Patch Availability Table and Risk Matrices” bölümünde yer alan tabloda farklı sistem ve veritabanı sürümlerine uygulanacak yamalar ile ilgili metalink notuna (Şekil 2.11) link vardır.

Şekil 2.11: Yamalar ile ilgili metalinkler

Bu linkte yer alan notu okuyabilmek ve daha sonra ilgili CPU’yu indirebilmek için Metalink üyeliğine ihtiyaç vardır. Notun “Patch Availibility” bölümünde platform ve Oracle sürümlerine göre yama numaraları listelenmektedir. Örnek bir liste (Şekil 2.12) de yer almaktadır.

(29)

20

Şekil 2.12: Oracle veritabanı yama numaraları

İlgili CPU paketinin indirilebilmesi için Metalink’e (http://metalink.oracle.com) giriş yaptıktan sonra:

 “Patches and Updates” sekmesi seçilir.  “Simple Search” linki tıklanır.

 “Search By” alanında “Patch Number” seçilir.

 CPU paketinin numarası ve platform seçilerek “Go” düğmesine basılır.  Listelenen CPU indirilir.

Örnek bir arama ekranı Şekil 2.13`de yer almaktadır. İndirme linkinin yanında CPU ile ilgili bilgiler ve kurulum notlarını içeren bir web bağlantısı da yer almaktadır.

(30)

21

Şekil 2.13: Yama arama arayüzü

İndirme işlemi tamamlandıktan sonra arşiv dosyası açılır ve CPU numarası ile adlandırılan dizine girilir ve aşağıdaki komut çalıştırılır.

> $ORACLE_HOME/OPatch/opatch apply

CPU yama paketleri veritabanı sisteminde beklenmedik bir hata üretirse yine CPU dizinine girildikten sonra aşağıdaki komut ile yama geri alınabilir.

> $ORACLE_HOME/OPatch/opatch rollback -id [CPU_No]

Yüklenen yamaları listelemek için aşağıdaki komut çalıştırılabilir. > $ORACLE_HOME/OPatch/opatch lsinventory

(31)

22

Şekil 2.14: Yama listesi

Veritabanı güvenliğinde yamaların önemli bir yeri olduğu gibi veritabanı sunucusuna ait işletim sistemi ve diğer servis yamalarının da kesinlikle yapılması gerekmektedir. Zira veritabanının üzerinde koştuğu işletim sisteminin açıklığı, doğrudan veritabanı uygulamasını da etkileyecektir. Bu yüzden işletim sistemi, veritabanı ve hatta varsa aynı sunucu üzerinde farklı uygulamaların da yamaları takip edilmelidir [7].

2.2. Listener Güvenliği

Veritabanı aktivitelerinin büyük bir kısmı bilgisayar ağları üzerinden geçmektedir. Oracle istemcileri, veritabanına bağlanırken TCP/IP protokolüne benzer bir protokol kullanırlar. Bu protokole TNS protokolü denir. TNS protokolü, TCP/IP paketlerinin gezdiği bir yol olarak düşünülünebilir. Oracle veritabanı ağ trafiğini doğrudan işlemez. Bunun için bir Listener`ı vardır. Oracle veritabanı Lisneter`ı; veritabanı ile istemci arasındaki ağ trafiğini yönetmek için kullanılır. Listener, kendisine belirtilen ağ portunu (Oracle veritabanı için ön tanımlı olarak 1521) dinler ve bu porttan gelen

(32)

23

isteği veritabanına yönlendirir. Listener iki uygulama modülünden oluşur. tnslsnr, listener`ın kendisi ve lsnrctl ise listener`ın yöneticiler tarafından yerelden veya uzaktan kontrolünü yapmak için kullanılır.

Listener servisi, özellikle ağ üzerinden doğrudan erişimleri kabul ettiği için güvenlik riskleri ortaya çıkarmıştır. Bu yüzden güvenli şekilde yapılandırılması gerekmektedir [8]. Yapılandırma gereklerini anlayabilmek için, listener`ın kullandığı dosya ve servisleri gözden geçirmek daha iyi olacaktır:

$ORACLE_HOME/bin/lsnrctl

Listener kontrol programı

$ORACLE_HOME/network/admin/listener.ora

Listener yapılandırma dosyasıdır. Hangi IP ve Port`ları dinleyeceği bilgisini bu dosyadan alır. Şifre, kayı tutma (loglama) seviyesi gibi farklı yapılandırma seçenekleri de bu dosyada işlenir.

$ORACLE_HOME/network/admin/sqlnet.ora

Listener`ın kullanacağı ağ parametrelerinin tanımlandığı yapılandırma dosyasıdır.

$ORACLE_HOME/network/admin/tnsnames.ora

Oracle veritabanının örnek takma ad (instance alias) `larının tutulduğu dosyadır. TNS servislerine karşılık gelen adres ve protokoller tanımlanır.

$ORACLE_HOME/bin/tnslnsr

(33)

24

tnslnsr, listener`ın asıl servis uygulamasıdır ve bu servis çalışırken listener.ora ile sqlnet.ora yapılandırma dosyalarını okur. Bu sayede hangi port`ları dinleyeceğini, hangi veritabanı servis isimlerini kullanacağını bilir. Tnslnsr servisi, “oracle” kullanıcısı tarafından çalıştırılır.

2.2.1. Lsnrctl Erişim Güvenliği

Listener servisi uzaktan erişime izin vermektedir. Fakat Oracle 10g ile birlikte uzaktan erişim ön tanımlı olarak kapalı gelmektedir. Bu zaafiyet sonucu, Oracle veritabanı yapılandırma bilgileri alınabilir. Veritabanı servisi durdurulabilir, yapılandırma değişiklikleri, şifre değişiklikleri yapılabilir.

Erişim kontrolü için aşağıdaki örnek verilebilir. Eğer “Security” değeri “OFF” olarak belirtilmiş ise bu uzaktan ve yerel bağlantılara açık olduğunu, aynı zamanda herhangi bir kimlik doğrulama mekanizması olmaksızın erişimlere izin verildiği anlamına gelmektedir.

LSNRCTL> status Connectingto

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER

---

Alias LISTENER

Version TNSLSNR for Linux: Version 9.1.0.1.0 - Production Start Date 11-APR-2010 22:21:17

Uptime 0 days 16 hr. 7 min. 36 sec Trace Level off

Security OFF SNMP OFF

(34)

25 Güvenlik testi için:

> lsnrctl <komut> <ip_adresi>:<port>

Bilgilerinin girilmesi gerekmektedir.

Örneğin:

>lsnrctl status 10.10.9.132:1521

Eğer Oracle 10g veya 11g kullanılıyorsa, bu sefer “status” komutuyla alınacak çıktı aşağıdaki gibi olacaktır. Bu da güvenlik seçeneğinin ön tanımlı olarak açık geldiğini belirtmektedir.

LSNRCTL> status Connectingto

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER

---

Alias LISTENER

Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 12-APR-2010 22:21:17

Uptime 0 days 6 hr. 7 min. 36 sec Trace Level off

Security ON: Local OS Authentication SNMP OFF

Artık uzaktan bağlantılar yapıldığında, kullanıcının kimliğinin doğrulanamadığını belirtecektir. “Local OS Authentication” özelliği ise, sadece yerel bağlantılara (veritabanının bulunduğu sunucu da logon olan kullanıcılar için) erişim izni olduğunu belirtmektedir.

(35)

26

Listener servisi için şifre atamak da mümkündür. Bu sayede şifre değişikliği ve listener.ora değişiklikleri daha güvenli hale getirilebilir.

LSNRCTL> change_password Old password:

New password: oratest01

Reenter new password: oratest01 Connecting to

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) Password changed for LISTENER

The command completed successfully

LSNRCTL> save_config Connectingto

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) Saved LISTENER configuration parameters.

Listener Parameter File

/opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Old Parameter File

/opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.bak The command completed successfully

“status” komut çıktısına bakıldığında “Password” fonksiyonunun aktif olduğu görülecektir.

LSNRCTL> status

Connecting to

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER

---

Alias LISTENER

(36)

27 Start Date 12-APR-2010 22:21:17 Uptime 0 days 6 hr. 41 min. 8 sec Trace Level off

Security ON: Password or Local OS Authentication SNMP OFF

Şifre değişikliği, listener.ora dosyasından da aşağıdaki gibi yapılabilir.

PASSWORDS_LISTENER = 0A8437852ADD9EC5

2.2.2. Listener Değişikliklerinin Sınırlandırılması

Oracle veritabanı yapılandırma seçeneklerinden biri de, listener yapılandırmalarının sadece yapılandırma dosyası aracılığıyla yapılmasına zorlamasıdır [9]. Dolayısıyla lsnrctl ile SET komutları çalışmayacaktır. Listener servisi ele geçirilmiş olsa bile değişikliklerin yapılamaması önemli bir güvenlik seçeneğidir. Bu değişiklik için aşağıda belirtilen parametre listener.ora dosyasına işlenebilir.

Belirtli bir listener için; ADMIN_RESTRICTIONS_ORATEST = ON Tüm listener`lar için; ADMIN_RESTRICTIONS = ON

Bu komut sayesinde sadece listener.ora dosyasına yazma hakkı bulunan kullanıcılar, yapılandırma dosyasında değişiklikler yapabilir.

2.2.3. IP Tabanlı Erişim Kontrolü

Oracle veritabanının sunduğu diğer bir özellik ise yapılandırma ayarları ile birlikte IP tabanlı erişim kontrolünün yapılabiliyor olmasıdır. Buna aslında çok basit bir güvenlik duvarı işlevi de denilebilir. sqlnet.ora yapılandırma dosyası içinde tcp.validnode_checking, tcp.excluded_nodes, tcp.invited_nodes parametreleriyle gerçekleştirilmektedir.

(37)

28

Erişim kontrolünün aktif edilmesi için: tcp.validnode_checking=YES Erişimi engellenecek IP adresleri için: tcp.excluded_nodes=(IP1, IP2, ...) Erişim izni verilecek IP adresleri için: tcp.invited_nodes=(IP1,IP2,...)

Bu yapılandırmalardan sadece biri kabul edilir. Aynı anda hem IP kısıtlama hem de IP izin verilme işlemi yapılamaz. Dolayısıyla IP adresleri için kısıtlaması yapılıyorsa, diğer tüm IP adreslerine izin verilmiş olunur. Eğer belli IP adreslerine izin verilmiş ise, diğer tüm IP adresleri engellenmiş olur. Bu değişikliğin devreye girmesi için listener servisi kapatılıp, tekrar açılmalıdır. Bu tür güvenlik önlemleri, karmaşık veritabanları sistemleri üzerinde tercih edilmemektedir. Bunun yerine daha çok tetikleyiciler (trigger) yardımıyla çözümler üretilebilir. Bir diğer husus ise IP aldatmacası (IP Spoofing) ile bu tür yöntemlerin bertaraf edilebilir olmasıdır.

2.2.4. $TNS_ADMIN Dizininin Güvenliğinin Sağlanması

$TNS_ADMIN ($ORACLE_HOME/network/admin) dizini için yetkilendirme hakları kontrol edilir. Özellikle yapılandırma dosyası içinde bulunan bilgilerin, işletim sistemi üzerinde başka kullanıcılar tarafından elde edilmediğinin sağlanması gerekmektedir. Kurulum esnasında da görüldüğü gibi, Oracle kurulumu için kendine has “oracle” kullanıcısı kullanılmıştır. Dolayısıyla bu kullanıcı dışında hiç bir kullanıcıya bu dosyalara erişim hakkı verilmemelidir. Bunun için tnsnames.ora dosyası 640, diğer dosyalar (listener.ora, sqlnet.ora v.b. ) 600 hakkına sahip olmalıdırlar.

[oracle@oracle admin]$ ls -al total 32

drwxr-xr-x 3 oracle oinstall 4096 Apr 13 04:58 . drwxr-xr-x 11 oracle oinstall 4096 Apr 12 19:49 ..

-rw--- 1 oracle oinstall 509 Apr 13 04:58 listener.ora drw--- 2 oracle oinstall 4096 Apr 12 19:42 samples -rw--- 1 oracle oinstall 187 May 9 2007 shrept.lst -rw--- 1 oracle oinstall 215 Apr 12 19:52 sqlnet.ora

(38)

29

-rw-r--- 1 oracle oinstall 437 Apr 12 22:05 tnsnames.ora

2.2.5. Listener Servisi İçin Kayıt Tutma Özelliği

Listener servisinin bir özelliği de, üzerinde yapılan işlemleri kayıt altına alabilmesidir. Bunun için iki tür kütük (log) kaydı üretir (listener log, trace log). Bu kütük kayıtları için trc_directory, trc_level, log_file, log_directory ve log_status gibi yapılandırma parametreleri kullanılır. Listener servisinin kayıt altına alınması özellikle kaba kuvvet saldırılarının farkedilmesine yardımcı olmaktadır. Trace ise genelde hata ayıklama için kullanılır. Bir bağlantı sorunu olduğunda bağlantı ile ilgili detaylı bilgileri ilgili dosyaya yazar. Fakat kullanımı esnasında dikkatli olmak gerekir. Ciddi büyüklükte kayıt üreteceğinden dolayı, bu özelliğin açık olması ile servis dışı bırakma saldırılarına maruz kalınabilinir. Bu yüzden sadece problem çözme esnasında açılıp, daha sonra kapatılması gerekemektedir.

Yapılandırma gerekleri için aşağıda belirtilen adımlar izlenebilir:

1) Kayıt dizininin yerinin ayarlanması

LSNRCTL> set log_directory <$ORACLE_HOME>/network/admin

2) Kayıt dosyasının isminin verilmesi

LSNRCTL> set log_file oratest.log

3) Kayıt tutma özelliğinin aktif edilmesi

LSNRCTL> set log_status on

4) Değişikliklerin yapılandırma dosyalarına kaydedilmesi

(39)

30

Trace özelliği için ise aşağıda bellirtilen parametreler kullanılır:

TRACE_DIRECTORY_LISTENER = <$ORACLE_HOME>/network/trace TRACE_FILE_LISTENER = listener.trc

TRACE_LEVEL_<listener adı> = support

(40)

31

3. ORACLE VERİTABANI KULLANICI GÜVENLİĞİ

Veritabanı sistemlerinde veriye kimin erişeceğini belirlemek için kullanıcı hesapları kullanılmaktadır. Veri erişim ve kullanıcı güvenliği çok kullanıcılı ortamlarda her zaman aranan özelliklerdir. Oracle veritabanında kullanıcı bilgileri ve yetkileri veritabanı içinde tutulmaktadır. Oracle`da kullanıcı yönetimi ve güvenliği için bir çok özellik bulunmaktadır. En güçlü yanlarından biri ise nesne, sistem ve rol ayrıcalıkları tanımlanabilmesidir. Bu sayede hangi kullanıcının hangi veritabanı nesnelerine ne seviyede erişeceği belirlenir.

Kullanıcı ayrıcalıkları belli bir SQL cümlesini çalıştırmak için verilen yetkidir. Bu yetkileri veritabanı yöneticileri (DBA) veritabanını kullanan diğer kullanıcılara verir. Yöneticiler, veritabanında yetkileri veren üst seviyedeki kullanıcılardır. Ayrıca bir kullanıcının diğer bir kullanıcıya yetki vermesi yine veritabanı yöneticisinin ilgili yetkiyi vermesiyle gerçekleşebilir.

Veritabanı kullanıcı güvenliğini anlamak için öncelikle kullanıcı oluşturma ve silme işlemlerine hakim olmak gerekir. Bu sayede ne tür problemler çıkabileceği daha rahat gözlemlenebilir.

3.1. Kullanıcı Oluşturma

Oracle veritabanında kullanıcı oluşturma işlemi “CREATE USER” komutu ile yapılır.

SQL> CREATE USER bunyamin IDENTIFIED BY "k28tyZ15!"; User created.

(41)

32

Bir kullanıcıya yetki vermek için “GRANT” komutu kullanılır. Kullanıcının veritabanına bağlanabilmesi için ise “CREATE SESSION” yetkisinin verilmesi gerekmektedir.

SQL> GRANT CREATE SESSION TO bunyamin; Grant succeeded.

Kullanıcının şifresini değiştirmek için ise “ALTER USER” komutu veya “password” komutu kullanılabilir.

SQL> ALTER USER bunyamin IDENTIFIED BY "bB28tY16!"; User altered.

SQL> password bunyamin

Changing password for bunyamin New password:

Retype new password: Password changed

Her zaman “PASSWORD” komutu ile şifre ataması veya değişikliği yapılmalıdır. “ALTER USER” ve “CREATE USER” ile yapılan şifre girişleri bilgisayar ağlarından düz metin trafik olarak geçmektedir. Fakat “PASSWORD” komutu ile girilen şifre maskelenerek (hash`e dönüştürülerek) veritabanına ulaşır.

Özellikle veritabanı kullanıcı hesaplarına şifre atamaları yapılırken PASSWORD EXPIRE parametresi kullanılarak, hesabın ilk kullanıma başlanması anında, kullanıcının şifre değiştirmeye zorlanması gerekir. Her zaman “PASSWORD” komutu ile şifre ataması veya değişikliği yapılmalıdır.

SQL> CREATE USER bunyamin IDENTIFIED BY "123456" PASSWORD EXPIRE;

(42)

33 3.2. Table Space`in Önemi

Oracle veritabanında bir kullanıcının tablo oluşturabilmesi için hem “CREATE TABLE” yetkisi hem de kullanacağı tablespace alanı belirtilmesi gerekmektedir. Her veritabanı, tablespace adı verilen ve birbiriyle ilişkili mantıksal yapıları gruplayan mantıksal depolama birimlerine bölünmüştür. Örneğin, tablespace`ler genelde yönetimsel işleri kolaylaştırmak için bütün uygulama nesnelerini birlikte gruplar. Tablespace içindeki tüm mantıksal yapıları fiziksel olarak tutması için bir veya birden fazla veri dosyası (datafile) yaratılır. Veridosyalarının toplam büyüklüğü, tablespace'in toplam depolama kapasitesini verir. Bu yapı Şekil 3.1 de görülebilir. Tablespace’lerin toplam depolama kapasitesi, veritabanı toplam depolama kapasitesini verir. Oracle veritabanı kullanıcılarına depolama kapasitesi içinde belli ölçüde veya limitsiz hak verilebilir.

Şekil 3.1: Veritabanları, Tablespaceler ve Veri Dosyaları

SQL> GRANT CREATE TABLE TO bunyamin; Grant succeeded.

Eğer kullanıcıya tablo aralığı atanmaz ise Oracle veritabanı SYSTEM tablo aralığını kullanacaktır ki bu da tercih edilen bir yöntem olmayacaktır. Bu yüzden her kullanıcıya tablo aralığı atanması gerekmektedir.

SQL> ALTER USER bunyamin DEFAULT TABLESPACE users; User altered.

(43)

34

Oracle veritabanı üzerinde oluşturulan geçici tablolar ve geçici kesimler geçici tablo aralığında tutulmaktadır [5]. Eğer geçici tablo aralığı tanımlaması yapılmaz ise yine SYSTEM tablo aralığı kullanılacağı için kesinlikle geçici bir tablo aralığı atanması gerekmektedir.

SQL> ALTER USER bunyamin TEMPORARY TABLESPACE temp; User altered.

Aynı zamanda belirtilen tablo aralığı üzerinde kullanıcın ne kadar disk alanı kullanacağı da kotalanarak belirtilebilir.

SQL> ALTER USER bunyamin QUOTA 100M ON USERS; User altered.

Eğer kullanıcının depolama kapasitesi kaldırılacaksa aşağıdaki komut kullanılabilir.

SQL> ALTER USER bunyamin QUOTA 0 ON USERS; User altered.

Tüm kullanıcıların depolama kapasitelerini görebilmek için ise aşağıdaki komut kullanılabilir.

SQL> SELECT username, tablespace_name, max_bytes 2 FROM dba_ts_quotas ORDER BY username;

USERNAME TABLESPACE_NAME MAX_BYTES --- --- --- APPQOSSYS SYSAUX -1 BUNYAMIN USERS 104857600 FLOWS_FILES SYSAUX -1 OLAPSYS SYSAUX -1 SYSMAN SYSAUX -1

(44)

35

Bir kullanıcıya sınırsız veya yüksek miktarda depolama alanı verilir ise, bu kullanıcı hesabının ele geçirilmesi sonucu, rastgele girilen veriler ile veritabanı disk kapasitesi işlem yapmayacak kadar doldurulabilir. Bu da servis kesintisi (DoS) saldırılarına sebep olabileceği anlamına gelmektedir.

“Unlimited” tablo aralığı olan kullanıcılar aşağıdaki komut yardımıyla görüntülenebilir.

SQL> SELECT grantee FROM dba_sys_privs, dba_users 2 WHERE dba_users.username=dba_sys_privs.grantee 3 AND privilege='UNLIMITED TABLESPACE' 4 AND dba_users.ACCOUNT_STATUS='OPEN'; GRANTEE --- SYS DBSNMP SYSTEM SYSMAN BUNYAMIN

Eğer istenmeyen bir kullanıcıda “unlimited” tablo aralığı yetkisi var ise bu yetkiyi almak için;

SQL> REVOKE UNLIMITED TABLESPACE FROM "BUNYAMIN"; User altered.

komutu kullanılır. Bu sayede limitsiz tablo alanı olan bir kullanıcı temizlenmiş olacaktır. Aynı işlem tüm “unlimited” tablo aralığı yetkisi olan kullanıcılar için yapılmalıdır.

(45)

36 3.3. Kullanıcı Profilleri

Profiller kullanıcı oturumlarının kullanabileceği sistem kaynaklarının sınırlandırılması için kullanılır [10]. Veritabanı kaynaklarının gereksiz yere harcanmaması için her kullanıcıya kaynak kullanım limitlerini belirleyen bir profil atanır. Profilin içereceği kaynaklardan bazıları şunlardır:

 Kullanıcının aynı anda açabileceği maksimum oturum sayısı

 Kullanıcının oturumu ve çalıştıracağı SQL cümleleri için kullanabileceği CPU zamanı ve mantıksal giriş çıkış miktarı

 Kullanıcının bir iş yapmadan bekleyebileceği süre  Kullanıcının bağlı kalabileceği süre

 Kaç başarısız bağlanma denemesinden sonra kullanıcı hesabının kilitleneceği, şifrenin ne kadar süre geçerli olduğu veya ne tür şifrelere izin verileceği gibi şifre kısıtlamaları

Eğer kullanıcıya hiç bir profil atanmamış ise varsayılan profil kullanılır. Profil ayarları iki gruba ayrılır: şifre profil kaynakları ve sistem profil kaynakları. Şifre profil kaynakları her zaman aktif konumdadır fakat sistem profil kaynakları aktif edilmek istenir ise init.ora dosyasında resource_limit=TRUE yapılmalıdır. Bu sayede değişiklik Oracle veritabanı her başladığında geçerli olacaktır. Aynı işlem aşağıdaki komut yardımıyla da yapılabilir.

SQL> ALTER SYSTEM SET resource_limit=TRUE; System altered.

Profil oluşturabilmek için “CREATE PROFILE” komutu, profil üzerinde değişiklik yapmak için ise “ALTER USER ... PROFILE” komutu kullanılır.

Profil oluşturulurken kullanılan parametreler aşağıda belirtilmiştir.

(46)

37

CPU_PER_SESSION: Kullanıcı oturumunun kullanabileceği maksimum CPU zamanını belirler. Belirtilen değer aşıldığında oturum ORA-02392 hata kodu ile sonlanır.

CPU_PER_CALL: Kullanıcının yarattığı çağrı (parse, execute, ya da fetch) için maksimum CPU zamanını belirler. Belirtilen aşıldığında oturum ORA-02393 hatası kodu ile sonlanır.

CONNECT_TİME: Bir oturum için dakika olarak maksimum açık kalma zamanını belirler. Bir kullanıcı oturumu bu zamanı aştığında, oturum ORA-02399 hata kodu ile sonlanır.

IDLE_TIME: Bir oturumun maksimum işlem yapmadan bekleme süresini dakika olarak belirler. Bu parametrede belirtilen süre kadar işlem yapılmaz ise kullanıcı oturumu ORA-02396 hata kodu ile sonlandırılır.

SESSIONS_PER_USER: Kullanıcının eş zamanlı açabileceği oturum sayısını kısıtlar. Bu parametre ile belirtilen sayıda oturum açan kullanıcı bir oturum daha açmak istediğinde ORA-02391 hata kodu ile karşılaşır.

LOGICAL_READS_PER_SESSION: Bir oturumda okunabilecek en yüksek veri bloğu sayısını belirler. Limit aşıldığında ORA-02394 hata kodu ile oturum sonlandırılır.

LOGICAL_READS_PER_CALL: Bir kullanıcının yarattığı çağrı için okunabilecek en yüksek veri bloğu sayısını belirler. Limit aşıldığında ORA-02395 hata kodu ile oturum sonlandırılır.

PRIVATE_SGA: Bu limit sadece “Shared Server” modunda çalışan veritabanları için geçerlidir. Bir oturumun SGA içerisinde “Shared Pool”da kendine ayırabileceği en yüksek hafıza alanını belirler.

(47)

38 Şifre profil kaynak parametreleri:

FAILED_LOGIN_ATTEMPTS: Bir Oracle kullanıcı hesabının kilitlenmesi için gerekli maksimum başarısız oturum açma girişimi sayısını belirler.

PASSWORD_LIFE_TIME: Bir parolanın geçerli sayılacağı maksimum zamanı, gün olarak belirler.

PASSWORD_GRACE_TIME: PASSWORD_LIFE_TIME parametresi ile belirtilen süre dolduğunda kullanıcıya parolasını değiştirmesi için tanınan ek süreyi tanımlar.

PASSWORD_REUSE_MAX: Bir parolanın tekrar kullanılabilmesi için tanımlanması gereken minimum farklı parola sayısını belirler.

PASSWORD_REUSE_TIME: Bir parolanın tekrar kullanılabilmesi için geçmesi gereken minimum süreyi belirler.

PASSWORD_LOCK_TIME: Maksimum sayıdaki başarısız oturum açma girişimlerinden sonra, hesabın ne kadar süreyle kilitli kalacağını belirtir. Her zaman “UNLIMITED” olarak tanımlanması gerekir.

PASSWORD_VERIFY_FUNCTION: Kullanılacak “Parola Doğrulama Fonksiyonu”nun ismi belirtilir.

Örnek bir profil oluşturmak için;

SQL> CREATE PROFILE test_profili LIMIT 2 PASSWORD_LIFE_TIME 60

3 PASSWORD_GRACE_TIME 10 4 PASSWORD_REUSE_TIME 0 5 PASSWORD_REUSE_MAX 0 6 FAILED_LOGIN_ATTEMPTS 4

(48)

39 7 PASSWORD_LOCK_TIME 2

8 CPU_PER_CALL 3000 9 PRIVATE_SGA 500K

10 LOGICAL_READS_PER_CALL 1000;

Profilin kullanıcıya atanması için;

SQL> ALTER USER bunyamin PROFILE test_profili; User altered.

3.4. Kullanıcı Hesabı Silme İşlemi

Oracle veritabanı kullanıcısını silmek için “DROP USER” komutu kullanılır.

SQL> DROP USER bunyamin; User dropped

Aynı zamanda “CASCADE” parametresi ile bu kullanıcıya ait şema objeleri de silinebilir. Dikkat edilmesi gereken husus ise silinen şema için tanımlanan yabancı anahtar`lar (foreign key) olabilir. Bu yüzden farklı şema, tablo ve tetikleyciler (trigger) ile bağlantılar silinmiş olacaktır.

SQL> DROP USER bunyamin CASCADE; User dropped

3.5. Kullanıcı Hesabı Askıya Alma İşlemi ve Şifre Karmaşıklığı

Oracle veritabanı kullanıcı yönetiminin diğer bir güçlü yanı da kullanıcı hesaplarının askıya alınabilmesi, hatta karmaşık şifre politikalarının belirlenebilmesidir [11]. Oracle veritabanın da bir kullanıcı hesabını askıya almak için “ALTER USER ... ACCOUNT LOCK”, aktif hale getirmek için “ALTER USER ... ACCOUNT UNLOCK” komutları kullanılır.

(49)

40

SQL> ALTER USER bunyamin ACCOUNT LOCK; User altered.

Enter user-name: bunyamin Enter password:

ERROR:

ORA-28000: the account is locked

SQL> ALTER USER bunyamin ACCOUNT UNLOCK; User altered.

Oracle veritabanı şifrelerini maskeli (hash) olarak bir tabloda tutar. Bu verilere erişmek için aşağıdaki SQL komutu çalıştırılabilir.

SQL> SELECT name,password FROM sys.user$;

NAME PASSWORD

--- --- SYS 2878CCA929F74C3C BUNYAMIN 4A3BA55E08595C81 DENEME 36AF6CE7AA647343

Oracle 11G ile bu hash değerleri SHA-1 algoritması ile üretilmektedir. Bu hash değerleri ise 16`lık sayı sistemiyle oluşmaktadır. Dolayısıyla içerisinde “K”, “L” gibi karakterler geçmeyecektir. Şifreler bir tabloda tutulduğundan dolayı kullanıcı oluştururken şifre girilmek yerine hem tabloya hem de kullanıcı oluşturma esnasında maske (hash) değeri verilerek de şifre atama işlemi gerçekleştirilebilir. Dolayısıyla bu özellik yardımıyla kaba kuvvet (Brute Force) saldırılarına karşı tedbir alınabilir.

(50)

41 Örneğin,

SQL> CREATE USER bunyamin IDENTIFIED BY VALUES 'DEMIR'; User created.

“bunyamin” adında bir kullanıcı oluşturulmuş ve şifrenin maskeli (hash) değeri olarak “DEMIR” ifadesi yazılmıştır.

SQL> SELECT name,password FROM sys.user$;

NAME PASSWORD

--- --- SYS 2878CCA929F74C3C BUNYAMIN DEMIR

DENEME 36AF6CE7AA647343

Bundan sonra veritabanına giriş işlemlerinde kullanıcı karşısına çıkacak hata uyarısı aşağıdaki gibi olacaktır.

Enter user-name: bunyamin Enter password:

ERROR:

ORA-01017: invalid username/password; logon denied

Bir kullanıcı askıya almak ile o kullanıcının sistem de varlığı doğrulatılmış ama askıda olduğu bildirilmiş olur. Fakat bu yöntem ile kullanıcı hem kullanılamayacak şekilde askıda olur hem de deneme/yanılma tipi saldırılar da saldırgan bu kullanıcının hiç olmadığı bilgisini sağlamış olur.

Oracle veritabanı ile kullanıcı hesapları için şifre politikaları belirlemekle birlikte şifre karmaşıklığı da sağlanabilir. Karmaşık bir şifre politikası için aşağıdaki maddelere dikkat edilmelidir:

(51)

42

 Şifre en az 8, en fazla 30 karakter arasında olmalıdır.

 Şifre en az bir küçük harf, bir büyük harf, bir sayı ve bir özel karakter barındırmalıdır.

 Şifre sayı ile başlamamalıdır.

 Şifre içerisinde sözlük anlamı taşıyan kelimeler geçmemelidir.  Şifre içerisinde bilinen şema isimleri geçmemelidir.

Bu tür bir politikayı kontrol etmek için kullanıcı profillerinde PASSWORD_VERIFY_FUNCTION parametresi yardımıyla bir fonksiyon oluşturulur ve her şifre atama işleminde belirtilen fonksiyonun özelliklerine sahip olup/olmadığı incelenir. Oracle veritabanı $ORACLE_HOME/RDBMS/ADMIN dizini içerisinde UTLPWDMG.SQL adında bir SQL dosyası barındırır. Bu dosya içerisinde örnek bir şifre doğrulama fonksiyonu vardır.

Oracle 11G için örnek şifre doğrulama fonksiyon:

CREATE OR REPLACE FUNCTION verify_function_11G (username varchar2, password varchar2, old_password varchar2) RETURN boolean IS n boolean; m integer; differ integer; isdigit boolean; ischar boolean; ispunct boolean; db_name varchar2(40); digitarray varchar2(20); punctarray varchar2(25); chararray varchar2(52); i_char varchar2(10);

(52)

43 simple_password varchar2(10); reverse_user varchar2(32); BEGIN digitarray:= '0123456789'; chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

-- Check for the minimum length of the password IF length(password) < 8 THEN

raise_application_error(-20001, 'Password length less than 8'); END IF;

-- Check if the password is same as the username or username(1-100) IF NLS_LOWER(password) = NLS_LOWER(username) THEN raise_application_error(-20002, 'Password same as or similar to user'); END IF;

FOR i IN 1..100 LOOP i_char := to_char(i);

if NLS_LOWER(username)|| i_char = NLS_LOWER(password) THEN raise_application_error(-20005, 'Password same as or similar to user name '); END IF;

END LOOP;

-- Check if the password is same as the username reversed

FOR i in REVERSE 1..length(username) LOOP reverse_user := reverse_user || substr(username, i, 1); END LOOP;

IF NLS_LOWER(password) = NLS_LOWER(reverse_user) THEN raise_application_error(-20003, 'Password same as username reversed'); END IF;

(53)

44

-- Check if the password is the same as server name and or servername(1-100) select name into db_name from sys.v$database;

if NLS_LOWER(db_name) = NLS_LOWER(password) THEN

raise_application_error(-20004, 'Password same as or similar to server name'); END IF;

FOR i IN 1..100 LOOP i_char := to_char(i);

if NLS_LOWER(db_name)|| i_char = NLS_LOWER(password) THEN

raise_application_error(-20005, 'Password same as or similar to server name '); END IF;

END LOOP;

-- Check if the password is too simple. A dictionary of words may be -- maintained and a check may be made so as not to allow the words -- that are too simple for the password.

IF NLS_LOWER(password) IN ('welcome1', 'database1', 'account1', 'user1234', 'password1', 'oracle123', 'computer1', 'abcdefg1', 'change_on_install') THEN

raise_application_error(-20006, 'Password too simple'); END IF;

-- Check if the password is the same as oracle (1-100) simple_password := 'oracle';

FOR i IN 1..100 LOOP i_char := to_char(i);

if simple_password || i_char = NLS_LOWER(password) THEN raise_application_error(-20007, 'Password too simple '); END IF;

END LOOP;

-- Check if the password contains at least one letter, one digit -- 1. Check for the digit

(54)

45 m := length(password);

FOR i IN 1..10 LOOP FOR j IN 1..m LOOP

IF substr(password,j,1) = substr(digitarray,i,1) THEN isdigit:=TRUE;

GOTO findchar; END IF;

END LOOP; END LOOP;

IF isdigit = FALSE THEN

raise_application_error(-20008, 'Password must contain at least one digit, one character');

END IF;

-- 2. Check for the character <<findchar>>

ischar:=FALSE;

FOR i IN 1..length(chararray) LOOP FOR j IN 1..m LOOP

IF substr(password,j,1) = substr(chararray,i,1) THEN ischar:=TRUE;

GOTO endsearch; END IF;

END LOOP; END LOOP;

IF ischar = FALSE THEN

raise_application_error(-20009, 'Password must contain at least one \ digit, and one character');

END IF;

<<endsearch>>

(55)

46 -- 3 letters

IF old_password IS NOT NULL THEN

differ := length(old_password) - length(password);

differ := abs(differ); IF differ < 3 THEN

IF length(password) < length(old_password) THEN m := length(password);

ELSE

m := length(old_password); END IF;

FOR i IN 1..m LOOP

IF substr(password,i,1) != substr(old_password,i,1) THEN differ := differ + 1;

END IF; END LOOP;

IF differ < 3 THEN

raise_application_error(-20011, 'Password should differ from the \ old password by at least 3 characters');

END IF; END IF; END IF;

-- Everything is fine; return TRUE ; RETURN(TRUE);

END; /

-- This script alters the default parameters for Password Management -- This means that all the users on the system have Password Management -- enabled and set to the following values unless another profile is

(56)

47

-- created with parameter values set to different value or UNLIMITED -- is created and assigned to the user.

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LOCK_TIME 1 PASSWORD_VERIFY_FUNCTION verify_function_11G;

Bu sayede “verify_function_11G” adın da bir şifre doğrulama fonksiyonu ve bu fonksiyonu kullanan DEFAULT profil tanımlaması yapılabilir. Aynı dosya içerisinde Oracle 11G altındaki versiyonlarda geçerli olabilecek şifre doğrulama fonksiyonu örneği de bulunur. Özellikle yönetici hesapları için şifre doğrulama fonksiyonu ve profil bilgilerinin değişikliği, kritik önem teşkil etmektedir.

3.6. Ön Tanımlı Kullanıcı Hesapları ve Şifrelerin Kontrolü

İnternet ortamında bir çok uygulamada en belirgin güvenlik problemlerinden biri ise ön tanımlı gelen yapılandırma değerlerinin değiştirilmemesinden kaynaklanmaktadır. Oracle veritabanı kurulduğunda bazı kullanıcı hesaplarının ön tanımlı şifreler barındırdığı ve bazı kullanıcı hesaplarının ise ön tanımlı olarak aktif durumda oldukları görülmültür. Bu da ciddi riskler doğuracağı için gerekli kontrol ve değişikliklerin, kurulumdan hemen sonra yapılması gerekmektedir. Özellikle Oracle 11G`de bu tür kontroller çok basit hale getirilmiştir. Ön tanımlı şifre kontrolü için DBA_USERS_WITH_DEFPWD adında bir nesne bulundurmaktadır. Bu sayede ön tanımlı kullanıcı şifresi kullanan hesaplar görüntülenebilir.

(57)

48

SQL> SELECT * FROM dba_users_with_defpwd;

USERNAME

--- MDSYS

SCOTT

“MDSYS” ve “SCOTT” kullanıcıları ön tanımlı şifre kullanıyor anlamına gelmektedir. Bazı hesaplar ön tanımlı şifre kullansa bile kurulum esnasında hesap askıda bırakılmış olabilir. Bu kullanıcıları görmek için ise,

SQL> SELECT username, account_status from dba_users;

USERNAME ACCOUNT_STATUS --- --- MGMT_VIEW OPEN SYS OPEN SYSTEM OPEN DBSNMP OPEN SYSMAN OPEN BUNYAMIN OPEN DENEME EXPIRED

OUTLN EXPIRED & LOCKED SCOTT EXPIRED & LOCKED MDSYS EXPIRED & LOCKED

Dolayısıyla ön tanımlı gelen kullanıcılar eğer aktiflerse şifrelerinin değiştirilmesi, hesaplar hiç kullanılmayacak ise de askıya alınmaları gerekmektedir.

(58)

49

4. ORACLE VERİTABANI TRAFİĞİNİN GÜVENLİĞİ

Oracle veritabanında, veritabanı kullanıcısı olmadan verinin elde edilebilmesi için çeşitli yollar mevcuttur [12]. Çünkü veri hem trafik olarak bilgisayar ağları üzerinden geçmektedir hem de dosya sisteminde saklanmaktadır. Bilgisayar ağları üzerinden geçen trafik üçüncü şahıslar tarafından izlenebilir ve hassas veriler çalınabilir. Aynı zamanda hassas veri içeren bilgiler, işletim sistemi üzerinde dosya olarak tutulmaktadır. Bu dosyalara yapılan yetkisiz erişimler hassas verinin çalınmasına sebep olur.

Oracle veritabanı güvenliğinin bir parçası olarak özellikle bu iki güvenlik problemi için tedbirler almak gerekecektir. Bu yüzden hem oluşan veritabanı trafiğinin şifrelenmesi hem de verinin kendisinin üzerinde bulunduğu dosya sisteminde şifreli saklanması sağlammalıdır.

Bu tez çalışmasında ortaya çıkan bu güvenlik problemleri için ne tür tedbirler alınacağına aşağıdaki başlıklar altında değinilecektir.

4.1. Oracle Veritabanı Trafiğinin Şifrelenmesi

Oracle veritabanı bağlantılarının çoğu, bilgisayar ağları üzerinden yapılan (uzaktan) bağlantılardır. Dolayısıyla veritabanı trafiği bilgisayar ağları üzerinden geçmektedir. Veritabanı trafiği TNS protokolünü kullanarak TCP/IP paketleri halinde bilgisayar ağları üzerinden iletilir. Trafiği daha iyi analiz edebilmek adına oluşan veritabanı trafiği üç genel başlık altında sınıflandırılmıştır.

1.Oturum bilgisini içeren, veritabanına bağlantıyı oluşturan trafik, 2.Bağlantı oluşturulduktan sonra çalıştırılan SQL trafiği,

(59)

50

Oracle veritabanı kurulumu da belirtmediğiniz sürece ön tanımlı olarak yapılan yapılandırma ile, veritabanı üzerine gelen ve giden tüm trafik düzmetin şeklindedir. Dolayısıyla araya girebilecek üçüncü şahıslar tarafından trafik dinlenebilir ve hassas bilgiler çalınabilir.

Düz metin trafiğin içeriğine bakabilmek için Wireshark uygulaması kullanılmıştır. Bu uygulama ile alınmış olan oturum bilgisi trafiği Şekil 4.1 de gösterildiği gibidir.

Şekil 4.1: Düzmetin veritabanı trafiği (Oturum bilgisi)

Veritabanı trafiğinin elde edilmesinden önce, örnek bir tablo oluşturup, bu tabloya veriler girilmiştir.

CREATE TABLE KREDI_KARTI

("RECORDID" NUMBER NOT NULL ENABLE, "AD" VARCHAR2(50 BYTE),

"SOYAD" VARCHAR2(50 BYTE), "KARTNO" VARCHAR2(50 BYTE),

CONSTRAINT "KREDI_KARTI_PK" PRIMARY KEY ("RECORDID"));

Ardından tablo içine kayıtlar eklenmiştir.

INSERT INTO KREDI_KARTI (RECORDID, AD, SOYAD, KARTNO) VALUES ('1', 'bunyamin', 'demir', '1111111111111111')

Referanslar

Benzer Belgeler

- İlişkinin n tarafındaki tabloya 1 tarafından tablonun birincil anahtar sütunu yabancı anahtar olarak eklenir. Bu kurallar doğrultusunda varlık-ilişki modelini tablolara

— Örnek; MySQL sunucu üzerinde personel isminde bir veritabanı oluşturmak için aşağıdaki ifade kullanılabilir.

Şimdide bu iki tabloyu ilişkilendirmek için 1 lik tablonun birincil anahtarını n lik tabloya yabancı anahtar olarak

 Bir bölümde birden fazla proje geliştirilmektedir ancak, her proje sadece bir bölüm tarafından gerçekleştirilebilinir.... Kavramsal, Mantıksal ve Fiziksel

Bölüm Formunda öncelikle verileri veri tabanından alıp list view de gösterme işlemlerini yapalım.. Veri tabanı bağlantı işlemi için

 •İlişkiyi oluşturan tabloların birincil anahtarları ilişkiyi oluşturan tabloya yabancıl anahtar olarak eklenir.  •İlişkide oluşturulan tablonun birincil anahtarı

MySQL, hem büyük veri hem de son kullanıcıların (Facebook, Twitter ve Wikipedia gibi) büyük hacimli web siteleri için fiili standart veritabanı sistemidir.. MySQL ile ilgili

- Hazır ifadeler, sorgudaki hazırlık yalnızca bir kez yapıldığından ayrıştırma süresini azaltır (ifade birden çok kez çalıştırılmasına rağmen). - Bağlı