Apache Web Sunucusu Sağlamlaştırma ve Güvenlik Kılavuzu

Yayınlanan: 2015-02-14

Apache HTTP Sunucusunu güvenli hale getirmek ve sağlamlaştırmak için pratik bir kılavuz.

Web Sunucusu, web tabanlı uygulamaların önemli bir parçasıdır. Apache Web Sunucusu genellikle ağın kenarına yerleştirilir ve bu nedenle saldırıya en açık hizmetlerden biri haline gelir.

Varsayılan yapılandırmaya sahip olmak, bilgisayar korsanının uygulamalara yönelik bir saldırıya hazırlanmasına yardımcı olabilecek çok hassas bilgiler sağlar. Web uygulaması saldırılarının çoğu, zayıf programlama kodu ve web uygulaması altyapısının temizlenmemesi nedeniyle oluşan XSS, Bilgi Sızıntısı, Oturum Yönetimi ve SQL Enjeksiyon saldırıları aracılığıyla gerçekleştirilir.

Positive Technologies tarafından yapılan ilginç bir araştırma, taranan uygulamanın %52'sinin yüksek güvenlik açıklarına sahip olduğunu ortaya koyuyor.

güvenlik açığı raporu

Bu yazıda, Linux platformunda Apache HTTP sunucusunun güvenliğini sağlamak için en iyi uygulamalardan bazılarından bahsedeceğim.

Aşağıdakiler Apache 2.4.x sürümünde test edilmiştir.

  • Bu, Apache'yi UNIX platformuna kurduğunuzu varsayar. Değilse, Kurulum kılavuzunu inceleyebilirsiniz.
  • Bu kılavuz boyunca Apache kurulum dizinini /opt/apache $Web_Server olarak arayacağım.
  • Herhangi bir değişiklik yapmadan önce mevcut yapılandırma dosyasının yedeğini almanız önerilir.

Kitle

Bu, Ara Katman Yöneticisi, Uygulama Desteği, Sistem Analisti veya Sertleştirme ve Güvenlik yönergelerini öğrenmek isteyen veya çalışan herkes için tasarlanmıştır.

Apache Web Sunucusu ve UNIX komutunun adil bilgisi zorunludur.

Notlar

Uygulama doğrulamasının bir kısmı için HTTP Başlıklarını incelemek için bir araca ihtiyacınız var. Bunu yapmanın iki yolu vardır.

  1. HTTP başlıklarını incelemek için tarayıcının yerleşik geliştirici araçlarını kullanın. Genellikle, Ağ sekmesi altındadır
  2. Çevrimiçi HTTP yanıt başlığı denetleyicisi aracını kullanın

Sunucu Sürümü Başlığını Kaldır

Hangi web sunucusu sürümünü kullandığınızı açıklamak istemediğiniz için bunun dikkate alınması gereken ilk şeylerden biri olduğunu söyleyebilirim. Sürümü ifşa etmek, bilgisayar korsanının keşif sürecini hızlandırmasına yardımcı olduğunuz anlamına gelir.

Varsayılan yapılandırma, aşağıda gösterildiği gibi Apache Sürümü ve işletim sistemi türünü ortaya çıkaracaktır.

apache-sunucu-banner

  • $Web_Server/conf klasörüne gidin
  • vi düzenleyicisini kullanarak httpd.conf'u değiştirin
  • Aşağıdaki yönergeyi ekleyin ve httpd.conf dosyasını kaydedin
 ServerTokens Prod ServerSignature Off
  • apache'yi yeniden başlatın

ServerSignature , Apache tarafından oluşturulan sayfadan sürüm bilgilerini kaldıracaktır.

ServerTokens , Header'ı yalnızca üretim olarak değiştirecek, yani Apache

Aşağıda görebileceğiniz gibi, sürüm ve işletim sistemi bilgileri gitti.

apache-sunucu-banner-maskeli

Dizin tarayıcı listesini devre dışı bırak

Bir tarayıcıda dizin listelemeyi devre dışı bırakın, böylece ziyaretçi kök veya alt dizin altında sahip olduğunuz tüm dosya ve klasörleri görmez.

Varsayılan ayarlarda nasıl göründüğünü test edelim.

  • $Web_Server/htdocs dizinine gidin
  • Bir klasör ve bunun içinde birkaç dosya oluşturun
 # mkdir test # touch hi # touch hello

Şimdi http://localhost/test ile Apache'ye erişmeye çalışalım.

apache-dizin-listeleme

Gördüğünüz gibi, sahip olduğunuz tüm dosya/klasörleri ortaya koyuyor ve eminim bunu ortaya çıkarmak istemezsiniz.

  • $Web_Server/conf dizinine gidin
  • httpd.conf vi kullanarak açın
  • Dizin'i arayın ve Seçenekler yönergesini Yok veya -İndeksler olarak değiştirin
 <Directory /opt/apache/htdocs> Options -Indexes </Directory>

