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
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.