Güvenlik Politikaları Yazı Dizisi - I

Güvenlik Politikaları Yazı Dizisi - I Geçen yazımızda bahsettiğimiz kanıt tek başına çok bir anlam ifade etmez. Kanıtın genel amacı bir güvenlik politikası için girdi oluşturmaktır. CLR koda ilişkin kanıtları kullanarak belirlediği güvenlik politikasına göre, yüklenen koda gerekli izin ve ayrıcalıkları atar. CLR"nin güvenlik politikası sistem yöneticileri ve kullanıcılar tarafından ayarlanabilmektedir. Ayrıca CLR"nin güvenlik politikası genişletilebilir bir yapıya sahip olduğundan, var olan alt yapıya yeni politikaları eklememize izin verebilmektedir.Güvenlik politikaları 4 seviyeye ayrılmıştır. System.Security namespace"i altındaki PolicyLevelType enum"ı ile bu dört seviye belirlenmiştir:public enum PolicyLevelType {User,Machine,Enterprise,AppDomain}User (Kullanıcı) politika seviyesi bir kullanıcıya özgü iken, Machine(Makine) politika seviyesi bir makinedeki tüm kullanıcılar için geçerlidir. Enterprise ise bir Aktif Dizin (Active Directory®) altındaki tüm makinelerdeki kullanıcılar için geçerlidir. AppDomain politikası ise bir işletim sisteminde çalışan belirli bir uygulamaya özgüdür.Bu dört güvenlik politikasından AppDomain hariç tümü XML tabanlı ayar dosyalarından otomatik olarak yüklenir. Bu xml dosyası düz XML olarak değiştirelebilineceği gibi caspol.exe ve ya mscorcfg.msc araçlarını kullanarak da değiştirilebilir. "caspol.exe" (Code Access Security Policy Tool) ve "mscorcfg.msc" dosyaları CLR"nin kurulu olduğu  %Windows Dizini%Microsoft.NETFrameworkv1.1.xxxx(xxxx kullandığınız .NET Framework"ün oluşturulma numarasıdır) dizininde bulunmaktadır. Ayrıca .NET Konfigürasyonu aracına, "Başlat -> Ayarlar -> Denetim Masası -> Yönetim Araçları" altından da erişebilirsiniz. Machine seviyesi security.config, Enterprise seviyesi ise enterprisesec.config dosyalarının ayarlarını kullanmaktadır. Bu dosyalar da CLR"nin kurulu olduğu dizindeki CONFIG alt dizininde bulunmaktadır (%Windows Dizini%Microsoft.NETFrameworkv1.1.xxxxCONFIG)[xxxx kullandığınız .NET Framework"ün oluşturulma numarasıdır]. User (kullanıcı) politika seviyesi ise her kullanıcı profilinin dizinindeki Application DataMicrosoftCLR Security Configv1.0.nnnnsecurity.config dosyasında tutulmaktadır. AppDomain ise programatik olarak System.AppDomain.SetAppDomainPoliciy metodu ile ayarlanabilmektedir. .NET Framework Konfigürasyon Aracı Bu dört politika seviyesinin kombinasyonu sistemimizin güvenlik hiyeraşisini tanımlamaktadır. Kanıta göre bu hiyeraşideki her seviyeden bir izin kümesi koda atanır. Sonuç olarak oluşan izin kümesi, aşağıdaki resimde de görüldüğü üzere, bu dört izin kümesinin birleşimi değil kesişimidir : İzin kümelerinin kesişimi Güvenlik politikası hiyeraşisi birleşim yerine kesişim kullanılır. Çünkü, CLR"nin güvenlik modeli sahip olunacak izin ver ayrıcalıkları koda verme üzerine kuruludur. Bunların dışındaki hiç birine izin verilmez. Yani kodun hangi izin kümelerine sahip olmadığı ya da olamayacağı yerine sahip olacakları belirlenir. Windows NT güvenliğiyle ilgilenmiş olanlar da hemen bileceklerdir ki, bu model Win32® ayrıcalıklarına ve ye COM+ "daki roller mantığına benzemektedir. Eğer ki belirtilen izin kullanıcımız için tanımlanmadıysa erişim engellenir ve işlem iptal edilir. Win32®"deki DACLs (=Discretionary Access Control Lists); isteğe bağlı erşim  kontrol listesinin çalışma mantığının tam tersidir. DACL"de erişimlerin kısıtlanacağı kaynak ve/ve ya işlemler harici olarak eklenir.Kanıt gibi, güvenlik politika hiyeraşisi de güvenlik alt yapısı tarafından kullanıldığı gibi programatik olarak erişim de mümkün. Her seviye System.Security.Policy.PolicyLevel tipindedir, ve bu politikaların toplamını System.Security.SecurityManager.PolicyHierarchy metotu ile elde edebiliriz.C#using System; using System.Collections; using System.Reflection; using System.Security; using System.Security.Policy; namespace SecurityPolicyCS { class SecurityPolicyCSApp { static void Main() { IEnumerator i = SecurityManager.PolicyHierarchy(); while (i.MoveNext()) { PolicyLevel level = (PolicyLevel)i.Current; Console.WriteLine("{0,10}: {1}", level.Label, level.StoreLocation); } } } }VB. NETImports System Imports System.Collections Imports System.Reflection Imports System.Security Imports System.Security.Policy Module SecurtiyPolicyVB Sub Main() Dim i As IEnumerator = SecurityManager.PolicyHierarchy() While i.MoveNext() Dim level As PolicyLevel = i.Current Console.WriteLine("{0,10}: {1}", _ level.Label, _ level.StoreLocation) End While End Sub End ModuleVisual C++. NET#include "stdafx.h" #using using namespace System; using namespace System::Collections; using namespace System::Reflection; using namespace System::Security; using namespace System::Security::Policy; int _tmain() { IEnumerator* i = SecurityManager::PolicyHierarchy(); while (i->MoveNext()) { PolicyLevel* level = static_cast(i->Current); Console::WriteLine(S"{0,10}: {1}", level->Label, level->StoreLocation); } return 0; }Programın çıktısı aşağıdaki gibi olacaktır: Enterprise: C:WINDOWSMicrosoft.NETFrameworkv1.1.4322config enterprisesec.config Machine: C:WINDOWSMicrosoft.NETFrameworkv1.1.4322config security.config User: C:Documents and SettingsYunus Emre ALPÖZENApplication Data MicrosoftCLR Security Configv1.1.4322security.configProgramın çıktısından da anlaşılacağı gibi varsayılan olarak AppDomain için hiç bir şey tanımlı değildir.Her politika seviyesi 3 temel bileşenden oluşmaktadır: İsimli İzin Kümeleri (PolicyLevel.NamedPermissionSets özelliği ile erişilebilir) Ayrıcalıklar (hiç olamayacağı gibi çoklu sayıda da olabilir) Kod grup hiyeraşisi (PolicyLevel.RootCodeGroup özelliği ile de erişilebilir) Kod grup hiyeraşisi bir kanıta göre hangi izin kümelerinin verileceğini belirler. Buna göre bir kod grubunun iki temel özelliği vardır; üyelik koşulu, ve bir izin kümesinin adı. Üyelik koşulu var olan kanıtları kullanarak, kodun belirtilen izine sahip olup olmadığı sorusunu sormamızı sağlar. Eğer ki üyelik koşulu fonksiyonu bize geçerli bir değer verirse, izin kümesindeki ilgili hak ve ayrıcalıklar bizim için geçerli olacaktır. Üyelik testi fonksiyonu System.Security.Policy namespace"i altındaki IMembershipCondition arayüzünü uygulayan strong type bir tiptir. namespace System.Security.Policy { public interface IMembershipCondition { bool Check(Evidence evidence); //.. //.. } }Bu kod ile ilgili detayları ve kod grup hiyeraşisini bu yazı dizimizin bir sonraki makalesinde çok daha detaylı inceleyeceğiz. 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