Automatizando reglas GPO

La Directiva de Grupo, más conocida por sus siglas GPO (Group Policy Object), a menudo se utiliza para restringir ciertas acciones que pueden presentar riesgos de seguridad potenciales, por ejemplo: Bloquear el acceso al Administrador de tareas, restringir el acceso a determinadas carpetas, deshabilitar la descarga de archivos ejecutables, etc.
Existen varias maneras de trabajar con reglas GPO. Por ejemplo, supongamos que queremos crear una regla GPO que impida la instalación de dispositivos extraibles (USB/HID/etc). En Windows, vamos a ejecutar y abrimos el editor GPO (gpedit.msc):
Ejecutar gpaedit.msc
Nota: Si su Windows no cuenta con gpedit.msc siga las siguientes instrucciones
Luego nos desplazamos a Configuración del equipo / Plantillas Administrativas / Sistema / Instalación de Dispositivos / Restricción de instalación de dispositivos y ahí encontramos "Impedir la Instalación de dispositivos extraibles"
Seleccionando GPO "Impedir la Instalación de dispositivos extraibles"
Doble clic y seleccionamos "Habilitada" y "Aplicar" los cambios y "Aceptar":
Habilitando regla GPO
Y quedaría así:
Y para que tome los cambios inmediatamente (sin reiniciar), abrimos el terminal cmd (con privilegios administrativos) y ejecutamos el siguiente comando:
gpupdate /force 
Ahora cada vez que conectemos un dispositivo extraíble, saldrá el siguiente mensaje impidiendo su instalación:
Mensaje directiva aplicada al conectar un dispositivo extraíble
Este mensaje se puede personalizar con las reglas "Mostrar...":
Cambiar el mensaje por default al aplicar GPO
Automatizando reglas GPO con herramientas de Windows
En entornos empresariales, puede que queramos aplicar una o varias reglas GPO, sin embargo realizar este proceso manualmente en cientos de equipos puede ser un auténtico dolor de cabeza para el sysadmin. Es por eso que la mejor opción es automatizarlo.
Por ejemplo, retomando el caso de la regla GPO descrita anteriormente, cuando la habilitamos, Windows crea las siguientes claves de registro:
:: En x86
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions
:: En x64
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\DeviceInstall\Restrictions
Y modifica otras claves, tales como:
HKLM\SYSTEM\ControlSet001\Control\PnP
HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects
HKLM\SOFTWARE\Policies\Microsoft\Windows\IPSec
HKLM\SYSTEM\ControlSet001\services\SharedAccess\Epoch
HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Epoch
Editor de registro
También hay dos carpetas que guardan las reglas GPO; GroupPolicy y GroupPolicyUsers y en dependencia de la arquitectura de su PC, se encuentran en la ruta:
:: x86
Windows\system32\GroupPolicy
Windows\system32\GroupPolicyUsers
:: x64
Windows\system32\GroupPolicy
Windows\system32\GroupPolicyUsers
Windows\SysWOW64\GroupPolicy
Windows\SysWOW64\GroupPolicyUsers
Carpetas ocultas GroupPolicy y GroupPolicyUsers
Entonces, gracias a esta información, podemos generar dos scripts batch (.bat o .cmd). Uno para agregar la regla GPO y otro para eliminarla. Y lo ejecutamos con privilegios administrativos en dependencia de lo que vayamos a hacer:
Para aplicar la regla GPO:
@echo off
REM Applying GPO...
:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO x64) ELSE (GOTO x86)

:x86
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /v DenyDeviceIDs /t REG_DWORD /d 1 /f
gpupdate /force
echo "Done"

