Mod Security Hızlı Kurulum Kılavuzu Fatih Aşıcı 27 Temmuz 2006 1
İçindekiler 1 Giriş 4 2 Kurulum 4 2.1 DSO........................................................ 4 2.2 Statik Derleme.................................................. 5 2.2.1 Apache 1................................................. 5 2.2.2 Apache 2................................................. 5 3 Yapılandırma 5 2
Bu Sürüm (Mod Security Hızlı Kurulum Kılavuzu v1.0) Hakkında Hazırlayanlar: Fatih Aşıcı, 2006. Ege Üniversitesi Network Yönetim Grubu nda staj çalışması olarak hazırlandı. Danışman: Enis Karaarslan, Ege Üniversitesi Network Yönetim Grubu Kullanma Hakkı: Bu döküman, web güvenliği hakkında kullanıcıları bilgilendirmek için hazırlanmıştır. İçeriği değiştirilmediği sürece dağıtılabilir ve kopyalanabilir. Bu dökümanın hepsi veya bir kısmı, kaynak olarak referans verildiği sürece kullanılabilir. Sitenizde kullanırken veya referans verirken aşağıdaki bilgileri kullanınız: Mod Security Hızlı Kurulum Kılavuzu, Ege Üniversitesi Network Güvenlik Grubu, 2006, http://security.ege.edu.tr İletişim: Döküman hakkındaki yorum, düzeltme döndürmek; dökümana bilgi-bölüm eklemek için bizimle lütfen irtibata geçiniz. Email: security@nyg.ege.edu.tr Yasal Sorumluluk Reddi Bu döküman web sunucusu güvenliği konusunda bilgi vermek ve yardımcı olmak amacıyla hazırlanmıştır. Buradaki her türlü bilgi, belge ve yazılım; kaynağından alındığı şekliyle, üzerinde hiçbir değişiklik yapılmadan sunulmaktadır. Bu nedenle; belge ve bilgilerin içeriklerinin doğruluğundan, referans verilen programların hatasız ve virüssüz oluşlarından ve herhangi birisinin uygulanması sonucunda oluşabilecek zararlardan ekibimiz sorumlu değildir. Ege Üniversitesi Network Güvenlik Grubu 3
1 Giriş Mod Security web uygulamaları için geliştirilmiş açık kodlu bir saldırı algılama ve engelleme yazılımıdır. Apache web sunucusu için hazırlanmış modülünü kullanarak web sunucunuza kolayca entegre edebileceğiniz bu yazılıma ait birtakım özellikler şöyle: 1. İstek filtreleme 2. Parametre ve dosya adı denetimi 3. Çerez denetimleri 4. Kodlama denetimi 5. POST bilgilerinin analizi 6. Sıkıştırılmış veri denetimi 7. Null byte saldırılarını önleme 8. Sunucu kimliği değiştirme 9. Dahili chroot desteği ve daha birçok özellik. Mod Security, yukarıda da belirtildiği gibi, saldırıları algılama dışında engelleme özelliğine de sahiptir. Belirlediğiniz yapılandırmaya bağlı olarak herhangi bir saldırı algılandığında karşı tarafa bir hata mesajı göndererek saldırının engellenmesini sağlayabilir. Bunun yanında şüpheli durumları da günlük dosyasında tutarak sistem yöneticisine inceleme fırsatı sunabilir. 2 Kurulum Mod Security apache modülünü kurmanın değişik yöntemleri var. Burada kaynaktan kurma yöntemlerini genel olarak göreceğiz. Bunun yanında kullandığınız dağıtıma ait hazır derlenmiş olan ikili (binary) paketleri http://www.modsecurity.org/ download/ adresinden indirerek dağıtımınızın paket yönetim sistemi aracılığı ile daha kolay bir kurulum yapabilirsiniz. Ancak bu ikili paketlerin güncel sürümleri her zaman bulunmayabilir. 2.1 DSO Bir modülü kaynaktan derleyip kurmanın en kolay yolu DSO (Dynamic Shared Object) özelliğini kullanmaktır. Apache ile beraber gelen apxs aracı sayesinde modüller derlenip halihazırdaki sunucuya kolayca entegre edilebilmektedir. Bunun için Apache yi yeniden derlemeye gerek yoktur. apxs aracı bazı dağıtımlarda apache sunucusu ile birlikte geldiği halde bazılarında ayrı bir geliştirme paketi içerisine dahil edilmektedir. Eğer bu aracı mevcut kurulumunuzda bulamazsanız dağıtımınızın ek bir paket sunup sunmadığını kontrol edin. Bu paketler genelde -devel sonekini almaktadır (apache-devel gibi). Öncelikle http://www.modsecurity.org/download/ adresinden mod security kaynak paketini indirip herhangi bir dizine açın: # wget -c \ > http://www.modsecurity.org/download/modsecurity-apache 1.9.4.tar.gz # tar xvf modsecurity-apache 1.9.4.tar.gz Daha sonra modül kaynağının olduğu dizine geçip apxs aracını kullanarak kurulum yapabilirsiniz: # cd modsecurity-apache 1.9.4/apache2 # apxs -cia mod security.c Eğer sisteminizde apxs komutunun bulunduğu dizin PATH çevre değişkeni içerisinde değilse apxs yerine /apache/dizini/apxs şeklinde yazmalısınız. Yine kullandığınız dağıtım apxs yerine apxs2 adını kullanmış da olabilir. Yukarıda yazdığımız komutlar herhangi bir hata vermediyse mod security sisteminize başarıyla kurulmuş demektir. apxs komutuna verdiğimiz parametrelerden; 4
c: modülün derlenmesini i: modülün kurulmasını a: modülün httpd.conf (bu dosya adı da dağıtımınıza göre değişebilir) içerisinde etkinleştirilmesini sağladı. 2.2 Statik Derleme Bu yöntem bir öncekine oranla oldukça karışık ve uzun bir yöntemdir. Bu yöntem kullanıldığında mod security web sunucunuz içerisine gömülecektir. Bu yüzden bir miktar hız artışı sağlayabilir. Burada anlatılanları yapabilmeniz için önceden apache derleyebiliyor olmanız gerekiyor. Eğer bu noktada yardıma ihtiyaç duyuyorsanız http://httpd.apache.org/docs/ adresindeki yönergeleri izleyebilirsiniz. Burada sadece mod security derlemek için yapılacak birkaç ön işlem gösterilecektir. 2.2.1 Apache 1 Apache kaynak kodlarını bir dizine attıktan sonra mod-security kaynak kod dosyasını bu dizine kopyalamalısınız: $ cd <apache kaynak dizini> $ cp <modsecurity kaynak dizini>/apache1/mod security.c src/modules/extra Yapılandırma aşamasına geldiğinizde./configure betiğine mod security için iki seçenek daha eklemeniz gerekiyor. Örneğin: $./configure --activate-module=src/modules/extra/mod security \ > --enable-module=security \ > <diğer seçenekler> Bu aşamadan sonra derlemeye normal şekilde devam edebilirsiniz. 2.2.2 Apache 2 Benzer şekilde mod security kaynak kodunu apache kaynak dizinine kopyalıyoruz: $ cd <apache kaynak dizini> $ cp <modsecurity kaynak dizini>/apache2/mod security.c modules/proxy Yapılandırma sırasında fazladan iki seçenek daha ekliyoruz ki mod security derlensin: $./configure --enable-security --with-module=proxy:mod security.c \ > <diğer seçenekler> Bu aşamadan sonra derlemeye normal şekilde devam edebilirsiniz. 3 Yapılandırma Kurulumdan sonraki adım, mod security için bir yapılandırma dosyası hazırlamak ve bunun apache yapılandırmasına eklenmesini sağlamaktır. Mod security indirme adresinde birçok hazır yapılandırma vardır. Başlangıç olarak bu dosyaları kullanabilir ve gerekli gördüğünüz yerleri değiştirebilirsiniz. Kuralların bulunduğu dosyayı kullanabilmek için httpd.conf içerisinde Include deyimini kullanabilirsiniz. Örnek: Include /etc/apache2/mod-security.conf Ya da dağıtımınız /etc/apache2/conf.d gibi yapılandırma dosyalarını atabileceğiniz bir dizin ayırmış olabilir. Bu durumda yapılandırma dosyanızı buraya atmanız yeterlidir. Mod security modülünün çalışmaya başlaması için sunucunuzu yeniden başlatmalısınız. Ancak bunun için apache sunucusuna restart parametresini vermek Segmentation Fault hatası verebilmektedir. Bu yüzden restart kullanmak yerine önce stop daha sonra start kullanın. Örnek: 5
$ /etc/init.d/apache stop $ /etc/init.d/apache start Mod security modülünü etkin olması aşağıdaki direktife verilen değere bağlıdır. Bu direktif mod security yapılandırma dosyanızdaki ilk direktif olacaktır: SecFilterEngine On Mod security modülünün çalışması için buraya girdiğiniz değer On olmalıdır. İstediğiniz takdirde bu değeri Off ile değiştirerek modülün çalışmasını engelleyebilirsiniz. Yapılandırmada ilk bakışta dikkat etmeniz gereken bir diğer direktif ise günlük dosyaları ve saldırı durumunda yapılması gereken eylemler ile ilgili ayarlardır. Öntanımlı eylemin ayarlanması SecFilterDefaultAction direktifi ile sağlanır. Örneğin aşağıdaki satır mod security modülünün tüm isteklere geçit vermesini ve günlük tutmasını sağlar: SecFilterDefaultAction log,pass Aşağıdaki satır ise herhangi bir saldırı durumunda isteğin engellenmesini ve isteği gönderen istemciye bir 403 hatası (Yetki hatası) gönderilmesini sağlar. Aynı zamanda log ifadesi sayesinde bu durumun günlük dosyalarına kaydedilmesini sağlar: SecFilterDefaultAction deny,log,status:403 Yapılandırmanızı doğrudan saldırı engelleyecek şekilde ayarlamanız önerilmez. Bir süre günlük dosyalarını izleyip modülün yanlış alarmlere neden olup olmadığı kontrol etmeniz önerilir. Yapılandırmanızın doğru olduğuna emin olduktan sonra saldırı engellemeyi etkinleştirebilirsiniz. Örneğin modsecurity web adresinde verilen hazır kurallar arasında aşağıdaki gibi bir kural tanımlanmıştır: SecFilterSelective ARGS <.+> Bu kuralın amacı XSS lerde kullanılabilecek deyimlerin değişkenler içerisinde yer alıp almadığını kontrol ederek herhangi bir XSS saldırısına karşı önlem almaktır. Bu kural basit bir şekilde düzenli ifade kullarak < ve > işaretleri ile kapatılmış bir deyim aramaktadır. Ancak bu bazı webmail arayüzlerinde kullanıldığında soruna yol açmaktadır. Çünkü mail adresleri bu karakterler arasına yazılabilmektedir. Bu durumda mod security bu durumu bir saldırıymış gibi değerlendirip isteğe engel olabilir ve webmail kullanıcılarının mail gönderememelerine yol açabilir. Bu yüzden bu ve benzeri durumlara karşı mod security modülünü bir süre sadece izlemek için kullanmanız önemle tavsiye edilir. Yani yukarıdaki SecFilterDefaultAction direktiflerinden önce birincisini kullanmanız, yapılandırmanızdan emin olduktan sonra ise ikinci şeklini kullanmanız önerilir. Günlüklerin tutulacağı dosyaları ve bulundukları yerler ise aşağıdaki direktifler ile belirtilmelidir: SecFilterDebugLog logs/modsec debug.log SecFilterDebugLevel 1 SecAuditEngine RelevantOnly SecAuditLog logs/modsec audit.log Buradaki ilk iki direktif mod security modülünün hata ayıklama bilgilerinin tutulacağı dosyayı ilgilendirir. Bu günlük genellikle modülün kendi işleyişi ile ilgili bilgileri bulundurur. Çoğunlukla buradaki bilgilere ihtiyacınız olmaz. Burada önerilen DebugLevel değeri yukarıdaki örnekte de görüldüğü gibi 1 dir. Diğer iki satır ise asıl bizi ilgilendiren bilgilerin tutulduğu günlük dosyası ile ilgilidir. Burada isteğe göre sadece şüpheli istekler ya da gelen tüm istekler bulunabilir. Ancak tüm isteklerin yer alması günlüğün boyutunun artmasında ve analizinin zorlaşmasına yer açacağı için önerilen bir şey değildir. Bu yüzden burada RelevantOnly deyimi ile sadece şüpheli durumlarda günlüğe istekler aktarılacaktır. Bazı dağıtımlarda yukarıdaki direktiflere tam dosya yolunu (/var/log/apache/modsec debug.log gibi) yazmak gerekebilir. Yukarıdaki gibi göreceli bir dosya adı yazıldığında Apache nin kurulum dizini referans alınacaktır. Ancak bu her dağıtımda çalışmayabilir. Yapılandırma dosyanızdaki kuralları belli gruplara ayırıp bu gruplara ayrı ayrı eylemler atayabilirsiniz. Bu sizin engellemelere başlamadan önceki izleme döneminizde işe yarayabilir. Örneğin aşağıdaki direktif bir sonraki benzer direktife kadar tanımlanan kurallar için ayrı bir eylem atanmasını sağlar: SecFilterSignatureAction log,pass,msg: PHP attack 6
Buradaki değerde yazabilecekleriniz ile SecFilterDefaultAction direktifinde kullanabileceğiniz değerler hemen hemen aynıdır. Burada diğer gruplardan ayırt edebilmemizi sağlayan msg özelliğini kullandık. Bu sayede PHP için tanımladığınız kurallardan herhangi biri eşleştiğinde günlük dosyasında PHP attack mesajını görerek daha kolay analizler yapabiliriz. Yukarıdaki direktifin bir diğer yararı da yapılandırmada bir sorun olduğunu fark ettiğimizde tüm kuralları devre dışı bırakmak yerine belli bir grubu devre dışı bırakarak güvenliği zayıflatmadan denemeler yapma imkanı bulabilirsiniz. Yapılandırma konusunda daha fazla bilgi için http://www.modsecurity.org adresine başvurabilirsiniz. Ayrıca Mod- Security kullanıcı kılavuzunun Türkçe çevirisine de http://www.enderunix.org/docs/modseckilavuz.htm adresinden ulaşabilirsiniz. 7