В этой статье автор хотел бы дать пару хороших советов по администрированию серверов на Windows, которые по какой-то причине не нашел в интернете.
Следуя этим принципам вы сильно обезопасите свои серверы под управлением Windows как в локальных средах, так и в публичных.
Не используйте пользователей с административными привилегиями для ввода компьютеров в Active Directory. Никто не гарантирует того, что на компьютере сотрудника уже не появился Keylogger. Имея же отдельную учетную запись. Злоумышленник похитивший учетные данные сможет только добавить в AD еще компьютеров.
Для этого нужно перейти в ADUC (Active directory users and Computers). Нажать на пустое место в папке Users and Computers и создать пользователя. Для простоты назовем его JoinAdmin.
После того, как пользователь был создан, ему нужно назначить полномочия. Для этого нужно нажать ПКМ по папке «Users» и выбрать «Delegate Control». Жмём «Далее» и выбираем нашего админа.
Мы хотим чтобы пользователь выполнять только одну функцию, поэтому выбираем второй вариант.
Далее выбираем «Computer objects» и все его подпункты.
Используйте этого юзера и не беспокойтесь о том, что кто-то мог украсть пароль от администратора.
В Windows Server 2019 появилась очень недооцененная возможность — controlled folder access. Она запрещает доступ к записи программам, которых нет в белом списке на выбранных папках или разделах.
Её включение поможет защитить данные от вирусов-шифровальщиков даже если ваш сервер был заражен. Однако это не обезопасит ваши данные от похищения, их можно будет прочитать.
Включить функцию можно в центре безопасности Windows или через Powershell:
Добавляем разрешенные программы:
Разрешенные программы можно добавить через центр безопасности Windows, а через Powershell нужно вводить полный путь до исполняемых файлов через запятую.
Добавляем защищенные папки:
Папки добавляются ровно так же, как и программы. К примеру этой командой мы добавляем диск C: целиком:
Все 32 битные программы работают на 64 битных через слой совместимости — SYSWOW64. Отключение этого компонента делает несовместимым все 32 битное ПО, в том числе и вирусы.
Сами по себе 32 битные приложения более уязвимые, 64-битные программы не поддаются атаке на переполнение буфера и через них гораздо труднее исполнить код который этими программами не предусмотрен. Если на сервере работают только встроенные компоненты или только 64 битные программы, обязательно удалите этот компонент.
А помните Wannacry, который гулял через SMB1? SMB первой версии до сих пор является стандартным компонентом Windows Server и установлен по умолчанию в каждой редакции.
Wannacry проникал через уязвимость EternalBlue, уязвимость пропатчили, но осадочек остался.
Эта команда удалить и SMB1 и SYSWOW64:
Воспринимать рекомендацию стоит не как повод для удаления этих конкретных компонентов, но как отключение всех неиспользуемых компонентов в целом.
По умолчанию компьютер под управлением Windows отвечает на ICMP только в локальной сети. Отключение ICMP немного повышает безопасность вашего сервера. Отчасти, это обусловлено тем, что на форумах кулхацкеров и других script kiddie существуют руководства, как нужно искать цели, которые можно брутфорсить.
Для того, чтобы показать что вы выиграете, если отключите ICMP, было создано два сервера. На обоих из них был открыт RDP, однако один из серверов не отвечал на ICMP.
ICMP отключен:
ICMP включен:
Как можно видеть из скриншота, это остановило не всех, но многих. Собрать данные о том, насколько сильно хотят взломать вас, можно этим скриптом:
Вы все еще сможете мониторить ваш сервер, к примеру, проверяя доступность определенного порта:
Используя еще один скрипт, вытащим наиболее популярные имена пользователей, которые подвергались атаке.
Если вы устанавливаете службы удаленных рабочих столов, настоятельно рекомендуем вам избегать этих имен. В сочетании со слабым паролем, можно гарантировать быстрый взлом учетной записи.
Для вашего удобства, список «плохих» имен был переписан в таблицу:
Получить такой же список на вашем сервере можно этим скриптом:
Ну а закончим мы статью очевидными вещами:
Надеемся, первые пять пунктов были для вас полезны и интересны.
Предлагаем обновлённый тариф UltraLite Windows VDS за 99 рублей с установленной Windows Server 2019 Core.
Следуя этим принципам вы сильно обезопасите свои серверы под управлением Windows как в локальных средах, так и в публичных.
1. Правильно вводим компьютер в AD
Не используйте пользователей с административными привилегиями для ввода компьютеров в Active Directory. Никто не гарантирует того, что на компьютере сотрудника уже не появился Keylogger. Имея же отдельную учетную запись. Злоумышленник похитивший учетные данные сможет только добавить в AD еще компьютеров.
1.1. Создаем нового пользователя
Для этого нужно перейти в ADUC (Active directory users and Computers). Нажать на пустое место в папке Users and Computers и создать пользователя. Для простоты назовем его JoinAdmin.
1.2. Делегируем полномочия
После того, как пользователь был создан, ему нужно назначить полномочия. Для этого нужно нажать ПКМ по папке «Users» и выбрать «Delegate Control». Жмём «Далее» и выбираем нашего админа.
Мы хотим чтобы пользователь выполнять только одну функцию, поэтому выбираем второй вариант.
Далее выбираем «Computer objects» и все его подпункты.
Используйте этого юзера и не беспокойтесь о том, что кто-то мог украсть пароль от администратора.
2. Controlled folder access
В Windows Server 2019 появилась очень недооцененная возможность — controlled folder access. Она запрещает доступ к записи программам, которых нет в белом списке на выбранных папках или разделах.
Её включение поможет защитить данные от вирусов-шифровальщиков даже если ваш сервер был заражен. Однако это не обезопасит ваши данные от похищения, их можно будет прочитать.
Включить функцию можно в центре безопасности Windows или через Powershell:
Set-MpPreference -EnableNetworkProtection Enabled
Добавляем разрешенные программы:
Разрешенные программы можно добавить через центр безопасности Windows, а через Powershell нужно вводить полный путь до исполняемых файлов через запятую.
Set-MpPreference -ControlledFolderAccessAllowedApplications "C:\Folder\File.exe"
Добавлять новые файлы в тот же самый список будет легче с помощью скрипта.
$ApplicationToAdd = "C:\Fodler\file.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 отключен:
ICMP включен:
Как можно видеть из скриншота, это остановило не всех, но многих. Собрать данные о том, насколько сильно хотят взломать вас, можно этим скриптом:
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. Очевидные вещи
Ну а закончим мы статью очевидными вещами:
- Создайте шлюз – Для управления большой инфраструктурой лучше всего обезопасить себя имея единую точку входа. Подробне.
- Устанавливайте обновления. В особенности, на боевые сервера.
- Отключите службы, которыми вы не пользуетесь – это лишняя площадь для атаки.
- Используйте Server Core, он имеет наименьшую площадь атаки и наименьшее количество перезагрузок при установке обновлений
- Сервер удаленных рабочих столов на несколько пользователей – плохая идея. Придерживайтесь принципа один человек или служба – один сервер.
- Делайте резервные копии и обязательно тестируйте их. Бэкап, который не был протестирован не является бэкапом.
Надеемся, первые пять пунктов были для вас полезны и интересны.
Предлагаем обновлённый тариф UltraLite Windows VDS за 99 рублей с установленной Windows Server 2019 Core.