Üye Kayıt Üye Giriş
biz-sizi-arayalim
biz-sizi-arayalim
Web Tasarım Eğitim Seti
Masaüstü bilgisayarı cebe sığdırdılar
Masaüstü bilgisayarı cebe sığdırdılar
Avast ve Windows Güncellemeleri Çakışınca!
Avast ve Windows Güncellemeleri Çakışınca!
Toshiba'nın İddialı Bilgisayar Tableti!
Toshiba'nın İddialı Bilgisayar Tableti!
Yeni Microsoft'un Windows tanıtılıyor
Yeni Microsoft'un Windows tanıtılıyor
Skype 7, Mac ve Windows İçin Yayınlandı!
Skype 7, Mac ve Windows İçin Yayınlandı!
kpss-egitim-setleri

DBMS_OBFUSCATION_TOOLKIT Kullanımı ve Ayrıntılı Anahtarlama


SMMM Yeterlilik Eğitim Seti

DBMS_OBFUSCATION_TOOLKIT Kullanımı ve Ayrıntılı Anahtarlama

 

Biraz da PL/SQL sorguları ve blokları ile ilgilenelim dedim ve Oracle’ın gömülü paketlerinden olan DBMS_OBFUSCATION_TOOLKIT’i inceleyeceğiz. Herşeyden önce bu kelimelerin Türkçe anlamlarını ifade edelim. “To obfuscate” karartmak ve “Toolkit” araç demek. Aklınıza bu paketle ilgili olarak ilk gelen şey konusunda haklısınız.

DBMS_OBFUSCATION_TOOLKIT bize verinin encrypt edilmesini yani şifrelenmesini sağlamaktadır. Bunu yaparken de DES (Data Encyrption Standard) kullanılmaktadır. Bir soru olarak şunu sorabilirsiniz “Veritabanımdaki veriler kıymetli ve kötü niyetli bir DBA’in bu verileri görüntülemesini istemiyorum ve verimi korumak istiyorum.” Bu sorunun cevabı olarak DBMS_OBFUSCATION_TOOLKIT kullanalım demek yerine aslında DBA hesabını koruyalım cevabı daha mantıklıdır.

Bu özet anlatımdan sonra DBMS_OBFUSCATION_TOOLKIT’in neler yapabildiğine bakalım;

DES olarak bilinen ve 20 yıldan fazladır bir ANSI standardı olarak kullanılmakta olan şifreleme metodu kullanılmaktadır. Banklar da özel işlemleri için bu tipte bir algoritmayı kullanarak şifreleme işlemi gerçekleştirmektedirler. DES ileride yerini AES (Advanced Encyrption Standard)’a bırakacaktır. DES mantığına göre şifrelenecek olan her bilginin bir anahtarı vardır ve bu anahtar hem şifrelemekte hem de şifreyi çözmekte kullanılmaktadır. DES şifrelemesini yaparken 64-bit bloklar kullanarak 56-bit anahtarlama gerçekleştirmektedir.

Oracle DBMS_OBFUSCATION_TOOLKIT paketini SYS kullanıcısı altında oluşturmaktadır. Bu paket yaratıldıktan sonra isterseniz, dilediğiniz kullanıcı veya role paketin çalıştırılması hakkını atayabilirsiniz. PUBLIC’e de aynı hak tanınabilir.

Anahtarlama yönetimine baktığımızda ise en önemli faktör, veriler için düzgün anahtarlamanın yapılıyor olmasıdır. Eğer anahtarlama kötü şekilde seçilirse, kırması da kolay olacaktır. Bu durumda olası bir saldırıda karşıda bulunan kişinin uygulayacağı metod rastgele anahtarlar seçerek, doğru olanı beklemek yerine bir kripto analiz ile zayıf anahtarlama kırılabilir. Anahtarlama rastgele olarak sayılardan seçilmekte ve şifreleme de buna göre tamamlanmaktadır.

DBMS_OBFUSCATION_TOOLKIT paketi bizim için rastgele sayılardan oluşan bir anahtarlama, şifreleme yöntemi sunmaktadır ancak bu anahtarlamanın bakımını yapmamaktadır. Uygulamayı geliştiren kişinin sorumluluğunda olan bu durum, sürekli olarak kontrol edilmeli ve paket kullanılmalıdır. Bunun yanı sıra, DBMS_OBFUSCATION_TOOLKIT ile gerçekleştirilen anahtarlama ve diğer bütün işlemler sunucu tarafında bulunmaktadır, kullanıcı tarafında değil. Anahtarlamanın kullanıcıdan sunucuya geçtiği durumlarda da aradaki bağlantının (network connection) da şifrelenmiş olması gerekmektedir.

Yapılan anahtarlamanın bulunacağı ve saklanacağı yerle ilgili yapabileceğiniz 3 farklı yol bulunmaktadır;

1) Anahtarları veritabanında tutmak.
2) Anahtarları işletim sisteminde bulundurmak.
3) Kullanıcıya yönettirmek.

Anahtarları Veritabanında Saklamak

Bu yöntem her zaman ve %100 koruma sağlamayabilir zira kötü niyetli bir DBA için ulaşması kolay olacaktır. Bunun nedeni her DBA’in şifrelenmiş olan veriye her an ulaşabileceğidir. Tabii bu tipte bir koruma, saklama yöntemi diğer kullanıcılar için oldukça faydalı olabilir. Bir örnek olarak kullanıcıların TC Kimlik Numaraları’nı seçebiliriz. Bu numaraları aynı tabloda anahtarlamak ve saklamak yerine başka bir tabloda anahtarlayıp ve saklayıp, PK – FK (Primary Key, Foreign Key) ilişkisini kullanabilirsiniz. Bunu da yine paketi kullanarak, doğru anahtarlamayı bulup yapabilirsiniz.

