Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

MCTS – Application Domain’ler ve Servisler

Application Domain harici assembly’leri efektif ve güvenli bir şekilde çağırmamızı sağlar.Servisler ise kullanıcı arabirimi olmayan ve geri planda çalışan assembly’lerin özel bir halidir.Bu makalemizde application domain’i nasıl konfigüre edebileceğimizi ve servisleri geliştirip nasıl yükleyebileceğimizi göreceğiz.

Application Domain birçok assembly’i tek bir process içerisinde çalıştırmak üzere içinde barındıran mantıksal bir konteynırdır ve direk olarak diğer assemblylere erişimini kısıtlar.

Application Domain’e verilebilecek örnek IIS 5.0 olabilir.Eğer 10 kullanıcı siteyi ziyaret ederse ASP.NET her bir kullanıcı için farklı Application domain oluşturur. Burada aynı assembly 10 farklı kullanıcı için farklı process’lerde çalıştırılıyor ve böylece birbirlerinin içeriklerini ezme durumu ortadan kalkıyor.

.NET’te System.AppDomain sınıfı bu gibi işlemleri yapabilmek için oluşturulmuştur. Aşağıdaki kod parçası ile yeni bir domain oluşturmak mümkün.

AppDomain d = AppDomain.CreateDomain(“Koray’ın Alanı”);

Console.WriteLine(“Host domain:” + AppDomain.CurrentDomain.FriendlyName);

Console.WriteLine(“Child Domain:”+d.FriendlyName);
//Aşağıdaki kod ile domainde bulunan bir assembly’i çalıştırmak mümkün.

d.ExecuteAssembly(“Assembly.exe”);

d.ExecuteAssemblyByName(“Assembly”);
//Domaini serbest bırakmak için

AppDomain.Unload(d);

 

Application domainler özelleştirilebilirler bunu yapmaktaki en önemli amaç izinleri azaltarak güvenlik risklerini düşürmektir. Eğer bunu yapmaz ve Application Domain imize harici assembly yüklersek saldırıya maruz kalabiliriz.

Peki bir assembly’i limitli olarak nasıl Application Domain içinde çalıştırabiliriz. Bunu bir örnekle açıklamak gerekirse ; Şirketiniz 3rd parti bir assembly satın aldı diyelim ve bu assembly veritabanı ile iletişim halinde.Bunu 3rd parti assembly’deki açığı farkeden bir saldırkan bir spyware uygulaması ile güvenlik açığından faydalanabilir çünkü uygulamamız 3rd parti assembly’e tüm kalbilyle güveniyor J.Açık 3rd parti assembly dede olsa bizim sistemimize sızabilirler. Eğer 3rd parti assembly’e limitli erişim (Limited Privileges) hakkı verseydik I/O istekleri reddedilecek ve risk azalacaktı. Defend-in-depth güvenlik prensibine göre harici koda güvemek güvenlik zaafiyetlerine yol açar.
.NET’te assembly haklarını kontrol edebilmek için System.Policy.Evidence nesnesinden faydalanabiliriz. Bu nesnenin ExecuteAssembly metodu Application Domain’in metodunu ezmektedir.

object[] hostEvidence = { newZone(SecurityZone.Internet) };

Evidence appDomainEvidence = newEvidence(hostEvidence, null);

AppDomain d = AppDomain.CreateDomain(“MyDomain”, appDomainEvidence);

d.ExecuteAssembly(“SecondAssembly.exe”);

May 25, 2010 - Posted by | C# | , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s