Главная Security, Windows, Новое Хранение учетных данных в скриптах и групповых политиках на примере задачи по смене пароля локального администратора
  • Хранение учетных данных в скриптах и групповых политиках на примере задачи по смене пароля локального администратора

    Введение

    clip_image001С точки зрения безопасности пароль локального администратора должен соответствовать следующим требованиям:

    · быть известным только ограниченному кругу лиц;

    · обладать достаточной сложностью;

    · регулярно изменяться.

    В связи с этим периодически возникает задача централизованной передачи учетных данных на рабочие станции пользователей. Решать данную задачу в домене Active Directory можно как минимум несколькими способами:

    1) при помощи стартап-скриптов;

    2) используя предпочтения групповых политик;

    3) запуском скрипта на выделенном компьютере.

    Наиболее традиционным способом автоматизации решений подобного рода является использование скриптов. Однако, хранение пароля в открытом виде не очень хорошо с точки зрения безопасности. В этом случае одним из вариантов защиты является кодирование скрипта. К сожалению, этот способ нельзя назвать на 100% безопасным, т.к. закодированные скрипты достаточно легко декодируются в исходное состояние. Об этом и пойдет речь в первом разделе статьи. Во второй части описаны альтернативные способы централизованной смены пароля локального администратора.

    Стартап-скрипты

    Стартап-скриптов зачастую используется для автоматизированного выполнения задач, требующих административных привилегий, на компьютерах пользователей. Допустим, что перед нами стоит задача привести к единому стандарту пароль локального администратора на части компьютеров домена.

    Для решения применим скрипт, позаимствованный с блога «Hey, Scripting Guy!», и немного отредактируем его. В итоге получится что-то вроде:

    strComputer = «.»

    Set objUser = GetObject («WinNT://» & strComputer & «/Administrator,user»)

    objUser.SetPassword «12345-as» '

    objUser.SetInfo

    Сам скрипт не идеален. Например, в него можно добавить:

    1) привязку к SID встроенного администратора (это необходимо если учётная запись была переименована);

    2) логирование в журнале событий системы;

    3) отправку оповещений об ошибках выполнения по электронной почте.

    Однако скрипт нужен нам лишь в качестве примера, поэтому нет смысла усложнять его структуру.

    Теперь для автоматического изменения пароля администратора нам необходимо:

    1) создать групповую политику;

    2) добавить туда наш скрипт в качестве стартап-скрипта (более подробно об этом написано в KB198642);

    3) прикрепить групповую политику к контейнеру с компьютерами, на которых должен изменяться пароль.

    При этом следует учитывать, что доступ к этому скрипту будет у любого аутентифицированного пользователя. Как следствие, любой пользователь домена при желании и минимуме технических знаний сможет узнать пароль локального администратора. Причем не только для своей рабочей станции, но и для всех остальных. Это не очень хорошо с точки зрения безопасности.

    Кодирование

    Для решения данной проблемы мы можем воспользоваться утилитой Script Encoder от компании Microsoft. Эта утилита позволяет преобразовать vbs-скрипт в формат vbe. В результате, тело скрипта хранится в закодированном виде и это никак не сказывается на возможности его исполнения. Рассмотрим это более подробно на нашем примере:

    1) Скачиваем установочный файл с сайта Microsoft.

    2) Распаковываем его.

    3) В результате получаем несколько файлов. Один из них — нужная нам утилита screnc.exe. Синтаксис использования следующий:

    SRCENC [switches] inputfile outputfile.

    Здесь inputfile – исходный vbs-скрипт, outputfile – его зашифрованный аналог, [switches] – необязательные параметры, которые нам не понадобятся.

    4) В итоге тело скрипта будет иметь вид:

    «#@~^mQAAAA==dDD/K:aEYD,xPrRE@#@&?nO,W4Ni/DP{~!+Dr (LnmOcrrxgP) JzE~LP/O.;Whw!OD~LPrzb9:bUkkY.lDW.S!/+ME#@#@&W (%i/Dc?nYKCk/AWM[PrF+fW*OCdrPv@#@&G (Lik+MR?Y&U0K@#@&Ly4AAA==^#~@»

    Полученный vbe-файл можно использовать в качестве стартап-скрипта и он, также как и исходный скрипт, будет менять пароль локального администратора.

    Декодирование

    Казалось бы теперь учетные данные защищены и системный администратора может спать спокойно. Однако существуют vbs-скрипты, с помощью которых можно легко раскодировать зашифрованный вариант. Пример такого скрипта можно получить по следующему адресу: http://www.interclasse.com/scripts/decovbe.php.

    Для его использования, скопируем код в файл decode.vbs и запустим его из командной строки. В качестве аргумента будет путь и имя закодированного vbe-файла:

    decode.vbs output.vbe

    В результате выполнения должно появиться окно, содержащее текст исходного vbs-скрипта. Как следствие учетные данные администратора опять могут стать известны потенциальному злоумышленнику.

    Альтернативные варианты

    Рассмотрим альтернативные способы решения задачи передачи учетных данных на рабочие станции. К таковым можно отнести:

    1) Group Policy Preferences;

    2) централизованное изменение пароля со стороны сервера;

    3) усложнение структуры скрипта и ограничение доступа к нему.

    Group Policy Preferences (GPP)

    Предпочтения групповых политик это своего рода замена скриптам в групповых политиках. Данная технология активно рекламируется Microsoft и действительно значительно упрощает работу системного администратора. Изменение пароля локального администратора при помощи GPP довольно подробно описано в статье: «Change local administrator passwords with Group Policy Preferences». Ключевая мысль этой статьи: «Не рекомендуется изменять пароли локального администратора и сервисных учетных записей при помощи GPP». Связано это с тем, что ни смотря на то, что пароль администратора хранится в зашифрованном виде, для его получения достаточно 256bit AES ключа находящегося на рабочей станции. Таким образом, этот способ также не является безопасным.

    Централизованное изменение пароля

    Еще одним вариантом изменения пароля является выполнение скрипта не на рабочей станции, а непосредственно на сервере. Пример скрипта для осуществления этого можно найти в статье:

    «How Can I Change a User’s Password?». Предложенный там скрипт:

    Set objOU = GetObject («LDAP://OU=Finance, DC=fabrikam, DC=com»)

    objOU.Filter = Array («Computer»)

    For Each objItem in objOU

    strComputer = objItem.CN

    Set objUser = GetObject («WinNT://» & strComputer & «/Administrator»)

    objUser.SetPassword («i5A2sj*!»)

    Next

    берет информацию о компьютерах из контейнера Active Directory и поочередно подключаясь к каждому из них меняет пароль администратора. Из минусов такого варианта можно отметить:

    · необходимость удаленного подключения к компьютерам (а они не всегда могут быть доступны);

    · организацию автоматического запуска скрипта по расписанию.

    Усложнение структуры скрипта

    Достаточно много вариантов с применением скриптов изложено в обсуждение «Смена пароля локального администратора» на форумах Microsoft Technet. Особенно интересен вариант с веб-сервером. При его использовании компьютер во время загрузке обращается к серверу, на котором выполняется скрипт по изменению пароля локального администратора. Таким образом этот способ удачно сочетает в себе двух других вариантов, основанных на использовании startup-скриптов и централизованной смены пароля.

    Заключение

    В статье предложены различные способы централизованной автоматической смены пароля локального администратора на рабочих станциях домена Active Directory. Для каждого рассмотрена возможность получения учетных данных потенциальным злоумышленником. В конце статье предложен наиболее безопасный, с точки зрения автора, алгоритм.

    Ссылки:

    · Script Encoder;

    · Passwords in Group Policy Preferences;

    · Change local administrator passwords with Group Policy Preferences;

    · How Can I Change a User’s Password? ;

    · Форумы Technet: Смена пароля локального администратора.

Комментарии

  1. >В связи с этим периодически возникает задача централизованной передачи учетных данных на рабочие станции пользователей.

    На этой фразе сломал мозг. Что за передача и зачем она нужна?

  2. Пароль администратора должен регулярно изменяться. Следовательно необходимо регулярно передавать на рабочие станции новый пароль. 🙂

  3. Что есть передача пароля админа на рабочую станцию?

  4. Это часть процесса по изменению пароля, отвечающая за то каким именно образом данный пароль попадет на рабочую станцию.

    Вообще передача учетных данных необязательно связана с изменением пароля. Например, может возникнуть необходимость создания на рабочих станциях задания, выполняемого от имени пользователя. И для автоматизации этого процесса также нужно будет передавать учетные данные на рабочие станции (и соблюдать при этом требования безопасности).

  5. Вот последний абзац дал прояснение.

  6. я делал иначе.

    Excel это мега инструмент администратора:

    — выгружаем список компов в одну колонку

    — заполняем вторую колонку паролями (или паролем)

    — пишем VBA код вроде такого:

    Private Sub CommandButton1_Click ()

    intRow = 2

    Do

    If Cells (intRow, 1).Value = "" Then

    Exit Do

    End If

    strComputer = Cells (intRow, 1).Value

    On Error Resume Next

    Set objUser = GetObject («WinNT://» & strComputer & «/Administrator,User»)

    If Err.Number 0 Then

    Cells (intRow, 3).Value = «No»

    Cells (intRow, 4).Value = Err.Description

    intRow = intRow + 1

    End If

    strNewPassword = Cells (intRow, 2).Value

    objUser.SetPassword strNewPassword

    objUser.SetInfo

    If Err.Number 0 Then

    Cells (intRow, 3).Value = «No»

    Cells (intRow, 4).Value = Err.Description

    Err.Clear

    Else

    Cells (intRow, 3).Value = «Yes»

    Cells (intRow, 4).Value = ""

    End If

    intRow = intRow + 1

    Loop

    End Sub

    и получаем готовый sheet со статусами где сменился пароль и на какой. Пишем дату, распечатываем и в сейф.

  7. Тоже довольно удобный и безопасный вариант. Жаль, что для его использования требуется немного ручной работы (сформировать список, запустить скрипт во время когда компьютеры будут доступны).

  8. // При этом следует учитывать, что доступ к этому скрипту будет у любого аутентифицированного пользователя.

    Дим, зачем так пугаешь-то?.. 😉

  9. Я это про общий случай (без дополнительного выставления разрешений) 🙂 Но даже если и установить доступ только для доменных компьютеров, то думаю, что запуск командной строки от имени системы (хотя и требует административных прав) даст доступ к телу скрипта. 🙂

  10. Есть ещё программа XS BAP для удалённой смены пароля.

    www.avianwaves.com/Tech/Tools/XS_BAP/

  11. Разве скрипт, из StartUp в груповых политиках выполняется не с правами доменного администратора?

    Что нам мешает считывать скриптом пароль из файла в сети (на Logon сервере), права доступа к которому будет иметь только доменный пользователь?

    Есть еще один вариант смены пароля — когда скрипт исполняемый на компьютере пользователя самостоятельно генерирует

    случайный (псевдослучайный) пароль для каждого свой и пишет (дополняет) его в файлик в сети, который доступен только по записи (для дозаписи) и не доступен для чтения.

  12. Чуть выше про первый способ — читать «права доступ к которому (включая чтение) будет иметь только доменный администратор, от имени которого и выполняется скрипт»

    Или скрипты из груповых политик на компьютер выполняются из под System этого компьютера?

Опубликовать

Я не робот.