Microsoft Endpoint Management(SCCM) ile Lenovo BIOS Password Management

Microsoft Endpoint Management (SCCM) ile istemci tarafının yönetimini gerçekleştiriyoruz. Bu yönetim kapsamına baktığımızda karşımızda Uygulama ve işletim sistemi dağıtımı, yazılım ve donanım envanterleri, güncelleme yönetimi ve bunun gibi birçok yönetimsel işlemlerimizi birçoğunu yapabildiğimizi biliyoruz. Bizler bu makalemizde işletim sistemi dağıtımı sırasında task sequence’ler içerisinde istemcilerimizin BIOS Parola yönetimini gerçekleştireceğiz.

Lenovo cihazlarımız gibi yine Dell ve HP gibi donanım üreticileri içinde bu çalışmaları elbette yapabiliriz.  Güvenliğin son derece önemli olduğunu hepimiz biliyoruz, günden güne daha da artan zafiyetlere önlemler almaya devam ediyoruz. Bu makalemizde her ne kadar özellikle BIOS Parola yönetiminden bahsediyor olsak da aslında BIOS tarafında birçok noktaya dokunabildiğimizi de bilmemiz gerekiyor.

Bu makale içerisinde bazı senaryolar ve bu senaryoya uygun hazırlamış olduğum scriptlerle ilerleyeceğiz. Elbette sizler de bu powershell scriptleri ve WMI sorgularını kendinize göre özelleştirebilir ya da geliştirebilirsiniz.

Microsoft Endpoint Management ile işletim sistemi dağıtımı yaparken task sequence içerisinde oluşturacağımız görev adımlarında Lenovo cihazlarımız için BIOS parolası tanımlayacağız. BIOS parolası tanımlandıktan sonra ise standart işletim sistemi kurulumları ve yine ihtiyaçlarınıza göre belirlediğiniz uygulamalarla birlikte son kullanıcılarınıza teslim edilmek üzere cihazlarımızı hazır hale getireceğiz.

Yine Powershell Script içerisinde yer alan ve Lenovo cihazlar için verilmiş olan parolalarımızı ister statik parola istersek de random bir parola tanımlayarak yapabiliriz. Random parola atadığımız durumlarda ise cihazımıza yeniden işletim sistemi kurulumu yapıldığında daha önceki kurulumumuza bağlı olarak cihazımıza atamış  olduğumuz bir BIOS parolasına ihtiyacımız olacağını bilmemiz gerekiyor. Bu nedenden dolayı random bir parola ataması yapacaksak bunu bir yere kaydetmemiz ya da bir veri tabanına yazdırmamız gerekmektedir. Çalışmış olduğumuz projelerde olmasını istediğimiz durum, her kurulumda farklı bir parola atanmasıdır. Buna rağmen burada yer alacak olan senaryomuzda parolamızı statik olarak tanımlayacağız. Bunun nedeni, bu makaleyi izleyen veya uygulayan sistem yöneticilerinin, bir sonraki kurulumda BIOS parolasının ne olduğunu bilmemeleri ya da unutmalarının büyük bir soruna neden olacağını öngörmemizdir.   

O halde özetlemek gerekirse bu makalemizde iki adımımız olacak. Birincisi Lenovo cihazlarımızın BIOS tarafında herhangi bir parola var mı ? Var ise bizim tarafımızdan daha önce tanımlanmış olan parolayı kaldırmasını ve ardından yeniden bir parola atamasını yaptıracağız. Parolayı statik veriyoruz neden kaldırmaya ihtiyacımız var sorusunun cevabı ise bizler BIOS üzerinde sadece parola vermiyoruz. BIOS üzerinde farklı ihtiyaçlarımız olabilir ve bu BIOS yönetimini de task sequence’ler üzerinden sağlayabiliriz. Bu sebeple parola olan bir cihaz üzerinde tanımlanmış herhangi bir değer varsa bunu kaldırarak devam edeceğiz. Bir başka ihtiyacımız statik olmadığını düşündüğümüz bir cihaz parolası var ise de yeniden random bir parola atamasına ihtiyaç duyabileceğiniz için yine Powershell script içerisinde tutuyorum.

Lenovo cihazlarımızın hem BIOS parolası hem de BIOS üzerinde yapabileceğimiz konfigürasyonlarımız için Lenovo tarafından yayınlanan BIOS WMI üzerinde yer alan parametreler ile ilgili dokümandan faydalanabilirsiniz.

https://download.lenovo.com/pccbbs/mobiles_pdf/kbl-r_deploy_01.pdf

Yapmak ve ulaşmak istediğimiz senaryomuzu anladıktan sonra artık çalışmalara başlayabiliriz.

Öncelikle bizler Lenovo cihazlar üzerinde parola için hangi wmi altında çalışacağımızı bilmemiz gerekiyor.

