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

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

    Следуя этим принципам вы сильно обезопасите свои серверы под управлением 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. Очевидные вещи


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

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

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

    Предлагаем обновлённый тариф UltraLite Windows VDS за 99 рублей с установленной Windows Server 2019 Core.
    UltraVDS
    0,00
    Хостинг виртуальных серверов (VDS, VPS)
    Поделиться публикацией

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

      +16

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

        +1
        Согласен, я тоже не поддерживаю отключение ICMP. Ладно ещё на публично доступных интерфейсах, там это можно как-то оправдать. Ито я бы ещё дважды подумал, какие именно ICMP сообщения отключать, и возможно разрешил бы его для внутренних сетей типа 192.168.0.0/16 и т.д.

        А в локальной сети, где обычно находятся Windows-серверва — только усложните себе жизнь при сетевой диагностике, например.
          0
          Нам стоило оговориться, что отключать ICMP стоит именно в публичных сетях.
          В локальных, наверное, эта проблема совсем не стоит.
            +2
            Не имеет никакого смысла и в публичных сетях, т. к. не имеет смысла выставлять сервер с Windows напрямую в интернет, ну а нормальный firewall сумеет решить проблему со script kiddie.
            Если же мы говорим про VDS/VPS тогда больше смысла в том, чтобы хотя бы спрятать RDP на нестандартный порт не говоря уже о том чтобы за VPN, чем отключать ICMP.
              0
              Рекомендация дана на основе случаев с нашими клиентами. Часто офисы не имеют белых IP адресов, а бухгалтера на аутсорсе, у которых так же нет белых ip адресов, поэтому на серверах удаленных рабочих столов порт RDP открыт для всего интернета.
                0
                Если у сервера нет белого адреса, то как же к нему по RDP подключаются? Через NAT провайдера?
                И если RDP торчит открытым наружу, то почему рекомендуете закрыть ICMP вместо того, чтобы закрыть/защитить RDP? Для старых версий windows был 2x Secure RDP 4.0 — он затруднял перебор паролей. Возможно еще работает, на новых версиях windows не проверял.
                По своему опыту могу сказать от логирования в данном случае мало проку. Журнал безопасности быстро забивается запросами, размер ограничен, работает медленно. А бот задорно продолжает перебор в несколько потоков. И ничего с ним сделать нельзя если нет нормального фаевола и чего-то похожего на fail2ban. Но те у кого это есть уже наверняка позаботились об удаленном доступе через vpn.
                  0
                  Скорее всего имелось ввиду то, что ограничить доступ на сервер только с одного офиса невозможно из-за того, что у данного офиса отсутствует белый IP. Поэтому серверу приходится светиться на весь интернет.
                  0
                  офисам надо завести VPN хотя бы, бухгалтерам поставить OpenVPN клиент и авторизацию по сертификату.
                  безопасность надо строить по слоям модели TCP/IP:
                  1. RDP это уровень приложения
                  2. OpenVPN это безопасность на транспортном уровне.
                  3. Также если известны диапазоны серых ИП-адресов провайдеров, которые используются клиентами, то их тоже надо внести в правила на фаерволе — это будет безопасность на сетевом уровне. Лучше закрыть доступ на несколько обширных диапазонов, чем открывать себя на весь мир

                  пример с ICMP не понял если честно, никакого профита он не даст, т.к. никакой сервер не должен полностью смотреть в мир однозначно, только принцип наименьших привилегий.
                    0
                    Есть альтернатива, куда более простая и нативная для Win, однако, более дорогая — RD Gateway. Она как раз и призвана защитить RDP без довешивания VPN.
                    — 2FA Через Ажур или с прикрученным Duo или еще как (NPS)
                    — TLS
                      0
                      все равно не стоит полагаться на один софт для защиты, если в RD Gateway будет уязвимость или 0day — то вся защита посыпется.
                      А плюсы эшелонированной защиты по слоям, что уязвимость в одном слое не приведет к такой сильному падению безопасности — это лучшие практики безопасности которые все вендоры ИБ рекомендуют
                        +1
                        кстати вот буквально пару дней назад вышла новая уязвимость для RD Gateway (CVE-2020-0610) с рейтингом опасности 9.8 из 10. security.berkeley.edu/news/patch-immediately-microsoft-remote-desktop-gateway-remote-code-execution-vulnerability-cve-2020

                        Вот так и взламывают компании, которые надеются на одну тулзу и не строят эшелонированную безопасность на нескольких независимых уровнях
              –1
              Для ввода в домен достаточно обычной юзерской учетки, нужно только увеличивать число вводимых машин
                +3
                Про controlled folder access не знал — надо будет поковырять.
                А помните Wannacry, который гулял через SMB1? SMB первой версии до сих пор является стандартным компонентом Windows Server и установлен по умолчанию в каждой редакции. Обязательно удалите этот компонент, если он все еще установлен на вашем сервере.

                А вот тут я бы не стал такие радикальные заявления делать. Наверно, M$ неспроста его по умолчанию включает, а из соображений совместимости. Лично встречал легаси-системы, которые умели только по SMB1. Поэтому лучше вначале помониторить наличие SMB1-клиентов и, убедившись, что ничего бизнес-критичного на этих клиентах не завязано, отключать устаревший протокол.
                  0
                  Подпишусь. У нас, например есть критичные узлы на Windows Server 2003, для которого SMB1 — единственный вариант.
                  +1
                  Брутфорс RDP, это плохое оправдание отключения ICMP. Я использую шлюз удаленных рабочих столов, для подключения по RDP. Это решает проблему с перебором паролей по RDP. А пинги действительно самый простой способ мониторинга.
                  В статье, так же не видел рекомендации отключения SMB1. Хотя она много где включена и используется, особенно на старых компьютерах или насах. А раз в 4-5 лет, появляются критические уязвимости в этой службе, которые и приводят к массовым заражениям.
                  Controlled folder access это больше для пользовательских компьютеров, чем для серверов ИМХО, хотя на сервере терминалов может пригодится.
                    0
                    В статье, так же не видел рекомендации отключения SMB1.

                    3ий пункт статьи же.
                      0
                      Да, не досмотрел. Мой косяк :)
                      0
                      К слову, брокер терминальной фермы определяет доступность подконтрольных RDSH-нод с помощью пингов (кому интересно, детали описаны тут). И если неаккуратно запретить на RDSH-нодах пинги, можно положить всю инфраструктуру рабочих столов.
                      +1
                      Любой юзер в домене может ввести до 10 компьютеров в домен — добавленный в домен компьютер может быть компьютером атакующего, а когда твой компьютер в домене, то и стараться попасть в домен уже меньше надо.
                      Поэтому правильнее отключать эту возможность у всех юзеров и не заводить отдельного юзера для добавления компьютеров в домен. А завести группу с ролью добавления компьютеров и включать в неё пользователя только тогда, когда надо ввести компьютер в домен и после добавления компьютера очищать группу. Мало того, стоит изменить OU Computers, используемое по умолчанию для новых компьютеров на другое OU, на которое наложить предварительные групповые политики по безопасности, если существует практика ввода компьютеров с уже установленной Виндой не из эталонного образа.
                      А ещё лучше, чтобы нельзя было создавать новые объекты типа компьютер, а только добавлять компьютеры с именем по шаблону обновляя уже существующую учётку компьютера.
                        0
                        К Пункту 6. — ну практически везде не согласен — объясняю:
                        1. (Создайте шлюз – Для управления большой инфраструктурой лучше всего обезопасить себя имея единую точку входа.) — Я даже не представляю — разве существуют вменяемые компании у которых без шлюза стоят виндовые сервера?
                        2.(Устанавливайте обновления. В особенности, на боевые сервера.) — с поправкой — с опозданием в две недели. Обычно за этот срок уже все проблемы с обновлениями вылазят и понятно что можно ставить а что нет.
                        3. — согласен.
                        4. (Используйте Server Core, он имеет наименьшую площадь атаки… ) — абсолютное большинство Виндовых серверов ставится как Домен Контроллер + сервер терминалов или Hyper-V и Домен Контроллер + сервер терминалов, еще чуток под Exchange, SQL-server, про Dynamix и Lynk — молчу — эти звери у нас практически не используются. И работать без оболочки с AD ,Hyper-V, Exchange — ну мягко говоря не удобно. Да и экономии никакой нет.
                        5. (Сервер удаленных рабочих столов на несколько пользователей – плохая идея...) — Вы серьёзно !? Сервер терминалов это основа безопасной работы пользователей! А тысячи бухгалтеров и менеджеров, которые работают с 1с…
                        6. + принцип 3-2-1
                          0
                          По поводу server core — на обычную машину можно установить RSAT и полноценно управлять всеми сервисами.
                            0
                            Да, можно, конечно. Только вот для администрирования и, в особенности, для решения проблем на Server Core квалификация админа нужна значительно повыше средней.
                              0

                              Windows Admin Center? Хорошая утилита с GUI для управления Core

                                0
                                он хорош, но далеко не все позволяет делать, но в реальности практика показала что удобнеее posh(включая enter-pssession) и mmc
                                  0

                                  Так POSH из WAC и получается как одна из функций на конкретном хосте?

                            0

                            И работать без оболочки с AD ,Hyper-V, Exchange — ну мягко говоря не удобно. С AD и Hyper-V соглашусь, а вот с Exchange как раз все наоборот. На данный момент на самом Exchange уже давно остался только powershell, а все остальное управление идет через веб

                            0
                            Спасибо за скрипты, сохранил себе. Перепишу их для диагностики удаленных серверов.
                            В статью стоит добавить какие переменные за что отвечают:
                            $Last — выводить данные за последние несколько часов
                            $Attempts — минимальный порог попыток логина
                            $ShowRDNS=«True» резолвить ли IP адреса атакующего
                            а еще лучше сделать передачу через параметры

                            Расскажите про альтернативу терминальному серверу на 50 человек, которым нужен доступ к 1с и корпоративным ресурсам. И чем вам так не нравится один сервер на кучу народа?
                              0
                              Чтобы содержимое диска сервера рабочих столов было зашифровано, достаточно лишь одного пользователя совершившего ошибку.
                              К сожалению, разговоры о том, что «Мы просто не дадим им права администраторов» могут или, заканчиваются именно тем, что их выдают.
                                0
                                К сожалению, разговоры о том, что «Мы просто не дадим им права администраторов» могут или, заканчиваются именно тем, что их выдают.

                                Простите, это ерунда. В компаниях с нормальным IT абсолютное большинство пользователей администраторских прав даже на своих ноутбуках не имеет, а чтобы получить административные права на сервере, надо, для начала, быть сотрудником IT-отдела, да ещё и получить одобрение заявки на получение соответствующих прав от ответственных лиц.
                                  0
                                  Социальную инженерию никто не отменял. Если можно сократить риски раньше, чем они возникнут, то это нужно сделать.
                                0
                                CItrix?
                                Nischebrod way — QEMU на Proxmox с отдельными Windows-узлами и поднятием из мастер-диска или PXE. Но накладные расходы огромны. Но степень изоляции выше.
                                  0
                                  Именно об этом и шла речь. Один пользователь — одна виртуальная машина.
                                    0

                                    Чтобы юзер запустил на терминале шифровальщик, надо чтобы шифровальщик туда попал.
                                    Если это терминалка под 1с — вообще никак. От слова совсем.
                                    Шифровальщик попадает либо с почты, либо с флешек. И то, и другое на терминалах не надо. И сразу все сильно проще.
                                    Ну хоть как заизолируйся — общая папка пользователю все равно доступна для шифрования.
                                    Отдельные виртуалки — сильно оверхед. Проще держать резервные копии (терминал, профили, общие ресурсы), тем более они все равно должны быть.
                                    Время восстановления — до получаса. Запустивший шифровальщика — известен. Для небольшой компании вполне нормально.
                                    Для большой — дак там и админов несколько больше. И на каждое ответственное направление можно выделить как минимум одного. Включая само обнаружение атаки.

                                      0
                                      Шифровальщик попадает либо с почты, либо с флешек. И то, и другое на терминалах не надо. И сразу все сильно проще.

                                      Это вы просто малость не в курсе. Почитайте, как распространялся WannaCry, например (Пункт «How does WannaCry infect PCs»). Будете неприятно удивлены. Ни флэшек, ни почты в его векторе нет.
                                        0

                                        На терминале не должно быть сервера smb. На терминале вообще наружу ничего кроме rdp смотреть не должно. А в идеале вообще смотреть через шлюз.
                                        А страшный wannacry я вживую видел, но только в виде отдельных компов и попыток сканировать сеть (собственно попытки сканирования сети в поисках открытых портов smb и выдали заражённых)

                                          0
                                          а как файлами с терминалом обмениваться? например с отчётами? то, что на терминале не нужно smb это весьма смелое заявление.
                                            0

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


                                            я видел реализации, когда на терминале сразу есть и smb-сервер, и сервер 1с, и сервер sql, и веб-сервер, и контроллер домена (еще и единственный). и резервные копии делаются на отдельный диск в этом сервере. но такое делается либо от небольшого опыта, либо от недостатка финансов, что оправданием не является. и очень редко живет сколько-нибудь долго выставленное в интернет.

                                +1
                                Вдумайтесь — зачем вообще вводить в домен компьютер на котором возможно есть вредоносное ПО? Ну и далее по тексту там тоже такое себе.
                                  +1
                                  Придерживайтесь принципа один человек или служба – один сервер.

                                  (Поперхнувшись чаем) Что?!
                                    0
                                    Это нормально, если они все или пиратские, или же на гипервизоре под windows server datacenter, иначе действительно слишком дорого.
                                    +2
                                    Сами по себе 32 битные приложения более уязвимые, 64-битные программы не поддаются атаке на переполнение буфера и через них гораздо труднее исполнить код который этими программами не предусмотрен.

                                    Уязвимость программ к атакам переполнение буфера никак не зависит от размера адресного пространства. 64-битные программы точно также уязвимы

                                      –1
                                      Вы серьезно, да?) На кого рассчитана эта статья??

                                      'Сервер удаленных рабочих столов на несколько пользователей – плохая идея. Придерживайтесь принципа один человек или служба – один сервер.'

                                      Ну и про x32/x64 приложения без комментариев.
                                        0
                                        > SMB первой версии до сих пор является стандартным компонентом Windows Server и установлен по умолчанию в каждой редакции.

                                        Нет: docs.microsoft.com/en-us/windows-server/storage/file-server/troubleshoot/smbv1-not-installed-by-default-in-windows
                                          0
                                          Прежде чем что либо утверждать, информация была верифицирована. Были установлены две виртуальные машины на WS 2016 и WS 2019. Компонент был установлен по умолчанию.

                                          В образе WS 2016 еще не было этого фикса, а в образе WS 2019 уязвимость пропатчили.
                                            0
                                            Странно, у себя на 2019 datacenter не увидел, чтобы она была включена по дефолту.
                                            PS C:\Windows\system32> Get-WindowsFeature FS-SMB1
                                            Display Name Name Install State
                                            — — — [ ] SMB 1.0/CIFS File Sharing Support FS-SMB1 Available
                                            PS C:\Windows\system32>
                                              0
                                              А 1909 проверяли? ;)
                                            +1
                                            Придерживайтесь принципа один человек или служба – один сервер.
                                            Никаких денег не хватит.

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

                                            Самое читаемое