Come configurare Windows Defender SmartScreen utilizzando PowerShell

Punti chiave

  • Lo script permette di configurare Windows Defender SmartScreen tramite GPO locale.
  • È progettato per l’uso su sistemi Windows, da Windows 8.1 e Windows Server 2012 in avanti.
  • Offre le opzioni per attivare o disattivare lo SmartScreen e per impostarne il livello su “Avvisa” o “Blocca”
  • L’automazione di PowerShell semplifica e standardizza le configurazioni di SmartScreen su più sistemi.
  • L’esecuzione corretta richiede privilegi amministrativi; se questi privilegi non ci sono, viene restituito un errore.
  • Prima di distribuire, effettua sempre il backup degli stati del registro e testa lo script con impostazioni controllate.
  • L’uso di NinjaOne può semplificare e migliorare ulteriormente le attività di configurazione negli ambienti aziendali.

Nel campo della sicurezza informatica aziendale, la configurazione delle impostazioni e delle preferenze degli strumenti è fondamentale per garantire una sicurezza di livello assoluto. Uno di questi strumenti che spesso richiede una configurazione meticolosa delle impostazioni è Windows Defender SmartScreen. In questo post analizzeremo uno script PowerShell progettato per configurare facilmente Windows Defender SmartScreen tramite GPO locale.

Background

Windows Defender SmartScreen è un elemento critico dell’ecosistema Windows, che fornisce agli utenti avvisi su siti, file, app e altri elementi potenzialmente dannosi. La necessità di uno script PowerShell per regolare le impostazioni di tutti gli utenti di un’organizzazione nasce per dare ai professionisti IT e i Managed Service Provider (MSP) la possibilità di standardizzare le impostazioni e di evitare potenziali falle nella sicurezza.

Lo script

#Requires -Version 2.0

<#
.SYNOPSIS
    Changes the SmartScreen state for all users via local GPO.
.DESCRIPTION
    Changes the SmartScreen state for all users via local GPO.
    Effected registry entries that are set:
    HKLM:SoftwarePoliciesMicrosoftEdgeSmartScreenEnabled = 1
    HKLM:SoftwarePoliciesMicrosoftWindowsSystemEnableSmartScreen = 1
    HKLM:SoftwarePoliciesMicrosoftWindowsSystemShellSmartScreenLevel = Warn
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterEnabledV9 = 1
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverride = 1
    HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverrideAppRepUnknown = 1
.EXAMPLE
     -Off
    Turn off SmartScreen
.EXAMPLE
     -On
    Turn on SmartScreen and Warn.
.EXAMPLE
     -On -Level Block
    Turn on SmartScreen and Block when it normally warns.
.EXAMPLE
    PS C:> Set-SmartScreen.ps1 -Off
    Turn off SmartScreen
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 8.1, Windows Server 2012
    Release Notes:
    Fixes bug where registry wasn't being set correctly.
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
    OSSecurity
#>

[CmdletBinding(DefaultParameterSetName = "On")]
param (
    [Parameter(Mandatory = $true, ParameterSetName = "On")]
    [Switch]
    $On,
    [Parameter(Mandatory = $true, ParameterSetName = "Off")]
    [Switch]
    $Off,
    [Parameter(Mandatory = $false, ParameterSetName = "On")]
    [ValidateSet("Block", "Warn")]
    [String]
    $Level = "Warn"
)

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 | 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
    }
    # Set $State to 1 if -On was used or to 0 if -Off was used
    $State = if ($On) { 1 }
    elseif ($Off) { 0 }
    else {
        Write-Error ""
    }
    try {
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "EnableSmartScreen" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "ShellSmartScreenLevel" -Value $Level -PropertyType String
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "EnabledV9" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverride" -Value $State
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverrideAppRepUnknown" -Value $State
        # Uses: https://admx.help/?Category=EdgeChromium&Policy=Microsoft.Policies.Edge::SmartScreenEnabled
        Set-ItemProp -Path "HKLM:SoftwarePoliciesMicrosoftEdge" -Name "SmartScreenEnabled" -Value $State
    }
    catch {
        Write-Error $_
        exit 1
    }
    Write-Host "Values change in Registry:"
    # Output Proof of Work
    @(
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftEdgeSmartScreenEnabled"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftEdge" -Name "SmartScreenEnabled" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftWindowsSystemEnableSmartScreen"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "EnableSmartScreen" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftWindowsSystemShellSmartScreenLevel"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftWindowsSystem" -Name "ShellSmartScreenLevel" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterEnabledV9"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "EnabledV9" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverride"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverride" -ErrorAction SilentlyContinue)"
        }
        [PSCustomObject]@{
            "Registry Entry" = "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilterPreventOverrideAppRepUnknown"
            Value            = "$(Get-ItemPropertyValue -Path "HKLM:SoftwarePoliciesMicrosoftMicrosoftEdgePhishingFilter" -Name "PreventOverrideAppRepUnknown" -ErrorAction SilentlyContinue)"
        }
    )
    gpupdate.exe /force
    Write-Host "A reboot, or three, will be needed for this policy to take affect."
}
end {}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata

