Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | Apache Hardening

TR | Apache Hardening

            Bu rehberde size Apache sunucularını güvenceye almak için elimden geldiğince ipuçları vermeye çalışacağım. Sıkılaştırma işlemlerini Linux platformu üzerinden gerçekleştireceğiz. Apache 2.4.x ve 2.2.x sürümlerine uygun testler gerçekleştiriyor olacağız. Gelin ilk önce Apache nedir ona bir bakalım.

Apache Nedir?

            Apache, 1995 tarihinden beri geliştirilmekte olan açık kaynak kodlu, güçlü, sağlam, yetenekli ve esnek bir web sunucusudur. Apache, 1999’da kurulan Apache SoftwareFoundation(ASF) tarafından geliştirilmektedir. Unix, GNU, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows, OS/2, TPF ve eComStation işletim sistemleri üzerinde çalışabilmektedir.

            İlk Apache sürümü 1 Aralık 1995’ te piyasaya sürülmüş kısa sürede internetin bir numaralı sunucusu haline gelmiştir. İnternet’ teki web sitelerinin %60’ ı Apache üzerinde çalışmaktadır. Aşağıdaki grafikte de görüldüğü üzere Apache sunucular piyasaya sürüldükten sonra kısa sürede popüler hale gelmiştir.

ekran-goruntusu_2016-10-21_22-40-00

            Bu kadar popüler olmasının elbet bir dezavantajı olacaktır. Apache sunucular aldığı saldırılar yönünden de popüler hale gelmiştir.
            Bu saldılar çoğunlukla XSS, Info Leakage, Session Management ve SQL Injection yoluyla yapılmaktadır. Apache sunucular en çok XSS açıkları yüzünden saldırıya maruz kalmaktadır.

ekran-goruntusu_2016-10-21_22-40-00

Apache Kurulumu

1.Adım

            İlk önce kütüphanemizi güncelleyelim.

5

2.Adım

            Apache’ yi sistemimize kuralım.

1

3.Adım

            İnternet tarayıcınızdan http://localhost  veya 127.0.0.1  adreslerine girdiğinizde karşınıza aşağıdaki gibi bir ekran çıkıyorsa kurulum başarılı bir şekilde sonuçlanmıştır.

2
4.Adım

            Eğer yukarıdaki ekranı göremediyseniz bir sorun var demektir. Apache’ nin çalışıp çalışmadığını kontrol edelim.

screenshot_62

            Apache yukarıda görüldüğü üzere aktif halde değil. Apache’ yi başlatalım.

3

            Apache aktif olduğu halde http://localhost  adresine erişemiyor olabilirsiniz.

screenshot_345

            Bunun için Apache’ yi restart edip tekrar kontrol edelim.

4

            Apache kurulumu burada sona ermiştir.

Apache Sıkılaştırma Adımları

Apache’ yi ayrı bir kullanıcı hesabı ve grupta çalıştırın

            Örneğin, Apache’ yi yapılan başarılı bir saldırı sonucunda saldırgan aynı kullanıcı hesabında bulunan e-posta sunucusuna erişebilir. Tam tersi bir senaryo da işleyebilir. Bu yüzden Apache’ yi kendi kullanıcı hesabı ve grubunda çalıştırmak en doğrusu olacaktır.

            Öncelikle Apache için yeni bir grup oluşturalım.

12

            Daha sonra bu gruba yeni bir hesap oluşturalım.

11

            Oluşturduğumuz yeni kullanıcı hesabının içine daha önce bahsettiğimiz gibi Apache sunucuyu kurabiliriz.

Apache’ yi sürekli olarak güncel tutmak

            Apache geliştirici topluluğu güvenlik açıklarını kapatabilmek için sürekli çalışmaktadır. Genellikle her ay güncelleme almaktadır. Bu sebepten dolayı Apache’ yi güncel tutmak kesinlikle önemlidir.

            İlk önce Apache’ i sürümünü kontrol edelim.

15

            Eğer Apache’ mizin sürümü eskiyse aşağıdaki adımları takip edelim.

screenshot_47

Apache sürüm bilgilerini ve diğer bilgileri gizlemek

            Apache, varsayılan olarak sürümünü, işletim sistemini ve hangi Apache modüllerinin sunucuda kurulu olduğunu bir hata sonucunda saldırgana söyleyebilir.

6

            Bunu çözmek için ilk önce apache2.conf  dosyasını terminalden açalım.

7

            Daha sonra dosyanın sonuna gelerek aşağıdaki gibi iki satırlık kodu ekleyerek kayıt edip çıkalım.

           

ServerSignature Off
ServerTokens Prod

 

8

            Apache servisimizi tekrar başlatalım.

9

            Gördüğünüz gibi artık sürümü, kullanılan işletim sistemi gibi bilgileri vermemekte.