Oracle’ın tavsiye ettiği PL/SQL kod şifrelenmesi yöntemi “wrap”tir yani sarmak, paketlemektir. Bu şekilde anahtarlama içeren bir kodu da diğer kullanıcılardan saklamış olursunuz. Sarılı haldeki bir PL/SQL bloğu aşağıdaki şekilde olabilir;

01 CREATEORREPLACE PACKAGE BODY LOADER wrapped
02 0
03 abcd
04 abcd
05 abcd
06 3
07 b
08 9200000
09 1
10 4
11 0
12 27a
13 2 :e:
14 1PACKAGE:
15 1BODY:
16 1OPTIMA_LOADER:
17 1POP_LOADER_PARAMS:
18 1P_PRID:
19 ....
20 /

Anahtarları İşletim Sisteminde Saklamak

PL/SQL bloğu içerisinden yapabileceğiniz isteklerle işletim sistemi üzerinde sakladığınız şifrelenmiş anahtarlarınızı talep edebilirsiniz. Burada da dikkat edilmesi gereken konu hem veritabanı kullanıcısının hakları hem de bu kullanıcının, anahtarları sakladığınız (muhtemelen bir dosyada) objeye olan erişim ve kullanım hakları.

Anahtarları Kullanıcıya Yönettirmek

Eğer anahtarları size sağlayacak olan kullanıcının kendisi ise, bir ağ şifrelemesi yapıyor olmanız oldukça önemlidir.

DBMS_OBFUSCATION_TOOLKIT’in sahip olduğu prosedür ve fonksiyonlar aşağıdadır;

DES3ENCRYPT
DES3DECRYPT
DES3GETKEY

DESENCRYPT
DESDECRYPT
DESGETKEY
MD5

İçerisinde “3″ olan prosedür veya fonksiyon isimlendirmeleri DES’in farklı bir tür anahtarlamasını kullanmaktadır ve biraz daha komplike bir algoritmadır. Yukarıdaki paketlerin sentaksları aşağıda gösterilmektedir;

001 DES3ENCRYPT
002  
003 DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
004    input           IN     RAW,
005    key             IN     RAW,
006    encrypted_data  OUT    RAW,
007    which           IN     PLS_INTEGER  DEFAULT TwoKeyMode
008    iv              IN     RAW          DEFAULT NULL);
009  
010 DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
011    input_string      IN     VARCHAR2,
012    key_string        IN     VARCHAR2,
013    encrypted_string  OUT    VARCHAR2,
014    which             IN     PLS_INTEGER  DEFAULT TwoKeyMode
015    iv_string         IN     VARCHAR2     DEFAULT NULL);
016  
017 DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
018    input        IN RAW,
019    key          IN RAW,
020    which        INPLS_INTEGER DEFAULT TwoKeyMode
021    iv           INRAW         DEFAULT NULL)
022   RETURN RAW;
023  
024 DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(
025    input_string  IN VARCHAR2,
026    key_string    IN VARCHAR2,
027    which         INPLS_INTEGER DEFAULT TwoKeyMode
028    iv_string     INVARCHAR2    DEFAULT NULL)
029   RETURN VARCHAR2;
030  
031 DES3DECRYPT
032 DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
033     input INRAW, keyIN RAW,
034     decrypted_data OUT RAW,
035     which INPLS_INTEGER DEFAULT TwoKeyMode
036     iv INRAW DEFAULTNULL);
037  DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
038     input_string IN VARCHAR2,
039     key_string IN VARCHAR2,
040     decrypted_string OUT VARCHAR2,
041     which INPLS_INTEGER DEFAULT TwoKeyMode
042     iv_string INVARCHAR2 DEFAUTL NULL);
043  DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
044     input INRAW, keyIN RAW,
045     which INPLS_INTEGER DEFAULT TwoKeyMode
046     iv INRAW DEFAULTNULL)
047     RETURN RAW;
048 DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT(
049     input_string IN VARCHAR2,
050     key_string IN VARCHAR2,
051     which INPLS_INTEGER DEFAULT TwoKeyMode
052     iv_string INVARCHAR2 DEFAULT NULL)
053    RETURN VARCHAR2;
054 DES3GETKEY
055  DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
056    which        IN   PLS_INTEGER DEFAULT TwoKeyMode,
057    seed         IN   RAW,
058    key          OUT  RAW);
059  
060 DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
061    which        IN   PLS_INTEGER DEFAULT TwoKeyMode,
062    seed_string  IN   VARCHAR2,
063    key          OUT  VARCHAR2);
064  
065 DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
066    which  IN  PLS_INTEGER DEFAULT TwoKeyMode,
067    seed   IN  RAW)
068  RETURN RAW;
069  
070 DBMS_OBFUSCATION_TOOLKIT.DES3GetKey(
071    which        IN  PLS_INTEGER DEFAULT TwoKeyMode,
072    seed_string  IN  VARCHAR2)
073  RETURN VARCHAR2;
074  
075 DESDECRYPT
076 DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
077      input INRAW, keyIN RAW,
078      decrypted_data OUT RAW);
079 DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
080      input_string IN VARCHAR2,
081      key_string IN VARCHAR2,
082      decrypted_string OUT VARCHAR2);
083 DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
084      input IN RAW,
085      keyIN RAW)
086      RETURN RAW;
087 DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(
088      input_string IN VARCHAR2,