|
Sisteminizde çalışan betikler (script) sistem yöneticilerinin işlerini kolaylaştırdığı ölçüde sisteminize saldırıda bulunmayı düşünen kötü niyetli kullanıcıların işlerini de aynı ölçüde kolaylaştırmaktadır. Betikler sisteminizi ele geçirme, sisteminiz ile ilgili bilgi edinme, sistem yapılandırma ayarlarını değiştirme, sisteminizden veri çalma gibi saldırı türlerinin birçoğunda kullanılabilir. Sisteminizi ele geçirmeyi bir şekilde başarabilmiş bir saldırganın betikleri kullanarak yapabilecekleri yalnızca saldırganın hayal gücü ile sınırlıdır. Bu bakımdan sisteminizde çalıştırılacak betiklerin kontrol altına alınması sisteminizin güvenliği açısından son derece önem arz etmektedir. Bu kapsamda alınabilecek en önemli güvenlik önlemlerinden biri sisteminizde yalnızca imzalanmış betiklerin çalışmasına izin vermeniz olacaktır. Bu yazıda etki alanınızda (domain) çalıştıracağınız Powershell betiklerinin Windows Açık Anahtar Altyapısı (Windows Public Key Infrastructure - PKI) yardımı ile nasıl imzalanacağını ve sisteminizde yalnızca imzalı betiklerin çalışmasını nasıl sağlayabileceğinizi anlatmaya çalışacağız.
Yazıya Powershell’in desteklediği dört farklı betik çalıştırma politikasından (execution policy) bahsederek başlayacağız. Bunlar;
-
Kısıtlı (Restricted): Powershell’in varsayılan (default) çalıştırma politikasıdır. Komut satırında bireysel olarak yazılan komutlar çalıştırılır fakat toplu halde yazılmış betiklerin çalıştırılmasına izin verilmez.
-
Tümüİmzalı (AllSigned): Yerel bilgisayarınızda yazdığınız betikler dâhil sisteminizde çalıştıracağınız tüm betiklerin ve yapılandırma dosyalarının güvenilir bir yayıncı tarafından imzalanmış olmasını zorunlu kılar. Eğer betik henüz güvenilir ya da güvenilmez olarak sınıflandırılmamış bir yayıncı tarafından imzalanmışsa, betik çalıştırılmadan önce kullanıcıdan gerekli izin talep edilir. Bu politika güvenilen bir yayıncı tarafından imzalanmış fakat içerisinde zararlı kod içeren betiklerin çalıştırılmayacağı anlamına gelmez.
-
Uzaktakiİmzalı (RemoteSigned): Anlık mesajlaşma, e-posta yoluyla İnternet'ten indirme sonucu sistemde çalıştırılacak betiklerin tümünün güvenilir bir yayıncı tarafından imzalanmış olmasını zorunlu kılar. İnternet'ten indirmediğiniz ve yerel bilgisayarınızda geliştirdiğiniz betikleri imzasız olarak çalıştırmaya devam edebilirsiniz. Bu şekilde elde edilen imzasız ve içerisinde zararlı kod bulunduran betiklerin çalıştırılabilmesi riskine sahiptir.
-
Kısıtlanmamış (Unrestricted): İçerisinde zararlı kodda dâhil imzasız olan tüm betiklerin çalıştırılabilmesine izin veren politikadır. İnternet'ten indirilen imzasız betikler kullanıcı uyarılarak onayı alındıktan sonra çalıştırılır.
-
Atlama (Bypass): Hiçbir betik engellenmez ve herhangi bir uyarıda bulunmadan ve kullanıcı izni istenmeden tüm betikler çalıştırılır.
-
Tanımsız (Undefined): Şuan ki kapsam (scope) içerisinde herhangi bir çalıştırma politikasının belirtilmediği durumlarda geçerli olan politikadır. Eğer bütün kapsamlar içerisinde herhangi bir çalıştırma politikası belirtilmemişse geçerli olan çalıştırma politikası varsayılan çalıştırma politikası olan “Kısıtlı” politikasıdır. Kapsam kavramının ne olduğu ise aşağıda açıklanacaktır.
Yukarıda bahsedilen politikaların uygulanabileceği belirli üç farklı kapsam alanı vardır. Öncelik sırasına göre sıralanırsa bunlar;
-
Süreç (Process): Çalıştırma politikası yalnızca şuan da çalışmakta olan Powershell oturumunu etkiler. Çalıştırma politikasının değeri kayıt defterinden ziyade (registry) çevre değişkeni (environment variable) olan $env:PSExecutionPolicyPreference değerinin içerisinde saklanır ve bu değişkenin değerinin değiştirilmesi çalıştırma politikasının değiştirildiği anlamına gelmez.
-
ŞuankiKullanıcı (CurrentUser): Çalıştırma politikasının yalnızca şuan oturum açmış kullanıcıyı etkilediği kapsamdır. Değeri kayıt defterinin HKEY_CURRENT_USER alt anahtarlarından birinde saklanır.
-
YerelMakine (LocalMachine): Çalıştırma politikasının oturum açılan bilgisayar üzerindeki tüm kullanıcıları etkilediği kapsamdır. Değeri kayıt defterinin HKEY_LOCAL_MACHINE alt anahtarlarından birinde saklanır.
Alt kapsamlarda belirlenen çalıştırma politikasının değeri üstekilere göre daha kısıtlayıcı olsa dahi o an çalıştırılan Powershell oturumunun çalıştırma politikası yukarıdaki öncelik sırasında belirtilen ilk değere göre belirlenir.
Üzerinde çalışmakta olduğunuz Powershell oturumunun çalıştırma politikasını öğrenmek için Get-ExecutionPolicy komutunu kullanabilirsiniz. Aşağıdaki resimde komutun çalıştırılması sonucu o anki oturumun çalıştırma politikasının Restricted yani Kısıtlı olduğunu görebilirsiniz.
Eğer o anki oturumu etkileyen kapsam alanları da dâhil detaylı çalıştırma politikalarını görmek istiyorsanız Get-ExecutionPolicy komutu -list parametresi ile birlikte çalıştırılır. Aşağıdaki resimde bu oturum için YerelMakine (LocalMachine) kapsamının çalıştırma politikasının Tümüİmzalı (AllSigned) olarak belirlendiğini, ŞuankiKullanıcı (CurrentUser) kapsamının çalıştırma politikasının Uzaktakiİmzalı (RemoteSigned) olduğunu görebilirsiniz. Böyle bir durumda bu oturum için geçerli olacak çalıştırma politikası ŞuankiKullanıcı kapsamı öncelik sıralamasında Yerelmakine kapsamından önce geldiği için Uzaktakiİmzalı (RemoteSigned) çalıştırma politikası olacaktır. Get-ExecutionPolicy komutunu tekrar çalıştırdığımızda geçerli olan politikanın o anki oturum için Uzaktakiİmzalı (RemoteSigned) olduğunu görebilirsiniz.
Belirli bir kapsamın çalıştırma politikasını değiştirmek için Set-ExecutionPolicy RemoteSigned -scope CurrentUser komutu uygun şekilde değiştirilerek kullanılabilir. Konu ile ilgili daha fazla bilgiyi http://technet.microsoft.com/en-us/library/dd347641.aspx adresinden öğrenebilirsiniz.
Çalıştırma politakalarından kısaca bahsettikten sonra tüm etki alanını etkileyecek etki alanı grup politikasının (Group Policy) nasıl yapılandırılacağından bahsedelim. Etki alanı bazında grup politikası ile belirlenen Powershell çalışma politika ayarları yerel bilgisayarlardaki tüm çalışma politikalarını ve kapsamları etkisiz hale getirir ve tüm etki alanına etki eder. Etki alanı bazında betik çalıştırılmasına izin vermek için grup politikaları aşağıdaki şekilde yapılandırılır;
-
Eğer grup politikasında Turn on Script Execution seçeneği etkisiz halde bırakılmışsa bu çalıştırma politikasından Kısıtlı (Restricted) olduğu anlamına gelmektedir.
-
Eğer Turn on Script Execution seçeneği etkin hale getirilirse etki alanı için çalıştırma politikası seçilebilir. Grup politikası ayarlarının çalıştırma politikası ayarlarındaki karşılıkları aşağıdaki tabloda gösterilmiştir;
Grup politikaları ve çalıştırma politikalarının beraber değerlendirileceği ortamlarda etkin olacak çalıştırma politikası aşağıdaki öncelik sırasına göre belirlenir.
-
Grup Politikası: Bilgisayar Yapılandırması (Computer Configuration)
-
Grup Politikası: Kullanıcı Yapılandırması (User Configuration)
-
Çalıştırma Politikası: Süreç (Process)
-
Çalıştırma Politikası: ŞuankiKullanıcı (CurrentUser)
-
Çalıştırma Politikası: YerelMakine (LocalMachine)
İlgili Powershell grup politikası ayarlarını Grup Politikası Düzenleyici’den (Group Policy Editor) http://technet.microsoft.com/en-us/library/dd347641.aspx adresinden belirtildiği şekilde yapılandırabilirsiniz.
Etki alanı denetçisi (Domain Controller) rolü yüklenmiş Windows Server 2008 R2 sunucusu üzerinde bu ayarlar aşağıda anlatıldığı şekilde yapılandırılabilir;
Start -> Adinistrative Tools -> Group Policy Management aracılığı ile Grup Politika Yönetimi penceresi açılır. Yapacağımız değişikliğin tüm etki alanını etkilemesi için test.com üzerinde sağa tıklanır ve Create a GPO in this domain and Link it here… seçeneği seçilir. test.com üzerinde denemeler yapacağımız bir test etki alanı yapılandırılmasıdır.
Açılan pencerede Name kısmına yaratılan politikanın ileride de ne ile alakalı olduğunu anımsamanıza yardımcı olacak bir isim girilir.
İlgili örgütsel birim (Organizational Unit) altında oluşturulan Grup Politika Nesnesi (Group Policy Object) üzerine gidilir ve sağa tıklanarak Edit seçeneği seçilip Grup Politika Yönetimi Düzenleyicisi (Group Policy Management Editor) açılır.
Açılan pencereden tanımladığımız politikanın tüm etki alanındaki bilgisayarlar üzerinde etkili olabilmesi için ilgili politika ayarları Computer Configuration alanı içerisinde tanımlanır. Computer Configuration\Administrative Templates\Windows Components\Windows Powershell alanının altında aranılan Turn on Script Execution değeri bulunur.
İlgili değerin üzerinde çift tıklanır ve açılan pencereden Etkin (Enabled) seçeneği seçilir. Biz etki alanımızda çalışmasını istediğimiz tüm betiklerin imzalı olmasını istediğimiz için Execution Policy değeri Allow only signed scripts seçeneği seçilir. Yorum (Comment) kısmına politika ile ilgili yorumlar girilir ve Ok tuşu ile politika tüm etki alanı için aktif hale getirilir.
Bu yapılandırma ayarı ile artık etki alanında yalnızca imzalı betiklerinin çalıştırılması sağlanmış olur. Şimdi betiklerin nasıl imzalanacağından bahsedelim.
İmzalamaya başlamadan önce sisteminizde bir sertifika otoritesinin (Certificate Authority) kurulu olması gerekmektedir. Benim üzerinde çalıştığım ortamda sertifika otoritesi rolü Windows Server 2008 R2 işletim sistemi üzerine kurulu ve istemci olaraksa Windows 7 işletim sistemi kullanılmıştır. Sertifika otoritesi test.com etki alanına üyedir sertifika otoritesi olan sunucu etki alanında ca.test.com olarak adlandırılmaktadır. PKI kök sertifika üreticisi ise test-CA olarak adlandırılmaktadır ve etki alanındaki tüm bilgisayarlar tarafından güvenilen bir kök sertifika otoritesidir
Betik imzalayabilmek için yapılması gereken ilk iş sertifika üreticisi sunucusunda kod imzalama sertifika şablonunu kullanılabilir hale getirmektir. Bunu gerçekleştirebilmek için Server Manager çalıştırılır. Buradan Server Manager\Roles\Active Directory Certificate Services\Certificate Templates genişletilir ve buradan Kod İmzalama (Code Signing) şablonu bulunur. Kod imzalama şablonunun üzerinde sağa tıklanarak Şablonu Kopyala (Duplicate Template) seçeneği seçilir. Bu seçeneği seçtiğimizde kopyalanan sertifika şablonunun desteklendiği minimum sertifika otoritesinin işletim sistemini seçmemiz istenir. Ortamınıza uygun seçenek seçilerek devam edilir.
Kopyalayacağınız sertifikanın özellikleri ortamınıza uygun olacak şekilde yapılandırılmalıdır. Aşağıdaki örnekte sertifikanın geçerlilik süresi iki yıl olacak şekilde yapılandırılmıştır.
Bu pencerede önemli olan diğer bir sekme ise Security sekmesidir. Burada bu sertifikayı kimlerin üretme talebinde bulunabileceği izni belirlenir. Kurumsal bir etki alanında kullanıcılar genellikle yaptıkları işlere, bulundukları birimlere göre oluşturulmuş ilgili kullanıcı grupları üyesidir. Bu sayede kullanıcılara tanınacak hak yönetimi işi merkezi hale getirilmiş olur. Bu örnekte işleri etki alanı için betik yazmak olan ilgili kullanıcılar aktif dizin içerisinde oluşturulan Betik İmzalama grubuna dâhil edilmiştir. Betik imzalama grubuna da kod imzalama sertifikası ürettirme talebinde bulunabilmeleri için de Security alanında Enroll hakkı verilir. Böylece bu gruba dâhil olan betik yazarları kendilerine özel betik imzalama sertifika talebinde bulunabileceklerdir.
Yukarıdaki yapılandırmadan sonra betik imzalama grubunun üyesi olan Programcı 02, Programcı 03 ve Programcı 05 kullanıcıları kendilerine özel kod imzalama sertifikası üretme talebinde bulunabileceklerdir.
Ok tuşu ile açılan pencereyi sonlandırdığınızda şablon kopyalama işlemi sonlandırılırmış olur.
Kopyalanan sertifikayı kök sertifika otoritesinin sertifika şablonlarına eklemek için ilgili kök sertifikasının altındaki Certificate Templates alanının üzerinde sağa tıklanır ve New -> Certificate Template to Issue seçeneği seçilir.
Açılan pencereden az önce kopyalanan sertifika seçilir ve böylece kod imzalama sertifikası talep edilebilir hale getirilmiş olur. Artık kod imzalama talebinde bulunabilme hakkı olan kullanıcılar kod imzalama sertifikası ürettirme talebinde bulunulabilirler.
Şimdi kod imzalama sertifikası üretme hakkına sahip bir kullanıcı ile istemci bilgisayarımızda oturum açıp nasıl kod imzalama sertifikası ürettireleceğinden bahsedelim. Bunun için ilgili bilgisayarda betik imzalama grubunun üyesi olan bir kullanıcı ile oturum açtıktan sonra mmc.exe uçbirimi çalıştırılır. mmc.exe uçbirimi başlat tuşuna bastıktan sonra açılan arama çubuğuna yazılarak ya da Windows Tuşu + R tuş kombinasyonu kullanılarak açılan Çalıştır penceresine yazılarak çalıştırılabilir. Açılan pencereden File -> Add\Remove Snap-in… seçeneği seçilir. Gelen pencerede Certificates seçeneği seçilir ve Add tuşuna basılır. Ok tuşu ile onaylanınca Certificates snap-in uçbirimi eklenmiş olur.
Sertifika talebinde bulunmak için Personal seçeneği üzerinde sağa tıklanır, All Tasks -> Request New Certificate… seçeneği seçilir. Gelen ilk pencere Next tuşu ile geçilir.
Gelen pencere Active Directory Enrollment Policy seçeneği seçilir ve Next ile devam edilir.
Gelen pencerede oturum açılan kullanıcının talepte bulunma hakkı olan sertifika türleri listelenmektedir. Buradan daha önceden oluşturduğumuz Betik İmzalama Sertifikası şablonu seçilir. Details seçeneğinden şablon ile ilgili bilgiler görüntülenebilir. Enroll tuşu ile yeni sertifika talebinde bulunulur. Properties seçeneği ile oluşturulacak sertifikanın özellikleri değiştirilebilir. Özel Anahtarın (Private Key) dışarı verilip verilmeyeceği gibi ayarlar buradan değiştirilebilir.
Eğer herşey yolunda giderse sertifikanın başarılı şekilde üretildiğine dair bilgilendirme penceresi ile karşılaşılır. Finish tuşu ile sertifika oluşturma işi tamamlanmış olur.
Artık Programcı 02 kullanıcısına ait betik imzalamada kullanılabilecek açık (Public) ve özel (Private) anahtar değerlerini içinde barındıran ilgili sertifika üretilmiştir ve betik imzalamaya hazırdır.
Bu bölümde kod imzalama sertifikası üretildi ikinci bölümde betiklerin imzalanması anlatılacaktır.
Referanslar:
[1] http://blogs.technet.com/b/heyscriptingguy/archive/2010/06/16/hey-scripting-guy-how-can-i-sign-windows-powershell-scripts-with-an-enterprise-windows-pki-part-1-of-2.aspx
[2] http://blogs.technet.com/b/heyscriptingguy/archive/2010/06/17/hey-scripting-guy-how-can-i-sign-windows-powershell-scripts-with-an-enterprise-windows-pki-part-2-of-2.aspx
[3] http://technet.microsoft.com/en-us/library/dd347641.aspx
[4] http://technet.microsoft.com/en-us/library/dd347649.aspx
[5] http://www.microsoft.com/whdc/driver/install/drvsign/best-practices.mspx
[6] http://www.sans.org/reading_room/whitepapers/hackers/windows-script-host-hack-windows_3
Favori olarak ekle (0) | Görüntüleme sayısı: 877
Sadece kayıtlı kullanıcılar yorum yazabilir. Lütfen sisteme giriş yapın veya kayıt olun. |