10

İhtiyaç duyulmayan modüllerin kapatılması

            Apache, çeşitli modüllerle birlikte kurulmaktadır. Aktif durumda bazı modüllere ihtiyacınız olmayabilir.

Bu modülleri aratmak için aşağıdaki kod satırını kullanalım.

17

            Bu sorgudan sonra herhangi bir çıktı alamadıysak açık modül yok demektir.

            Eğer alıyorsak aktif modül var demektir. Editörle apache2.conf dosyasının içine girerek ‘LoadModule’ ile başlayan satırların başlarına ‘#’ işaretini koyarak bu satırları yorum satırı haline getirebiliriz. Bu sayede istediğiniz modülü devre dışı bırakabilirsiniz.

Apache’ nin konfigürasyon ve çalıştırılabilir dosyalarına sadece root için okuma izni verilmesi

            Apache kurulumunuzun /usr/local/apache  olduğunu varsayarak aşağıdaki adımları izleyelim.

18

            Bu kodla apache klasörünü ve alt klasörlerini sahipliğini root olarak değiştirdik.

19

            Bu kodla apache klasörünün ve alt klasörlerinin diğer kullanıcılar tarafından okuma, yazma ve çalıştırma izinlerini kaldırdık.

Timeout değerinin düşürülmesi

            DoS(Servis Kullanımını Engelleme) saldırılarının etkilerini azaltmak için Timeout(Zaman aşımı) süresini düşürebiliriz. Timeout süresi varsayılan olarak 300 saniyedir.

            Terminalden apache2.conf dosyamızı açıyoruz.

7

            Daha sonra ‘Timeout 300’ yazan yeri aşağıdaki gibi düzeltiyoruz. Bu değeri kendinizde belirleyebilirsiniz.

         

Timeout 45

 

20

Büyük boyutlu isteklerin sınırlandırılması

            Apache, bir HTTP isteğinin boyutunu sınırlamaya izin verir. Varsayılan olarak bu değerler çoğu sunucu için uygun değerlere ayarlanmıştır. Yine de bu değerleri değiştirmek gelebilecek saldırıları minimuma indirebilir.

            Küçük bir örnek göstermek amacıyla apache2.conf dosyasını açalım.

7

            Örneğin 1 Mb’ın üzerindeki isteklere izin vermiyorsanız aşağıdaki gibi bir kod satırı ekleyebilirsiniz.

           

LimitRequestBody 1048576

 

21

            Bu direktife benzer LimitRequestFields, LimitRequestFieldSize ve LimitRequestLine direktiflerini de kullanabilirsiniz.

Mod_security kurulumu

            Mod_security, Ivan Ristic tarafından hazırlanmış bir Apache modülüdür. Mod_security ile  basit filtreleme, URL kodlama kontrolü, upload hafıza sınırları, reguler exprenssion tabanlı filtreleme gibi ve daha fazlasını yapabiliriz

            Mod_security kurulumunu aşağıdaki adımları izleyerek gerçekleştirelim.

22

23

24

Dizin listelemeyi devre dışı bırakmak

            Apache’ de varsayılan olarak dizin listeleme özelliği aktif haldedir. Bu özellik saldırganlar tarafından kullanılabilir. Saldırgan bir hata sonucunda veya başka bir yolla kök dizini altındaki dosyalara erişebilir.

            Tüm klasör ve alt dizin listelemeyi kapatmak için apache2.conf dosyasını terminalden açalım.

7

            Daha sonra aşağıdaki kod satırlarını ekleyerek kayıt edip çıkalım.

         

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

 

13

            Eğer istediğimiz bir dizini listelemeye açmak istiyorsak aşağıdaki kod satırlarına benzer bir yöntem kullanabiliriz.

 

 

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
</Directory>

 

14

Apache’ nin sembolik linkleri takip etmesinin engellenmesi

            Örnek üzerinden açıklamak gerekirse, /www/test/index.html dosyasına erişmek istediğimizde Apache ilk önce /www adresine daha sonra /www/test adresine son olarak ta /www/test/index.html adresine ulaşmak isteyecektir. Bu doğrulama işlemi ciddi bir zaman kaybına neden olacaktır. Yoğun sitelerde ciddi performans kayıplarına sebep olabilir.

            Bu sorunu apache2.conf dosyasına tek satırlık bir kod ekleyerek çözebiliriz.

7

     

<Directory >
Options -FollowSymLinks
</Directory>

 

screenshot_4

Server side include ve CGI çalıştırılmasının kapatılması

            Server side include özelliğini kapatabilir ve gerekli değilse CGI’ in çalıştırılmasını engelleyebiliriz.

            Terminalden apache2.conf dosyasını açalım.

7

            Daha sonra Directory tagı içerisine kodlarımızı ekleyelim.

         