(veya)

 <Directory /opt/apache/htdocs> Options None </Directory>
  • Apache'yi yeniden başlatın

Not : Ortamınızda birden fazla Dizin yönergeniz varsa, aynısını herkes için yapmayı düşünmelisiniz.

Şimdi http://localhost/test ile Apache'ye erişmeye çalışalım.

engelli-dizin-listeleme

Gördüğünüz gibi, test klasörü listesini göstermek yerine yasaklanmış bir hata gösteriyor.

etiket

Uzak saldırganların inode numarası, çok parçalı MIME sınırı ve alt süreç gibi hassas bilgileri Etag başlığı aracılığıyla elde etmesine olanak tanır.

Bu güvenlik açığını önlemek için aşağıdaki gibi uygulayalım. Bu, PCI uyumluluğunu düzeltmek için gereklidir.

  • $Web_Server/conf dizinine gidin
  • Aşağıdaki yönergeyi ekleyin ve httpd.conf dosyasını kaydedin
 FileETag None
  • apache'yi yeniden başlatın

Apache'yi ayrıcalıklı olmayan bir hesaptan çalıştırın

Varsayılan kurulum hiç kimse veya arka plan programı olarak çalışır. Apache için ayrıcalığı olmayan ayrı bir kullanıcı kullanmak iyidir.

Buradaki fikir, herhangi bir güvenlik açığı durumunda çalışan diğer hizmetleri korumaktır.

  • apache adında bir kullanıcı ve grup oluşturun
 # groupadd apache # useradd –G apache apache
  • Apache kurulum dizini sahipliğini yeni oluşturulan ayrıcalıklı olmayan bir kullanıcıyla değiştirin
 # chown –R apache:apache /opt/apache
  • $Web_Server/conf'a gidin
  • httpd.conf'u vi kullanarak değiştirin
  • Kullanıcı ve Grup Yönergesini arayın ve ayrıcalıklı olmayan hesap apache'si olarak değiştirin
 User apache Group apache
  • httpd.conf'u kaydedin
  • Apache'yi yeniden başlatın

http işlemini çalıştırmak için grep ve apache kullanıcısı ile çalıştığından emin olun

 # ps –ef |grep http

Bir işlemin root ile çalıştığını görmelisiniz. Bunun nedeni, Apache'nin 80 numaralı bağlantı noktasını dinlemesi ve root ile başlatılması gerektiğidir.

İkili ve yapılandırma dizini iznini koruyun

Varsayılan olarak, ikili ve yapılandırma izni 755'tir; bu, sunucudaki herhangi bir kullanıcının yapılandırmayı görüntüleyebileceği anlamına gelir. Başka bir kullanıcının conf ve bin klasörüne girmesine izin vermeyebilirsiniz.

  • $Web_Server dizinine gidin
  • bin ve conf klasörünün izinlerini değiştir
 # chmod –R 750 bin conf

Sistem Ayarları Koruması

Varsayılan kurulumda, kullanıcılar .htaccess kullanarak apache yapılandırmasını geçersiz kılabilir. Kullanıcıların apache sunucu ayarlarınızı değiştirmesini durdurmak istiyorsanız, aşağıda gösterildiği gibi AllowOverride None ekleyebilirsiniz.

Bu kök düzeyinde yapılmalıdır.

  • $Web_Server/conf dizinine gidin
  • httpd.conf'u vi kullanarak açın
  • Kök düzeyinde Dizin arayın
 <Directory /> Options -Indexes AllowOverride None </Directory>
  • httpd.conf'u kaydedin
  • Apache'yi yeniden başlatın

HTTP İstek Yöntemleri

HTTP 1.1 protokolü, gerekli olmayabilecek birçok istek yöntemini destekler ve bunlardan bazıları potansiyel risk taşır.

Tipik olarak, ilgili Dizin yönergesinde yapılandırılabilen bir web uygulamasında GET, HEAD, POST istek yöntemlerine ihtiyacınız olabilir.

HTTP 1.1 protokolünde varsayılan yapılandırma OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT yöntemini destekler.

  • $Web_Server/conf dizinine gidin
  • httpd.conf'u vi kullanarak açın
  • Dizin arayın ve aşağıdakileri ekleyin
 <LimitExcept GET POST HEAD> deny from all </LimitExcept>
  • Apache'yi yeniden başlatın

HTTP İsteğini İzlemeyi Devre Dışı Bırak

Apache web sunucusunda varsayılan olarak İzleme yöntemi etkindir.