:x64
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /v DenyDeviceIDs /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /v DenyDeviceIDs /t REG_DWORD /d 1 /f
gpupdate /force
echo "Done"
Para eliminar la regla GPO (y para otros casos de bloqueos):
@echo off
REM Removing GPO...
RD /S /Q "%WINDIR%\System32\GroupPolicy"
RD /S /Q "%WINDIR%\System32\GroupPolicyUsers"
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisableBkGndGroupPolicy" /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\ExcludeWUDriversInQualityUpdate" /f
reg delete "HKLM\SYSTEM\ControlSet001\Control\PnP" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\ControlSet001\Control\PnP" /v DontStartRawDevice /f
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\PnP" /v DisableCDD /f
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\PnP" /v DontStartRawDevices /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\IPSec" /v DisableCDDB /f
reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\IPSec" /v DontStartRawDevices /f
reg delete "HKLM\SYSTEM\ControlSet001\services\SharedAccess\Epoch" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\ControlSet001\services\SharedAccess\Epoch" /v DontStartRawDevices /f
reg delete "HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Epoch" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Epoch" /v DontStartRawDevices /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DriverSearching" /v SearchOrderConfig /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\StorageDevicePolicies"  /v WriteProtect /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\services\USBSTOR" /v Start /t REG_DWORD /d 3 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_All /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Read /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Write /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_All /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Read /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Write /t REG_DWORD /d 0 /f
for /f "delims=" %A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects" /k /f "*Machine" ^| find /i "HKEY"') do reg delete "%~A\Software" /f
for /f "delims=" %A in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects" /k /f "*User" ^| find /i "HKEY"') do reg delete "%~A\Software" /f

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO WOW64) ELSE (GOTO GPUPDATE)

:WOW64
REM Las mismas reglas anteriores pero SysWOW64
RD /S /Q "%WINDIR%\SysWOW64\GroupPolicy"
RD /S /Q "%WINDIR%\SysWOW64\GroupPolicyUsers"
reg delete "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /f
reg delete "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisableBkGndGroupPolicy" /f
reg delete "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\DriverSearching" /f
reg delete "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\WindowsUpdate\ExcludeWUDriversInQualityUpdate" /f
reg delete "HKLM\SYSTEM\Wow6432Node\ControlSet001\Control\PnP" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\Wow6432Node\ControlSet001\Control\PnP" /v DontStartRawDevice /f
reg delete "HKLM\SYSTEM\Wow6432Node\CurrentControlSet\Control\PnP" /v DisableCDD /f
reg delete "HKLM\SYSTEM\Wow6432Node\CurrentControlSet\Control\PnP" /v DontStartRawDevices /f
reg delete "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\IPSec" /v DisableCDDB /f
reg delete "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\IPSec" /v DontStartRawDevices /f
reg delete "HKLM\SYSTEM\Wow6432Node\ControlSet001\services\SharedAccess\Epoch" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\Wow6432Node\ControlSet001\services\SharedAccess\Epoch" /v DontStartRawDevices /f
reg delete "HKLM\SYSTEM\Wow6432Node\CurrentControlSet\services\SharedAccess\Epoch" /v DisableCDDB /f
reg delete "HKLM\SYSTEM\Wow6432Node\CurrentControlSet\services\SharedAccess\Epoch" /v DontStartRawDevices /f
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\DriverSearching" /v SearchOrderConfig /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\Wow6432Node\ControlSet001\Control\StorageDevicePolicies"  /v WriteProtect /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\Wow6432Node\CurrentControlSet\services\USBSTOR" /v Start /t REG_DWORD /d 3 /f
reg add "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_All /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Read /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\RemovableStorageDevices" /v Deny_Write /t REG_DWORD /d 0 /f

:GPUPDATE
gpupdate /force
echo "Done"
Nota: El script también elimina las carpetas GroupPolicy y GroupPolicyUsers para la desactivación completa de la GPO. La sola eliminación de las claves de registro no es suficiente. Por tanto haga backup de las carpetas.
Automatizando reglas GPO con LGPO (recomendada)
Otra alternativa es la utilidad de microsoft LGPO (Descarga v1.0 o v2.2). Descargamos la herramienta y podemos ejecutarla manualmente o con los siguientes scripts (con privilegios administrativos).
Nota: Modifique las variables GPOBK y LGPOPATH según la ruta donde quiera almacenar el ejecutable y la GPO.
1. Abrimos gpedit.msc, ponemos las restricciones y hacemos backup GPO: 
@echo off
:: Path folder GPO Backup
SET GPOBK="%HOMEDRIVE%\LGPO\GPObackup"
:: Path to LGPO.exe
SET LGPOPATH="%HOMEDRIVE%\LGPO\LGPO.exe"

