IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  digitalpanel

Etiketlenen Kullanıcılar

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 18 Aralık 2011, 15:13   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
GreenSQL DB Firewall ile Sql Injection Önlemi




GreenSQL, sql injection saldırıları için database’leri koruma altına almak üzere geliştirilmiş bir database firewall uygulamasıdır. MySQL ve PostgreSQL’ler için destek sunan GreenSQL temel olarak proxy olarak çalışarak gerçek database’in önünde durur ve web uygulamasından gelen sql bağlantı isteklerini karşılayarak SQL komutlarını inceler ve bir risk scoring matrix kullanarak ilgili sql cümlelerini analiz ederek aksiyon alır.

Bu şekilde, web uygulamanızda bir sql injection açığı bulunsa dahi GreenSQL sayesinde açıktan etkilenmemeniz mümkün olabilir. Detaylarına yazının devamında değineceğim GreenSQL temel olarak, default 3305 portunu dinler ve gelen sql istekleri için risk analizi yapar; güvenli olmaları durumunda komutları arkadaki sql sunucusuna iletir, eğer sql cümleleri güvenli değil ve daha önceden de Whitelist’e eklenmemişlerse blocklar ve uygulamaya boş bir cevap döndürür. GreenSQL’in IPS, IDS, Firewall ve Learning gibi modlarda çalıştırabilirsiniz. Özellikle learning modu false positive durumların önüne geçmek için çok kullanışlıdır. Ayrıca GreenSQL fiziksel olarak database sunucunuz ile aynı makinada çalışabilir ya da ayrı bir makina üzerine konumlandırabilirsiniz.

Yazının devamında, GreenSQL’in çalışma mantığından, kurulum ve yapılandırma işlemlerinden bahsedeceğim.

GreenSQL Çalışma Mantığı
Bu bölümde yukarıda kısaca değindiğim konuların detaylarını aktaracağım sonraki bölümlerde de kurulum ve yapılandırmaya değineceğim.

GreenSQL reverse proxy olarak uygulamanıza ait database’in önünde çalışmaktadır. Bu şekilde uygulama üzerinden yapılan SQL işlemleri gerçek database’de çalıştırılmaktansa GreenSQL’e gelir ve burada analiz edilmesi sağlanır. Aşağıdaki şemada GreenSQL’in çalışma mantığı daha net anlaşılmaktadır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Şemada da görüldüğü üzere web uygulaması sql işlemlerini doğrudan GreenSQL’e göndermektedir; sql query’ler burada analiz edildikten sonra arkadaki gerçek database’e iletilir. GreenSQL’in güzel yanlarından birisi de gerçek database’in bulunduğu fiziksel sunucuda kullanılabilmesidir. Default olarak 3305. portu dinlediğinden dolayı Sql sunucusu ile aynı makina üzerinde çalışabilir, böylece herhangi bir donanım yatırımına gerek kalmaz. Yapmanız gereken tek şey web uygulamanızın sql connection ayarlarını GreenSQL’e bağlanacak şekilde set etmektir. Örnek olarak web uygulamanız ile sql sunucu aynı makinada çalışıyorsa, web uygulamasının sql connection satırını 127.0.0.1:3306 yerine 127.0.0:3305 yapmaniz yeterli olacaktır.

Ayrıca, GreenSQL’i dedice bir sunucuya kurup birden fazla database server için merkezi proxy olarak da kullanmanız mümkündür. Böylece web uygulamalarınızın sql bağlantı ayarlarını GreenSQL’in ipsi ve 3305. port olarak set etmeniz yeterli olacaktır.
GreenSQL Çalışma Mod’ları
GreenSQL’i bir kaç farklı modda çalıştırabiliyorsunuz. Bu modlar ve açıklamaları şöyle:

Simulation Mode (database IDS) Bu modda, grensql herhangi bir blocklama işlemi yapmaz. Sadece web uygulamasından gelen sql işlemlerini alır inceler ve sonucu loglar, daha sonra da database’e iletir. Bu şekilde çalıştırılan şüpheli sql cümlelerinden haberdar olursunuz. Herhangi blocklama işlemi de yapılmadığından false positive durumlarla karşılaşmazsınız.
Blocking Suspicious Commands (database IPS) Bu modda, illegal sql komutları blocklanmaktadır. Sisteme illegal bir query geldiği zaman öncelikli olarak Whitelist kontrolü yapılır. Eğer ilgili query listede bulunamazsa, komut blocklanır ve web uygulamasına boş bir cevap döndürülür. Bu modda false positive ya da false negative durumlarla karşılaşılabilir.
Learning Mode Learning modu, yukarıdaki iki moda nazaran en kullanışlı olanıdır. GreenSQL’i belirli bir süre için learning moda aldığınız zaman gelen tüm sql komutları whitelist’e alınır, learning periyodu bittiğinde ise Active protection from unknown queries denilen moda geçer. Bu aşamada white listte olmayan tüm queryler blocklanırlar. Learning modu süresiz olarak devreye alabilir sonra istediğiniz bir zamanda manuel olarak Active Protection moduna sokabilirsiniz. Veya 3 ya da 7 günlük Learning Mod seçenekleri bulunmaktadır. Bu durumda belirlenen süre sonunda GreenSQL otomatik olarak ilgili db için Active Protection moduna geçer.Learning modunu kullanarak, GreenSQL’in web uygulamanıza ait doğru sql komutlarını öğrenmesini ve learning mode sonunda, öğrenilen komutlar dışında kalan daha önce rastlanılmamış sql cümlelerini blocklamasını sağlayabilir ve false positive durumları en aza indirgeyebilirsiniz.

Bu modların yanı sıra, GreenSQL CREATE, DROP vs. gibi bilinen database yönetim komutlarını da tamamen blocklayabilmektedir. İhtiyacınıza göre bu özellikten de faydalanabilirsiniz.
Illegal Querylerin Tespiti
GreenSQL bir query’nin illegal olup olmadığınu tespit etmek için aşağıdaki metodları kullanır.

Yönetimsel ve Sensitive Query’lerin saptanmasıGreenSQL imza tabanlı bir sistem kullanır ve querylerin, database yapısını değiştirmek, sistem dosyalarına erişmek vs. gibi yönetimsel ve hassas işlev içerip içermediğin tespit eder ve bu tip query’leri illegal olarak değerlendirir. Eğer web uygulamanız böyle query’ler çalıştırıyorsa, bunları spesifik olarak whiteliste’e ekleyerek false positive durumların önüne geçebilirsiniz.
Query Risk Hesaplaması

GreenSQL, bir query’inin risk derecesini hesaplamak için örnek olarak aşağıdaki faktörleri göz önüne alır.

Users, Accounts vs. gibi hassas tablolara erişim.
Sql komutlarının içinde yorum ifadeleri bulunması.
Boş password stringi.
Query içerisinde “or” token’i bulunması.
SQL tautology

GreenSQL ile ilgili teorik bilgiler hemen hemen bu kadar. Şimdi kurulum ve yaplandırma işlemlerine geçelim.
GreenSQL Kurulumu
GreenSQL RedHat, CentOS, Fedora, SuSe, Mandriva, Debian, Ubuntu gibi GNU/Linux dağıtımları ve FreeBSD sistemler için pre-compiled paketi bulunuyor. Böylece kurulumu, sisteminizin paket yöneticisini kullanarak yapabiliyorsunuz. Ben burada Greensql’in CentOS 5.2 üzerine kurulumundan bahsedeceğim ancak siz download sayfasından kendi dağıtımınıza ait pre-compiled paketi indirebilirsiniz. Paketin yüklenmesi dışındaki tüm işlemler aynıdır.

Ayrıca, GreenSQL’in web tabanlı bir yönetim arayüzü bulunduğundan dolayı, sunucunuzda apache, php ve mysql bileşenleri bulunmalıdır. Dolayısı ile şimdi bahsedeceğim işlemlere başlamadan önce sunucunuzda bu bileşenlerin bulunduğuna emin olun.
Download

