Rol Bazında Güvenlik (Role Based Security)

Rol Bazında Güvenlik (Role Based Security) od Erişim Güvenliği, kullanıcı ve ya rollerin değil de kodun kimliği ile ilgilenen bir güvenlik alt yapısıdır. Bununla beraber, güvenlik ayarlarını hala daha kullanıcı kimliği ile ifade etmemiz gerekmektedir. Çalışma zamanı güvenlik sistemi rol bazında güvenlik özelliklerinidesteklemektedir. Bu yazımızda rol bazında güvenliği ele alacağız. Teknik detaylara başlamadan önce kullanıcı ve rol tabanlı bir güvenlik sisteminin gerekliliğini bir göz atalım. Belirli işlemlerin belirli kullanıcıların yetkisi dahili yapılabiliyor olması, aslında günlük hayatımızdaki birebir yaşadığımız bir kontrol mekanizmasıdır. Örneğin, bir bankanın kasasının anahtarı sadece belirli üst düzey banka müdürlerinde vardır. Burada kasaya açmak için gereken yetki anahtardır; ve bu anahtara sahip kişiler de ilgili yetkiye sahip kullanıcılardır. Biraz daha bilgisayara yakın bir örnek vermek gerekirse, hotmail"den maillerinizi kontrol edebilmeniz için sisteme kendinizi .net passport" unuz ile tanıtmanız gerekmektedir. Bu sayede sistem size sadece sizin maillerinizi getirecektir. Banka örneğinde anahtara alan yetkisiz bir kişi yetkili bir kişi gibi kasayı açabilir. Yine hotmail örneğinde olduğu gibi email adresinizin şifresini bilen bir kişi sisteme kendisini siz gibi tanıtıp maillerinize erişebilir. Buradaki sorumluluk artık kullanıcıya bırakılmıştır.Buradaki en önemli sorun kullanıcının kimliğinin tespit yöntemidir. Var olan yöntemlerden en çok kullanılanı bir kullanıcı adı ve şifre kullanımıdır. Bunun dışında parmak izi kontrolü, retina taraması, kan testi, dna testi gibi çok ileri yöntemler de yer almaktadır. Bu yöntemler gizli bilgilerin değeri ve maliyetine göre yer yer kullanılmaktadırlar. Bu yöntemlerin yüksek maliyetlerine rağmen kırılabilirlikleri, biraz hayal gücümüz biraz da günümüzün son teknoloji filmleri yardımıyla ispatlanabilir. Hepimizin izlemiş olduğunu düşündüğüm "Azınlık Raporu" filminde, o kadar büyük güvenlik önlemleriyle korunan yerlere bile sızılabilmişti. DNA testi neredeyse en güvenli sistem olarak ele alınsa bile, başarı oranı %99 olarak tanımlanır. Peki %100 güvenli bir sistem kurulamaz mı? Cevabımız belli, tabi ki de HAYIR !! Ancak amaç olabilecek en iyi güvenlik sistemini kurmak ve gereken önlemleri almaktır. Şu an ki bilinen teknolojiyle en güvenli kimlik tespit sistemi üre testidir ve başarı oranı %99.99 olarak tanımlanır. Üre testi, DNA testi üzerine kuruludur. Bu sayede güvenliğin %99"luk şartını sağlamıştır. Ancak geriye kalan %0.99 artısı ise biraz daha tıbbi bir konuya dayanmaktadır. Üre ile vücuttan atılan bazı mineraller vb bilgiler kişinin kanındaki adrenalin miktarı hakkında bilgi edinebilir, bu kişinin şu an için baskı altında olup olmadığını sorgulayabiliriz.Üre testinin tüm artılarına rağmen kullanılamayacak olması, örnek alımının ahlaki değerlerle pek örtüşmemesini sayabiliriz. Düşünün bir kere, hotmail"den maillerinize bakmak istiyorsunuz, bilgisayarınızdan örnek için bir kap çıkıyor ve sisteme girişiniz yapılıyor. Gerçek anlamda bir güvenlik yapılabilmesi için bu üre testinin sunucuda yapılması gerekir yoksa sistemimiz replay adını verdiğimiz yeniden gönderme saldırılara açık kalacaktır. Önemli bir sorunda burada çıkacaktır; örneğin internet üzerinden iletimi gündeme gelecektir :) Daha iyi bir yöntem önerilinceye kadar kullanıcı ve şifre üzerine dayalı bir güvenlik sistemi kullanmaya mahkumuz..Rol bazında güvenlik sisteminin iki temel kavramdan oluşur: Kullanıcılar ve Roller. Günümüz işletim sisteminin bir çoğunun güvenlik sisteminin temeli de aslında rol bazında güvenliğe dayanmaktadır. Rol bazında güvenliği ile temelinde iki temel soyutlama yapılmıştır: Kimlik (Identity), kullanıcının tanımıdır. Yönetici (Principal), yetkinin tanımıdır.Kimlik, kodu çalıştıran kullanıcıyı temsil eder. Bu kullanıcı o uygulama içinde tanımlanmış sanal bir kullanıcı olabileceği gibi işletim sistemine ait bir kullanıcı da olabilir. Yönetici ise kullanıcıları, ait oldukları roller ile tanımlar. Kullanıcının kimliğini tanımlayan sınıflar IIdentiy arabirimi gerçeklemekt zorundadır. .NET Çerçevesinde bu arabirimi varsayılan olarak gerçekleyen bir sınıf mevcuttur ve bu sınıf GenericIdentity sınıfıdır. Yöneticiyi tanımlayan sınıflarsa IPrincipal arabirimini gerçeklemek zorundadır. .NET Çerçevesinde bu arabirimi varsayılan olarak gerçekleyen bir sınıf mevcuttur ve bu sınıf GenericPrincipal sınıfıdır.Çalışma zamanında her iş parçacığıyla birebir tek bir prensip nesnesi ilişkilendirilmektedir. Çalışan uygulama güvenlik gereksinimlerini yerine getirerek, bu nesneye erişebilir hatta değiştiredebilir. Her prensibe tek bir kimlik nesnesi ilişkilendirilebilir. Kısaca çalışan her iş parçacığı ile kimlik arasında ve kimlik ile prensip arasında birebir ilişki vardır.Mantıksal olarak çalışma zamanı ve nesnelerin yapısı şu şekilde ifade edilebilir:

