Администратори често пишу лозинке директно у тело скрипте ПоСх када пишу скрипте за аутоматизацију у ПоверСхелл. Као што знате, ово је крајње небезбедно када се користи у продуктивном окружењу, јер други корисници сервера или администратори лозинку могу јасно видети. Због тога је препоручљиво користити сигурнији метод за коришћење лозинки у ПоверСхелл скриптама или за шифровање лозинки ако не можете да користите интерактивни унос.
Безбедно је тражити од корисника да интерактивно унесе лозинку у скрипту користећи цмдлет Набавите вјеродајнице. На пример, тражимо корисничко име и лозинку и чувамо га у објекту типа Псцредентиал:
$ Цред = Добивање поверљивости
Када приступате својствима променљиве, можете сазнати име корисника који је наведен.
$ Цред.Усернаме
Али када покушате да прикажете лозинку, текст Систем.Сецурити.СецуреСтринг биће враћен, јер лозинка је сада сачувана као СецуреСтринг.
$ Цред.Пассворд
ПСЦредентиал објект који смо спремили у $ Цред варијаблу сада се може користити у цмдлетима који подржавају ову врсту објекта.
Параметри $ Цред.Усернаме и $ Цред.Пассворд могу се користити у цмдлет-овима који не подржавају ПСЦредентиал објекте, али захтевају одвојено корисничко име и лозинку.
Такође можете користити цмдлет Реад-Хост са атрибутом АсСецуреСтринг да затражите корисничку лозинку:$ пасс = Прочитајте-домаћин "Унесите лозинку" -АсСецуреСтринг
У том случају такође нећете моћи да видите садржај променљиве $ пасс у коме је лозинка смештена.
У горњим методама коришћења лозинке у скрипту ПоверСхелл-а претпостављало се да је лозинка унесена интерактивно током извођења скрипте. Али ова метода није погодна за разне сценарије који се покрећу аутоматски или преко планера.
У овом случају је повољније шифровати податке рачуна (име и лозинку) и сачувати их у шифрованом облику у текстуалну датотеку на диску или користити директно у скрипти.
Дакле, користећи цмдлет ЦонвертФром-СецуреСтринг Можете претворити лозинку из СецуреСтринг формата у шифрирани низ (шифровање се врши помоћу АПИ-ја за заштиту података Виндовс - ДПАПИ). Можете да прикажете шифровану лозинку на екрану или је сачувате у датотеку:
$ Цред.Пассворд | ЦонвертФром-СецуреСтринг | Сет-Цонтент ц: \ пс \ пассфиле.ткт
Да бисте користили шифровану лозинку из датотеке, морате да извршите обрнуту конверзију у Сецурестринг формат користећи цмдлет ЦонвертТо-СецуреСтринг:
$ усернаме = "цорп \ администратор"
$ пасс = Гет-Цонтент ц: \ пс \ пассфиле.ткт | ЦонвертТо-СецуреСтринг
$ цредс = Ново-Објецт -ТипеНаме Систем.Манагемент.Аутоматион.ПСЦредентиал -АргументЛист $ корисничко име, $ пасс
Дакле, у варијабли $ цредс добили смо ПСЦредентиал објект са корисничким акредитивима.
Међутим, ако покушате да копирате датотеку пассфиле.ткт на други рачунар или је користите под неким другим корисником (а не оним под којим је лозинка створена), видећете да је променљива $ цредс.пассворд празна и да не садржи лозинку. Чињеница је да се енкрипција помоћу ДПАПИ-ја изводи помоћу кључева сачуваних у корисничком профилу. Без ових кључева на другом рачунару не можете дешифровати датотеку лозинком.ЦонвертТо-СецуреСтринг: Кључ се не може користити у наведеном стању.
"Аргумент се не може обрадити јер је вриједност аргумента лозинке НУЛЛ.
Наведите не-НУЛЛ вриједност за аргумент лозинке. "
Стога, ако се скрипта покреће на другом (сервисном) налогу или на неком другом рачунару, морате користити другачији механизам за шифровање који је јединствен за ДПАПИ. Страни кључ за шифровање може се специфицирати помоћу параметара -Кључ или -СецуреКеи.
На пример, можете да користите ПоверСхелл за генерисање 256-битног АЕС кључа који можете да користите за дешифровање датотеке. Спремите кључ у текстуалну датотеку пассворд_аес.кеи.
$ АЕСКеи = Бајт новог објекта [] 32
[Сецурити.Цриптограпхи.РНГЦриптоСервицеПровидер] :: Креирај (). ГетБитес ($ АЕСКеи)
$ АЕСКеи | датотеку Ц: \ пс \ пассворд_аес.кеи
Сада можете сачувати лозинку у датотеку помоћу овог кључа:
$ Цред.Пассворд | ЦонвертФром-СецуреСтринг -Кеи (гет-цонтент Ц: \ пс \ пассворд_аес.кеи) | Сет-Цонтент ц: \ пс \ пассфиле.ткт
Тако смо добили две датотеке: датотеку са шифрованом лозинком (пассфиле.ткт) и датотеку са кључем за шифровање (пассворд_аес.кеи).
Можете их пребацити на други рачунар и покушати да добијете лозинку из датотеке из ПоверСхелл-а (кључну датотеку можете поставити у мрежни директориј)
$ пасс = Гет-Цонтент ц: \ пс \ пассфиле.ткт | ЦонвертТо-СецуреСтринг -Кеи (гет-цонтент \\ Сервер1 \ Схаре \ пассворд_аес.кеи)
$ пасс
Ако се не желите бавити засебном датотеком с АЕС типком, можете шивати шифрирани кључ директно у скрипту. У овом случају, уместо кључа у оба случаја, морате да користите
[Бајт []] $ тастер = (1 ... 16)
$ Цред.Пассворд | ЦонвертФром-СецуреСтринг -Кеи $ кеи | Сет-Цонтент ц: \ пс \ пассфиле.ткт
А за дешифровање:
[Бајт []] $ тастер = (1 ... 16)
$ пасс = Гет-Цонтент ц: \ пс \ пассфиле.ткт | ЦонвертТо-СецуреСтринг -Кеи $ тастер
Као што видите, лозинка није празна, што значи да је успешно дешифрована и да се може користити на другим рачунарима.
Савет. Потребно је ограничити приступ датотеци помоћу АЕС тастера тако да само корисник или рачун под којим се покреће скрипта имају приступ њој. Пажљиво проверите дозволе НТФС-а на датотеци пассворд_аес.кеи када га ставите у мрежни директориј.И коначно, најтужнији тренутак. Лозинка из објекта ПСЦредентиал у прозору се извлачи врло једноставно:
$ Цред.ГетНетворкЦредентиал (). Лозинка
Можете да извучете лозинку у текстуалном облику из СецуреСтринг:
$ БСТР = [Систем.Рунтиме.ИнтеропСервицес.Марсхал] :: СецуреСтрингТоБСТР ($ пасс)
[Систем.Рунтиме.ИнтеропСервицес.Марсхал] :: ПтрТоСтрингАуто ($ БСТР)
Као што разумете, зато је непожељно чување лозинки за привилеговане налоге, као што су Домаин Админс, било где осим ДЦ-а.
Савет. Да бисте заштитили административне записе од вађења лозинки из меморије помоћу услужних програма попут Мимикатз, требате користити свеобухватне мере, укључујући организациони план.