Bunun etkinleştirilmesi, Siteler Arası İzleme saldırısına izin verebilir ve potansiyel olarak bir bilgisayar korsanına çerez bilgilerini çalma seçeneği sunabilir. Varsayılan yapılandırmada nasıl göründüğüne bakalım.

  • Dinleme bağlantı noktasına sahip bir telnet web sunucusu IP'si yapın
  • Aşağıda gösterildiği gibi bir TRACE isteği yapın
 #telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 200 OK Date: Sat, 31 Aug 2013 02:13:24 GMT Server: Apache Transfer-Encoding: chunked Content-Type: message/http 20 TRACE / HTTP/1.1 Host: test 0 Connection closed by foreign host. #

Yukarıdaki TRACE isteğinde de görebileceğiniz gibi, sorgumu yanıtladı. Devre dışı bırakalım ve test edelim.

  • $Web_Server/conf dizinine gidin
  • Aşağıdaki yönergeyi ekleyin ve httpd.conf dosyasını kaydedin
 TraceEnable off
  • apache'yi yeniden başlatın

Listen portlu bir telnet web sunucusu IP'si yapın ve aşağıda gösterildiği gibi bir TRACE isteği yapın.

 #telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 405 Method Not Allowed Date: Sat, 31 Aug 2013 02:18:27 GMT Server: Apache Allow:Content-Length: 223Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>405 Method Not Allowed</title> </head><body> <h1>Method Not Allowed</h1> <p>The requested method TRACE is not allowed for the URL /.</p> </body></html> Connection closed by foreign host. #

Yukarıdaki TRACE isteğinde de görebileceğiniz gibi HTTP 405 Method Not Allowed ile isteğimi engelledi.

Artık bu web sunucusu TRACE isteğine izin vermiyor ve Siteler Arası İzleme saldırısını engellemeye yardımcı oluyor.

Tanımlama bilgisini HttpOnly ve Güvenli bayrakla ayarla

Bir tanımlama bilgisinde HttpOnly ve Güvenli bayrağı kullanarak, yaygın Siteler Arası Komut Dosyası Çalıştırma saldırılarının çoğunu azaltabilirsiniz. HttpOnly ve Secure olmadan, web uygulaması oturumunu ve çerezleri çalmak veya değiştirmek mümkündür ve bu tehlikelidir.

  • httpd.conf dosyanızda mod_headers.so'nun etkinleştirildiğinden emin olun
  • $Web_Server/conf dizinine gidin
  • Aşağıdaki yönergeyi ekleyin ve httpd.conf dosyasını kaydedin
 Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
  • apache'yi yeniden başlatın

Tıklama Saldırısı

Clickjacking, iyi bilinen bir web uygulaması güvenlik açıklarıdır.

  • httpd.conf dosyanızda mod_headers.so'nun etkinleştirildiğinden emin olun
  • $Web_Server/conf dizinine gidin
  • Aşağıdaki yönergeyi ekleyin ve httpd.conf dosyasını kaydedin
 Header always append X-Frame-Options SAMEORIGIN
  • apache'yi yeniden başlatın

apache-x-frame-seçenekleri

X-Frame-Options ayrıca burada açıkladığım iki seçeneği daha destekler.

Sunucu Tarafı Dahil Etme

Sunucu Tarafı Dahil Etme (SSI), sunucu üzerindeki yükü artırma riski taşır. Ortam ve yoğun trafikli web uygulamalarını paylaştıysanız, Dahil Etme yönergesini ekleyerek SSI'yi devre dışı bırakmayı düşünmelisiniz.

SSI saldırısı, HTML sayfalarına komut dosyaları enjekte ederek veya uzaktan kod yürüterek bir web uygulamasının istismar edilmesini sağlar.

  • $Web_Server/conf dizinine gidin
  • httpd.conf'u vi kullanarak açın
  • Dizin'i arayın ve Seçeneklere Dahil Et yönergesini ekleyin
 <Directory /opt/apache/htdocs> Options –Indexes -Includes Order allow,denyAllow from all </Directory>
  • Apache'yi yeniden başlatın

Not: Ortamınızda birden fazla Dizin yönergesi varsa, aynısını herkes için yapmayı düşünmelisiniz.

X-XSS Koruması

Siteler Arası Komut Dosyası Çalıştırma (XSS) koruması birçok tarayıcıda atlanabilir. Kullanıcı tarafından devre dışı bırakılmışsa, bu korumayı bir web uygulaması için uygulayabilirsiniz. Bu, Facebook, Twitter, Google vb. gibi dev web şirketlerinin çoğu tarafından kullanılmaktadır.

  • $Web_Server/conf dizinine gidin
  • httpd.conf'u vi kullanarak açın ve aşağıdaki Header yönergesini ekleyin
 Header set X-XSS-Protection "1; mode=block"
  • Apache'yi yeniden başlatın

Gördüğünüz gibi, XSS-Protection, yanıt başlığına enjekte edilendir.

apache-xss

