Quão seguro é ativar o WinRM / PSRemoting em uma máquina voltada para a Internet?

4

Como é seguro tornar o ponto de extremidade do Powershell remoto (também conhecido como PSRemoting) de um servidor de produção acessível pela Internet?
Não somos um banco nem nada, mas o servidor mantém dados corporativos confidenciais.

Eu pretendo protegê-lo por:

  • Utilizar a filtragem de IP para aceitar apenas conexões do nosso próprio intervalo de IP público, para que possamos gerenciá-lo de outra parte da nossa rede.
  • Ter o terminal aceitar apenas conexões SSL
  • Permitindo apenas conexões de um conjunto limitado de usuários com uma senha complexa (~ 150 bits de entropia)
  • Usando uma PSSessionConfiguration que tem o LanguageMode definido como NoLanguage , para que apenas os scripts possam ser executados
  • Exigindo que todos os scripts do Powershell executados dessa maneira sejam assinados ( Set-ExecutionPolicy RemoteSigned )

Por outro lado:

  • Os scripts remotos serão executados em uma conta de administrador local
  • sem restrições nos Cmdlets / Módulos que pode invocar.
  • Eu suspeito que o serviço WinRM (que possibilita o PSRemoting) seja seguro o suficiente para ser exposto à Internet (as VMs do Azure têm isso por padrão), mas não tenho nenhuma evidência disso.

Então, eu acho que minha pergunta é: isso é 'seguro', ou existem vetores de ataque que estão faltando aqui?

A propósito, eu tenho a maioria das minhas informações do e-book gratuito Segredos do controle remoto do PowerShell .

    
por Astrotrain 08.02.2015 / 11:44

2 respostas

1

Em geral, você deve nunca abrir qualquer coisa da Internet para um servidor de produção, a menos que seja um serviço que você deseja que o público use. Se a máquina for um servidor da Web, somente a porta 80 deverá estar aberta para ela. Se nenhuma outra porta estiver aberta através do firewall, não há como um invasor entrar.

Uma VPN seria a melhor solução, exigindo que os usuários autentiquem e acessem os sistemas de produção somente a partir do dentro . Uma VPN é muito mais flexível e segura do que qualquer outro método.

    
por 09.02.2015 / 18:07
1

Algumas coisas que podem ajudar:

  1. Adicione seus clientes à lista TrustedHosts .

    Set-Item wsman:\localhost\Client\TrustedHosts -Value Server01.Domain01.Fabrikam.com
    
  2. Crie um script de verificação de log que retire os IPs incorretos de seus logs e crie regras de firewall para bloquear esses IPs. (Desculpe minha técnica de escrita PS :-))

    Obtenha o conteúdo de um arquivo que tenha IPs inválidos listados no log de atividades. Eu criei um script que escaneou meu arquivo de registro web proprietário e encontrei clientes investigando meu servidor web, então deixei seus IPs no arquivo badips.txt.

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

    Agora criei uma regra de firewall para bloquear o endereço IP incorreto

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

    Obtendo uma lista de IPs inválidos que já possuem uma regra de bloqueio

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

    Verificando a lista para ver se o IP já está bloqueado

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

    Se este for um novo endereço IP, crie uma regra de firewall e adicione IP ao arquivo de texto da lista processada

    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
    }}
    

Isso realmente não responde à sua pergunta sobre como seu servidor será protegido, mas oferece mais dois itens para limitar possíveis ameaças.

    
por 09.02.2015 / 17:43