Comment désactiver SMBv1 (Server Message Block Protocol) avec PowerShell

Le protocole Server Message Block Protocol (SMB) existe depuis un certain temps et sert de pilier au partage de fichiers et à diverses autres opérations de réseau. Cependant, la version la plus ancienne, SMBv1, est aujourd’hui considérée comme un handicap en raison d’une multitude de failles de sécurité. Si vous êtes un professionnel de l’informatique ou un fournisseur de services gérés (MSP), la sécurité de votre réseau doit être votre principale préoccupation. Comment désactiver efficacement SMBv1 ?

Que fait le script ?

Le script PowerShell présenté ici a été conçu dans un but très précis : désactiver SMBv1 dans les environnements Windows. Il utilise une séquence de cmdlets PowerShell intégrés et de manipulations du registre pour s’assurer que SMBv1 est complètement désactivé. Le script peut être exécuté dans un environnement Windows 10 ou Windows Server 2016 ou plus récent, ce qui le rend très polyvalent et précieux pour tout système Windows moderne.

Le script : Désactiver 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 {}

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenez l’accès

Préoccupations en matière de sécurité concernant SMBv1

SMBv1 est réputé pour ses lacunes en matière de sécurité. Il a souvent été la cible de divers types d’attaques, de ransomwares et de vols de données. Laisser SMBv1 activé, c’est comme laisser sa porte d’entrée ouverte; c’est chercher à s’attirer des ennuis. Ce script PowerShell résout efficacement ce problème en désactivant SMBv1.

Temps et efficacité

La désactivation manuelle de SMBv1 peut prendre beaucoup de temps, en particulier dans les grands réseaux. Ce script automatise le processus, ce qui permet d’économiser du temps et des ressources. Pour les entreprises MSP qui gèrent les réseaux de plusieurs clients, cet outil est indispensable.

Approche globale

Le script tente de désactiver SMBv1 par plusieurs moyens, notamment la cmdlet Get-WindowsOptionalFeature, la cmdlet Set-SmbServerConfiguration et des modifications directes du registre. Cela garantit que le protocole est désactivé, même si l’une des méthodes échoue ou n’est pas disponible sur le système en question.

Comment utiliser le script de désactivation de SMBv1 ?

L’exécution du script est simple. Voici un guide rapide :

  1. Enregistrez le script dans un fichier nommé Disable-SMBv1.ps1.
  2. Ouvrez PowerShell en tant qu’administrateur.
  3. Naviguez jusqu’au dossier dans lequel vous avez enregistré le script.
  4. Exécutez le script en tapant PS C :>.Disable-SMBv1.ps1 et en appuyant sur Entrée.

Assurez-vous d’avoir les privilèges d’administrateur, sinon le script se terminera, ce qui vous évitera d’effectuer accidentellement des modifications que vous n’auriez pas dû.

Qui a besoin de ce script ?

  • Professionnels de l’informatique : Si vous êtes chargé de la maintenance d’un réseau d’entreprise ou même d’un réseau à plus petite échelle, ce script devrait faire partie de votre boîte à outils. Vous pouvez ainsi automatiser le processus de désactivation de SMBv1 sur plusieurs systèmes à la fois.
  • Fournisseurs de services gérés (MSP) : Pour ceux qui gèrent les réseaux de plusieurs clients, la possibilité de désactiver rapidement les protocoles vulnérables tels que SMBv1 peut ajouter une couche supplémentaire de sécurité, rendant ainsi votre service plus précieux pour vos clients.

Intégration du script à NinjaOne

Pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP) qui utilisent NinjaOne comme solution de surveillance et de gestion à distance (RMM), l’intégration de ce script dans vos protocoles de maintenance ou de sécurité réguliers peut ajouter une couche supplémentaire de fiabilité à vos opérations.

Exécution planifiée

Vous pouvez planifier l’exécution du script PowerShell via le moteur de script de NinjaOne. Ainsi vous pouvez vous assurez que SMBv1 est automatiquement désactivé sur tous les nouveaux systèmes ajoutés au réseau ou sur tous les systèmes réinitialisés, ce qui permet de maintenir une posture de sécurité uniforme.

Surveillance et alertes

Grâce aux fonctions d’alerte de NinjaOne, vous pouvez créer des alertes personnalisées qui vous informent lorsque le script s’est exécuté avec succès ou s’il rencontre des problèmes. Vous disposez ainsi d’un retour d’information en temps réel, ce qui vous permet d’intervenir si nécessaire.

Déploiement à distance

Le script de désactivation de SMBv1 peut être déployé à distance sur plusieurs systèmes via NinjaOne. Ceci est particulièrement utile pour les MSP qui gèrent un large éventail de réseaux. Quelques clics suffisent pour appliquer une stratégie de sécurité essentielle à l’ensemble des terminaux gérés.

Rapport de conformité

Pour les exigences de conformité telles que le RGPD ou HIPAA, où la désactivation des protocoles obsolètes et vulnérables peut être obligatoire, l’exécution de ce script par NinjaOne peut vous fournir un moyen transparent de prouver que les mesures de sécurité appropriées sont en place. Les fonctionnalités de reporting de NinjaOne peuvent vous aider à générer des rapports complets pour les audits.

Conclusions

Désactiver SMBv1 devrait être une nécessité pour toute entreprise qui prend au sérieux la sécurité de son réseau. Ce script PowerShell fournit une méthode fiable, efficace et complète pour y parvenir. Étant donné le besoin essentiel de protocoles de sécurité renforcés dans le monde informatique des entreprises, l’adoption de ce script devrait être une priorité absolue.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).