HTTP 1.0 Protokolünü Devre Dışı Bırak

Güvenlik hakkında konuştuğumuzda, elimizden geldiğince korumalıyız. Öyleyse neden protokolün eski HTTP sürümünü kullanıyoruz, onları da devre dışı bırakalım?

HTTP 1.0, oturum kaçırmayla ilgili güvenlik zayıflığına sahiptir. mod_rewrite modülünü kullanarak bunu devre dışı bırakabiliriz.

  • httpd.conf dosyasında mod_rewrite modülünü yüklediğinizden emin olun
  • RewriteEngine yönergesini aşağıdaki gibi etkinleştirin ve yalnızca HTTP 1.1'e izin vermek için Yeniden Yazma koşulu ekleyin
 RewriteEngine On RewriteCond %{THE_REQUEST} !HTTP/1.1$ RewriteRule .* - [F]

Zaman aşımı değeri yapılandırması

Varsayılan olarak, Apache zaman aşımı değeri 300 saniyedir ve bu, Slow Loris saldırısının ve DoS'un kurbanı olabilir. Bunu azaltmak için zaman aşımı değerini belki 60 saniyeye düşürebilirsiniz.

  • $Web_Server/conf dizinine gidin
  • httpd.conf'u vi kullanarak açın
  • Aşağıdakileri httpd.conf'a ekleyin
 Timeout 60

SSL

SSL'ye sahip olmak, Web Uygulamasına eklediğiniz ek bir güvenlik katmanıdır. Ancak, varsayılan SSL yapılandırması belirli güvenlik açıklarına yol açar ve bu yapılandırmalarda ince ayar yapmayı düşünmelisiniz.

SSL Anahtarı

SSL anahtarını ihlal etmek zor ama imkansız değil. Bu sadece bir hesaplama gücü ve zaman meselesi.

Bildiğiniz gibi, yaklaşık 73 gün boyunca çatlayan 2009 dönemi bir PC kullanarak 512 bitlik bir anahtarı tersine mühendislik yapabilirsiniz.

Bu nedenle, sahip olduğunuz anahtar uzunluğu ne kadar yüksek olursa, SSL anahtarını kırmak o kadar karmaşık hale gelir. Dev Web Şirketlerinin çoğu 2048 bitlik anahtar kullanıyor, biz neden kullanmıyoruz?

  • Outlook.com
  • Microsoft.com
  • canlı.com
  • Skype.com
  • Apple.com
  • Yahoo.com
  • Bing.com
  • Hotmail.com
  • Twitter.com

Aşağıdaki gibi 2048 bit ile CSR oluşturmak için OpenSSL kullanabilirsiniz.

 openssl req -out geekflare.csr -newkey rsa:2048 -nodes -keyout geekflare.key

İmzalamak için bir sertifika yetkilisine göndermeniz gereken bir CSR oluşturacaktır. İmzalı sertifika dosyasını aldıktan sonra bunları httpd-ssl.conf dosyasına ekleyebilirsiniz.

 SSLCertificateFile #Certificate signed by authority SSLCertificateChainFile #Certificate signer given by authority SSLCertificateKeyFile #Key file which you generated above
  • Apache web sunucusunu yeniden başlatın ve URL'ye https ile erişmeyi deneyin

SSL Şifresi

SSL Cipher, İnternet üzerinden iki bilgisayar arasında anahtar olarak kullanılan bir şifreleme algoritmasıdır. Veri şifreleme, düz metni gizli şifreli kodlara dönüştürme işlemidir.

Web sunucunuzun SSL Cipher yapılandırmasına dayalıdır, veri şifreleme gerçekleşecektir. Bu nedenle, daha güçlü ve savunmasız olmayan SSL Şifresini yapılandırmak önemlidir.

  • $Web_Server/conf/extra klasörüne gidin
  • Yalnızca daha yüksek şifreleme algoritmalarını kabul etmek için httpd-ssl.conf içindeki SSLCipherSuite yönergesini aşağıdaki gibi değiştirin
 SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
  • Yapılandırma dosyasını kaydedin ve apache sunucusunu yeniden başlatın

Not: SSL denetim raporunuzda çok sayıda zayıf şifreniz varsa, bunları ekleyerek hızlıca reddedebilirsiniz! başlangıçta.

SSL v2 ve v3'ü devre dışı bırakın

SSL v2 ve v3'ün birçok güvenlik açığı vardır ve sızma testi veya PCI uyumluluğu için çalışıyorsanız, SSL v2/v3'ü devre dışı bırakmak için güvenlik bulmayı kapatmanız beklenir.

Herhangi bir SSL v2/v3 iletişimi, verilerin değiştirilmesine veya ifşa edilmesine izin verebilecek bir Ortadaki Adam saldırısına karşı savunmasız olabilir.

