O Server Message Block Protocol (SMB) já existe há algum tempo, servindo como espinha dorsal para o compartilhamento de arquivos e várias outras operações de rede. No entanto, a versão mais antiga, SMBv1, agora é vista como um problema devido a uma série de vulnerabilidades de segurança. Se você é um profissional de TI ou um provedor de serviços gerenciados (MSP), garantir a segurança da rede deve ser sua principal preocupação. Então, como você faz para desativar o SMBv1 de forma eficaz?
O que o script faz?
O script do PowerShell em questão foi projetado com uma finalidade muito específica: desativar o SMBv1 em ambientes Windows. Ele funciona usando uma sequência de cmdlets integrados do PowerShell e manipulações do Registro para garantir que o SMBv1 seja completamente desativado. O script pode ser executado em um ambiente Windows 10 ou Windows Server 2016 ou posterior, o que o torna altamente versátil e valioso para qualquer sistema Windows moderno.
O roteiro: Desativar SMBv1
#Requires -Version 5.1
<#
.SYNOPSIS
Disables SMB v1
.DESCRIPTION
Disables SMB v1 via Get-WindowsOptionalFeature, Set-SmbServerConfiguration, or Registry
.EXAMPLE
No parameters needed.
.EXAMPLE
PS C:> Disable-SMBv1.ps1
No parameters needed.
.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).
#>
[CmdletBinding()]
param ()
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"
)
# Do not output errors and continue
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
if (-not $(Test-Path -Path $Path)) {
# Check if path does not exist and create the path
New-Item -Path $Path -Force | Out-Null
}
if ((Get-ItemProperty -Path $Path -Name $Name)) {
# Update property and print out what it was changed from and changed to
$CurrentValue = Get-ItemProperty -Path $Path -Name $Name
try {
Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Continue | Out-Null
}
catch {
Write-Error $_
}
Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $Name)"
}
else {
# Create property with value
try {
New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Continue | Out-Null
}
catch {
Write-Error $_
}
Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)"
}
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
}
$Disable = 0
# $Enable = 1 # Not Used
}
process {
if (-not (Test-IsElevated)) {
Write-Error -Message "Access Denied. Please run with Administrator privileges."
exit 1
}
# Try using Get-WindowsOptionalFeature first
if (-not $(Get-Command -Name "Get-WindowsOptionalFeature").Name -like "Get-WindowsOptionalFeature") {
Write-Host "Get-WindowsOptionalFeature command not found. Continuing."
}
else {
if ((Get-WindowsOptionalFeature -Online -FeatureName smb1protocol -ErrorAction SilentlyContinue).State -notlike "Disabled") {
# Disables smb1protocol feature
try {
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
# Disabled SMB1, exit
exit 0
}
catch {
Write-Host "smb1protocol feature not found. Continuing."
}
}
}
if (-not $(Get-Command -Name "Get-SmbServerConfiguration").Name -like "Get-SmbServerConfiguration") {
Write-Host "Get-SmbServerConfiguration command not found. Continuing."
$Path = "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters"
$Name = "SMB1"
# https://docs.microsoft.com/en-us/windows-server/storage/file-server/troubleshoot/detect-enable-and-disable-smbv1-v2-v3#registry-editor
# Sets SMB1 to 0
Set-ItemProp -Path $Path -Name $Name -Value $Disable
}
if ((Get-SmbServerConfiguration).EnableSMB1Protocol) {
try {
Set-SmbServerConfiguration -EnableSMB1Protocol $false
}
catch {
Write-Host "Failed to disable SMBv1."
exit 1
}
}
}
end {}
Acesse mais de 300 scripts no NinjaOne Dojo
Preocupações com a segurança em torno do SMBv1
O SMBv1 é conhecido por suas deficiências de segurança. Ele tem sido um alvo frequente de vários tipos de ataques, ransomware e violações de dados. Ter o SMBv1 ativado é como deixar a porta da frente aberta; você está simplesmente convidando problemas. Esse script do PowerShell alivia esse problema de forma eficaz, desativando o SMBv1.
Tempo e eficiência
A desativação manual do SMBv1 pode ser uma tarefa demorada, especialmente em ambientes de rede de grande escala. Esse script automatiza o processo, economizando tempo e esforço valiosos. Para os MSPs que gerenciam redes de vários clientes, essa ferramenta é uma dádiva de Deus.
Abordagem abrangente
O script tenta desativar o SMBv1 por meio de vários caminhos, incluindo o cmdlet Get-WindowsOptionalFeature, o cmdlet Set-SmbServerConfiguration e edições diretas no Registro. Isso garante que o protocolo seja desativado, mesmo que um dos métodos falhe ou não esteja disponível no sistema em questão.
Como usar o script Disable SMBv1
A execução do script é simples. Aqui está um guia rápido:
- Salve o script em um arquivo chamado Disable-SMBv1.ps1.
- Abra o PowerShell como administrador.
- Navegue até a pasta onde você salvou o script.
- Execute o script digitando PS C:>.Disable-SMBv1.ps1 e pressionando Enter.
Certifique-se de que você tenha privilégios de administrador ou o script será encerrado, garantindo que você não faça alterações acidentais que não deveria.
Quem precisa desse roteiro?
- Profissionais de TI: Se você é responsável pela manutenção de uma rede corporativa ou mesmo de uma rede de menor escala, esse script deve fazer parte de seu kit de ferramentas. Com isso, você pode automatizar o processo de desativação do SMBv1 em vários sistemas de uma só vez.
- Provedores de serviços gerenciados (MSPs): Para quem gerencia redes de vários clientes, a capacidade de desativar rapidamente protocolos vulneráveis, como o SMBv1, pode adicionar uma camada extra de segurança, tornando seu serviço mais valioso para os clientes.
Integração do script com o NinjaOne
Para profissionais de TI e provedores de serviços gerenciados (MSPs) que confiam no NinjaOne como sua solução de monitoramento e gerenciamento remoto, a incorporação desse script em seus protocolos regulares de manutenção ou segurança pode acrescentar outra camada de robustez às suas operações.
Execução programada
Você pode programar a execução do script do PowerShell por meio do Scripting Engine do NinjaOne. Ao fazer isso, você garante que o SMBv1 seja automaticamente desativado em todos os novos sistemas adicionados à rede ou em todos os sistemas que forem reinicializados, mantendo assim uma postura de segurança uniforme.
Monitoramento e alertas
Com os recursos de alerta do NinjaOne, você pode criar alertas personalizados que o notificam quando o script for executado com êxito ou se encontrar algum problema. Isso lhe dá feedback em tempo real, permitindo que você intervenha conforme necessário.
Implementação remota
O Disable SMBv1 Script pode ser implantado remotamente em vários sistemas por meio do NinjaOne. Isso é particularmente útil para MSPs que gerenciam uma grande variedade de redes. Com apenas alguns cliques, é possível aplicar uma política de segurança essencial em todos os endpoints gerenciados.
Relatórios de conformidade
Para os requisitos de conformidade, como GDPR ou HIPAA, em que a desativação de protocolos desatualizados e vulneráveis pode ser obrigatória, a execução desse script por meio do NinjaOne pode lhe oferecer uma maneira perfeita de provar que as medidas de segurança adequadas estão em vigor. Os recursos de relatório do NinjaOne podem ajudá-lo a gerar relatórios abrangentes para trilhas de auditoria.
Considerações finais
Desativar o SMBv1 deve ser algo óbvio para qualquer organização que leve a segurança da rede a sério. Esse script do PowerShell oferece um método confiável, eficiente e abrangente para fazer exatamente isso. Dada a necessidade crítica de protocolos de segurança reforçados no atual cenário de TI empresarial, a adoção desse script deve ser uma prioridade máxima.