Como configurar com eficiência o armazenamento de hash local do LM usando o PowerShell

Configuração do armazenamento de hash local O armazenamento de hash local desempenha uma função essencial nos sistemas baseados no Windows. Para os profissionais de TI, a configuração desse armazenamento pode afetar muito a segurança do sistema. O script do PowerShell fornecido simplifica com elegância o processo de ativação ou desativação desse recurso. Vamos nos aprofundar em seu significado e em como ele funciona.

Histórico

O hash LM, ou hash do LAN Manager, já existe há algum tempo e é conhecido por suas vulnerabilidades. Com o tempo, muitos profissionais de segurança recomendaram a desativação dos hashes LM para reforçar a segurança do sistema. No entanto, as configurações manuais podem ser entediantes, e é por isso que ferramentas e scripts, como o fornecido, tornam-se ativos inestimáveis para profissionais de TI e provedores de serviços gerenciados (MSPs).

O roteiro

#Requires -Version 5.1

<#
.SYNOPSIS
    Disable or Enable Local LM Hash Storage
.DESCRIPTION
    Disable or Enable Local LM Hash Storage
.EXAMPLE
    -Enable
    Enable Local LM Hash Storage
.EXAMPLE
    -Disable
    Disable Local LM Hash Storage
.EXAMPLE
    PS C:> Disable-LMHash.ps1 -Disable
    Disable Local LM Hash Storage
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
.COMPONENT
    ProtocolSecurity
#>

[CmdletBinding(DefaultParameterSetName = "Disable")]
param (
    [Parameter(Mandatory, ParameterSetName = "Disable")]
    [switch]
    $Disable,
    [Parameter(Mandatory, ParameterSetName = "Enable")]
    [switch]
    $Enable
)

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        New-Item -Path $Path -Force -ErrorAction SilentlyContinue | Out-Null
        if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) {
            Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false | Out-Null
        }
        else {
            New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false | Out-Null
        }
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    $Path = "HKLM:SYSTEMCurrentControlSetControlLsa"
    $Name = "NoLMHash"
    $Value = if ($Enable) { 1 }elseif ($Disable) { 0 }else { throw "No Param used." }
    # Sets NoLMHash to 1
    try {
        Set-ItemProp -Path $Path -Name $Name -Value $Value
    }
    catch {
        Write-Error $_
        exit 1
    }
    Write-Host "Set $Path$Name to $Value"
}
end {}

 

Acesse mais de 300 scripts no NinjaOne Dojo

Obter acesso

Detalhamento

O script começa definindo os requisitos para a versão 5.1 do PowerShell.

Veja a seguir um detalhamento passo a passo de sua função:

  • Vinculação de Cmdlet: O script usa CmdletBinding, o que permite que ele aceite parâmetros, especificamente -Enable ou -Disable.
  • Função Test-IsElevated: Essa função verifica se o script está sendo executado com privilégios elevados (como administrador). Caso contrário, o script retornará um erro.
  • Função Set-ItemProp: Essa função foi desenvolvida para definir uma chave de registro especificada com um determinado valor, criando-a se ela não existir.
  • Bloco de processo: É aqui que reside a lógica principal.
  • Verifica se há direitos de administrador.
  • Define o caminho e o nome do registro.
  • Dependendo do parâmetro usado(Ativar ou Desativar), ele atribui um valor.
  • Em seguida, ele define esse valor no registro.
  • Bloco final: Conclui o roteiro.

Casos de uso em potencial

Imagine um MSP que supervisiona a segurança de vários clientes. Um de seus novos procedimentos de integração é garantir que o armazenamento de hash LM esteja desativado em todos os servidores. Em vez de atualizar manualmente as configurações de cada servidor, o MSP poderia implementar esse script, fazendo as alterações de forma eficiente e garantindo a consistência.

Comparações

Navegar manualmente pelo registro ou usar a Política de Grupo são outros métodos para obter esse resultado. No entanto, usar o PowerShell é mais eficiente, especialmente quando as alterações precisam ser feitas em vários sistemas. Além disso, os scripts são menos propensos a erros humanos em comparação com os métodos manuais.

Implicações

A configuração do armazenamento de hash LM não é apenas uma questão de eficiência operacional – é uma consideração de segurança significativa. Os hashes LM são notoriamente inseguros. Ter um método para desativar esses hashes de forma rápida e confiável pode reduzir drasticamente as vulnerabilidades.

Recomendações

  • Sempre faça backup do registro antes de fazer alterações.
  • Revisar e auditar periodicamente as configurações do sistema para garantir a adesão às práticas recomendadas de segurança.
  • Execute somente scripts de fontes confiáveis.

Considerações finais

Para os profissionais de TI que buscam simplificar suas tarefas e, ao mesmo tempo, manter um alto nível de segurança, o aproveitamento de ferramentas poderosas torna-se crucial. Este script é uma prova dessa capacidade. Além disso, plataformas como o NinjaOne podem aprimorar o processo centralizando e automatizando as tarefas relacionadas à configuração e à segurança do sistema. À medida que o cenário digital evolui, ter ferramentas e plataformas confiáveis à disposição será a chave para manter uma postura de segurança robusta.

FAQs

O “NoLMHash” é uma chave de registro que determina se os hashes LM são armazenados. Um valor de “0” significa que está ativado, enquanto “1” significa que está desativado.

O script tem um requisito mínimo observado: Windows 10 ou Windows Server 2016 e superior.

Próximas etapas

Montar uma equipe de TI eficaz requer uma solução centralizada que seja a principal ferramenta de entrega de serviços. Com NinjaOne, a TI monitora, gerencia, protege e oferece suporte a todos os dispositivos, onde quer que estejam, dispensando infraestrutura complexa no local.

Saiba mais sobre a solução NinjaOne Remote Script Deployment, agende uma demonstração, ou inicie sua avaliação gratuita da plataforma NinjaOne.

Categories:

You might also like