Apache Web Sunucusu Sağlamlaştırma ve Güvenlik Kılavuzu
Yayınlanan: 2015-02-14Apache 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.
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.
- 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
- Ç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.
- $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.
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.
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.
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
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.
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.