Задачей было вывести список сотрудников, которым разрешен доступ к USB и DVD, но на компьютерах которых(у юзера может быть >1 компьютера в использовании) не установлен DeviceLock.
Владислав Дридгер
Добрый день, коллеги!
Меня зовут Влад, работаю специалистом по ИБ в организации с 3к+ сотрудников.
Пишу максимально подробно, что и как делаю, чтобы максимально избежать недопониманий.
В данном случае задачей было вывести список сотрудников, которым разрешен доступ к USB и DVD, но на компьютерах которых(у юзера может быть >1 компьютера в использовании) не установлен DeviceLock по некоторым причинам (в нашем случае, организация закупила недостаточное количество лицензий DeviceLock DLP).
#excel
$Excel = New-Object -Com Excel.Application
$Excel.visible = $True
$Excel = $Excel.Workbooks.Add()
#определяем параметры листа (заголовок)
$Sheet = $Excel.WorkSheets.Item(1)
$Sheet.Cells.Item(1,1) = “Имя пользователя”
$Sheet.Cells.Item(1,2) = “Описание ПК”
$Sheet.Cells.Item(1,3) = “Имя ПК”
$Sheet.Cells.Item(1,4) = "Отдел"
#определяем цвета (опционально)
$WorkBook = $Sheet.UsedRange
$WorkBook.Interior.ColorIndex = 8
$WorkBook.Font.ColorIndex = 11
$WorkBook.Font.Bold = $True
#переходим на вторую строку листа
$intRow = 2
#скрипты для вывода интересующих нас Properties с фильтрами where-object
$userObjs= (Get-ADUser -Filter * -Properties memberof, enabled, displayname,emailaddress, Department | Where-Object {$_.memberof -match "nt-DeviceLock-Enable" -and $_.Enabled -like "true" })
$TRcomps = (Get-ADComputer -filter * -Properties Description, name,memberof | Where-Object {-not ($_.memberof -match "nt-DeviceLock-Computers")})
#для каждого значения результата применяем следующее условие:
foreach ($userObj in $userObjs)
{
foreach ($TRcomp in $TRcomps)
{
$userObjDisplayName = $userObj.DisplayName
#сравниваем "описание" из OU для компьютеров со значением ДисплейНейм из OU для юзеров
if ($TRcomp.Description -like "*$userObjDisplayName*")
{
$Sheet.Cells.Item($intRow+$i,1) = $userObj.DisplayName
$Sheet.Cells.Item($intRow+$i,2) = $TRcomp.Description
$Sheet.Cells.Item($intRow+$i,3) = $TRcomp.Name
$Sheet.Cells.Item($intRow+$i,4) = $userObj.Department
$intRow ++
}
}
}
# автоширина листа Excel после окончания вывода информации
$WorkBook.EntireColumn.AutoFit()
Для облегчения работы с Active Directory подготовил скрипт Powershell, который позволит нам сравнивать значения пользователей и компьютеров для вывода нужной нам информации.
Загвоздка задачи заключается в том, что в AD у компьютера и его владельца практически нет ничего общего для сравнения, за исключением, самого пользователя.
Попробовал другим способом: через Powershell выбрал определенного пользователя, определенную машину, и посмотрел, в каких значениях Properties *, они имеют что-либо общее.
Далее начинаем фильтровать, пользователей:
Командой get-ADuser мы получаем список пользователя, нужные нам значения для работы и устанавливаем на них нужны нам фильтры.
Get-ADUser -Filter * -Properties memberof, enabled, displayname,emailaddress, Department | Where-Object {$_.memberof -match "nt-DeviceLock-Enable" -and $_.Enabled -like "true" }
В данном случае мы вывели список пользователей, который состоят в группе nt-DeviceLock-Enable, и учётные записи которых активированы. Значения(Properties) были выбраны следующие: 1.memberOf(значение, в каких пользователях состоит юзер),
2.enabled(активирована ли УЗ),
3. displayname(самое важное!, о нём позже) ,
4. emailaddress (доп. информация о пользователях)
5. department(доп. информация о пользователях)
Далее мы вывели и отфильтровали компьютеры.
Командой get-ADComputer мы выводим список компьютеров, соответственно, нужные значения(properties), которые будут использованы, и соответственно, фильтры для них.
Get-ADComputer -filter * -Properties Description, name,memberof | Where-Object {-not ($_.memberof -match "nt-DeviceLock-Computers")}
Данной командой мы вывели список компьютеров, которые НЕ состоят в группе nt-DeviceLock-Computers. Прошу заметить, что группы компьютеров и пользователей ОТЛИЧАЮТСЯ и НЕ ПЕРЕСЕКАЮТСЯ… пока)
Ранее я определил, что из общего у них-только ФИО владельца.
Но в каких оно значениях употребляется?
Если посмотреть в properties у компьютеров, то ФИО владельца( в нашем случае) используется ТОЛЬКО в description (и то, под предлогом log on тогда-то*дата* и кто-то*ФИО* в одной строке)
Если посмотреть в properties у пользователей, то ФИО(И Фамилия, И Имя, И Отчество) используется в значении( в нашем, опять же, случае) DisplayName.
Далее мы задаем параметр foreach, чтобы обратиться к каждому выводимому объекту.
foreach ($userObj in $userObjs)
{
foreach ($TRcomp in $TRcomps)
{
$userObjDisplayName = $userObj.DisplayName
if ($TRcomp.Description -like "*$userObjDisplayName*")
Далее сравниваем значения Description у компьютеров и Displayname у Юзеров с выводом в столбцы Excel документа
if ($TRcomp.Description -like "*$userObjDisplayName*")
{
$Sheet.Cells.Item($intRow+$i,1) = $userObj.DisplayName
$Sheet.Cells.Item($intRow+$i,2) = $TRcomp.Description
$Sheet.Cells.Item($intRow+$i,3) = $TRcomp.Name
$Sheet.Cells.Item($intRow+$i,4) = $userObj.Department
$intRow ++
}
В результате мы вывели список из сотрудников, описания ПК, имя компьютера и отдел в документ excel.
Портал по информационной безопасности SecurityLab.ru проводит конкурс статей. Всех участников конкурса ждут ценные призы и подарки от компаний Лаборатория Касперского, Учебный центр «Информзащита», Keenetic, Positive Technologies, Инфосистемы Джет, Cybersecurity Help, HideMy.name а победителю конкурса будет вручен главный приз от компании Palo Alto Networks.
Разбираем кейсы, делимся опытом, учимся на чужих ошибках