if exist %GPOBK% (
    echo "GPO Backup OK"
    goto LGPO
) else (
    echo "Creating GPO Backup folder"
    mkdir %GPOBK%
    goto LGPO
)

:LGPO
echo "Backup GPO..."
%LGPOPATH% /b %GPOBK%
echo "Done"
2. Copiamos la carpeta donde está el backup GPO y la aplicación LGPO, vamos a otro equipo y aplicamos las reglas:
@echo off
:: Path folder GPO Backup
SET GPOBK="%HOMEDRIVE%\LGPO\GPObackup"
:: Path to LGPO.exe
SET LGPOPATH="%HOMEDRIVE%\LGPO\LGPO.exe"

if exist %GPOBK% (
    echo "GPO Backup OK"
    goto LGPO
) else (
    echo "GPO Backup doesn't exist. Abort"
    exit
)

: LGPO
echo "Apply GPO..."
%LGPOPATH% /g %GPOBK%
start /w /b gpupdate /force
echo "Done"
3. Para eliminar la regla GPO usaremos el script descrito en el apartado anterior.
Problema
Desde que se inventaron los dispositivos Plug and Play, Hot Plug, etc, una vez conectados a Windows, se instalan los drivers una única vez y los podemos desconectar y volverlos a conectar sin necesidad de instalar los drivers nuevamente. Windows guarda un registro de estos dispositivos conectados, con sus drivers, por si "los vamos a utilizar nuevamente".
Esta "comodidad" se vuelve un problema relevante de seguridad, ya que a medida que conectamos dispositivos extraíbles, Windows almacena toda esta información y al aplicar una regla GPO para impedir la conexión de dispositivos no autorizados, como la descrita anteriormente, solo funcionará para los nuevos dispositivos extraíbles. Cualquier otro dispositivo extraíble que haya sido conectado e instalado en Windows, previo a la aplicación de la regla GPO, no se verá afectado.
Para solucionarlo y que la regla GPO aplique para cualquier dispositivo (excepto los que utilizamos a diario y nos interesa autorizar en el PC) hay que hacer primero una "limpieza" de drivers instalados previamente. Para esto existen varias herramientas:
USBOblivion
USBOblivion (recomendada)
Pros: Limpia profundamente el PC y elimina instalaciones previas de dispositivos extraíbles.
Contra: No tiene una sola versión (hay para x86 y x64). Hay que reiniciar el PC para tomar los cambios. Solo limpia (no aplica reglas GPO, pero podemos hacerlo después con LGPO)
BlackUSB (Una utilidad incluida en Dextroyer)
BlackUSB
Pros: Una herramienta OpenSource que limpia los dispositivos extraíbles (usando una adaptación del método de Rob van der woude), reconecta los actuales y aplica una regla GPO de bloqueo (por clases de dispositivos) sin reiniciar el PC para tomar los cambios.
Contra: Su ejecución demora y no es compatible con todas las versiones de Windows
Ratool de sordum
Ratool
Pros: Es la herramienta más completa y ofrece una opción para prevenir las instalaciones de dispositivos extraíbles, de aplicación inmediata sin reinicio del PC y usa la regla GPO descrita en este artículo.
Contra: Es de código cerrado y solo para uso de personal profesional (realiza cambios bastante invasivos en el registro de Windows que podrían afectar el normal uso de dispositivos extraíbles después de su ejecución).
Importante:
Estas herramientas eventualmente pueden se incompatibles entre sí, ya que usan métodos diferentes (lo que se limpia/bloquea con una, no se limpia/desbloquea con la otra y viceversa), por tanto úselas a discreción.
Manual
Y si no quiere automatizar este proceso y prefiere hacerlo manualmente (para estar seguro de qué elimina y qué no) está GhostBuster (cuenta con versión portable), que enumera la acción seleccionada en «tipo de coincidencia» en la tabla. Se recomienda marcar la opción «Crear punto de restauración del sistema» antes de presionar el botón «eliminar fantasmas». La acción requiere permisos elevados, pero debe completarse sin problemas (ghacks)

Algunas imágenes son cortesía de: Tentij y Xataka 
Con la tecnología de Blogger.