|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.
Ş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.
# 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.
# /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.
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.
# /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:
# 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.
# 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.
# 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.
# 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:
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.
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:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
şu şekilde bir değişiklik yapmanız yeterli olacaktır:
$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
Bu yazılar da ilginizi çekebilir:
- MySQL Replication durumunu bir script ile check etmek
- Mysql Root Şifresini Resetlemek – Password Recovery
- MySQL – Stored Procedure ve Function’ların Yedeklenmesi
- Lighttpd, Mysql, Php, Eaccelerator ile OpenAds Ad Server kurulumu.
- OpenX 2.8 Ad Server Kurulumu