<Directory >
Options -Includes
Options -ExecCGI
</Directory>

 

screenshot_2

Klasör içeriği görüntülemenin kapatılması

            Bu özelliği apache2.conf dosyasının içerisine ‘Directory’ tagı içerisinde Options –Indexes satırını ekleyerek kapatabiliriz.

7

<Directory >
Options -Indexes
</Directory>

 

screenshot_5

XML Body boyutunun sınırlandırılması

            Apache sunucunuzda bir XML isteğinin maksimum boyutunu sınırlandırmak isteyebilirsiniz.

            Bunun için apache2.conf dosyasının içine aşağıdaki gibi kabul edilecek maksimum XML Body boyutunu belirtebilirsiniz.

7

           

LimitXMLRequestBody 10485760

 

screenshot_3

Erişimleri IP adresine göre sınırlama

            Apache sunucunuza belirli bir ağdan veya IP adresinden erişilmesini isteyebilirsiniz. Bunun için aşağıdaki adımları uygulamanız yeterli olacaktır.

            Apache2.conf dosyamızı terminalden açalım.

7

            Örneğin sunucumuza sadece 166.16.0.0 ile 166.17.0.0 arasında kalan  IP adreslerinden erişilmesini istiyoruz.

<Directory >
Order Deny,Allow
Deny from all
Allow from 166.16.0.0/16
</Directory>

 

screenshot_6

            Veya sadece 127.0.0.1 IP adresinden erişilmesini isteyebiliriz.

<Directory >
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>

 

screenshot_7

SSL Sertifikası ile Apache güvenliğinin sağlanması

            SSL sertifikası kullanımının iki farklı yolu vardır. Bunlardan birincisi sertifika isteği oluşturarak geçerli bir sertifika(CA) otoritesi göndermek, ikincisi ise sertifika otoritemizi oluşturarak sertifika taleplerini onaylamaktır.

1.Adım

Gizli anahtar oluşturma

screenshot_8

CA için sertifika oluşturma

screenshot_9

Web sunucusu için gizli anahtarın oluşturulması

screenshot_10

2.Adım

Sunucu için sertifika imzalama isteği

screenshot_11

3.Adım

Sertifika Otoritesini(CA) kullanarak CSR’ i onaylama

screenshot_12

Gerekli dosya izinlerini verelim

screenshot_13

4.Adım

Apache’ i SSL ile başlatalım

screenshot_14

Apache KeepAlive özelliğinin ayarlanması

            Bu özelliğin dikkat edilmesi gereken önemli bir noktası bulunmaktadır. DoS saldırılarına karşı önlem alırken performanstan önemli ölçüde ödün verebilirsiniz. Apache dokümantasyonuna göre bu özellik istemci performansını %50 oranında azaltmaktadır. Bu yüzden ayarları değiştirirken dikkatli olmakta fayda var.

            Öncelikle apache2.conf dosyamızı açalım.

7

            ‘MaxKeepAliveRequests 100 ’ ve ‘KeepAliveTimeout 5 ’ yazan satırlardaki değerleri dilediğiniz şekilde değiştirebilirsiniz.

screenshot_42

Apache log kayıtlarının incelenmesi

            Apache işletim sistemine kurulumundan sonra yaşanan sorunların kullanıcıya bilgi vermesi için bir kaydını tutar. Aslında sadece Apache için değil kurulan bütün eklentilerin log kayıtlarına linux işletim sisteminde ulaşabiliriz.

            Bu kayıtlar sunucuda yaşanan problemler hakkında bize detaylı bilgi vermektedir. Bu kayıtları düzenli bir şekilde incelemek sunucu güvenliğini sağlamanızda faydalı olacaktır.

            Apache’ nin log kayıtları /var/log/apache2 dizinin altında tutulmaktadır. Genellikle error_log veya error.log isimli dosyalarda kayıt altına alınmaktadır. Terminalden veya editörle bu dosyaları açarak bilgi edinebilirsiniz.

screenshot_12

screenshot_32

screenshot_22

Apache FileETag özelliğinin kapatılması

            Apache Etag özelliği birçok hassas bilgiyi istemciye aktarabilmektedir (inode sayısı, Mime Type ve ChildProcess header gibi). Etag bilgilerinin saldırganlar tarafından kullanılmaması için kapatmanızı tavsiye ederiz.

            Bunun için apache2.conf dosyasına ‘FileETag None’ satırını eklemeniz yeterli olacaktır.

7

            FileETag None

screenshot_19

            Yazımızın sonuna gelmiş bulunmaktayız. Bu yazımızda sizlerle Apache nedir?, Kurulumu nasıl yapılır? ve Apache sunucusu nasıl daha güvenli bir hale getirilir? konularını inceledik.


About CanYouPwnMe

Hero!

Follow Me