Sisteminize uygun paketi, [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] adresinden download edebilirsiniz. Ben CentOS 5.2 kullandığım için greensql-fw-1.2.2-17.1.i386.rpm isimli rpm paketini indiriyorum.
Kurulum

Kurulumu herzamanki rpm install yönetimi ile yapıyoruz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# rpm -ihv greensql-fw-1.2.2-17.1.i386.rpm 

Yapılandırma

GreenSQL, yapılandırma ayarları ve alert loglarını bir database’de (MySQL ya da PostgreSQL) tutuyor. Database ayarlamalarını ve temel yapılandırma için /usr/sbin/greensql-config betiğini çalıştırmak yeterli oluyor.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# /usr/sbin/greensql-config 

Bu komutu çalıştırdığınız zaman yapılandırma ile ilgili bir iki soru soruluyor. Üzerinde MySQL server çalışan bir makinadaki örnek bir ekran çıkıtısı aşağıdaki gibidir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
executing /usr/bin/greensql-create-db.sh
which
no psql in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mysql binary file located: /usr/bin/mysql
mysqladmin binary file located
: /usr/bin/mysqladmin

Database type 
(mysql or pgsql) [mysql]:
MySQL server address [127.0.0.1]:
MySQL port number [3306]:
MySQL admin user [root]:
MySQL admin password [root-sifreniz]:
GreenSQL config db name [greendb]:
GreenSQL DB user name [green]:
GreenSQL DB user password [pwd]:
Would you like to set up the database and tables automatically [Y/n]:

Creating MySQL database...
Adding MySQL user green...
Creating MySQL tables...
Modifing /etc/greensql/greensql.conf... 

Görüldüğü gibi GreenSQL yapılandırma aracı sistemde PostgreSQL ve MySQL kontrolü yapıyor ve bizim örneğimizde MySQL sunucusunu tespit ederek sunucuya ait bilgileri girmenizi istiyor. Daha sonra da öntanımlı greendb isimli bir database oluşturup, bir kullanıcı ve şifre atıyor. (Default olarak user: green pass: pwd) Daha sonra da greenSQL için gerekli olan database’in otomatik olarak set edilmesini isteyip istemediğimizi soruyor.

Son olarak da işlemleri gerçekleştirip yapılandırmayı /etc/greensql/greensql.conf dosyasına yazıyor.
GreenSQL servisinin start edilmesi

Yapılandırma işlemlerinden sonra servisi başlatıyoruz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# /etc/init.d/greensql-fw start 

Servis sorunsuz başladıysa, şimdi web tabanlı yönetim konsolunu devreye alabiliriz.
GreenSQL Management Console Yapılandırması

Bu web konsolu, GreenSQL firewall tanımlamalarının yapılması ve hertürlü yönetim işleminin gerçekleştirilmesi için kullanılmaktadır. Burada, back-end database’lerinizi tanımlayarak bu database’ler için GreenSQL’in hangi modda çalışacağını ayrı ayrı belirleyebilirsiniz.

GreenSQL web interface’ine ait dosyalar öntanımlı olarak /usr/share/greensql-fw/ dizininde bulunmaktadır. Bu dizini web sunucunuzun document root’una taşıyarak ya da document root’tan orjinal dizine link yaratarak kolayca devreye alabilirsiniz.
Örnek olarak CentOS 5.2′de apache 2.2′nin default document root’u /var/
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Bu durumda linkleme işlemini şu şekilde yapabilirim:

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# cd /var/
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #0000BB">

Son olarak da greensql dizini içinde bulunan templates_c dizinine yazma izni vermek gerekiyor. Bu dizinde cachelenen sayfalar tutulacağı için web suncusunun bu dizine yazabilmesi gerekir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# cd /var/
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #0000BB">

Herşey yolunda gittiyse, web interface erişileiblir durumdadır. Browser’ınıza [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] yazarak interface’e erişebilirsiniz. Herhangi bir sorun varsa, greensql dizinindeki config.php dosyasında mysql bağlantı bilgilerinizi kontrol edebilirsiniz.

