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

Отключение неиспользуемых учетных записей в домене Active Directory

Неактивные более 45 дней учетные записи пользователей подлежат отключению.
Неактивные более 60 дней учетные записи компьютеров и серверов подлежат удалению.
Автоматический регулярный поиск неактивных учетных записей и уведомление ответственного за защитную меру осуществляет скрипт, запускаемый ежедневно.
Пример реализации  скрипта  в заметках к защитной мере

Инструкция

Началом для процесса является получение писем от скрипта аудита с заголовками:
  • Чистка AD: Users 
  • Чистка AD: Computers
Алгоритм обработки писем:
  1. Учетные записи пользователей отключаются и переносятся в юнит domain.local/Отключенные учетные записи/
  2. Учетные записи компьютеров удаляются или переносятся в юнит domain.local/Рабочие станции/Отключенные/
  3. В случае необходимости, неясности - проводятся консультации с Отделом ИТ или с владельцами отключаемой учетной записи
Классификация
Тип
Организационная ? Организационные (процедурные, административные) меры Это меры направленные на организацию деятельности пользователей. К организационным мерам относят так же выпуск документации – инструкций, регламентов, стандартов.
Техническая ? Технические (логические) меры Технологические решения и меры, реализуемые в организации для снижения вероятности реализации рисков безопасности и их воздействия на организацию. Внутри организации могут присутствовать брандмауэры, системы обнаружения вторжений, системы предотвращения утечки данных, решения по управлению конфигурациями, антивирусы, системы контроля доступа к сети и многие другие технические средства обеспечения безопасности.
Корректирующая ? Корректирующие меры Эти меры направлены на возвращение системы в нормальное состояние после инцидента безопасности. Примеры: Восстановление операционной системы или данных из резервной копии; Обновление устаревшего антивируса; Установка патчей.
Компенсирующая ? Компенсирующие меры Обеспечивают альтернативные варианты защиты, когда иные меры либо невозможно, либо слишком дорого реализовать.
Реализация
Вручную
Периодичность
По событию
Ответственный
Не определено
Инструменты
Не определено
Предшествующие меры
Не требуется
Следующие меры
Не определено

Исполнение требований

Приказ ФСТЭК России № 239 от 25.12.2017 "Состав мер по обеспечению безопасности для значимого объекта соответствующей категории значимости":
Приказ ФСТЭК России № 31 от 14.03.2014 "Состав мер защиты информации и их базовые наборы для соответствующего класса защищенности автоматизированной системы управления":

Комментарии 1

4 месяца назад

Скрипт аудита AD

Скрипт PowerShell настраивается через планировщик задач на ежедневный запуск. Проверяет наличие несоответствий в AD и уведомляет подразделение ИБ по электронной почте. 
# импортируем список серверов из Active Directory (для этого в powershell должен быть дополнительно установлен модуль RSAT)
import-module activedirectory
$computers = Get-ADComputer -SearchBase "DC=domain,DC=local" -Filter * -Properties CanonicalName, whenCreated, whenChanged, Description, LastLogonDate, LastBadPasswordAttempt, IPv4Address, CanonicalName
$users = Get-ADUser  -SearchBase "DC=domain,DC=local" -Filter * -Properties SamAccountName, 
        Name, Company, Department, Description, Office, telephoneNumber, whenCreated, whenChanged, LastLogonDate, 
        LastBadPasswordAttempt, CanonicalName, pwdLastSet, AllowReversiblePasswordEncryption

# Чистка AD: Computers
$exceptions = "PC1","PC2"
$oldDate = (Get-Date).AddDays(-45)
[array]$oldPc = $null
foreach ($comp in $computers)
{
    if($exceptions -ccontains $comp.Name) # Исключения по имени ПК
    {
        Write-Output "Exception: $($comp.Name)"
        continue
    }
     if($comp.DistinguishedName -Match "CN=VDI") # Исключения по юниту AD
    {
        Write-Output "Exception: $($comp.DistinguishedName)"
        continue
    }
    if ($comp.LastLogonDate -lt "$oldDate" -and
	    $comp.Enabled -eq "True")
    {
        $oldPc += $comp
    }
}
if($oldPc.Count -gt 0)
{
    $message = New-Object System.Net.Mail.MailMessage
    $message.From = "AD Cleaner <infosecurity@company.com>"
    $message.To.Add( "infosecurity@company.ru")
    $message.Subject = "Чистка AD: Computers ($($oldPc.Count))"
    $message.IsBodyHTML = $true
    $message.Body = "Добрый день,<br/> Прошу проанализировать и удалить из Active Directory учетные записи компьютеров <b>не подключавшихся более 45 дней </b><br/>Если для обработки объектов из списка требуется подключение других сотрудников Отдела ИТ - необходимо переслать им это письмо с соответствующим запросом<br/>"
    foreach($pc in $oldPc |  Sort-Object -Property CanonicalName)
    {
        $message.Body += "<p><b>$($pc.name)</b><br/>$($pc.CanonicalName)<br/>LastLogon: $(get-date $pc.LastLogonDate -Format 'dd.MM.yyyy') whenCreated: $(get-date $pc.whenCreated -Format 'dd.MM.yyyy')<br/>IP: $($pc.IPv4Address)</p>"
    }
    $message.Body += "__________ <br/>С уважением, <br/>Скрипт автоматической рассылки AD Cleaner"
    $smtp = New-Object Net.Mail.SmtpClient("mail.company.com")
    $smtp.Credentials = $null
    $smtp.Send($message)
}