Yukarıda resim ile ifade edilen yapıyı şimdi kod ile gerçekleştirelim;using System; using System.Threading; using System.Security; using System.Security.Principal; namespace RoleBasedSecurity { class Sample { static void Main(string[] args) { String [] roles = {"Analist", "Programcı"}; GenericIdentity i = new GenericIdentity("yemre"); GenericPrincipal g = new GenericPrincipal(i, roles); Thread.CurrentPrincipal = g; if(Thread.CurrentPrincipal.Identity.Name == "yemre") Console.WriteLine("Merhaba Yunus Emre"); if(Thread.CurrentPrincipal.IsInRole("Programcı")) Console.WriteLine("Merhaba Programcı"); if(Thread.CurrentPrincipal.IsInRole("İşçi")) Console.WriteLine("Merhaba İşçi"); } } }Bu örnekten de anlaşılacağı yemre kimliğine sahip kullanıcının programcı ve analist olmak üzere birden fazla role eklenmiştir. Dikkat ederseniz tek bir kimlik için tek bir yönetici tanımlı ancak bunlara birden fazla rol ekleyebiliyoruz. Programa kullanıcı kimliği koddan yemre olarak tanımlanmıştır. Bu yüzden programın sonucunda;Merhaba Yunus Emre Merhaba Programcıçıktısı üretilecektir. Burada kullanıcı bilgisi çağırma yığıtı(call stack) adını verdiğimiz yapı ile taşındığı için burada tanımlanmış olan kimlik ve yönetici bilgisine başka fonksiyondan başka bir sınıftan, hatta başka bir assembly"den erişebilirsiniz. Önemli olan iş parçacığının değişmemesidir.Bu örnekle program içinde sanal bir kullanıcı oluşturduk ve onu kullandık. Ayrıca, uygulamamızı Microsoft Windows güvenlik modelini kullanarak da yapabilirdik. Bunun için Microsoft Windows Güvenliğini kullandığımızı seçmemiz yeterli olacaktır. Yukarıda yaptığımız uygulamanın bu modelle yapılmış hali de şu şekilde olacaktır;using System; using System.Threading; using System.Security.Permissions; using System.Security.Principal; namespace RoleBasedSecurity { class Sample { static void Main(string[] args) { String [] roles = {"Analist", "Programcı"}; AppDomain.CurrentDomain.SetPrincipalPolicy( PrincipalPolicy.WindowsPrincipal ); GenericPrincipal g = new GenericPrincipal( System.Threading.Thread.CurrentPrincipal.Identity, roles); Thread.CurrentPrincipal = g; Console.WriteLine( System.Threading.Thread.CurrentPrincipal.Identity.Name ); if (Thread.CurrentPrincipal.IsInRole("Programcı") ) Console.WriteLine("Merhaba Programcı"); if (Thread.CurrentPrincipal.IsInRole("İşçi")) Console.WriteLine("Merhaba İşçi"); } } }Bu programın çıktısı her bilgisayarda farklı olacaktır, çünkü kullanıcı kimliği windows tarafından kontrol edilir. Örneğin şu an bu makaleyi yazdığım benim bilgisayarımda sonuç şu şekildedir;COMPUTERYunus Emre ALPÖZEN Merhaba ProgramcıTahmin edeceğiniz üzere COMPUTER bilgisayarımın adı, Yunus Emre ALPÖZEN ise bilgisayarımı açarken kullandığım kullanıcı adım. Rol bazında güvenlik sistemini ve artılarını tek bir makalede anlatıp bitirmek imkansızdır. Rol bazında güvenlik sistemleri özellikle ASP.NET uygulamalarında sağlam bir güvenlik altyapısı kurmanıza olanak tanır. Kod Erişim Güvenliğini detaylı olarak incelediğimiz yazıdizimizin bir sonraki konusu olan "Zorlama(Enforcement)" başlığı altında inceleyeceğimiz bu konuyu iki makalelik bir dize ile açıklamaya çalışacağım.Not : Bu makale Don Box"ın "The Security Infrastructure of the CLR Provides Evidence, Policy, Permissions, and Enforcement Services" ve MSDN"nin ilgili konu anlatımlarının yer aldığı "An Overview of Security in the .NET Framework" makalelerinden derlenmiştir.Yazar : Yunus Emre ALPÖZENe-Posta : yunus.alpozen et msakademik.net

Döküman Arama

Başlık :

Kapat