El protocolo Bloque de mensajes del servidor (SMB) existe desde hace bastante tiempo y es una especie de columna vertebral para compartir archivos y otras operaciones de red. Sin embargo, la primera versión, SMBv1, actualmente se considera un problema debido a una multitud de vulnerabilidades de seguridad. Si eres un profesional de TI o un proveedor de servicios gestionados (MSP), garantizar la seguridad de la red debería ser tu principal preocupación. Entonces, ¿cómo desactivar SMBv1 de forma eficaz?
¿Qué hace el script?
Este script PowerShell ha sido diseñado con un propósito muy concreto: desactivar SMBv1 en entornos Windows. Funciona utilizando una secuencia de cmdlets de PowerShell incorporados y modificaciones del Registro para garantizar que SMBv1 está completamente desactivado. El script puede ejecutarse en un entorno Windows 10 o Windows Server 2016 o posterior, lo que lo hace muy versátil y valioso para cualquier sistema Windows moderno.
El script: desactivar 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 {}
Accede a más de 300 scripts en el Dojo de NinjaOne
Preocupaciones de seguridad relacionadas con SMBv1
SMBv1 es conocido por sus carencias en términos de seguridad. Ha sido blanco frecuente de diversos tipos de ataques, ransomware y violaciones de datos. Tener SMBv1 activado es como dejar la puerta de casa abierta; simplemente estás invitando a los problemas a entrar. Este script de PowerShell resuelve eficazmente el problema desactivando SMBv1.
Tiempo y eficacia
Desactivar manualmente SMBv1 puede necesitar mucho tiempo, especialmente en entornos de red a gran escala. Este script automatiza el proceso, ahorrando tiempo y esfuerzo. Para los MSP que gestionan redes de varios clientes, esta herramienta es una bendición.
Un enfoque integral
El script intenta desactivar SMBv1 a través de múltiples vías, incluyendo el cmdlet Get-WindowsOptionalFeature, el cmdlet Set-SmbServerConfiguration y ediciones directas del Registro. Esto garantiza que el protocolo se desactive, incluso si uno de los métodos falla o no está disponible en el sistema en cuestión.
Cómo utilizar el script para desactivar SMBv1
Ejecutar el script es sencillo. He aquí una guía rápida:
- Guarda el script en un archivo llamado Disable-SMBv1.ps1.
- Abre PowerShell como administrador.
- Navega hasta la carpeta donde guardaste el script.
- Ejecuta el script escribiendo PS C:>.Disable-SMBv1.ps1 y pulsando Intro.
Asegúrate de que tienes privilegios de Administrador, o el script terminará, precisamente para que no realices cambios que no deberías accidentalmente.
¿A quién le resulta útil este script?
- Profesionales de TI: si te encargas del mantenimiento de una red corporativa o incluso de una de menor escala, este script debería formar parte de tu kit de herramientas. De este modo, podrás automatizar el proceso de desactivación de SMBv1 en varios sistemas con una sola operación.
- Proveedores de servicios gestionados (MSP): para quienes gestionan redes de varios clientes, la posibilidad de desactivar rápidamente protocolos vulnerables como SMBv1 puede añadir una capa adicional de seguridad, haciendo que el servicio sea más valioso para los clientes.
Integración del script con NinjaOne
Para los profesionales de TI y proveedores de servicios gestionados (MSP) que confían en NinjaOne como solución de monitorización y gestión remota, la incorporación de este script en su protocolo de mantenimiento regular o de seguridad puede añadir otra capa de solidez a sus operaciones.
Ejecución programada
Puedes programar la ejecución del script PowerShell a través del motor de scripting de NinjaOne. De este modo, te aseguras de que SMBv1 se deshabilite automáticamente en todos los sistemas nuevos que se añadan a la red o en cualquier sistema que se reinicie, manteniendo así una postura de seguridad uniforme.
Supervisión y alertas
Con las funciones de alerta de NinjaOne, puedes crear alertas personalizadas que te notifiquen cuando el script se haya ejecutado correctamente o si se encuentran problemas. Esto te proporciona información en tiempo real, lo que te permite intervenir en caso necesario.
Despliegue remoto
El script para desactivar SMBv1 puede ser desplegado remotamente en múltiples sistemas a través de NinjaOne. Esto es especialmente útil para los MSP que gestionan una amplia gama de redes. Con unos pocos clics puedes aplicar una política de seguridad crítica en todos tus endpoints gestionados.
Informes de cumplimiento
Para los requisitos de cumplimiento como el GDPR o la HIPAA, donde la desactivación de protocolos obsoletos y vulnerables puede ser obligatoria, la ejecución de este script a través de NinjaOne puede ser una forma sencilla de demostrar la existencia de medidas de seguridad adecuadas. Las funciones de creación de informes de NinjaOne pueden ayudarte a generar informes completos para los registros de auditoría.
Reflexiones finales
Desactivar SMBv1 debería ser una obligación para cualquier organización que se tome en serio la seguridad de la red. Este script de PowerShell proporciona un método fiable, eficaz y completo para hacerlo. Dada la necesidad crítica de mejorar los protocolos de seguridad en el panorama informático empresarial actual, adoptar este script debería ser una prioridad absoluta.