29 Mayıs 2014

Apache Web Sunucusu Sıkılaştırma Konfigürasyonları

Apache, açık kaynak kodlu bir web sunucu programıdır. Nisan 2014 itibarıyla Netcraft tarafından  958.919.789 web sitesinden bilgi toplanarak yapılan araştırmaya göre interneteki sitelerin yüzde %37.74’dü  Apache Web sunucusu kullanmaktadır. Bu blog yazımızda Apache sunucu güveliğini sağlamak için yapılması gerekenleri ele alacağız.

Apache web sunucusunda yapılandırma dosyası httpd.conf dosyasıdır. Bazı işletim sistemleri ve bazı Apache web sunucusu sürümlerinde yapılandırma dosyasınında farklılıklar gözlenebilmektedir. (Örn: apache2.conf)
Öncelikle Apache web sunucusu güvenliği konusunda yapabileceğimiz ilk şey Apache web sunucumuzu güncel tutmak olmalılıdır.

Not: Aşağıda anlatılan yöntemler uygulandıktan sonra aktif olması için Apache Web Sunucu Servisi yeniden başlatılmalıdır.

Sunucu başlığının kısıtlanması

Kullanılan sunucu teknolojisi ve versiyonunun (bknz. Resim 1 ve Resim 2) bilinmesi saldırganın etkili saldırı yöntemleri bulmasını kolaylaştırır. Sunucu bilgisini kısıtlamak için yapılandırma dosyasına aşağıdaki komutlar eklenmelidir.
ServerSignature Off
ServerTokens Prod 

ServerSignature Off komutu ile hata sayfası  ve benzeri sayfalardaki sunucu bilgisi gizlenir. (Resim 3)

ServerTokens Prod  komutu ile sadece sunucu adının gösterimini sağlanır. Sunucuya ait herhangi bir versiyon bilgisi gösterilmez. (Resim 4)


Resim 1

Resim 2

Resim 3

Resim 4

Kullanıcı grup haklarının düzenlenmesi


Apache web sunucu başlatıldığın anda root kullanıcısı ile başlar daha sonrasında tanımlı kullanıcıya geçiş yapılır. Apache web sunucusunun root kullanıcı erişimi ile başlamasının temel nedeni bazı servislerin çalışması sadece root yetkisi ile gerçekleşmektedir. (Örneğin 80 portunun aktif hale getirilmesi işlemi için root hakkı gerekmektedir.) Tanımlı kullanıcı olarak root kullanıcı kullanılmamalıdır. Kullanıcı ve grup hakları düzenlenmeli uygulama bazında gerek görünen haklar atanmalıdır. Eğer bu şekilde yapılmayıp her uygulamaya root erişimi verilirse ortaya çıkabilecek güvenlik açıklıklarında sisteminiz savunmasız kalabilir.

Yukarıda da belirtildiği üzere kullanıcı haklarını düzenleme gerekliliği doğmaktadır. Kullanıcı hakları tanımlarını yaptıktan sonra Apache web sunucu yapılandırma ayarlarına

User apache
Group apache

yazılmalıdır. Bu sayede sunucu üzerinde apache kullanıcısı ve apache group hakları ile erişim sağlanmış olur.

Klasörlere ve dosyalara erişimi engellenmesi

Apache güvenlik sıkılaştırmasında en önemli adım Apache’de web sitelerinin bulunduğu klasör haricindeki diğer dizinlerde veya klasörlerde bulunan dosyalara (Örn:Resim5) erişimin engellenmesidir. Bu engellemeye yapmamanız durumunda sistem dosyalarına ve sistem yapılandırma ayarlarının görülebilmesine ve sisteminizin saldırganlara karşı savunması hale gelmesine neden olabilir. Yapılandırma dosyasına aşağıdaki komutlar eklenmelidir.

<Directory />
Order Deny,Allow
Deny from all
Options None
Allow from all
</Directory>


Yukarıdaki işlemi yaparak web kök dizini hariç tüm klasörlere erişimleri engellenmiş  olur. (Örn:Resim 6)

Bir önceki işlemi yaptıktan sonra istediğiniz klasöre erişim iznini aşağıdaki komutları yapılandırma dosyasına ekleyerek yapabilirsiniz.

<Directory /İzin vermek istediğiniz klasörü belirtiniz>
    Order Allow,Deny
    Allow from All
</Directory>


Bu işlemi yaparak sadece sizin izniniz doğrultusunda klasör veya klasörlere izin vermiş olursunuz.
Belirtilen (.dosyauzantısı) bir uzantıdaki tüm dosyalara erişimi engellemek için yukarıda verilen örneğe benzer şekilde aşağıdaki yapılandırma ayarı yapılabilinir.

<Files ~ "/.dosyauzantısı$">
    Order Deny,Allow
    Deny from All
</Files>