# Чистка AD: Users
$exceptions = "user1", "user2"
$oldDate = (Get-Date).AddDays(-45)
[array]$oldUsers = $null
[array]$EnabledUsers = $null
$AllowRevPwd = @()
foreach ($user in $users | Sort-Object -Property CanonicalName)
{
    if($exceptions -ccontains $user.SamAccountName) # Исключения по имени пользователя
    {
        Write-Output "Exception: $($user.CanonicalName)"
        continue
    }
    if(($user.CanonicalName -Match '/System users/') # Исключения по имени юнита
    {
       Write-Output "Exception: $($user.CanonicalName)"
       continue
    }

    if (($user.LastLogonDate -lt "$oldDate") -and 
        ($user.whenCreated -lt "$oldDate") -and 
        ($user.Enabled -eq "True") -and
        ($user.CanonicalName -Match 'domain.local/Users/'))
    {
        $oldUsers += $user
    }
    if (($user.Enabled -eq $true)  -and 
        ($user.CanonicalName -Match 'domain.local/Отключенные учетные записи/'))
    {
        $EnabledUsers += $user
    }

    if ($user.AllowReversiblePasswordEncryption) {$AllowRevPwd += $user}
}

if(($oldUsers.Count -gt 0) -or ($EnabledUsers.Count -gt 0) -or $AllowRevPwd)
{
    $message = New-Object System.Net.Mail.MailMessage
    $message.From = "AD Cleaner <infosecurity@company.com>"
    $message.To.Add( "infosecurity@company.com")
    $message.Subject = "Чистка AD: Users ($($oldUsers.count + $EnabledUsers.Count + $AllowRevPwd.Count))"
    $message.IsBodyHTML = $true
    $message.Body = "Добрый день,<br/>"
    if($oldUsers.Count -gt 0)
    {
        $message.Body += "Прошу проанализировать учетные записи пользователей Active Directory не подключавшихся более <b>45</b> дней (кол-во:<b>$($oldusers.Count)</b>)
                        <br/>Учетные записи следует отключить и перенести в юнит <i>Отключенные учетные записи</i> <br/>"
        foreach($user in $oldUsers |  Sort-Object -Property CanonicalName)
        {
            $message.Body += "<p><b>$($user.name) ($($user.SamAccountName))</b><br/>$($user.CanonicalName)<br/><small>LastLogon:</small> $(if($user.LastLogonDate){get-date $user.LastLogonDate -Format 'dd.MM.yyyy'}) | <small>whenCreated: </small>$(if($user.whenCreated){get-date $user.whenCreated -Format 'dd.MM.yyyy'})</p>"
        }
    }
    if($EnabledUsers.Count -gt 0)
    {
        $message.Body += "Прошу проанализировать <b>включенные</b> учетные записи пользователей Active Directory находящиеся в юните <b>domain.local/Отключенные учетные записи/</b> (кол-во:<b>$($EnabledUsers.Count)</b>)
                        <br/>Учетные записи следует отключить или перенести в соответствующий юнит подразделения<br/>"
        foreach($user in $EnabledUsers)
        {
            $message.Body += "<p><b>$($user.name) ($($user.SamAccountName))</b><br/>$($user.CanonicalName)<br/><small>LastLogon:</small> $(if($user.LastLogonDate){get-date $user.LastLogonDate -Format 'dd.MM.yyyy'}) | <small>whenCreated: </small>$(if($user.whenCreated){get-date $user.whenCreated -Format 'dd.MM.yyyy'})</p>"
        }
    }

    $message.Body += "<br/>Если для обработки объектов из списка требуется подключение других сотрудников Отдела ИТ - необходимо переслать им это письмо с соответствующим запросом
                        <br/>__________ <br/>С уважением, <br/>Скрипт автоматической рассылки AD Cleaner"
    $smtp = New-Object Net.Mail.SmtpClient("mail.company.com")
    $smtp.Credentials = $null
    $smtp.Send($message)
}

Пример уведомления:
Добрый день,
 Прошу проанализировать учетные записи пользователей Active Directory не подключавшихся более 45 дней (кол-во:1)
Учетные записи следует отключить и перенести в юнит Отключенные учетные записи
Иванов Иван Иванович (i_ivanov)
domain.local/Users/Отдел продаж/Иванов Иван Иванович
LastLogon: 10.03.2021 | whenCreated: 24.06.2020

Если для обработки объектов из списка требуется подключение других сотрудников Отдела ИТ - необходимо переслать им это письмо с соответствующим запросом 
__________ 
С уважением, 
Скрипт автоматической рассылки AD Cleaner