|
Bir önceki bölümde kod imzalama sertifikası da üretildiğine göre artık betiklerin imzalanmasına başlanabilir. Bu amaçla imzalanacak ilgili betik oluşturulur. Bu örnekte MerhabaDunya.ps1 adında dünyaya merhaba diyecek Powershell dosyası aşağıdaki şekildeki gibi oluşturulur ve kaydedilir.
Oluşturulan MerhabaDunya.ps1 dosyası Powershell içerisinde çalıştırmaya çalışıldığında imzasız betiklerin sistemde çalıştırılamayacağına dair bir uyarı ile karşılaşılır ve betik dosyasının çalıştırılmasına izin verilmediği görüntülenir.
Eğer Powershell programını yönetici hakları ile çalıştırıp gpresult /v komutu çalıştırılırsa, yukarıdaki örneklerde tanımlanan Betik Çalıştırma Grup Politikası’nın sisteme uygulandığı görülecektir.
Şimdi az önce oluşturulan betik dosyasının nasıl imzalanacağına bakalım. Betiği imzalamak için kullanacak komut Set-AuthenticodeSignature Powershell komutudur. Öncelikle imzalamada kullanacak kod imzalama sertifikası aşağıdaki komut ile $cert değişkeni içerisine atılır.
$cert=(dir cert:currentuser\my\ -CodeSigningCert)
Ardından Set-AuthenticodeSignature komutuna imzalanacak betiğin dosya yolu ve imzalamada kullanılacak sertifikayı içerisinde bulunduran değişken parametre olarak verilir. Bu şekilde betik imzalama işi tamamlanmış olur.
Yukarıda imzalamada kullanılan sertifikanın geçerli bir sertifika olduğu Status alanından görülebilir. İmzalamada kullanılan sertifika geçerli bir sertifika olduğu için herhangi bir hata ile karşılaşılmadan imzalama işlemi tamamlandı. Set-AuthenticodeSignature komutunu betik imzalarken kullanırken TimeStampServer (Zaman Damgası Sunucusu) parametresi ile geçerli bir zaman damgası sunucusunun adresi verilebilir. Bu şunu garanti eder; Betik imzalama sertifikalarının geçerlilik süresi genellikle kısıtlıdır. Bu örnekte bu süre iki yıl olacak şekilde yapılandırıldığı için sertifikanın geçerlilik süresi iki yıl sonra dolduğunda bu sertifika ile imzalanmış olan hiçbir betik sistemde çalışamayacaktır. Eğer betik imzalarken –TimeStampServer parametresi ile geçerli bir zaman damgası sunucusu belirtilirse, imzalama sertifikasının süresi dolsa bile süresi dolmuş eski sertifika ile imzalanmış betikler sisteminizde çalıştırılmaya devam edecektir. TimeStampServer parametresi sertifikanızın süresi dolduktan sonra betik imzalanırken kullanılan sertifikanın kod imzalama aşamasında geçerli olduğunu garanti eder. Bu şekilde sertifikalarınızın süresi geçmiş dahi olsa sisteminizde betikleriniz çalışmaya devam eder. Bu parametre kullanılmadan betikler imzalanırsa, betiklerin sistemde çalıştırılmasına izin verilme süresi imzalanan sertifikanın geçerlilik süresi kadardır. Sertifikanın süresi dolduktan sonra bu sertifika ile imzalanan betiklerin sistemde çalıştırılmasına izin verilmez. Hali hazırda İnternet ortamında ücretsiz olarak zaman damgalama servisi hizmeti veren güvenilir sunuculara İnternet'te yapılacak bir arama ile erişilebilir. İnternet bağlantısının olmadığı iç ağlarda bu hizmet için ekstra bir yazılım ya da donanıma ihtiyaç duyulabilir. Bu örnekte betikler zaman damgası sunucusu belirtilmeden imzalanmıştır. Az önce çalıştırılmaya çalışılan ve izin verilmeyen betik imzalandıktan sonra tekrar çalıştırılmaya çalışıldığında aşağıdaki uyarı ile karşılaşılır.
Bu uyarı kısaca, az önce imzasız çalıştırılmasına izin vermediği ve imzalanıp çalıştırılmaya çalışılan betiğin henüz güvenilmemiş bir yayıncı tarafından imzalandığı uyarısıdır ve bundan sonra bu sertifika ile imzalanmış betiklerle karşılaşıldığında ne yapılması gerektiği bilgisi kullanıcıya sorulur. Eğer burada A şıkkı olan Herzaman Çalıştır (Always Run) seçeneğini seçilirse bu sertifika yerel bilgisayarda güvenilir sertifikalar içerisine kopyalanır ve bu sertifika ile imzalanmış tüm betikler bundan sonraki çalıştırılmalarında sistemde herhangi bir uyarıya neden olmadan çalıştırılır. V Asla Çalıştırma (Never Run) seçeneği sertifikayı güvenilmez sertifikalar listesine ekler ve bu sertifika ile imzalanmış tüm betikler bundan sonra sistem tarafından çalıştırılmaz. İleride bu sertifika tüm etki alanı için güvenilir olarak tanımlanacağı için bu örnekte betiğin sertifika ile ilgili herhangi bir işlem yapmadan sistemde bir kere çalıştırılmasına izin vermek için Birkere Çalıştır (Run once) seçeneği olan R seçeneğini seçiniz.
Betiğin başarılı bir şekilde çalıştırıldığını ve Merhaba Dünya sonucunun ekrana yazıldığını görebilirsiniz.
Sistem tarafından güvenilen veya güvenilmeyen sertifikalar mmc.exe uçbiriminin Certificates kısmından görüntülenebilir.
Şimdi ise imzalanan Merhaba Dünya yazan küçük bir betik dosyası için bile betiğin sonuna eklenen imzayı görüntüleyelim.
Artık yukarıdaki dosyada yapılacak tek karakterlik bir değişim bile betiğin sistemde çalıştırılmaması ile sonuçlanır. Ayrıda Get-AuthenticodeSignature komutu ile de dosyanın imzalanmasında kullanılan sertifika hakkında bilgi alınabilir. TimeStamperServer parametresi ile herhangi bir değer belirtmediğimiz için betiğin imzalanmasında geçerli bir zaman damgası sertifikası kullanılmamıştır. Bu imzalanan betiklerin imzalamada kullanılan sertifikaların süresi dolduktan sonra tekrar geçerli bir sertifika ile imzalanması gerektiği anlamına gelmektedir.
Betiğin nasıl imzalanabileceği ve sertifikanın yerel bilgisayar için nasıl güvenilir ya da güvenilmez hale getirildiğinden bahsedildi. Şimdi imzalamada kullanılan herhangi bir sertifikaların tüm etki alanı için güvenilir ya da güvenilmez hale nasıl getirileceğinden bahsedelim. Bu şekilde güvenilen sertifikalar tarafından imzalanmış betikler tüm etki alanı içerisinde herhangi bir uyarı verilmeden sistemde çalıştırılır.
Bunun için yapılması gereken betik yazarına ait olan kod imzalama sertifikası dışarı verilmeli (Export) ve dışarı verilen sertifika etki alanı politikası olacak şekilde güvenli yayıncılar alanına eklenmelidir.
Kod imzalama sertifikasının dışarıya verilmesi için kod imzalama sertifikasının bulunduğu istemci bilgisayarın mmc uçbirimine geri dönülür. İlgili kullanıcının sertifikasına Personal\Certificates alanından erişilir. İlgili sertifikanın üzerinde sağa tıklanarak All Tasks -> Export seçeneği seçilir.
Açılan ilk üç pencere Next tuşu ile geçilir ve son pencerede sertifikayı dışarı vereceğiniz yolu ve sertifika adını girmeniz istenir.
Next ve Finish tuşları ile sertifikanın dışarı alınma işlemi tamamlanmış olur.
Bu örnekte sertifika ilgili kullanıcının masaüstünde oluşturulacak şekilde ayarlandı.
Şimdi ise dışarı alınan sertifikanın tüm etki alanında güvenilir yayıncılar arasına eklenmesi için ilgili etki alanı politikası yaratılır ve sertifika bu yayıncılar arasına eklenir. Etki alanında betik imzalama yetkisi olan tüm kullanıcıların sertifikası bu politika içerisinde güvenilir yayıncılar alanına eklenmelidir. Aynı şey güvenilmeyen veya sistemde betiklerinin çalıştırılmasına izin verilmeyecek sertifikalar içinde güvenilmez yayıncılar alanına eklenerek yapılabilir.
Bunun için etki alanı kontrolcüsüne gidilir ve grup politikası yönetim programı çalıştırılır. Güvenilecek sertifikanın tüm etki alanını etkilemesi için test.com alanının üzerinde sağa tıklanır ve daha önceki örnekte de yapıldığı gibi Create a GPO in this domain, and link it here… seçeneği seçilir.
Açılan pencereden grup politikasına tanımlayıcı bir isim verilir.
Oluşan politika üzerinde sağa tıklanır ve Edit seçeneği tıklanır. Açılan pencereden Computer Configuration\Policies\Windows Settings\Security Settings\Public Key Policies alanı genişletilir. Trusted Publisher alanı üzerinde sağa tıklanarak Import seçeneği seçilir.
Açılan ilk pencere Next ile geçilir, sonraki pencereden içeri aktarılacak sertifikanın yolu belirtilir ve Next tuşu ile devam edilir.
Sertifikanın güvenilir sertifikalar alanına aktarıldığı kontrol edilir ve Next tuşu ile devam edilir.
Finish tuşu ile içeri aktarma işlemi tamamlanmış olur.
Sertifikanın ilgili alanın içine aktarıldığı grup politikasından da görüntülenebilir.
Bu işlemi de gerçekleştirdikten sonra etki alanınızdaki bilgisayarlar grup politikalarını güncelleştirdiklerinde Programcı 02’ye ait olan sertifikanın Trusted Publisher alanlarına eklenmiş olduğu görüntülenir. Bu adımdan sonra bu sertifika ile imzalanmış betikler etki alanınızdaki tüm bilgisayarlar tarafından herhangi bir uyarıda bulunmadan çalıştırılır.
Şimdi gerçekleştirilen işlemin gerçekten çalışıp çalışmadığını test edelim. Bunun için betik imzalamada kullanılandan farklı bir bilgisayarda herhangi bir kullanıcı ile oturum açılır. mmc uçbirimi çalıştırılır ve Certificates alanı eklendikten sonra Trusted Publisher alanı kontrol edilerek henüz herhangi bir güvenilir sertifika olmadığı kontrol edilir.
Powershell ekranından gpupdate /force komutu çalıştırılır.
Komut çalıştırıldıktan sonra Trusted Publisher alanı F5 tuşu ile tazelendikten sonra tekrar kontrol edildiğinde Programci 02’nin sertifikasının güvenilir sertifikalar alanına eklendiği görüntülenebilir.
Artık bu bilgisayarda Programcı 02 tarafından imzalanmış bütün betikler herhangi bir uyarı verilmeden çalıştırılacaktır. Şimdi bunu test edelim. Programcı 02 tarafından yazılmış ve imzalanmış MerhabaDunya.ps1 betiğini az önce politika güncellemesi yapılan ve standart bir kullanıcı ile oturum açılmış bilgisayara kopyalayıp çalıştırmayı deneyelim.
Herhangi bir uyarı verilmeden sorunsuzca çalıştırıldığını göreceksiniz. Şimdi ise MerhabaDunya.ps1 içerisindeki herhangi bir harfi değiştirip betiği tekrar çalıştırmayı deneyelim. Merhaba Dünya yazısı içerisindeki ü harfini u ile değiştirelim ve betiğimizi kaydedelim.
Şimdi tekrar betiği çalıştırmayı deneyin.
Betik dosyanın kıyım (hash) değerinin imzadaki kıyım değeri ile eşleşmediğini ve içeriğinin değiştirilmiş olabileceği uyarısı verilerek betiğin çalışmasına izin verilmez. Az önce değiştirilen ü karakteri tekrar eski haline getirildiğinde betiğin eskisi gibi sorunsuzca çalıştığı gözlemlenebilir.
Sonuç olarak; sisteminizi yalnızca imzalanmış betiklerin çalıştırılabileceği şekilde yapılandırırsanız, sisteminizde çalışan betiklerin kim tarafından yazıldığını ve yazıldıktan sonra betik dosyasında herhangi bir değişiklik yapılmadığını garanti etmiş olursunuz. Buda size sisteminizde çalıştırılan Powershell betikleri üzerinde kontrol sağlamanızı sağlar ve sisteminizi ilk haline göre biraz daha güvenli hale getirmiş olur.
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ı: 695
Sadece kayıtlı kullanıcılar yorum yazabilir. Lütfen sisteme giriş yapın veya kayıt olun. |