Делаем Windows Server безопаснее

в 10:13, , рубрики: windows, безопасность, Блог компании UltraVDS, информационная безопасность, Серверное администрирование, системное администрирование

В этой статье автор хотел бы дать пару хороших советов по администрированию серверов на Windows, которые по какой-то причине не нашел в интернете.

Следуя этим принципам вы сильно обезопасите свои серверы под управлением Windows как в локальных средах, так и в публичных.

Делаем Windows Server безопаснее - 1

1. Правильно вводим компьютер в AD

Не используйте пользователей с административными привилегиями для ввода компьютеров в Active Directory. Никто не гарантирует того, что на компьютере сотрудника уже не появился Keylogger. Имея же отдельную учетную запись. Злоумышленник похитивший учетные данные сможет только добавить в AD еще компьютеров.

1.1. Создаем нового пользователя

Для этого нужно перейти в ADUC (Active directory users and Computers). Нажать на пустое место в папке Users and Computers и создать пользователя. Для простоты назовем его JoinAdmin.

1.2. Делегируем полномочия

После того, как пользователь был создан, ему нужно назначить полномочия. Для этого нужно нажать ПКМ по папке «Users» и выбрать «Delegate Control». Жмём «Далее» и выбираем нашего админа.

Делаем Windows Server безопаснее - 2

Мы хотим чтобы пользователь выполнять только одну функцию, поэтому выбираем второй вариант.

Делаем Windows Server безопаснее - 3

Далее выбираем «Computer objects» и все его подпункты.

Делаем Windows Server безопаснее - 4

Делаем Windows Server безопаснее - 5

Используйте этого юзера и не беспокойтесь о том, что кто-то мог украсть пароль от администратора.

2. Controlled folder access

В Windows Server 2019 появилась очень недооцененная возможность — controlled folder access. Она запрещает доступ к записи программам, которых нет в белом списке на выбранных папках или разделах. 

Её включение поможет защитить данные от вирусов-шифровальщиков даже если ваш сервер был заражен. Однако это не обезопасит ваши данные от похищения, их можно будет прочитать.

Включить функцию можно в центре безопасности Windows или через Powershell:

Set-MpPreference -EnableNetworkProtection Enabled

Добавляем разрешенные программы:

Разрешенные программы можно добавить через центр безопасности Windows, а через Powershell нужно вводить полный путь до исполняемых файлов через запятую.

Set-MpPreference -ControlledFolderAccessAllowedApplications "C:FolderFile.exe"

Добавлять новые файлы в тот же самый список будет легче с помощью скрипта.

$ApplicationToAdd = "C:Fodlerfile.exe"
 
$ExistingApplicationList = (Get-MpPreference).ControlledFolderAccessAllowedApplications
 
$FullList = $ApplicationToAdd + $ExistingApplicationList 
 
Set-MpPreference -ControlledFolderAccessAllowedApplications $FullList

Добавляем защищенные папки:

Папки добавляются ровно так же, как и программы. К примеру этой командой мы добавляем диск C: целиком:

Set-MpPreference -ControlledFolderAccessProtectedFolders "C:"

3. SYSWOW64 и SMB

Все 32 битные программы работают на 64 битных через слой совместимости — SYSWOW64. Отключение этого компонента делает несовместимым все 32 битное ПО, в том числе и вирусы.

Сами по себе 32 битные приложения более уязвимые, 64-битные программы не поддаются атаке на переполнение буфера и через них гораздо труднее исполнить код который этими программами не предусмотрен. Если на сервере работают только встроенные компоненты или только 64 битные программы, обязательно удалите этот компонент.

А помните Wannacry, который гулял через SMB1? SMB первой версии до сих пор является стандартным компонентом Windows Server и установлен по умолчанию в каждой редакции.
Wannacry проникал через уязвимость EternalBlue, уязвимость пропатчили, но осадочек остался.
Эта команда удалить и SMB1 и SYSWOW64:

Remove-WindowsFeature WoW64-Support, FS-SMB1

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

4. Отключите ping

По умолчанию компьютер под управлением Windows отвечает на ICMP только в локальной сети. Отключение ICMP немного повышает безопасность вашего сервера. От части, это обусловлено тем, что на форумах кулхацкеров и других script kiddie существуют руководства, как нужно искать цели, которые можно брутфорсить.

Для того, чтобы показать что вы выиграете, если отключите ICMP, было создано два сервера. На обоих из них был открыт RDP, однако один из серверов не отвечал на ICMP.

ICMP отключен:

Делаем Windows Server безопаснее - 6

