Active Directory Powershell Signing

Active Directory Powershell Signing yazımızda powershell güvenliğini daha da arttırmak için sign olmamış scriptlerin çalışmasını engelleyeceğiz. Sign işlemini sadece belirli kişilere tanımlayacağız belirli kişilerin haricinde sign işlemide yapılamayacak. Öncellikle Domain yapısında herkesin powershell ihtiyacı var mıdır ? . Bunun belirlenmesi gerekir. Powershell güvenliği konusunda 3 ana madde sayılabilmektedir.

  • Powershell Engelleme
  • Logging
  • Signing

Bu yazımızda Active Directory Powershell Signing kısmı ile ilgileneceğiz. Diğer durumlar için yukarıdaki butonlardan diğer yazılarımıza bakabilirsiniz.

Sign Sertifikası Oluşturma

İlk olarak ben demo ortamında CA authority kullanarak sertifika kullandım. Sizler diğer sertifikaları kullanabilirsiniz.

Sertifika template’lerinden “Code Signing” duplicate ederek işleme başlıyorum.

Certificate Templates

En önemlisi Security kısmıdır. Bu arada bu sertifikayı kullanacak User belirledik.(PSSigner kullanıcısı). Saldırganlar bu sertifikayı enroll edebilirlerse sisteminizde zararlı PS’ler çalıştırabilir. O yüzden bir gruba veya user’a atama yapın.

Sıra geldi sertifikayı kullanmaya, Kullanılacak makinede mmc başlatarak Current User sertifikayı request edeceğiz.

Sertifika Current User Personal altında import ettik. Sıra Geldi GPO ve bu sertifikanın dağıtılmasına.

GPO Hazırlanması

Son olarak Powershell sign aktif etmek için GPO hazırlama bölümüne geldik. Burada 2 tane GPO hazırlacağız. Bir tanesi Powershell sign diğeri ise Sertifikanın dağıtılmasıdır.

İlk olarak ilgili OU üzerinde Powershell Sign için GPO oluşturun daha sonrasında;

Computer Configuration> Administrative Templates >Windows Components> Windows PowerShell bölümünden “Turn on Script Execution” enable ediyoruz ve Allow only signed script seçeneğini seçiyoruz.

Note:Bu arada söylemekte fayda bunu tüm domain ortamınada uygulayabilirsiniz. Bu yüzden çalıştırdığınız hali hazırda powershell scriptler varsa sign etmeniz gerekir.

Turn on Script Execution

İkinci işlem ise Trusted Publisher eklemek kaldı. Bunun için Personalda oluşturduğunuz sertifikayı dışarı çıkarın ve AD makinesine atın .Onun için aynı GPO ‘da ;

Computer Configuration>Windows Settings> Security Settings >Public Key Policies>Trusted Publishers Certificates bölümüne makinede ürettiğimiz sertifikayı import edeceğiz.

Trusted Certificate Active Directory Powershell Signing

Test Aşaması

Daha sonrasında makinenin oluşturduğumuz policy almasını sağlayın.

MachinePolicy Allsigned olarak görmek gerekmektedir.

Get-ExecutionPolicy -List
Get-ExecutionPolicy

İkinci aşamada daha sign işlemi yapmadığımız herhangi bir ps1 dosyasını çalıştırmaya çalışın. Sign olması gerektiği ile ilgili Error aldık.

Active Directory Powershell Signing Unsigned Error

Sonra ki kontrolümüz sertifikanın kontrolüdür. Sertifikamızın varlığını kontrol ettik.

Get-Childitem Cert:\CurrentUser\My -CodeSigningCert
 Powershell Signing Certificate

Sıra geldi sign etmeye. Koyu olarak yazılan yere sizler kendi scriptlerinizin yolunu yazın. Burada ki Status Valid olduğunu kontrol edin.


$cert=(Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0]
Set-AuthenticodeSignature -Certificate $cert -FilePath C:\Users\pssigner\Documents\Pssign.ps1
Active Directory Powershell Signing
 Powershell Signed

Bir önceki aşamalarda çalışmayan Error aldığımız script şimdi imzaladık ve yeniden çalıştırmayı deneyelim. Hatasız çalıştı.

Active Directory Powershell Signing Test

Sonuç olarak bu yazımızda sizlere Powershell Signing detaylıca anlatmaya çalıştım. Diğer active directory yazılarımızı aşağıdaki kategorilerden takip edebilirsiniz.