Bunun için paylaşmış olduğum Lenovo dokümanında görebileceğimiz Lenovo_BiosPasswordSettings sınıfı içerisinde daha önce parola atanıp atanmadığının kontrolünü gerçekleştireceğiz. Amacımız daha önce herhangi bir parola ataması yapıldıysa mevcut parolanın girişinin yapılması ardından da yeni bir parola atamasını yapabiliriz. Komut çıktısında herhangi bir parola ataması yapılmaması durumunda ise yeni bir parola tanımlanmasını sağlayacağız.

Yukarıda bahsettiğimiz parola kontrolü yapabilmek için öncelikle aşağıda yer alan powershell komut seti ile parola kontrolünü sağlayacağız.

Get-WmiObject -Namespace root\wmi -Class Lenovo_BiosPasswordSettings).PasswordState

Yukarıda yer alan komut seti çalıştırdığımız da bizlere gelen komut çıktısına göre hareket edeceğiz.

ResultDescription
0No passwords set
2Supervisor password set
3Power on and supervisor passwords set
4Hard drive password(s) set
5Power on and hard drive passwords set
6Supervisor and hard drive passwords set
7Supervisor, power on, and hard drive passwords set

Komut setimizin çıktılarına göre ve yukarıdaki tabloda yer alan Lenovo BIOS durumlarını görmekteyiz. Çıktımıza göre belirtilen tablo içerisindeki durumu görebilir ve ona göre hareket edebiliriz. Bizler Supervisor parolasını kontrol edeceğiz ve herhangi bir parola atanmamış ise burada Lenovo’nun limitasyonlarından dolayı manuel olarak parola tanımlamamızı yapmamız gerekmekte. Hangi modellerin desteklendiğini aşağıda göreceğiniz link üzerinden detaylıca inceleyebiliriz.

https://docs.lenovocdrt.com/#/bios/sdbm

Özetle bizler ilk olarak Lenovo BIOS parola tanımlanması yapılmamış ise ilk olarak manuel parola tanımlamamızı yapacağız. Eğer ki daha önce tanımlanmış bir parola var ise bizler bu parolanın değiştirilmesini sağlayacağız. Burada parola değişikliği yapabilmek için bu parolanın tarafımızdan biliniyor olması gerekmekte. Bu duruma göre parola durumunun kontrolü için belirlediğimiz bir değişkene atama yaparak devam edelim.

$passwordState = (Get-WmiObject -Namespace root\wmi -Class Lenovo_BiosPasswordSettings).PasswordState

İlk komutumuzla bizler parola durumunu bir değişkene atayacağız ve sonrasında Powershell üzerinde duruma göre çalışmamızı ilerleteceğiz.

$SetSuperPass = "NewPassword"

If ($passwordState -eq 2)
{
$OldBiosPass = Abc12345
$PasswordSet = Get-WmiObject -Namespace root\wmi -Class Lenovo_SetBiosPassword
$PasswordSet.SetBiosPassword("pap,$OldBiosPass,$SetSuperPass,ascii,us")
}

PasswordState isimli bir değişkenimizin sonucunda Supervisor parolası var ise parola değişikliği işlemini burada gerçekleştirmiş olacağız. Daha önce de belirttiğimiz gibi burada statik bir parola yerine random bir parola atamasını gerçekleştirmemiz daha anlamlı olacaktır. Fakat riskli bir işlem olması sebebiyle bu makalemizde burada supervisor parolasını statik olarak tanımlıyoruz.

$pass = -join ((97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_})

$SetSuperPass = $pass.ToUpper()

Eğer sizler burada random bir parola oluşturmak isterseniz yukarıda yer alan komut setiyle random bir parola üretilebilir ve SetSuperPass isimli değişkene atayabilirsiniz. Komut setimiz çalıştığında 8 karakterli random bir parola üretecek ve SetSuperPass isimli değişkene atayacaktır.

Buraya kadar olan kısımda bizler öncelikle Lenovo cihazlarımız üzerinde parola kontrolünü gerçekleştirdik. Kontrollerimiz sonrasında ise herhangi bir parola var ise eski parolanın değiştirilmesini sağlamış olduk.

Cihazlarımız üzerinde herhangi bir parola yoksa Lenovo cihazlarımıza parola atamasını yapamayacağımızı belirtmiştik. Güvenlik nedeniyle bizler Bios parolası olmadan kurulumların yapılmasını da istemiyoruz. O halde bizler yine powershell scriptimizi oluştururken parola olmaması durumunda işletim sisteminin kurulmasına izin vermek istemiyoruz. Bu durumda yine kontrollerimiz de BIOS üzerinde herhangi bir parola yok ise SCCM Task Sequence üzerinde işletim sistemi kurulumuna geçiş yapmamızı engelleyeceğiz.

Bunun için yeni bir powershell script bloğu daha ekleyeceğiz.

elseif ($passwordState -eq 0) {

#Message Box
$Message = "Lenovo BIOS Parolası Bulunmamaktadır. Lütfen BIOS Parolasını Tanımladıktan Sonra Yeniden Deneyiniz."
$Title = "Yenal Tirpanci"
$Type = 0 # Ok
$Output = 0

$TaskSequenceProgressUi = New-Object -ComObject "Microsoft.SMS.TSProgressUI"
$TaskSequenceProgressUi.ShowMessageEx($Message, $Title, $Type, [ref]$Output)
$TSEnv = New-Object -ComObject "Microsoft.SMS.TSEnvironment"
if ($Output -eq 1)
{
$TSEnv.Value("TS-UserPressedButton") = 'Ok'
}
}

