Temel Apache Sıklaştırma
Merhabalar. Günümüzde en çok kullanılan web sunuculardan biri de Apache’dir. Çoğu webmaster sunucu kurulumu yaparken temel LAMP (Linux-Apache-MySQL-Php) kurulumu yapıyor ve siteleri/projeleri bu şekilde host ediyorlar.
Bir güvenlik araştırmacısı olarak bunu doğru bulmuyor, bazı ince ayarlar yapılması gerektiğini düşünüyorum. Hardening yani sıklaştırma işlemleri teknik ve pratik açısından epey uzun ve zaman alan konular olduğu için konuyu tek seferde yazmayacağım.
Hackerların bir hedef üzerinde yaptıkları ilk iş her zaman için aktif ve pasif bilgi toplamak olur. Böylece zayıflık noktalarını daha iyi tanır, atak çizelgesini buna göre oluştururlar. Temel olarak bilgi sızmasına karşı önlem alacağız diyebiliriz.
1 – Web Sunucu Versiyon Bilgisi.
Sunucuya bir istek gönderdiğinizde, sunucu da buna bir yanıt verir ve bu eğer temel apache kurulumu yapılmış ve hiçbir konfigürasyon değiştirilmemiş ise gelen cevap sunucunun Versiyon bilgisini de içerir.
Versiyon bilgimiz saldırganın bilgisi dahilinde olursa -varsa- ilk olarak bilinen versiyona özgü exploitleri deneyecektir. Bu da hacklenmenizi kolaylaştırmış olacaktır.
Versiyon bilgisini gizlemek için;
Ubuntu’da “/etc/apache2/apache2.conf”
CentOS/RHEL’de “/etc/httpd/conf/httpd.conf” dosyanıza
ServerTokens Prod
ServerSignature Off
Satırlarını ekleyip, Apache web sunucunuzu yeniden başlatmalısınız.
2 – Dizin Listeleme
Web adresinizin dizinlerinin içinde hangi dosyaların olmasının bilinmesi pek de mantıklı bir durum değil. Bunu kapatmak için de yine kullandığınız Linux dağıtımının Apache config dosyasında;
tagleri arasındaki Options bölümünü düzenlemeniz gerekmekte.
Örnek config;
<Directory /var/www/> Options -Indexes -FollowSymLinks //Dizin Listeleme kapalı ve Sym link kapalı. AllowOverride None Require all granted RewriteEngine On // Rewrite açık RewriteCond %{THE_REQUEST} !HTTP/1.1$ //HTTP 1.0 taleplerini reddet! RewriteRule .* - [F] <LimitExcept GET POST HEAD> // Güvensiz requestleri reddet! deny from all </LimitExcept> </Directory>
3 – Apache’yi Yetkisiz Kullanıcı ile Çalıştırma
Apache’nin nologin bir hesap ile çalışmasına dikkat edin. Böylece web server üzerinde oluşacak bir açıktan dolayı Privilege Escalation (yetki yükseltme) saldırısına maruz kalmazsınız.
Ubuntu 16.04 LTS için;
chown -R www-data:www-data /var/www
CentOS/RHEL için;
chown -R apache:apache /var/www
Örnek ps -aux çıktısı
4 – HTTP Talepleri
OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT request metodlarından sadece POST, GET ve HEAD metodları bir web uygulama için yeterlidir. Bunlar dışındaki metodları devre dışı bırakabiliriz;
<Directory /var/www/> <LimitExcept GET POST HEAD> deny from all </LimitExcept> </Directory>
5 – httpOnly ve Secure Bayrakları
httpOnly ve Secure bayrakları XSS (Cross-Site Scripting) ataklarına karşı koruma sağlar. Bu bayraklar sayesinde cookie’lerin çalınması, manipüle edilmesinin önüne temel olarak geçilebilir.
Yine apache config dosyasına aşağıdaki satır eklenmelidir. Ancak belirtmek gerekir ki headers modülünün apache load edilmesi gerekiyor.
Ubuntu;
a2enmod headers
CentOS/RHEL
Önyüklü olarak mevcuttur.
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
6 – SOP (Same Origin Policy)
Kısaca SOP, browser tarafından yüklenen tüm kaynaklar, bu kaynağa erişimde kullanılan protokol, URL ve erişilen port birleşiminden oluşan ve origin olarak tabir edilen bir dizge ile tanımlanacak ve bu sayfalar ancak aynı origin’e sahip iseler, birbirlerinin kaynaklarına erişebilmesidir.
Apache config dosyasına dahil edin;
Header always append X-Frame-Options SAMEORIGIN
7 – X-XSS-Protection
Günümüzde tarayıcılar XSS filtresi ile gelmektedir. Ancak yine bu tarayıcıların XSS filtreleri bazı yöntemler ile bypass edilebilmektedir. X-XSS-Protection ise buna önlem olarak kullanılabilir.
Yine apache2.conf/httpd.conf dosyanıza aşağıdaki satırı eklemeniz gerekmektedir.
Header set X-XSS-Protection "1; mode=block"
8 – HTTP 1.0 Protokolünü Devre Dışı Bırak
HTTP 1.0 güvenlik zafiyetleri bulundurduğu için sunucu tarafında engelleyelim. Bunun için rewrite modülünün yüklü olduğundan emin olun.
Ubuntu tarafında a2enmod rewrite yazarak aktif edebilirsiniz.
<Directory /var/www/> RewriteEngine On RewriteCond %{THE_REQUEST} !HTTP/1.1$ RewriteRule .* - [F] </Directory>
9 – Timeout Değeri
Apache default olarak 300 saniye Time-out değeri ile gelmektedir. Bu da DoS/DDoS ataklarına karşı sunucunuzun daha fazla savunmasız olmasına neden olmaktadır. Bu değeri düşürmeniz iyi olacaktır.
Config dosyasınızda “Timeout 300” değerini bulun ve size uygun değer ile değiştirin. Örnek,
Timeout 30
10 – Mod_Evasive
DoS/DDoS ataklarına karşı koruma sağlar. Bir ip adresinden gelen sorgu sayısını süzer ve confige göre engeller. Önyüklü olarak gelmediğinden kurulum yapmanız gerekmektedir.
Ubuntu; sudo apt-get install libapache2-mod-evasive CentOS/RHEL; yum install mod_evasive
Sonrasında “/etc/apache2/mods_enabled/evasive.conf” dosyasını düzenleyebilirsiniz.
Örnek config;
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 20 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify g0ts@tuta.io #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" </IfModule>