Bu tarz kısıtlamalar genellikle klasör bazlı kısıtlama için kullanılan alt yapılandırma dosyası .htaccess dosyasının doğrudan çağrılmasının engellenmesi için kullanılmaktadır.

<Files ~ "^/.htacces">
    Order Deny,Allow
    Deny from All

</Files>





Resim 5


Resim 6

Sistem Ayarlarının Korunması

 .htaccess dosyası klasör tabanlı kısıtlama yapmak için kullanılan bir alt yapılandırma dosyasıdır. Ancak bir alt klasör için .htaccess ile yapılan bir değişiklik genel yapılandırma dosyasının ayarlarını bozabilir ve bir güvenlik açığına sebep olabilir. Bu yüzden .htaccess dosyasının genel yapılandırma dosyasının ayarlarını bozmasının önüne geçilebilinmesi için

<Directory /webroot>
    AllowOverrride None
</Directory>



komutu genel yapılandırma dosyasının içine eklenmelidir. 


HTTP İstek (Request) Metotlarının düzenlenmesi

HTTP 1.1 protokol birden fazla istek(request) metodunu destekler fakat bunların bir çoğu potansiyel riskler doğurmaktadır. Apache ‘de standart olarak OPTIONS, GET, Head, Post, Put, Delete, Trace, Conect metotları aktiftir. Potansiyel risklerden kaçınmak için yapılandırma dosyasına aşağıdaki komutları ekleyelim.

<LimitExcept GET POST HEAD>
deny from all
</LimitExcept>


Bu işlemi yaparak sadece Get, Post, Head metotlarına izin verilmesi sağlanır.


Apache Web Uygulama Güvenliği

Http Trace Methodunun Kapatılması


Http Trace metodu varsayılan olarak Apache Web sunucuda aktif olarak gelmektedir. Bu metodun açık olması ve XSS açılıklığının barınması durumunda kullanıcı cookie’lerinin ve kimlik bilgilerinin çalınması için kullanılabilinir. Bu tür saldırıları engellemek için yapılandırma dosyası içerisine

 TraceEnable off

yazılmalıdır.

Oturum Çerez(ler)ine Httponly İşaretinin Eklenmesi


Tarayıcılar httponly (Örn:Resim 7) olarak işaretlenmemiş çerezlere javascript gibi istemci tarafında çalışan betikler tarafından erişilmesine izin vermektedir. Bu nedenle olası bir XSS açıklığı durumunda oturum çerezinin çalınması söz konusu olabilir. Olası XSS açıklığının önüne geçebilmek için yapılandırma dosyası içerisine

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

komutu eklenmelidir.

Resim 7

X-XSS Açıklığına karşı önlem alınması

X-XSS özellikle GET metodu içindeki parametrelere yönelik yapılabildiğinde oturum parametresinin çalınması, tüm tuşların izlenmesi ve hatta ekran görüntülerinin alınabilmesi ile sonuçlanabilir. Bu açıklığın oturum parametresi olarak kullanılan bir cookie bilgisini çalma amaçlı kullanılabilmesi için tanılanmış bir kullanıcıya bu açıklığa sahip  ve içinde kötü niyetli betik barındıran özel hazırlanmış bir URL linkini tıklamaya ikna etmek gereklidir. POST isteği ile gerçekleştirilebilen X-XSS saldırıları için POST isteğinin javascript kodu ile oluşturulması gerekmekte olup GET isteğine kıyasla saldırı daha zor olabilecektir.  X-XSS açıklığına karşı önlem almak için Apache Web Sunucu yapılandırma dosyamız içerisine aşağıda yer alan komutları eklemek yeterli olacaktır.

Header set X-XSS-Protection “1; mode=block”

veya

Header set X-XSS-Protection  0

Zaman Aşımı (Timeout) Değerinin Düzenlenmesi

Zaman aşımı süresi Apache sunucusu üzerinde standart olarak 300 saniyeye ayarlıdır. Servis kullanımı engelleme saldırılarının (DoS) potansiyel etkilerini azaltmak için bu değer düşürülmelidir. Yapılandırma ayar dosyasına aşağıdaki komutu ekleyelim.

Timeout 45

Büyük Boyutlardaki İsteklerin Sınırlandırılması

Apache web sunucusunda bir http isteğinin boyutunu sınırlamanıza izin veren çeşitli direktifler sunar. Bu özellik de servis kullanımı engelleme saldırılarının etkilerini azaltmak için kullanılabilir.
Başlangıç olarak LimitRequestBody direktifi kullanılabilir. Bu direktif varsayılan olarak sınırsız olarak ayarlıdır. Eğer 1mb'ın üzerinde dosya gönderimine izin vermiyorsanız yapılandırma dosyasına aşağıdaki gibi yazarak değiştirebilirsiniz. Eğer dosya gönderimlerine (upload) izin vermiyorsanız daha da düşük tutabilirsiniz.



LimitRequestBody 1048576