Web interface’i ile ilgili apache ayarlarınızı düzenleyebileceğiniz bir de /etc/greensql/greensql-apache.conf isimli dosya bulunmaktadır. Buradan ihtiyacınız olan düzenlemeleri yapabilirsiniz.

Bir testlik yoksa, GreenSQL şu an çalışmaktadır ve tcp 3305 portunu dinlemektedir. Kontrol etmek için netstat komutundan yararlanabilirsiniz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# netstat -anp |grep 3305
tcp        0      0 127.0.0.1:3305              0.0.0.0:*                   LISTEN      8296/greensql-fw 

Görüldüğü gibi GreenSQL 127.0.0.1′e bind edilmiş 3305′i dinlemekte.

Ayrıca, sql komut satırına da bağlanarak durumu check edebilirsiniz.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
# nmysql -h 127.0.0.1 -P 3305 -u root -p 

Önemli Not: Mysql’e localhost şeklinde değil de 127.0.0.1 olacak şekilde bağlantı kurmanız gerekir. Zira eğer localhost derseniz bağlantı tcp stack yerine unix domain socket kullanacaktır. Ancak GreenSQL şu an unix domain socket desteklemiyor. Bu nedenle bağlantıyı tcp stack ile yapmak için -h parametresi kullanarak 127.0.0.1 şeklinde yapmanız gerekir.

Çıktı şuna benzer olacaktır:

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 174
Server version
5.0.77 Source distribution

Type 
'help;' or '\h' for helpType '\c' to clear the buffer.

mysql

Normal mysql komut satırından farklı olmayan bu ekranda aslında GreenSQL’in komut satırına bağlanmış bulunuyoruz. Burada örnek olarak sunucu üzerindeki db’leri görüntülemek istersek aşağıdaki gibi boş sonuç döndürülecektir.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
mysqlshow databases;
Query OK0 rows affected (0.00 sec

Bunun nedeni, sensitive bilgilere erişmek istememiz nedeni ile GreenSQL’in bu isteği (default olarak) blocklamış olmasıdır. Block durumunu web interface’in Alerts kismindan gözlemleyebilirsiniz.

Temel yapılandırma işlemleri bu kadar. Bundan sonra web interface’i kullanarak, proxy uygulaması yapılacak db’lerinizi GreenSQL’e tanımlamak ve web uygulamanızın mysql connection ilgilerini 3305′e bağlanacak şekilde değiştirmekten ibaret.

Örnek olarak web uygulamanızın sql connection satırı aşağıdaki gibiyse:

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$link mysql_connect('localhost''mysql_user''mysql_password'); 

şu şekilde bir değişiklik yapmanız yeterli olacaktır:

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
$link mysql_connect('127.0.0.1:3305''mysql_user''mysql_password'); 

Web interface’de düzenleme yapmadan önce GreenSQL’in demosuna aşağıdaki adresten erişip, genel ayarlara göz atabilirsiniz.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

syslogs org

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet sohbet
Alt 18 Aralık 2011, 21:32   #2
J2EE123
Guest
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Yüzdesi:(%)
Cevap: GreenSQL DB Firewall ile Sql Injection Önlemi




PostgreSQL 'i her freelance işimde kullanırım. Yapısı ve kullanışlığına oldukça aşiyan oldum. Güzel bir ara katman uygulama olmuş. Fakat sistemi ne kadar yorar, DB performansını ne kadar etkiler. Bu tip argümanlar önemli kıstas bu tür uygulamalar için.

Paylaşım için teşekkürler.

 
Alıntı ile Cevapla

Cevapla

Etiketler
firewall, greensql, injection, sql, önlemi


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Anti-SQL Injection Function hAte PHP 0 07 Kasım 2014 06:33
SQL injection ve Korunma Yöntemleri CeSaRCripS MySQL 0 10 Nisan 2013 14:57
PHP'de SQL injection Güvenliği CeSaRCripS PHP 0 15 Aralık 2012 20:21
Injection Flaws toXic C# 0 07 Mart 2010 15:02