Lo script fornito serve a modificare lo stato di SmartScreen per tutti gli utenti. Funziona modificando voci specifiche del registro di sistema. Ecco una descrizione passo per passo dei meccanismi dello script:

  • Impostazione iniziale: Lo script inizia specificando la versione richiesta e fornisce una breve sinossi del suo funzionamento.
  • Cmdlet Binding e parametri: L’utente può eseguire lo script con i parametri -On o -Off. Inoltre, il parametro -Level consente agli utenti di scegliere tra lo stato “Warn” (avvisa) or “Block” (blocca) per lo SmartScreen.
  • Funzioni di supporto:
  • Test-IsElevated controlla se lo script viene eseguito con privilegi amministrativi.
  • Set-ItemProp crea o modifica le voci del Registro di sistema.
  • Processo principale:
  • Lo script controlla innanzitutto se è stato eseguito con i permessi necessari.
  • A seconda dell’input dell’utente, lo script imposta lo stato di SmartScreen e modifica le voci di registro pertinenti.
  • All’utente viene mostrato un output in cui vengono visualizzati i valori modificati del registro.
  • Infine, lo script richiama gpupdate.exe per forzare un aggiornamento dei Criteri di gruppo, ricordando agli utenti che potrebbe essere necessario un riavvio.

Casi d’uso potenziali

Immagina un’azienda in cui un nuovo criterio di sicurezza impone che tutti i computer abbiano lo SmartScreen di Windows Defender attivato e impostato su “Block” (blocca). Invece di configurare manualmente ogni macchina, un professionista IT può distribuire questo script per regolare le impostazioni in massa, garantendo uniformità e conformità su tutti i dispositivi.

Confronti

Anche gli oggetti dei Criteri di gruppo (GPO) raggiungibili dalla Console di gestione dei Criteri di gruppo (GPMC) possono essere usati per configurare le impostazioni di SmartScreen, ma questo script PowerShell semplifica il processo. Invece di navigare attraverso molteplici finestre e impostazioni nella GPMC, i professionisti IT possono eseguire un singolo script, risparmiando tempo e riducendo i potenziali errori.

Domande frequenti

  • Questo script può essere eseguito su qualsiasi macchina?
    Lo script è stato realizzato su misura per i sistemi Windows, a partire da Windows 8.1 e Windows Server 2012.
  • Cosa succede se non eseguo lo script come amministratore?
    Lo script visualizzerà un messaggio di errore di “Accesso negato”, invitando gli utenti a eseguire l’operazione con le autorizzazioni corrette.

Implicazioni

La configurazione dello stato di SmartScreen in tutta l’organizzazione rafforza la sicurezza informatica, riducendo i rischi associati a download o siti web dannosi. Tuttavia, una configurazione errata può esporre i sistemi a minacce o portare a un numero eccessivo di falsi avvisi, ostacolando il lavoro.

Raccomandazioni

  • Esegui sempre un backup dello stato attuale del registro prima di apportare modifiche.
  • Testa accuratamente lo script in un ambiente controllato prima di distribuirlo in tutta l’organizzazione.
  • Monitora e modifica costantemente le impostazioni in base alle esigenze organizzative.

Considerazioni finali

Per i professionisti IT che cercano una soluzione perfetta per queste configurazioni, strumenti come NinjaOne possono fornire funzionalità avanzate. Integrando script come quello descritto, NinjaOne può aiutare ad automatizzare, gestire e monitorare le attività IT in tutta l’azienda, garantendo operazioni ottimizzate e sicure.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.