Cómo configurar SmartScreen de Microsoft Defender mediante PowerShell

Configurar SmartScreen de Microsoft Defender: puntos clave

  • El script configura SmartScreen de Microsoft Defender a través del GPO local.
  • Diseñado para su uso en sistemas Windows a partir de Windows 8.1 y Windows Server 2012.
  • Ofrece opciones para activar o desactivar SmartScreen y establecer su nivel en «Advertir» o «Bloquear»
  • La automatización de PowerShell agiliza y estandariza las configuraciones de SmartScreen en varios sistemas.
  • La ejecución correcta requiere privilegios administrativos; de lo contrario, devuelve un error.
  • Antes de desplegar, haz siempre una copia de seguridad de los estados del registro y prueba el script en entornos controlados.
  • El uso de NinjaOne puede simplificar y mejorar aún más estas tareas de configuración en entornos empresariales.

En el ámbito de la seguridad informática empresarial, la configuración de los ajustes y preferencias de las herramientas es fundamental para garantizar una seguridad hermética. Una de estas herramientas que a menudo requiere una configuración meticulosa es SmartScreen de Windows Defender. En este post, profundizaremos en un script de PowerShell diseñado para configurar SmartScreen de Microsoft Defender fácilmente a través de un GPO local.

Antecedentes

SmartScreen de Windows Defender es un elemento crítico en el ecosistema de Windows, que proporciona advertencias a los usuarios sobre sitios, archivos, aplicaciones y más potencialmente dañinos. La necesidad de un script PowerShell para ajustar la configuración de todos los usuarios de una organización surge cuando los profesionales de TI y los proveedores de servicios gestionados (MSP) pretenden estandarizar la configuración y evitar posibles lagunas en la seguridad.

El script para configurar SmartScreen de Microsoft Defender

#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 {}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

El script proporcionado tiene como objetivo configurar SmartScreen de Microsoft Defender para todos los usuarios. Funciona ajustando entradas específicas del registro. Aquí tienes un desglose paso a paso de la mecánica del script:

  • Configuración inicial: el script comienza especificando la versión requerida y ofrece una breve sinopsis de su funcionamiento.
  • Vinculación y parámetros del cmdlet: el usuario puede ejecutar el script con los parámetros -On u -Off. Además, un parámetro -Level permite a los usuarios decidir entre un estado «Advertir» o «Bloquear» para la SmartScreen.
  • Funciones de apoyo:
  • Test-IsElevated comprueba si el script se ejecuta con privilegios administrativos.
  • Set-ItemProp crea o modifica entradas del registro.
  • Proceso principal:
  • El script comprueba primero si se ejecuta con los permisos necesarios.
  • En función de lo que introduzca el usuario, el script establece el estado de SmartScreen y modifica las entradas de registro pertinentes.
  • Se muestra al usuario un output con los valores del registro modificados.
  • Por último, el script invoca gpupdate.exe para forzar una actualización de la directiva de grupo, recordando a los usuarios que podría ser necesario reiniciar el sistema.

Posibles casos de uso

Imagina una empresa en la que una nueva política de seguridad dicta que todos los ordenadores deben tener SmartScreen de Windows Defender activado y configurado en «Bloquear». En lugar de configurar manualmente cada máquina, un profesional de TI puede desplegar este script para configurar SmartScreen de Microsoft Defender para ajustar la configuración en masa, garantizando la uniformidad y el cumplimiento en todos los dispositivos.

Comparaciones

Aunque los objetos de directiva de grupo (GPO) de la consola de administración de directivas de grupo (GPMC) también pueden configurar SmartScreen de Microsoft Defender, este script de PowerShell agiliza el proceso. En lugar de navegar por múltiples ventanas y configuraciones en GPMC, los profesionales de TI pueden ejecutar un único script, ahorrando tiempo y reduciendo posibles errores.

FAQ

  • ¿Este script puede ejecutarse en cualquier máquina?
    El script está adaptado para sistemas Windows, a partir de Windows 8.1 y Windows Server 2012.
  • ¿Qué ocurre si no ejecuto el script como administrador?
    El script dará un mensaje de error «Acceso denegado», solicitando a los usuarios que lo ejecuten con los permisos adecuados.

Implicaciones

Configurar con éxito el estado SmartScreen en toda la organización refuerza la seguridad informática, reduciendo los riesgos asociados a descargas o sitios web dañinos. Sin embargo, una configuración incorrecta puede exponer los sistemas a amenazas o provocar demasiados avisos falsos, entorpeciendo el trabajo.

Recomendaciones

  • Haz siempre una copia de seguridad del estado actual del registro antes de realizar cambios.
  • Prueba a fondo el script en un entorno controlado antes de extenderlo a toda la organización.
  • Supervisa y ajusta continuamente la configuración en función de las necesidades de la organización.

Reflexiones finales

Para los profesionales de TI que buscan una solución perfecta para este tipo de configuraciones, herramientas como NinjaOne pueden proporcionar capacidades mejoradas. Mediante la integración de scripts como el analizado anteriormente, pensado para configurar SmartScreen de Microsoft Defender, NinjaOne puede ayudar en la automatización, gestión y supervisión de las tareas de TI en toda la empresa, garantizando operaciones optimizadas y seguras.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Endpoint Management, echa un vistazo a un tour en vivoo tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…

Ver demo×
×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).