Yukarıda yer alan kod bloğumuzda ise Lenovo cihazımızda herhangi bir parola bulunmuyor ise işletim sistemi kurulumuna izin vermeyecek şekilde tanımlamamızı gerçekleştirdik. Parolası olmayan cihaz kurulumunda bir mesaj çıkmasını ve çıkan mesajda sadece OK seçimini tanımladım. Sizler kendinize göre burada yer alan mesaj kutusunu özelleştirebilir ve uygulayabilirsiniz. Bununla ilgili referans dokümanına aşağıda yer alan link üzerinden erişim sağlayabilirsiniz.

https://learn.microsoft.com/en-us/mem/configmgr/develop/reference/core/clients/client-classes/iprogressui–showmessage-method

Ekran görüntüsünde görüldüğü gibi Reboot Computer görev dizisini ekliyoruz.

Powershell scriptimiz içerisinde yer alan ve kod bloğu içerisinde eğer herhangi bir parola yok ise mesaj kutusu ile uyarı çıkarıyorduk. Burada yer alan mesaj kutusunda sadece “OK” seçimi yer alıyor. Kurulumu esnasında çıkan mesaj kutusunda OK seçimini yaptığımız durumda da görüldüğü gibi Lenovo istemcimiz doğrudan işletim sistemi kurulumuna geçmeden istemcimizi yeniden başlatıyor. Dolayısı ile powershell scriptimiz ile bizler parola olan ya da olmayan durumlara göre aksiyonlarımızı almış oluyoruz.

Buraya kadar olan kısımlarda senaryomuzu ve bu senaryomuzun adımlarını tek tek açıkladık.

$TSProgressUI = New-Object -COMObject Microsoft.SMS.TSProgressUI

$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment
$TSProgressUI.CloseProgressDialog()
$SetSuperPass = "NewPassword"
if ($passwordState -eq 2)
{
$OldBiosPass = Abc12345
$PasswordSet = Get-WmiObject -Namespace root\wmi -Class Lenovo_SetBiosPassword
$PasswordSet.SetBiosPassword("pap,$OldBiosPass,$SetSuperPass,ascii,us")
}
elseif ($passwordState -eq 0) {
#Message Box
$Message = "Lenovo BIOS Parolası Bulunmamaktadır. Lütfen BIOS Parolasını Tanımladıktan Sonra Yeniden Deneyiniz."
$Title = "Yenal Tirpanci"
$Type = 0 # Ok
$Output = 0

$TaskSequenceProgressUi = New-Object -ComObject "Microsoft.SMS.TSProgressUI"
$TaskSequenceProgressUi.ShowMessageEx($Message, $Title, $Type, [ref]$Output)
$TSEnv = New-Object -ComObject "Microsoft.SMS.TSEnvironment"
if ($Output -eq 1)
{
$TSEnv.Value("TS-UserPressedButton") = 'Ok'
}
}

Lenovo cihazlarımız için BIOS parola yönetimini Microsoft Endpoint Management(SCCM) ile işletim sistemi dağıtımı sırasında yapabilmek için script bloğumuzu yukarıdaki gibi düzenledim.

Bu scriptimizi kaydettikten sonra Application Management altında paketimizi hazırladık ve dağıtımını gerçekleştirdik.

Task sequence altında yer alan Command Line görev dizisi içerisini ekran görüntüsünde görüldüğü gibi düzenliyoruz.

ServiceUI.exe -process:TSProgressUI.exe %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File YenalLenovoPass.ps1

Command Line olarak yukarıda yer alan komut setini görev dizisi içerisinde çalıştırıyoruz.  Böylelikle senaryomuzda anlatıldığı şekilde powershell scriptimiz Lenovo cihazlarımız üzerinde BIOS parolasını kontrol edecek ve mevcut parolayı değiştirecek. Eğer herhangi bir parola atanmamış ise işletim sistemi kurulumuna izin vermeyecek ve kurulumu yapan ekibin Lenovo istemcilerimiz BIOS için manuel Supervisor parola tanımlamalarını zorunlu hale getirmiş olduk.

Burada belirttiğimiz senaryo da statik parola ataması gerçekleştirdik. Normalde güvenlik sebebi ile burada bizler random bir parola atamasının gerçekleştirilmesini, atanan bu parolanın bir veritabanına ya da paylaşılmış bir dizine makine ismi ya da seri numarasına göre kaydetme işlemlerini de gerçekleştirilmesini sağlayabilirdik.

Yapmış olduğumuz çalışmayı makalemizde Lenovo cihazlar için gerçekleştirdik. Aynı şekilde Dell ya da HP istemcilerimiz var ise o cihazlarımız üzerinde de aynı çalışmayı gerçekleştirme imkanına sahibiz.

Exit mobile version