Apache web sunucusunu yalnızca en son TLS'yi kabul edecek ve SSL v2/v3 bağlantı isteğini reddedecek şekilde uygulayalım.

  • $Web_Server/conf/extra klasörüne gidin
  • Yalnızca TLS 1.2+ kabul etmek için httpd-ssl.conf içindeki SSLProtocol yönergesini aşağıdaki gibi değiştirin
 SSLProtocol –ALL +TLSv1.2

SSL yapılandırmasını tamamladıktan sonra, herhangi bir yapılandırma hatası bulmak için web uygulamanızı çevrimiçi SSL/TLS Sertifika aracıyla test etmek iyi bir fikirdir.

Mod Güvenliği

Mod Security, Apache ile kullanabileceğiniz açık kaynaklı bir Web Uygulaması Güvenlik Duvarıdır.

Derlemeniz ve kurmanız gereken bir modül olarak gelir. Ticari bir web uygulaması güvenlik duvarını karşılayamıyorsanız, bu, bunun için mükemmel bir seçim olacaktır.

Genel web uygulamaları koruması sağlamak için Temel Kurallar aşağıdaki teknikleri kullanır:

  • HTTP Koruması – HTTP protokolünün ve yerel olarak tanımlanmış bir kullanım politikasının ihlallerini tespit etme
  • Gerçek Zamanlı Kara Liste Aramaları – 3. Taraf IP İtibarını kullanır
  • Web Tabanlı Kötü Amaçlı Yazılım Algılama - Google Güvenli Tarama API'sini kontrol ederek kötü amaçlı web içeriğini tanımlar.
  • HTTP Hizmet Reddi Korumaları – HTTP Flooding ve Yavaş HTTP DoS Saldırılarına karşı savunma.
  • Ortak Web Saldırıları Koruması - yaygın web uygulaması güvenlik saldırısını algılama
  • Otomasyon Algılama – Botları, tarayıcıları, tarayıcıları ve diğer kötü niyetli yüzey etkinliklerini algılama
  • Dosya Yüklemeleri için AV Tarama ile Entegrasyon – web uygulaması aracılığıyla yüklenen kötü amaçlı dosyaları tanımlar.
  • Hassas Verilerin İzlenmesi – Kredi Kartı kullanımını izler ve sızıntıları engeller.
  • Truva Atı Koruması – Truva atlarına erişimin algılanması.
  • Uygulama Kusurlarının Belirlenmesi – yanlış uygulama yapılandırmalarında uyarılar.
  • Hata Algılama ve Gizleme – Sunucu tarafından gönderilen hata mesajlarının gizlenmesi.

İndirme ve Kurulum

Apache ile Mod Security kullanmak istediğiniz sunucuda aşağıdaki ön koşulların kurulu olması gerekir. Bunlardan herhangi biri yoksa Mod Güvenlik derlemesi başarısız olur. Bu paketleri kurmak için Linux veya Centos üzerinde yum kurulumunu kullanabilirsiniz.

  • apache 2.x veya üstü
  • libpcre paketi
  • libxml2 paketi
  • libya paketi
  • libcurl paketi
  • libapr ve libapr-util paketi
  • Apache web sunucusuyla birlikte gelen mod_unique_id modülü

Şimdi Mod Security 2.7.5'in en son kararlı sürümünü buradan indirelim.

  • İndirilen dosyayı /opt/apache'ye aktarın
  • modsecurity-apache_2.7.5.tar.gz'yi çıkarın
 # gunzip –c modsecurity-apache_2.7.5.tar.gz | tar xvf –
  • Ayıklanan klasöre gidin modsecurity-apache_2.7.5
 # cd modsecurity-apache_2.7.5
  • Mevcut Apache'ye giden apxs yolunu içeren yapılandırma komut dosyasını çalıştırın
 # ./configure –with-apxs=/opt/apache/bin/apxs
  • Make komut dosyasıyla derleyin ve yükleyin
 # make # make install
  • Kurulum tamamlandıktan sonra, /opt/apache altındaki modüller klasöründe mod_security2.so'yu göreceksiniz.

Şimdi bu, Mod Güvenlik modülünü mevcut Apache web sunucusuna yüklediğiniz sonucuna varıyor.

Yapılandırma

Mod güvenlik özelliğini Apache ile kullanmak için httpd.conf'a mod güvenlik modülünü yüklememiz gerekiyor. mod_unique_id modülü, Mod Güvenliği için ön koşuldur.

Bu modül, Mod Security tarafından izlenen ve kullanılan her istek için benzersiz bir tanımlayıcıya sahip bir ortam değişkeni sağlar.

  • Mod Security modülünü httpd.conf'a yüklemek için aşağıdaki satırı ekleyin ve yapılandırma dosyasını kaydedin
 LoadModule unique_id_module modules/mod_unique_id.so LoadModule security2_module modules/mod_security2.so
  • apache web sunucusunu yeniden başlatın

