5

Насколько безопасно сделать конечную точку Remote Powershell (он же PSRemoting) рабочего сервера доступной из Интернета?
Мы не банк или что-то еще, но сервер хранит конфиденциальные корпоративные данные.

Я намереваюсь обеспечить это:

  • Использование IP-фильтрации позволяет принимать соединения только из нашего общедоступного диапазона IP-адресов, чтобы мы могли управлять им из другой части нашей сети.
  • Если конечная точка принимает только SSL-соединения
  • Разрешить соединения только ограниченному кругу пользователей со сложным паролем (энтропия ~ 150 бит)
  • Использование PSSessionConfiguration , для которого LanguageMode установлено значение NoLanguage , так что могут выполняться только сценарии
  • Требование, чтобы все сценарии Powershell, которые выполняются таким образом, были подписаны (Set-ExecutionPolicy RemoteSigned)

С другой стороны:

  • Удаленные сценарии будут выполняться под учетной записью локального администратора
  • без ограничений для командлетов / модулей, которые он может вызывать.
  • Я подозреваю, что служба WinRM (которая делает возможным PSRemoting) достаточно безопасна для доступа в Интернет (по умолчанию в виртуальных машинах Azure есть такая возможность), но у меня нет никаких доказательств этого.

Итак, я предполагаю, что мой вопрос: это «безопасно», или есть векторы атаки, которые я здесь пропускаю?

Кстати, у меня есть большая часть моей информации от удаленного eBook Secrets of Powershell.

2 ответа2

3

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

VPN будет лучшим решением, требующим от пользователей аутентификации и последующего доступа к производственным системам только изнутри. VPN гораздо более гибкая и безопасная, чем любой другой метод.

2

Несколько вещей, которые могут помочь:

  1. Добавьте своих клиентов в список TrustedHosts .

    Set-Item wsman:\localhost\Client\TrustedHosts -Value Server01.Domain01.Fabrikam.com
    
  2. Создайте скрипт сканирования журналов, который извлекает плохие IP-адреса из ваших журналов и создает правила брандмауэра для блокировки этих IP-адресов. (Извините мою технику письма PS :-))

    Получить содержимое файла с плохими IP-адресами, перечисленными в журнале активности. Я создал скрипт, который сканировал мой собственный веб-файл журнала и обнаружил, что клиенты проверяют мой веб-сервер, поэтому я поместил их IP-адреса в файл badips.txt.

    $ips = get-content c:\powershell\utilities\badips.txt
    

    Теперь я создаю правило брандмауэра для блокировки неверного IP-адреса.

    foreach ($i in $ips){
    [string]$rulename = "disallow-" + $i
    [string]$remoteip = $i + "/32"
    [string]$description = $i
    

    Получение списка плохих IP-адресов, у которых уже есть правило блокировки

    $processed = get-content c:\powershell\utilities\processedips.txt
    

    Проверка по списку, чтобы увидеть, если IP уже заблокирован

    $count = ($processed|select-string $i).count
    

    Если это новый IP-адрес, создайте правило брандмауэра и добавьте IP-адрес в текстовый файл обработанного списка.

    if ($count -lt 1){
    invoke-expression ("netsh advfirewall firewall add rule name=" + $rulename + " action=block enable=yes
    localip=any dir=in profile=public remoteip=" + $remoteip + " description=" + $description)
    $i|add-content c:\powershell\utilities\processedips.txt
    }}
    

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .