Se realiza un análisis forense detallando todas las acciones que realiza un script PowerShell ejecutado por el sistema operativo Windows. En este estudio de caso real analizamos por qué el sistema de defensa antivirus EDR (Endpoint Detection and Response) lo califica de malicioso, siendo un falso positivo.
- Ejecución de script PowerShell por parte del sistema operativo.
- Propósito del script y desglose del código (análisis forense).
- Por qué el EDR califica de malicioso la ejecución de este script.
- Propósito Legítimo del Script.
Ejecución de script PowerShell por parte del sistema operativo
En el estudio de caso que nos ocupa, los equipos Windows 10 y Windows 11 de la organización, cada cierto tiempo, ejecutan este script PowerShell:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$isBroken = 0 # Define the root registry path $ShellRegRoot = 'HKCU:SoftwareClassesLocal SettingsSoftwareMicrosoftWindowsShell' $bagMRURoot = $ShellRegRoot + 'BagMRU' $bagRoot = $ShellRegRoot + 'Bags' # Define the target GUID tail for MSGraphHome $HomeFolderGuid = '14001F400E3174F8B7B6DC47BC84B9E6B38F59030000' $properties = Get-ItemProperty -Path $bagMRURoot foreach ($property in $properties.PSObject.Properties) { if ($property.TypeNameOfValue -eq 'System.Byte[]') { $hexString = ($property.Value | ForEach-Object { $_.ToString('X2') }) -join '' if ($hexString -eq $HomeFolderGuid) { $subkey = $property.Name $nodeSlot = Get-ItemPropertyValue -Path ($bagMRURoot + '' + $subkey) -Name 'NodeSlot' $isBroken = if ((Get-ItemPropertyValue -Path ($bagRoot + '' + $nodeSlot + 'Shell*') -Name 'GroupView') -eq 0) { 1 } else { 0 } break } } } Write-Host 'Final result:',$isBroken |
Se ejecuta, en Windows, desde:
|
1 |
WmiPrvSE.exe |
Con el parámetro:
|
1 |
-ExecutionPolicy Bypass -Command |
Propósito del script y desglose del código (análisis forense)
Este script verifica si la vista de carpetas en el Explorador de Windows para OneDrive/SharePoint (MSGraphHome) está configurada en vista de grupo o no.
Fases de ejecución
- Preparación:
- Busca en el registro:
- Verifica configuración:
Desglose del código del script PowerShell
El script PowerShell comentado con lo que realiza cada línea o parte importante:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# SCRIPT: Analizador de Configuración de Vista OneDrive/SharePoint en Windows # DETECCIÓN: Falso Positivo - Herramienta Legítima de Administración # Variable que almacenará el estado de la configuración $isBroken = 0 # 0 = Configuración correcta, 1 = Configuración "rota" # BLOQUE 1: DEFINICIÓN DE RUTAS DEL REGISTRO DE WINDOWS # Ruta base donde Windows almacena configuraciones del Shell/Explorador $ShellRegRoot = 'HKCU:SoftwareClassesLocal SettingsSoftwareMicrosoftWindowsShell' # BagMRU: Almacena el historial de MRU (Most Recently Used) de carpetas $bagMRURegRoot = $ShellRegRoot + 'BagMRU' # Bags: Contiene las configuraciones de vista para cada carpeta $bagRegRoot = $ShellRegRoot + 'Bags' # BLOQUE 2: IDENTIFICADOR ÚNICO DE CARPETA ONEDRIVE/SHAREPOINT # GUID que identifica específicamente la carpeta MSGraphHome (OneDrive/SharePoint) # Este GUID es constante y conocido en el ecosistema de Windows $HomeFolderGuid = '14001F400E3174F8B7B6DC47BC84B9E6B38F59030000' # Este valor no es aleatorio - es el identificador registrado para estas carpetas # BLOQUE 3: ACCESO Y ANÁLISIS DEL REGISTRO - PARTE 1 (BAGMRU) # Obtiene todas las propiedades (claves) de la ruta BagMRU # BagMRU funciona como una base de datos de rutas de carpetas recientes $properties = Get-ItemProperty -Path $bagMRURegRoot # Itera a través de todas las propiedades encontradas en BagMRU foreach ($property in $properties.PSObject.Properties) { # Filtra solo propiedades que contienen datos binarios (bytes) # Las rutas en BagMRU se almacenan como arrays de bytes, no como strings if ($property.TypeNameOfValue -eq 'System.Byte[]') { # Convierte el array de bytes a string hexadecimal para comparación # Cada byte se convierte a su representación hexadecimal de 2 caracteres $hexString = ($property.Value | ForEach-Object { $_.ToString('X2') }) -join '' # Compara con el GUID conocido de OneDrive/SharePoint if ($hexString -eq $HomeFolderGuid) { # Si encuentra coincidencia, extrae el nombre de la subclave $subkey = $property.Name # BLOQUE 4: RECUPERACIÓN DE CONFIGURACIÓN ESPECÍFICA # NodeSlot es un puntero que relaciona BagMRU con Bags # Indica dónde se almacena la configuración de vista para esta carpeta $nodeSlot = Get-ItemPropertyValue -Path ($bagMRURegRoot + '' + $subkey) -Name 'NodeSlot' # BLOQUE 5: VERIFICACIÓN DE CONFIGURACIÓN GroupView # Consulta la configuración GroupView en la ruta Bags correspondiente # GroupView = 1: Vista agrupada habilitada (configuración esperada) # GroupView = 0: Vista agrupada deshabilitada ("rota") $isBroken = if ((Get-ItemPropertyValue -Path ($bagRegRoot + '' + $nodeSlot + 'Shell*') -Name 'GroupView') -eq 0) { 1 # Configuración incorrecta } else { 0 # Configuración correcta } # Rompe el loop al encontrar la primera coincidencia break } } } # BLOQUE 6: SALIDA DEL RESULTADO Write-Host 'Final result:', $isBroken # Salida: 0 = Vista configurada correctamente, 1 = Vista necesita reparación |
Por qué el EDR califica de malicioso la ejecución de este script
- Manipulación del registro de Windows: accede a claves sensibles del sistema.
- Comportamiento de reconnaissance: investiga configuraciones del sistema.
- Técnica de evasión: podría usarse para entender cómo el sistema almacena rutas de acceso.
- Patrón de actividad inusual: script que examina configuraciones del Shell son comunes en malware.
- OneDrive/SharePoint targeting: interés específico en servicios cloud empresariales.
Comportamientos que disparan la detección del EDR
| Comportamiento | Razón legítima | Uso malicioso potencial |
|---|---|---|
| Acceso al Registro | Lectura de configuraciones de usuario | Obfuscación/Persistencia |
| Manipulación Bytes/Hex | Formato nativo de BagMRU | Cifrado/Encoding malicioso |
| GUID Específico | Identificador conocido de OneDrive | Hardcoded C2 indicators |
Arquitectura Técnica del Subsistema BagMRU/Bags
|
1 2 3 4 5 6 7 8 9 10 |
BagMRU (Base de Datos de Rutas) ├── Propiedades Binarias (GUIDs de carpetas) ├── NodeSlot (Puntero relacional) └── Timestamps (Metadata temporal) Bags (Configuraciones de Vista) ├── NodeSlot correspondiente ├── Configuración Shell │ └── GroupView (0/1) └── Otras configuraciones de vista |
Propósito Legítimo del Script
Tras el análisis forense, se comprueba que este script es claramente una herramienta de troubleshooting para:
- Auditoría de Cumplimiento de configuraciones de UI.
- Diagnóstico de Problemas de Vista en OneDrive/SharePoint.
- Verificación de Configuraciones Corporativas estandarizadas.
- Automatización de Soporte Técnico para escritorios gestionados.
Evidencias de Legitimidad
- GUID público:
14001F400E3174F8B7B6DC47BC84B9E6B38F59030000es conocido. - Solo lectura: no modifica el registro, solo lee.
- Propósito específico: lógica enfocada en un problema concreto.
- Sin ofuscación: código claro y legible.
- Ejecución desde software firmado y legítimo de Microsoft (WmiPrvSE.exe).
Este es un claro caso de falso positivo. El script muestra comportamientos benignos típicos de herramientas de administración de sistemas, no de malware. La detección del EDR se basa en heurísticos genéricos que no comprenden el contexto específico de administración de Windows.