Mod Güvenliği şimdi yüklendi!

Yapmanız gereken bir sonraki şey, özelliğinden tam olarak yararlanmak için Mod Security çekirdek kuralını yüklemek.

En Son Temel Kural, ücretsiz olan bir bağlantıdan indirilebilir. https://github.com/SpiderLabs/owasp-modsecurity-crs/zipball/master

  • İndirilen çekirdek kural zip dosyasını /opt/apache/conf klasörüne kopyalayın
  • Çekirdek kural dosyasını açın
  • Klasörü kısa ve hatırlaması kolay bir adla yeniden adlandırmak isteyebilirsiniz. Bu örnekte, crs olarak yeniden adlandıracağım.
  • crs klasörüne gidin ve modsecurity_crs10_setup.conf.example adını modsecurity_crs10_setup.conf olarak yeniden adlandırın

Şimdi, Apache web sunucusuyla çalışmasını sağlamak için bu kuralları etkinleştirelim.

  • Aşağıdakileri httpd.conf'a ekleyin
 <IfModule security2_module> Include conf/crs/modsecurity_crs_10_setup.confInclude conf/crs/base_rules/*.conf </IfModule>

Yukarıdaki yapılandırmada, web uygulamalarını korumak için Mod Security Core Rules tarafından sağlanan modsecurity_crs_10_setup.conf ve base Rules base_rules/*.conf Mod Security ana yapılandırma dosyasını yüklüyoruz.

  • apache web sunucusunu yeniden başlatın

Mod Güvenliğini Apache ile başarıyla yapılandırdınız!

Aferin. Artık Apache Web sunucusu, Mod Security web uygulaması güvenlik duvarı tarafından korunmaktadır.

Başlarken

Web uygulamalarını sağlamlaştırmak ve güvenli hale getirmek için Mod Security'deki bazı kritik yapılandırmalarla başlayalım.

Bu bölümde /opt/apache/conf/crs/modsecurity_crs_10_setup.conf içindeki tüm konfigürasyon değişikliklerini yapacağız.

Bu bölümde örnek amaçlı /opt/apache/conf/crs/modsecurity_crs_10_setup.conf'u setup.conf olarak kullanacağız.

OWASP kurallarının nelerin ücretsiz olarak sağlandığını anlamak önemlidir. OWASP tarafından sağlanan iki tür kural vardır.

Temel Kurallar – bu kurallar yoğun bir şekilde test edilmiştir ve muhtemelen yanlış alarm oranı daha azdır.

Deneysel Kurallar – bu kurallar deneysel amaçlıdır ve yüksek yanlış alarmınız olabilir. Bunları bir üretim ortamında kullanmadan önce UAT'de yapılandırmak, test etmek ve uygulamak önemlidir.

İsteğe Bağlı Kurallar – bu isteğe bağlı kurallar tüm ortam için uygun olmayabilir. İhtiyacınıza göre bunları kullanabilirsiniz.

CSRF, Kullanıcı izleme, Oturum ele geçirme vb. koruma arıyorsanız, isteğe bağlı kuralları kullanmayı düşünebilirsiniz. İndirilen crs zip dosyasını OWASP indirme sayfasından çıkardıktan sonra temel, isteğe bağlı ve deneysel kurallarımız var.

Bu kurallar yapılandırma dosyası crs/base_rules, crs/opsiyonel_rules ve crs/experimental_rules klasöründe bulunur. Bazı temel kurallara aşina olalım.

  • modsecurity_crs_20_protocol_violations.conf: Bu kural, izin verilmeyen protokol (HTTP 1.0) kullanarak yanıt bölme, istek kaçakçılığı gibi Protokol güvenlik açıklarından korur.
  • modsecurity_crs_21_protocol_anomalies.conf: Bu, başlıkta Host, Accept, User-Agent ile eksik olan bir istekten korumak içindir.
  • modsecurity_crs_23_request_limits.conf:Bu kural, istek boyutu, yükleme boyutu, bir parametrenin uzunluğu vb. gibi uygulamaya özel bağımlılığa sahiptir.
  • modsecurity_crs_30_http_policy.conf: Bu, CONNECT, TRACE, PUT, DELETE vb. gibi izin verilen veya izin verilmeyen yöntemleri yapılandırmak ve korumak içindir.
  • modsecurity_crs_35_bad_robots.conf:Kötü niyetli robotları algıla
  • modsecurity_crs_40_generic_attacks.conf:Bu, işletim sistemi komut enjeksiyonundan, uzaktan dosya eklemeden vb. korumak içindir.
  • modsecurity_crs_41_sql_injection_attacks.conf:SQL'i korumak ve SQL inject isteğini kör etmek için bu kural.
  • modsecurity_crs_41_xss_attacks.conf:Siteler Arası Komut Dosyası Oluşturma isteğinden koruma.
  • modsecurity_crs_42_tight_security.conf:Dizin geçiş algılama ve koruması.
  • modsecurity_crs_45_trojans.conf: Bu kural, genel dosya yönetimi çıktısını, HTTP arka kapı sayfasının yüklenmesini, bilinen imzayı tespit eder.
  • modsecurity_crs_47_common_exceptions.conf: Bu, Apache dahili kukla bağlantısı, SSL pinger vb. gibi sorunlarla karşılaşılabilecek yaygın yanlış pozitifleri kaldırmak için bir istisna mekanizması olarak kullanılır.

Kerestecilik

Günlüğe kaydetme, Mod Security'nin yaptıkları için günlükler oluşturabilmeniz için yapılandırılacak ilk şeylerden biridir. Kullanılabilir iki tür günlük kaydı vardır; Hata Ayıklama ve Denetim günlüğü.

Hata Ayıklama Günlüğü: Bu, Apache hatasını, hata günlüğünden uyarı ve uyarı mesajlarını çoğaltmak içindir.

Denetim Günlüğü: Bu, Mod Güvenlik kuralı tarafından işaretlenen işlem günlüklerini yazmak içindir Mod Güvenliği size Denetim, Hata Ayıklama veya her iki günlük kaydını yapılandırma esnekliği sağlar.

Varsayılan olarak yapılandırma her iki günlüğü de yazacaktır. Ancak ihtiyacınıza göre değişiklik yapabilirsiniz. Günlük, SecDefaultAction yönergesinde kontrol edilir. Şimdi setup.conf'taki varsayılan günlük yapılandırmasına bakalım

 SecDefaultAction “phase:1,deny,log”

Hata Ayıklama, Denetim günlüğü - "log" kullanın Yalnızca denetim günlüğünü günlüğe kaydetmek için - "nolog,auditlog" kullanın Yalnızca hata ayıklama günlüğünü günlüğe kaydetmek için - "log,noauditlog" kullanın Saklanacak ve SecAuditLog tarafından kontrol edilen Denetim Günlüğü konumunu belirtebilirsiniz direktif.

Aşağıdaki gibi ekleyerek /opt/Apache/logs/modsec_audit.log içerisine audit log yazalım.

  • setup.conf dosyasına SecAuditLog yönergesini ekleyin ve Apache Web Sunucusunu yeniden başlatın
 SecAuditLog /opt/apache/logs/modsec_audit.log
  • Yeniden başlattıktan sonra modsec_audit.log'un oluşturulduğunu görmelisiniz.

Kural Motorunu Etkinleştir

Varsayılan olarak Motor Kuralı Kapalı'dır, bu, Kural Motorunu etkinleştirmezseniz Mod Güvenliğinin tüm avantajlarını kullanmadığınız anlamına gelir.

Rule Engine'in etkinleştirilmesi veya devre dışı bırakılması, SecRuleEngine yönergesi tarafından kontrol edilir.

  • SecRuleEngine yönergesini setup.conf içine ekleyin ve Apache Web Sunucusunu yeniden başlatın
 SecRuleEngine On

SecRuleEngine için üç değer vardır:

  • Açık – Kural Motorunu etkinleştirmek için
  • Kapalı – Kural Motorunu devre dışı bırakmak için
  • DetectionOnly – Rule Engine'i etkinleştirin ancak engelleme, reddetme, bırakma, izin verme, proxy veya yeniden yönlendirme gibi eylemleri asla yürütmez

Rule Engine açıldığında – Mod Security, bazı yaygın saldırı türleriyle korumaya hazırdır.

Ortak Saldırı Türü Koruması

Core Rule'u kurduğumuz ve Rule Engine'i açtığımız için artık web sunucusu XSS, SQL Injection, Protocol Violation vb. yaygın saldırı türleriyle korumaya hazır. Birkaç tanesini test edelim.

XSS Saldırısı

  • Firefox'u açın ve uygulamanıza erişin ve sonuna veya URL'ye <script> etiketi koyun
  • Apache/logs klasöründeki modsec_audit.log dosyasını izleyin

XSS saldırısının kökü olan <script> etiketini içerdiğinden Mod Security blok isteğini fark edeceksiniz.

Dizin Geçiş Saldırısı:- Dizin geçiş saldırıları, bu güvenlik açıklarından yararlanarak ve sistemle ilgili dosyaya erişerek çok fazla hasar oluşturabilir. Ör – /etc/passwd, .htaccess, vb.

  • Firefox'u açın ve uygulamanıza dizin geçişi ile erişin
  • Apache/logs klasöründeki modsec_audit.log dosyasını izleyin
 http://localhost/?../.../boot
  • Dizin geçişini içerdiğinden Mod Güvenliği'nin isteği engellediğini fark edeceksiniz.

Sunucu Başlığını Değiştir

Bu kılavuzun başlarında, ServerTokens yönergesinin sürüm yardımı olan Apache ve OS türünü nasıl kaldıracağınızı öğrendiniz.

Hadi bir adım öne gidelim, sunucu adını istediğiniz gibi tutmaya ne dersiniz? Mod Security'deki SecServerSignature yönergesi ile mümkündür. İlginç olduğunu görüyorsun.

Not: Sunucu Başlığı'nı bir başlıktan işlemek üzere Mod Güvenliği'ni kullanmak için Apache web sunucusunun httpd.conf'unda ServerTokesn'i Tam olarak ayarlamalısınız.

  • SecServerSignature yönergesini setup.conf içine istediğiniz sunucu adıyla ekleyin ve Apache Web Sunucusunu yeniden başlatın
 SecServerSignature YourServerName

Eski:

 [/opt/apache/conf/crs] #grep SecServer modsecurity_crs_10_setup.conf SecServerSignature geekflare.com [/opt/apache/conf/crs] #

Genel Yapılandırma

En iyi uygulama olarak bazı genel konfigürasyonlara göz atalım.

Dinlemeyi Yapılandır

Tek bir sunucu üzerinde birden fazla arabiriminiz ve IP'niz olduğunda, Listen yönergesinin mutlak IP ve Bağlantı Noktası numarası ile yapılandırılması önerilir.

Apache yapılandırmasını bazı port numaralarına sahip tüm IP'lerde Dinlemek üzere bıraktığınızda, HTTP isteğinin başka bir web sunucusuna iletilmesinde sorun yaratabilir. Bu, paylaşılan ortamda oldukça yaygındır.

  • Aşağıdaki örnekte olduğu gibi mutlak IP ve bağlantı noktası ile httpd.conf dosyasındaki Listen yönergesini yapılandırın
 Listen 10.10.10.1:80

Erişim Günlüğü

Web sunucunuzda erişim günlüğünü düzgün bir şekilde yapılandırmanız önemlidir. Günlükte yakalanacak önemli parametrelerden bazıları, isteğin sunulması için geçen süre, OTURUM KIMLIĞI olacaktır.

Varsayılan olarak, Apache bu verileri yakalayacak şekilde yapılandırılmamıştır. Bunları aşağıdaki gibi manuel olarak yapılandırmanız gerekir.

  • Bir erişim günlüğünde isteğin sunulması için geçen süreyi ve OTURUM Kimliğini yakalamak için
  • LogFormat yönergesi altında httpd.conf'a %T & %sessionID ekleyin
 LogFormat "%h %l %u %t "%{sessionID}C" "%r" %>s %b %T" common

Apache Web Sunucusunda LogFormat yönergesinde desteklenen parametrelerin tam listesi için http://httpd.Apache.org/docs/2.2/mod/mod_log_config.html adresine başvurabilirsiniz.

İstenmeyen modüllerin yüklenmesini devre dışı bırak

Tüm modülleri derleyip kurduysanız, Apache'de gerekli olmayabilecek birçok modülün yüklü olma olasılığı yüksektir.

En iyi uygulama, Apache'yi web uygulamalarınızda gerekli modüllerle yapılandırmaktır. Aşağıdaki modüllerin güvenlik endişeleri vardır ve Apache Web Sunucusunun httpd.conf'unu devre dışı bırakmak ilginizi çekebilir.

WebDAV (Web Tabanlı Dağıtılmış Yazma ve Sürüm Oluşturma) Bu modül, uzak istemcilerin sunucudaki dosyaları değiştirmesine ve çeşitli hizmet reddi saldırılarına maruz kalmasına olanak tanır. httpd.conf'da yorum takibini devre dışı bırakmak için

 #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so #Include conf/extra/httpd-dav.conf

Bilgi Modülü mod_info modülü, bu modül yüklendikten sonra .htaccess kullanarak hassas bilgileri sızdırabilir. httpd.conf'da yorum takibini devre dışı bırakmak için

 #LoadModule info_module modules/mod_info.so

Referans: Bu, aşağıdaki bağlantıdan rehberlik olmadan mümkün olmaz:

  • http://httpd.apache.org/docs/2.4/
  • http://www.modsecurity.org/documentation/
  • https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

Bu, Apache web sunucunuzun güvenliğini sağlamak için kullanabileceğiniz en iyi uygulamalardan bazılarıydı.

Apache'de özel hata sayfası uygulamak istiyorsanız bu bağlantıyı kontrol edin.

Apache HTTP'de yeniyseniz, Apache HTTP yönetim kursuna katılmanızı tavsiye ederim.