| 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.
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.

Ş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, http://www.greensql.net/download 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.
Komut
# 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.
Komut
# /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.
Çıktı
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.
Komut
# /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/www/html’dir. Bu durumda linkleme işlemini şu şekilde yapabilirim:
Örnek olarak CentOS 5.2′de apache 2.2′nin default document root’u /var/www/html’dir. Bu durumda linkleme işlemini şu şekilde yapabilirim:
Komut
# cd /var/www/html # ln -s /usr/share/greensql-fw/ greensql
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.
Komut
# cd /var/www/html/greensql # chmod 0777 templates_c
Herşey yolunda gittiyse, web interface erişileiblir durumdadır.  Browser’ınıza http://sunucu-ip-adresi/greensql yazarak interface’e  erişebilirsiniz. Herhangi bir sorun varsa, greensql dizinindeki  config.php dosyasında mysql bağlantı bilgilerinizi kontrol  edebilirsiniz.
Login ekrani aşağıdaki gibidir ve default kullanıcı “admin” şifre “pwd” dir.

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.
Komut
# 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.
Komut
# 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:
Çıktı
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 help. Type '\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.
Komut
mysql> show databases; Query OK, 0 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:
Çıktı
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');şu şekilde bir değişiklik yapmanız yeterli olacaktır:
Çıktı
$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.
Performans
Son olarak, web uygulamanız ve database’inizin arasında  GreenSQL’i sokarak, bir katman daha eklediğiniz için performansla  ilgili kaygılarınız olabilir. Bu nedenle performans değerlendirmelerine  göz atmak isteyebilirsiniz: 
Daha fazla bilgi için bkz:
http://www.greensql.net
http://www.greensql.net
Kaynak: Syslog 







0 yorum:
Yorum Gönder