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 %31.10’u Microsoft
IIS kullanmaktadır. Bu blog yazımızda
Microsoft IIS sunucu güveliğini sağlamak için yapılması gerekenlerden
bahsedeceğiz.
Sunucu
Bilgilerinin Gizlenmesi
Kullanılan sunucu teknolojisi ve versiyonunun bilinmesi saldırganların etkili saldırı yöntemleri bulmasını kolaylaştıracaktır.
Resim 1 ‘de
görülebileceği üzere IIS sunucusuna yapılan isteklere dönen yanıtların
içerisinde HTTP başlık(header) bölümünde sunucu bilgileri yer almakta.
Resim 1
Yanıt (Response) başlığında yer alan sunucu bilgilerini gizlemek için url rewrite modülünün sunucuya kurulması gerekmetedir. Url rewrite modülünü http://www.iis.net/downloads/microsoft/url-rewrite bu adresten indirebilirsiniz.
HTTP
İstek (Request) Metotlarının Düzenlenmesi
Kullanılmayan
Dosya Uzantılarının Engellenmesi
Kritik
İçeriklerin Filtrelenmesi
IIS
Konfigürasyonlarının Başka Bir Sunucuya Aktarımı
Hata
Sayfalarına Yönlendirme
Asp.Net
Versiyon Bilgisinin Gizlenmesi
Debug
Modunun Kapatılması
Gereksiz
İstek (Request) Metotlarının Engellenmesi
Gereksiz
/ Kullanılmayan Dosya Uzantılarının Kısıtlanması
Resim 1
Yanıt (Response) başlığında yer alan sunucu bilgilerini gizlemek için url rewrite modülünün sunucuya kurulması gerekmetedir. Url rewrite modülünü http://www.iis.net/downloads/microsoft/url-rewrite bu adresten indirebilirsiniz.
Sunucu başlığının aşağıdaki gibi
engellenmesi sağlanır.
Clickjacking Saldırılarına Karşı Önlem Alınması
Öncelikle Clickjacking konusundan
bahsedelim. Clickjacking hedef sisteme
görünmez(opacity değeri sıfır ) bir iframe nesnesini yükleyip, yüklenen sayfada
kurbanın tıklaması istenen linklerin üzerine ilgisini çekecek tuzak linkler
veya html nesneleri ekleyerek kurbanın farkında olmadan iframe içindeki linkle
tıklamasını sağlamak olarak ifade edebiliriz.
1.IIS Yöneticisini
başlatın
2. HTTP Response
Headers ikonuna çif tıklayın.
3.Açılan alanın
sağında bunan Actions kısmından Add linkine tıklayın.
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. Potansiyel risklerden kaçınmak için IIS
Manager Request Filtering uygulamasında HTTP Verbs sekmesine gelip OPTIONS,
Put, Delete, Trace, metotlarına izin
verilmesini engelleyebilirsiniz.
1.IIS yöneticisini
başlatın
2.Request Filtering
ikonuna çift tıklayınız
3.HTTP Verbs
sekmesine geliniz
4.Açılan alanın
sağında bunan Actions kısmından Deny Verb linkine tıklayın.
5.Verb kısmına
örneğin TRACE yazın.
Engellemek
istediğiniz metotları bu şekilde ekleyiniz. Ayrıca POST,GET,HEAD metotlarınada
sayfanın sağında bulunan Action kısmından Allow Verb linkine tıklayıp Verb
kısmına ekleyin.
Kullanılmayan
Dosya Uzantılarının Engellenmesi
IIS tarafından güvenli kabul edilen
bir çok uzantıya varsayılan olarak izin verilir. Uygulamanızda kullanmadığınız dosya
uzantıları aşağıdaki gibi engelleyebilirsiniz.
1.IIS yöneticisini
başlatın
2.Request Filtering
ikonuna çift tıklayınız
3.File Name Extensions sekmesine
tıklayın
4.Açılan alanın
sağında bunan Actions kısmından Deny File
Name Extensions linkine tıklayıp kullanmadığınız dosya uzantısı türlerini File
Name Extensions kısmına giriniz.
Yukarıdaki adımlara uyarak yine aynı
şekilde istediğiniz dosya uzantılarına sayfanın sağında bulunan Action
kısmındaki Allow File Name Extensions linkine tıklayarak
gerçekleştirebilirsiniz.
Kritik
İçeriklerin Filtrelenmesi
IIS varsayılan olarak web.config,
bin, App_Data gibi önemli bilgileri içeren klasör ve dosyaları gizler. Bunlara
ek olarak gizlemek istediğiniz klasör veya dosyalarınız aşağıdaki adımları takip ediniz:
1.IIS yöneticisini
başlatın.
2.Request Filtering
ikonuna çift tıklayınız.
3.Açılan sayfanın
sağında bulunan Action bölümünden Add Hidden Segment linkinden gizlemek
istediğiniz klasör ve dosya adlarını yazınız.
IIS
Konfigürasyonlarının Başka Bir Sunucuya Aktarımı
Localde yaptığınız ve test ettiğiniz
sunucu ayarlarınızın veya sunucu üzerinde tutuğunuz ayarların başka sunucu bir
sunucuya aktaramı için aşağıdaki adımları uygulayınız:
1.IIS Yöneticisini başlatın
2.Management
altındaki Shared Configuration çift tıklayın
3.Açılan Shared
Configuration ekranın sağında yer alan Action bölümünden
“Export Configuration linkine tıklayınız
4.IIS konfigürasyon
dosyalarının kaydedileceği dizinin seçin ve parola oluşturun.
Ayarları aktarmak
istediğiniz sunucunuz üzerinde IIS yöneticisine açın ve Shared Configuration”
bölümünden “Enable shared configuration” tik işareti koyarak
konfigurasyon dosyalarınızın dizinini seçin.
ASP.Net Uygulama Güvenliği
ASP.Net projelerinizi yayınladığınız
sunucu kontrolünüzde değilse veya IIS yöneticisine erişiminiz yoksa bazı
önlemleri web.config üzerinden alabilirisiniz.
Hata
Sayfalarına Yönlendirme
Web sunucu tarafından kullanıcıya
görüntülenen ön tanımlı teknik hata mesajları saldırganların işini
kolaylaştırıcı bilgiler (ör: web sunucu versiyonu, veritabanı hataları ile tablo
yapıları ve verileri, kod parçaları, v.b.) sızdırabilir. Backend kaynaklara
yapılacak kaba kuvvet saldırıları (yani kullanıcıların eriştiği sayfalardan
linklenmemiş kaynaklar için isim tahmini ile yapılan istekler) HTTP yanıt
kodlarındaki farklılıklardan yola çıkılarak daha kolay yapılabilir. Tüm
isteklere HTTP 200 OK yanıt kodunun dönmesi durumunda söz konusu saldırıların
başarısı azaltılabilecektir. Hata durumlarına göre özel hata sayfaları
oluşturmanız önerilmektedir. Oluşturduğunuz size özel hata sayfalarına
web.cofig içerisinde yönledirme yapabilirsiniz.
Aşağıdaki kod ile bütün hataları tek
bir sayfaya yönlendirme işlemini gerçekleştirebilirsiniz.
<system.web>
<customErrors defaultRedirect=”ErrorPage.aspx” mode=”RemoteOnly”></customErrors>
</system.web>
Ayrıca, aşağıdaki gibi yapılan isteklere karşılık
gelen yanıt içerisinde görünen hata
kodlarına göre kendinize özel hata sayfaları oluştura bilirsiniz
<system.web>
<customErrors
mode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
<error
statusCode="403" redirect="NoAccess.htm" />
<error
statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
Gereksiz Http Başlıklarının Engellenmesi
Kullanılan sunucu teknolojisi
ve versiyonunun bilinmesi söz konusu altyapıdaki zafiyetlerin bulunarak kötü
niyetli kullanımına imkan tanıyabilir. Bu ayarlar <configuration>
taglerinin arasında aşağıdaki gibi yer alır.
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name=”X-Powered-By” /> // Teknoloji bilgisinin
döndürülmesini engeller (Örnek: ASP.Net)
<remove name=”Server” /> // Sunucu bilgisinin döndürülmesini engeller.
(Örnek: IIS 7.5)
<remove name=”X-AspNet-Version” /> //ASP.Net versiyon bilgisinin
döndürülmesini engeller.
<add name=”X-FRAME-OPTIONS” value=”DENY” /> // Clickjack’den kaçınmak
için iframe’leri reddeder. *
</customHeaders>
</httpProtocol>
</system.webServer>
Asp.Net
Versiyon Bilgisinin Gizlenmesi
Kullanıla Asp.Net versiyonunun
bilinmesi söz konusu altyapıdaki zafiyetlerin bulunarak kötü niyetli
kullanımına imkan tanıyabilir.
<system.web>
<httpRuntime enableVersionHeader=”false” />
//Asp.Net versiyon bilgisinin görünmemesini sağlar.
</system.web>
Trace Metodunun Kapatılması
Web sitesinin hata ve işlemlerini
uzaktan takip etmeye yarayan trace metodu sistemle ilgili ciddi bilgileri açığa
vurabilmektedir. Trace metodunu kapatmak için aşağıdaki kodu web.config dosyası
içersine eklenmesi gerekmektedir.
<system.web>
<trace enabled=”false” localOnly=”true” />
</system.web>
Debug
Modunun Kapatılması
Geliştirme halinde varsayılan olarak
açık bulunan debug modu projenizin
yayınlama (publish) ayarları yapılmadan yayınlandığında açık kalır. Debug
modunu kapatmak için aşağıdaki kodun web.config dosyası içerisine eklenmesi
gerekmektedir.
<system.web>
<compilation debug=”false” targetFramework=”4.5”>
</system.web>
Gereksiz
İstek (Request) Metotlarının Engellenmesi
ASP.Net uygulamalrı genellikle POST
ve GET komutlarını kullanmaktadır. Bunların dışında kalanlar uygulama
gerektirmedikçe kullanılmaz. MOVE ve DELETE gibi seçeneklerin açık olması sayfa
değişimi gibi açıklara neden olabilir. Bu sebeplerden sadece kullandığınız
metotları açmanız önerilmektedir.
<system.webServer>
<security>
<requestFiltering>
<verbs allowUnlisted=”false”>
//listelenmeyenlerin hepsini kapatır.
<add verb=”GET” allowed=”true” />
<add verb=”POST” allowed=”true” />
</verbs>
</requestFiltering>
</security>
</system.webServer>
Kritik İçeriklerin Filtrelenmesi
IIS varsayılan olarak web.config,
bin, App_Data gibi önemli bilgileri içeren klasör ve dosyaları gizler bunlara
ek olarak klasör veya dosyalarınız var ise aşağıdaki kodu kullanarak
gizleyebilirsiniz.
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment=”Dosyanızın veya
klasörünüzün adı” />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
Gereksiz
/ Kullanılmayan Dosya Uzantılarının Kısıtlanması
IIS tarafından güvenli kabul edilen
bir çok uzantıya varsayılan olarak izin verilir. Eğer uygulamanızda çok fazla
dosya çeşitliliği yok ise bunları kısıtlayabilirsiniz.
<system.webServer>
<security>
<requestFiltering>
<fileExtensions
allowUnlisted=”false”>
<add fileExtension=”.html”
allowed=”true” />
<add fileExtension=”.aspx” allowed=”true” />
<add
fileExtension=”.jpg” allowed=”true” />
<add fileExtension=”.png” allowed=”true” />
<add fileExtension=”.js”
allowed=”true” />
<add fileExtension=”.css” allowed=”true” /
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>