ICMP включен:

Делаем Windows Server безопаснее - 7

Как можно видеть из скриншота, это остановило не всех, но многих. Собрать данные о том, насколько сильно хотят взломать вас, можно этим скриптом:
 

function Get-Bruteforce {
 
    $Last = 4
    $Attempts = 10
 
    #Getting date -one hour (default)
    $DateTime = [DateTime]::Now.AddHours(-$Last)
 
    $BruteEvents = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DateTime -ErrorAction SilentlyContinue | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
    $TopPunks = $BruteEvents | Group-Object -property IpAddress | Sort-Object Count
 
    #Get bruteforsers that tried to login greated or equal than 4 times (default)
    $GetPunks = $TopPunks | where {$_.Count -ge $attempts} | Select -property Name
 
    Write-host Unique attackers IP: $GetPunks.Length -ForegroundColor Green
    Write-Host Total bruteforce attempts: $BruteEvents.Length -ForegroundColor Green
 
    #Output-punks
    foreach ($i in $TopPunks | where {$_.Count -ge $attempts}) {
 
    $PunkRdns = (Resolve-DnsName $i.Name -ErrorVariable ProcessError -ErrorAction SilentlyContinue).NameHost 
 
    if ($ShowRDNS) {
        if ($PunkRdns) {
            Write-Host "attempts": $i.count IP: $PunkRdns
        }
        else {
            Write-Host "attempts": $i.count IP: $i.name
        }
    }
    else {
 
        Write-Host "attempts": $i.count IP: $i.name
 
    }
 
    }
   
}
Get-Bruteforce

Вы все еще сможете мониторить ваш сервер, к примеру, проверяя доступность определенного порта:

Test-NetConnection 192.168.0.1 -Port 3389

5. Не все имена одинаково хороши

Используя еще один скрипт, вытащим наиболее популярные имена пользователей, которые подвергались атаке. 

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

Для вашего удобства, список «плохих» имен был переписан в таблицу:

Попыток взлома Имя учетной записи
40 ИРИНА
41 HOME
42 SKLAD
42 sqlserver
42 SYS
42 KASSA2
43 ADMIN1
43 ПК
45 ГОСТЬ
46 Host
46 Audit
49 USER3
54 TEST1
55 BUH2
66 ПОЛЬЗОВАТЕЛЬ
66 MANAGER
75 ADM
77 .NET.v.4.5
80 BUH1
86 BACKUP
89 BUH
90 АДМИН
100 1
116 SERVER
122 User2
128 ÀنىÈيÈًٌٍÀٍÎً
147 TEST
219 USER1
308 USER
330 ADMIN
9299 ADMINISTRATOR
13972 АДМИНИСТРАТОР

Получить такой же список на вашем сервере можно этим скриптом:

function Get-Badname {
 
    $Last = 24
    $Attempts = 40
 
   
    $DateTime = [DateTime]::Now.AddHours(-$Last)
 
    $BruteEvents = Get-EventLog -LogName 'Security' -InstanceId 4625 -After $DateTime -ErrorAction SilentlyContinue | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[5]} }
    $TopPunks = $BruteEvents | Group-Object -property IpAddress | Sort-Object Count
 
   
    $GetPunks = $TopPunks | where {$_.Count -ge $attempts} | Select -property Name
 
    Write-host Unique attackers IP: $GetPunks.Length -ForegroundColor Green
    Write-Host Total bruteforce attempts: $BruteEvents.Length -ForegroundColor Green
 
    #Output
    foreach ($i in $TopPunks | where {$_.Count -ge $attempts}) {
 
        Write-Host "Attempts": $i.count Username: $i.name
 
    }
   
}
Get-Badname

6. Очевидные вещи

Ну а закончим мы статью очевидными вещами:

  1. Создайте шлюз – Для управления большой инфраструктурой лучше всего обезопасить себя имея единую точку входа. Подробне.
  2. Устанавливайте обновления. В особенности, на боевые сервера.
  3. Отключите службы, которыми вы не пользуетесь – это лишняя площадь для атаки.
  4. Используйте Server Core, он имеет наименьшую площадь атаки и наименьшее количество перезагрузок при установке обновлений
  5. Сервер удаленных рабочих столов на несколько пользователей – плохая идея. Придерживайтесь принципа один человек или служба – один сервер.
  6. Делайте резервные копии и обязательно тестируйте их. Бэкап который не был протестирован не является бэкапом.

Надеемся, первые пять пунктов были для вас полезны и интересны.

Делаем Windows Server безопаснее - 8

Автор: ultra_vds

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js