Üç bölüm olarak hazırlamayı düşündüğüm ASP.NET uygulamalarında güvenlik
konusunu incelemeye çalışacağımız ASP.NET Güvenlik dizisinde şu konulara
değineceğiz :
- IIS authentication metodları
- ASP.NET authentication methodları ve authorization
- Genel olarak web güvenliği ile ilgili programlama standartları
Eğer IIS çağrıyı kabul ederse ikinci aşamaya geçilir. Çağrı ASP.NET tarafından değerlendirilir. Bu iki aşama tamamen birbirinden ayrı çalışır.
Eğer IIS çağrıyı reddeder ise HTTP 401 hatası alırız. Bu makalede Şekil - 1in ilk aşaması olan IIS kapsamındaki güvenlik ayarlarından bahsetmeye çalışacağız.
Şimdi ASP.NET uygulamalarında güvenliği sağlamak için
kullandığımız üç temel fonksiyonu tanımlayalım :
AuthenticationBasitçe, kullanıcının, olduğunu söylediği kişi olup olmadığının kontrolüdür. Sıkı güvenlik önlemleri olan bir bina düşünelim. Binaya giriş yapabilmemiz için bina için tanımlı güvenlik sisteminde bir hesabımız olmalı. Ve giriş yaparken bir kimlik ile bu hesabımızı doğrulamamız gerekir. Sahip olduğumuz hesabı doğrulama işlemine authentication diyoruz.
Authorization
Sisteme giriş yapan kullanıcının istekte bulunduğu kaynağa erişim hakkı olup olmadığının kontrol edilmesine ise authorization diyoruz. Bina örneğimize dönersek, kimliğimizi gösterip binaya giriş yaptık. Şimdi, binanın bilgi işlem bölümüne girmek istiyoruz. Bilgi işlem bölümü kapısında bu bölüme girmek için yetkimiz olup olmadığı kontrol ediliyor. Eğer yetkimiz var ise bölüme girebiliyoruz. Yok ise bina içerisindeki başka kapıları deniyoruz. Bilgi işlem bölümü bizim için kaynak oluyor ve kaynağa erişimimizi sağlayabilmek için yeterli izinlere sahip olmamız gerekiyor.
Impersonation
Sisteme giriş yapan kullanıcının bir başkasıymış gibi yetkilendirilmesi fonksiyonuna impersonation denir. Binaya girerken kimliğimiz olmadığını söyledik ve ziyaretçi kartı aldık. İşte bu durumda impersonation yapmış olduk ve "ziyaretçi" kullanıcısının hakları ile sisteme giriş yapmış olduk.
ASP.NET uygulamalarında impersonation inaktiftir. ASP.NET uygulamamızda impersonationı aktif hale getirmek için web.config dosyamıza aşağıdaki tagi ekleyebiliriz :
<identity
impersonate="true" />
|
Temel güvenlik fonksiyonlarımızı inceledikten
sonra IIS authentication çeşitlerini incelemeye çalışalım. IIS güvenlik
ayarları, IISte web uygulamamızı seçtikten sonra, sağ tıklayıp özelliklerine
gözattığımızda dizin güvenliği tabının altında yeralır.
Bu
penceredeki authentication kontrolü olarak geçen düğme IIS authentication
metodlarını ayarlamamızı sağlayan pencereyi açar.
Şimdi bu pencerede gördüğünüz tüm authentication metodlarını
incelemeye çalışalım.
Anonymous Erişim
IIS tarafında hiçbir authentication işleminin yapılmadığı moddur. Sunucudan istekte bulunan tüm kullanıcılara erişim açıktır. Anounymoun erişim metodunda IISte hiçbir authentication işlemi yapılmaz fakat tüm gelen çağrılar bir kimlik altındadır. IUSR_MakinaAdı kullanıcısı az yetkiye sahip bir kullanıcıdır ve anounymous erişim aktif ise web uygulamamıza iletilen kimliktir.
Şimdi yapacağımız basit uygulama ile uygulamamıza hangi kullanıcı ve şifre ile bağlandığımızı görmeye çalışalım. Aşağıda sunucu değişkenlerinden mevcut authentication tipini ve kullanıcı şifresini alıyoruz. Mevcut kullanıcı adını ise HTTP bağlamından elde ediyoruz. Mevcut kullanıcı adını sunucu değişkenlerinden de elde edebiliriz. Son olarakta ASP.NET Worker Processinin hangi kimlik altında çalıştığını elde ediyoruz. Bu bilgileri uygulamamızda bir sayfaya yazdırarak authentication tiplerini ve aldığımız kullanıcı hesaplarını yorumlayalım.
Anonymous Erişim
IIS tarafında hiçbir authentication işleminin yapılmadığı moddur. Sunucudan istekte bulunan tüm kullanıcılara erişim açıktır. Anounymoun erişim metodunda IISte hiçbir authentication işlemi yapılmaz fakat tüm gelen çağrılar bir kimlik altındadır. IUSR_MakinaAdı kullanıcısı az yetkiye sahip bir kullanıcıdır ve anounymous erişim aktif ise web uygulamamıza iletilen kimliktir.
Şimdi yapacağımız basit uygulama ile uygulamamıza hangi kullanıcı ve şifre ile bağlandığımızı görmeye çalışalım. Aşağıda sunucu değişkenlerinden mevcut authentication tipini ve kullanıcı şifresini alıyoruz. Mevcut kullanıcı adını ise HTTP bağlamından elde ediyoruz. Mevcut kullanıcı adını sunucu değişkenlerinden de elde edebiliriz. Son olarakta ASP.NET Worker Processinin hangi kimlik altında çalıştığını elde ediyoruz. Bu bilgileri uygulamamızda bir sayfaya yazdırarak authentication tiplerini ve aldığımız kullanıcı hesaplarını yorumlayalım.
|
IIS dizin güvenliğinden Anonymous erişimi etkin
hale getirirsek, mevcut HTTP bağlamımızın kullanıcısı boş olarak dönecektir.
Fakat dikkat ederseniz ASP.NET kullanıcısı yani ASP.NET worker processinin
sahip olduğu kullanıcı benim bilgisayarımın ASPNET kullanıcısı hesabı. (Not :
Windows XP ve Windows 2000 işletim sisteminde ASP.NET Worker Process ASPNET
kimliği altında çalışır.
Windows Server 2003 işletim sisteminde ASP.NET Worker Process Network Service kimliği altında çalışır.)
Windows Server 2003 işletim sisteminde ASP.NET Worker Process Network Service kimliği altında çalışır.)
Şimdi Web.config dosyamızdan impersonationı aktif hale getirirsek, aşağıdaki ekran ile karşılaşırız. Dikkat ederseniz tek değişen ASP.NET worker processinin çalıştığı kimlik oldu. ASP.NET worker processi IISten kimlik bilgisini aldı ve o kullanıcının hakları ile çalışmaya başladı.
Basic
Authentication
Basic Authentication en basit ve en güvensiz authentication metodudur. Hemen her browser destekler. Uygulamamız için ayarlar isek, uygulamamızı çağırdığımız zaman standart Windows logon ekranı ile karşılaşırız. Bu ekrandan gireceğimiz kullanıcı adı ve şifre Base64 algoritmasına göre şifrelenir. Base64 algoritması, çözülebilecek (internetten örnek kodları bulabilirsiniz hatta kendiniz kolayca yazabilirsiniz) bir algoritmadır. Dolayısıyla girdiğiniz kullanıcı adı ve şifre internette açık olarak dolaşıyor olacaktır. Ağı dinleyen bir kişi kolayca kullanıcı hesap bilgilerinize erişebilir. Fakat SSL kullanarak basic authenticationı daha güvenli hale getirebiliriz. SSL yaptığımız çağrıyı yada aldığımız verileri şifrelediği için çalınma riskini kaldırmış olur.
Basic Authentication en basit ve en güvensiz authentication metodudur. Hemen her browser destekler. Uygulamamız için ayarlar isek, uygulamamızı çağırdığımız zaman standart Windows logon ekranı ile karşılaşırız. Bu ekrandan gireceğimiz kullanıcı adı ve şifre Base64 algoritmasına göre şifrelenir. Base64 algoritması, çözülebilecek (internetten örnek kodları bulabilirsiniz hatta kendiniz kolayca yazabilirsiniz) bir algoritmadır. Dolayısıyla girdiğiniz kullanıcı adı ve şifre internette açık olarak dolaşıyor olacaktır. Ağı dinleyen bir kişi kolayca kullanıcı hesap bilgilerinize erişebilir. Fakat SSL kullanarak basic authenticationı daha güvenli hale getirebiliriz. SSL yaptığımız çağrıyı yada aldığımız verileri şifrelediği için çalınma riskini kaldırmış olur.
Digest Authentication
Digest Authentication, Basic Authenticationa göre daha güvenli fakat daha kısıtlı kullanıma sahiptir. Internet Explorer 5.0 ve üstü ile çalışır. Kullanıcı adı ve şifresi networkte taşınmaz, onun yerine bir hash transfer edilir. Dolayısıyla bir network alan adı altındaki tüm kullanıcı şifreleri geri çevrilebilir bir algoritma ile Active Directoryde saklanır. Integrated Windows Authentication
Integrated Windows Authenticationdada Digest Authentication gibi kullanıcı adı ve şifresi networkte dolaşmaz. İşletim sisteminde oturum açmış olan kullanıcı eğer windows authentication ile korunan web uygulamasına giriş yapmak isterse tekrar giriş ekranı ile karşılaşmaz. Tabi eğer kullanıcının oturum açtığı hesap yeterli izinlere sahip değil ise tekrar giriş ekranı ile kullanıcıdan sisteme giriş yapması istenir.
Şekilde görüldüğü üzere kullanıcının şifresine kodla ulaşamıyoruz. Ayrıca benim
uygulamayı çalıştırırkenki Windows hesabım musty olduğundan Uygulamayı
çalıştırırken hiçbir logon ekranı ile karşılaşmadım.
Şekilde gördüğünüz gibi impersonation aktif edildiği zaman ASP.NET worker
processi IISten authenticate edilen kullanıcı hesabı altında çalışmaya
başlıyor.
Sonuç
Web uygulamalarının güvenliği dikkat edilmesi gereken en önemli konulardan biridir. Web sunucu altında verilecek denetimsiz bir izin, hem sizin hem de aynı sunucu üzerindeki diğer uygulamaları etkileyecek sonuçları doğurabilir.
Şimdi bir senaryo üzerinde yukarıda incelediğimiz tüm authentication metodlarının vereceği sonuçları incelemeye çalışalım. Web uygulamamız içerisinden sunucu diski üzerinde bir text dosya yaratıp yazmaya çalışalım. (Not : sunucu diskinin o dizininde gerekli haklar tanımlanmamış olduğunu yani default ayarların olduğunu kabul ediyoruz.)
Web uygulamalarının güvenliği dikkat edilmesi gereken en önemli konulardan biridir. Web sunucu altında verilecek denetimsiz bir izin, hem sizin hem de aynı sunucu üzerindeki diğer uygulamaları etkileyecek sonuçları doğurabilir.
Şimdi bir senaryo üzerinde yukarıda incelediğimiz tüm authentication metodlarının vereceği sonuçları incelemeye çalışalım. Web uygulamamız içerisinden sunucu diski üzerinde bir text dosya yaratıp yazmaya çalışalım. (Not : sunucu diskinin o dizininde gerekli haklar tanımlanmamış olduğunu yani default ayarların olduğunu kabul ediyoruz.)
- Anounymous erişim aktif ise
ASP.NET worker process ASPNET kimliği ile yazmaya çalıştığı için
erişim engellendi hatası alırız.
- Impersonation aktif yapılırsa IUSR_MakinaAdi
kimliği ile yazma işlemi gerçekleştirdiğimizden yine erişim engellendi
hatası alırız.
- Şekil - 3teki anounymous
erişim hesabını işletim sisteminin yetkileri yüksek hesaplarından biri ile
değiştirirsek ve impersonationı aktif hale getirirsek, disk üzerine
yazabilmeye başlarız fakat çok tehlikeli bir durum yaratmış oluruz.Çünkü
authentication yapılmamış tüm erişimlerin, bu yüksek yetkili hesap ile
çalışmasını sağlamış oluruz.
- Basic, Digest ve Integrated
Windows Authenticationda da erişim engellendi hatası alırız. Çünkü halen
ASP.NET worker process düşük yetkili ASPNET hesabı ile çalışıyor.
- Basic, Digest ve Integrated Windows Authenticationda impersonationı aktif hale getirirsek uygulamamıza giriş yapan kullanıcının sunucu üzerindeki hakları disk üzerine yazmayı içeriyorsa hata almadan yazarız. Yazma işlemi için yeterli haklara sahip olmayan bir kullanıcı ile uygulamaya giriş yaparsak, bu işlemi gerçekleştirebilmek için daha yüksak haklara sahip bir kullanıcı hesabı ile giriş yapabilmemiz için yeniden giriş ekranı ile karşılaşırız.
Hiç yorum yok:
Yorum Gönder