⚠️ Seguridad en máquinas virtuales: Riesgos y cómo protegerte 2026

Seguridad en máquinas virtuales: Riesgos y cómo protegerte 2026

Table of Contents

Tu máquina virtual puede tener un backdoor activo sin que lo sepas: riesgos reales y cómo protegerte en 2026

La seguridad en máquinas virtuales es un aspecto crítico que muchos usuarios ignoran al descargar VMs de terceros: pueden contener malware preinstalado, backdoors ocultos o configuraciones de red inseguras sin ningún aviso visible. En Seguridad en mi PC documentamos cómo MITRE ATT&CK registra en T1204.003 que actores maliciosos suben imágenes de VMs comprometidas a repositorios públicos, y cómo seis pasos concretos permiten usar máquinas virtuales de forma segura sin renunciar a su utilidad. Accede al catálogo completo de guías técnicas en nuestra sección de ciberseguridad con recursos sobre virtualización, aislamiento de red y protección avanzada del sistema, y explora también todos los artículos etiquetados como ciberseguridad con investigaciones técnicas sobre malware, backdoors y hardening de entornos virtualizados.

💡 Resumen rápido

⚠️ Seguridad en máquinas virtuales: riesgos y cómo protegerte en 2026

Las máquinas virtuales descargadas de terceros pueden contener malware preinstalado, backdoors ocultos o configuraciones de red inseguras sin ningún aviso visible. MITRE ATT&CK documenta en T1204.003 que actores maliciosos suben imágenes de VMs comprometidas a repositorios públicos para infectar a usuarios que confían en ellas.

  • ✅ 5 riesgos documentados: malware preinstalado, backdoors, imágenes maliciosas, actividad oculta en red y configuración insegura
  • ✅ Cómo protegerte: descargar solo de fuentes oficiales, verificar hash SHA256 y aislar la red en modo host-only
  • ✅ Señales de compromiso: conexiones inesperadas, procesos desconocidos y acceso remoto activo
  • ✅ VM de terceros vs VM propia: comparativa de riesgos y control del contenido
  • ✅ Cómo verificar el hash en PowerShell: Get-FileHash antes de ejecutar cualquier imagen descargada
  • ✅ Configuración segura por hipervisor: VirtualBox, VMware y Hyper-V
  • ✅ Script PowerShell VMDetector con 2 tareas programadas: inventaría hipervisores y VMs en inicio y logon

📅 2026 · 🕐 8 minutos de lectura

💡 Definición rápida Seguridad en máquinas virtuales: Conjunto de medidas para garantizar que una VM no contenga malware, backdoors ni configuraciones inseguras. Depende del origen de la imagen: una VM creada desde una ISO oficial es segura, mientras que una descargada de terceros puede ser un vector de ataque documentado en MITRE T1204.003.

Las máquinas virtuales instaladas por terceros pueden suponer un riesgo de seguridad si no provienen de fuentes confiables, ya que pueden contener malware, configuraciones inseguras o accesos ocultos. En esta guía aprenderás a identificar los riesgos, protegerte y usar entornos de virtualización de forma segura.

Esta guía complementa nuestra sección sobre malware y virus informáticos y el hardening general de Windows 11.


¿Qué es la seguridad en máquinas virtuales?

📌 ¿Qué es la seguridad en máquinas virtuales?

La seguridad en máquinas virtuales depende completamente de su origen: una VM de fuente oficial es segura, una de terceros sin verificar puede comprometer todo el sistema anfitrión. Un entorno virtualizado funciona gracias al hipervisor, software que gestiona el acceso al hardware físico y mantiene el aislamiento de procesos entre la máquina huésped y el host. Cuando la imagen de disco virtual (archivos .OVA, .OVF o .VMDK) proviene de una fuente no verificada, ese aislamiento deja de ser una garantía y se convierte en el escenario perfecto para ocultar actividad maliciosa.

💡 ¿Qué es un hipervisor?

Un hipervisor es el software que crea y gestiona máquinas virtuales, controlando el acceso al hardware físico del equipo anfitrión. Existen dos tipos: tipo 1 o bare-metal (Hyper-V, VMware ESXi), que corre directamente sobre el hardware, y tipo 2 o hosted (VirtualBox, VMware Workstation), que corre sobre el sistema operativo del host. La seguridad del hipervisor es el pilar fundamental de cualquier entorno de virtualización seguro.

Los casos de uso más frecuentes de los entornos virtualizados donde la integridad de la imagen es crítica incluyen:

  • 🧪 Pruebas de software, entorno aislado (sandboxing) para probar aplicaciones sin riesgo para el sistema anfitrión
  • 💻 Desarrollo web y apps, sistemas preconfigurados para ahorrar tiempo en la configuración inicial
  • 🔒 Seguridad informática, laboratorios de análisis estático y dinámico de malware en entornos controlados
  • 🖥️ Sistemas aislados, ejecutar sistemas operativos alternativos reduciendo la superficie de ataque del host
  • 🎓 Formación y CTF, imágenes preconfiguradas de plataformas de hacking ético como Hack The Box o TryHackMe
Referencia oficial: Según el NIST SP 800-125, Guía de seguridad para virtualización, el hipervisor es responsable de gestionar el acceso al hardware y prevenir que un sistema huésped infecte a otros. La integridad de la imagen de disco virtual es el primer eslabón de la cadena de seguridad.

🚨 Riesgos de las máquinas virtuales de terceros

🚨 Dato crítico: MITRE ATT&CK documenta en T1204.003 que los actores maliciosos suben imágenes de VMs con backdoors a repositorios públicos. Según T1564.006, el tráfico de red cifrado de la VM puede ser difícil de rastrear desde el host, ocultando la exfiltración de datos y la comunicación con servidores de comando y control (C2).
Amenaza documentadaDescripciónTécnica MITRENivel
Malware preinstaladoCódigo malicioso incluido en la imagen de disco virtualT1204.003🔴 Crítico
Backdoors ocultosAcceso remoto persistente (RAT) sin conocimiento del usuarioT1219🔴 Crítico
Imagen maliciosa en repositorioArchivo OVA/OVF subido con nombre legítimo para engañar al usuarioT1608.001🔴 Alto
Actividad oculta en redTráfico de red cifrado difícil de rastrear desde el hostT1564.006🟠 Alto
Configuración de red inseguraVM en modo bridged con acceso directo a la red local sin aislamientoT1204.003🟠 Alto
VM escapeExplotación de vulnerabilidades del hipervisor para acceder al hostT1611🔴 Crítico
Minero de criptomonedasCryptojacking ejecutado desde la VM consumiendo recursos del hostT1496🟠 Medio

¿Por qué las VMs de terceros son especialmente peligrosas?

🧠 ¿Por qué las VMs de terceros son especialmente peligrosas?

Una imagen de disco virtual es, a efectos prácticos, un sistema operativo completo empaquetado en un archivo. Al importarla en VirtualBox, VMware o Hyper-V, el usuario ejecuta ese sistema sin conocer su contenido real. Este modelo de confianza implícita convierte las VMs de terceros en uno de los vectores de infección más eficaces de 2026: el sandboxing del hipervisor protege al host de la actividad interna del huésped, pero no impide que la VM robe credenciales introducidas por el usuario ni que establezca comunicaciones C2 a través de la red compartida.

  • 🔍 Falta de verificación de la cadena de custodia, no existe firma digital que garantice la integridad del archivo OVA/OVF descargado
  • 🌐 Origen desconocido, repositorios no oficiales sin auditoría de contenido ni control de calidad
  • ⚙️ Configuración compleja, difícil detectar cambios maliciosos en un sistema operativo preconfigurado con cientos de servicios activos
  • 👁️ Difícil detección del tráfico malicioso, las comunicaciones de la VM se mezclan con el tráfico legítimo del host
  • 🔐 Accesos ocultos preinstalados, herramientas de acceso remoto (RAT) configuradas para conectarse al atacante en el primer arranque
  • 🔑 Credenciales comprometidas, cualquier contraseña o dato personal introducido puede ser exfiltrado en segundos

💡 ¿Qué es un VM escape?

Un VM escape (o escape del hipervisor) es un ataque en el que código malicioso ejecutado dentro de una máquina virtual explota vulnerabilidades del hipervisor para salir del entorno virtualizado y acceder al sistema anfitrión o a otras VMs en el mismo host. Es la amenaza más grave en entornos de virtualización y justifica mantener el hipervisor siempre actualizado a su última versión.

Referencia NIST: El NIST SP 800-125A, Recomendaciones de seguridad para hipervisores establece que el hipervisor debe proporcionar aislamiento en tiempo de ejecución entre VMs y habilitar una red virtual que preserve la seguridad frente a la red externa. La configuración del adaptador de red es la primera decisión de seguridad al importar cualquier imagen de disco virtual.

🔐 ¿Cómo garantizar la seguridad en máquinas virtuales que usas?

Medidas clave: Descarga VMs solo desde fuentes oficiales · Verifica el hash SHA256 antes de ejecutar · Configura la red en modo host-only o NAT sin port forwarding · No introduzcas datos personales ni credenciales · Analiza la imagen con antivirus antes de arrancarla · Crea snapshots antes de ejecutar cualquier software desconocido · Mantén el hipervisor actualizado para prevenir técnicas de VM escape.
  1. Descarga solo de fuentes oficiales, OSBoxes, webs oficiales de distribuciones Linux o Microsoft; nunca de foros ni repositorios sin verificar
  2. 🔑 Verifica el hash SHA256, compara el hash del archivo OVA/OVF descargado con el publicado por el autor para garantizar la integridad del archivo
  3. 🌐 Aísla la red, usa modo host-only o NAT sin port forwarding según Microsoft Learn, Hyper-V; nunca uses modo bridged con VMs de origen desconocido
  4. 🛡️ Analiza la imagen con antivirus antes de arrancarla por primera vez; un análisis estático puede detectar firmas de malware conocido sin necesidad de ejecutar la VM
  5. 🚫 No introduzcas datos personales, credenciales, tarjetas o contraseñas en una VM de origen desconocido
  6. 📸 Usa snapshots, toma una instantánea del estado inicial antes de cualquier cambio para poder revertir ante actividad sospechosa
  7. 🔄 Actualiza el hipervisor regularmente, las técnicas de VM escape explotan vulnerabilidades no parcheadas de VirtualBox, VMware o Hyper-V

✅ Checklist de seguridad antes de ejecutar una VM descargada

Antes de importar o arrancar cualquier imagen de disco virtual, confirma cada punto:

  • ☐ La imagen proviene de un sitio oficial o verificado (no de foros ni enlaces de Discord)
  • ☐ He comparado el hash SHA256 del archivo con el publicado en la fuente oficial
  • ☐ He analizado el archivo .OVA/.OVF con el antivirus del host antes de importarlo
  • ☐ El adaptador de red está configurado en modo host-only (no bridged)
  • ☐ No tengo port forwarding activo hacia la VM
  • ☐ He tomado un snapshot tras la importación y antes del primer arranque
  • ☐ No voy a introducir contraseñas reales, datos bancarios ni credenciales de trabajo
  • ☐ El hipervisor (VirtualBox / VMware / Hyper-V) está actualizado a la última versión
  • ☐ Tengo activo Windows Defender o el antivirus del host durante el uso de la VM.

Señales de que una máquina virtual está comprometida

⚠️ Señales de que una máquina virtual está comprometida

Detectar una VM comprometida requiere monitorizar tanto el comportamiento interno del entorno virtualizado como la actividad de red visible desde el host. Estas son las señales de alerta más relevantes y la respuesta inmediata recomendada:

Señal de alertaQué puede indicarAcción urgente
Conexiones de red inesperadasBackdoor estableciendo comunicación con servidor C2🔴 Apaga la VM y analiza el tráfico con Wireshark
Procesos desconocidos activosMalware preinstalado ejecutándose en segundo plano🔴 Descarta la VM y crea una nueva desde ISO oficial
Acceso remoto activo (RDP, VNC, SSH)Herramienta RAT preinstalada con puerto abierto🔴 Aísla inmediatamente la red de la VM
Rendimiento anómalo del hostCryptojacking o minería de criptomonedas desde la VM🟠 Monitoriza CPU y tráfico de red del host
Archivos sospechosos en la VMHerramientas de ataque o exfiltración de datos preinstaladas🔴 Descarta la imagen y descárgala de fuente oficial
Servicios escuchando en puertos inesperadosBackdoor esperando conexión entrante del atacante🔴 Ejecuta netstat -anb dentro de la VM y apágala
Tareas programadas o scripts de inicio desconocidosPersistencia de malware configurada en el arranque del sistema🟠 Revisa Task Scheduler y /etc/cron.d

🔍 Cómo verificar el hash SHA256 en PowerShell

💡 ¿Cómo verificar el hash de una VM en Windows?

Para verificar la integridad de una imagen de disco virtual antes de ejecutarla, abre PowerShell y ejecuta:

Get-FileHash .\archivo.ova -Algorithm SHA256

Compara el resultado con el hash SHA256 publicado en la fuente oficial. Si no coincide, la imagen ha sido manipulada: no la ejecutes bajo ningún concepto. Este proceso de verificación de integridad tarda menos de diez segundos y descarta cualquier manipulación del archivo antes de importarlo al hipervisor.


🆚 VM de terceros vs VM propia: comparativa

CaracterísticaVM de tercerosVM propia (ISO oficial)
Riesgo de malware preinstalado🔴 Alto (T1204.003)🟢 Muy bajo
Control del contenido🔴 Ninguno🟢 Total
Backdoors ocultos🔴 Posible🟢 Inexistente
Verificación de integridad del archivo🟠 Posible con hash SHA256 si el autor lo publica🟢 Hash oficial siempre disponible
Cadena de custodia🔴 Desconocida🟢 Verificable desde el origen
Configuración de red por defecto🔴 Frecuentemente bridged o NAT con port forwarding🟢 Configurable desde cero
Tiempo de setup🟢 Inmediato (imagen lista)🟠 Requiere instalación manual
Recomendado⚠️ Solo fuentes oficiales verificadas✅ Siempre la opción más segura

🖥️ Configuración segura por hipervisor: VirtualBox, VMware y Hyper-V

La superficie de ataque de un entorno de virtualización varía según el hipervisor utilizado. Estas son las configuraciones de seguridad esenciales para los tres hipervisores de tipo 2 más populares en entornos de escritorio:

Configuración de seguridadVirtualBoxVMware WorkstationHyper-V
Red host-only✅ Adaptador solo-anfitrión✅ Host-only✅ Red interna
Deshabilitar carpetas compartidas✅ Dispositivos → Carpetas compartidas✅ VM Settings → Shared Folders✅ Deshabilitar VMBus
Deshabilitar portapapeles compartido✅ Dispositivos → Portapapeles: Desactivado✅ VM Settings → Isolation⚠️ No disponible directamente
Deshabilitar drag & drop✅ Dispositivos → Arrastrar y soltar: Desactivado✅ VM Settings → Isolation⚠️ No disponible directamente
Cifrado de disco virtual✅ AES-256✅ Full disk encryption✅ BitLocker en el VHDX
Snapshot antes del primer arranque✅ Instantáneas✅ Snapshots✅ Puntos de control

💡 Modos de red en máquinas virtuales: diferencias clave

  • NAT: La VM comparte la IP del host y tiene acceso a Internet, pero no es visible desde la red local. Nivel de aislamiento medio.
  • Host-only: La VM solo puede comunicarse con el host. Sin acceso a Internet ni a la red local. El modo más seguro para VMs de origen desconocido.
  • Bridged (modo puente): La VM obtiene una IP propia en la red local. Máxima exposición. Nunca usar con VMs no verificadas.
  • Red interna: Las VMs se comunican solo entre sí, sin acceso al host ni a Internet. Ideal para laboratorios de análisis de malware.

Script completo: Detectar y deshabilitar máquinas virtuales de terceros con tareas programadas

🛡️ Script completo: Detectar y deshabilitar máquinas virtuales de terceros con tareas programadas

A continuación encontrarás un script PowerShell completo y unificado que aplica las 6 medidas preventivas más eficaces frente a máquinas virtuales de terceros instaladas sin control en un único paso: inventario de hipervisores instalados (VirtualBox, VMware, Hyper-V), listado de VMs registradas en cada uno, búsqueda de archivos .ova, .ovf, .vmdk, .vdi, .vhd y .vhdx en el equipo, verificación de servicios de virtualización activos, detección de redes virtuales bridged expuestas a la LAN y aviso cuando aparecen VMs nuevas respecto al inventario anterior. Además, crea dos tareas programadas que reaplican el inventario y vigilan el estado en cada reinicio y en cada inicio de sesión, de modo que si un instalador, un tercero con acceso al equipo o un malware registra una VM nueva, el script la detecta en el siguiente arranque o login.

⚠️ Antes de ejecutar: Este script es no destructivo por defecto: solo inventaría, audita y registra. Las acciones potencialmente destructivas (deshabilitar servicios, detener VMs, desregistrar máquinas) están comentadas en el código con # y debes descomentarlas manualmente si las quieres activar. Si usas VMs legítimas para desarrollo, formación o laboratorio, deja las líneas comentadas y usa el script solo en modo auditoría. Se crea un log automático en C:\Logs\vm-detector.log y un CSV histórico en C:\Logs\vm-detector-historico.csv. Lee siempre el código antes de pegarlo en PowerShell.

📅 Tareas programadas que crea este script

El script registra dos tareas independientes en el Programador de tareas de Windows. Cada una se ejecuta en un disparador distinto para garantizar que el inventario esté siempre actualizado:

Nombre de la tareaDisparadorFrecuenciaPropósito
VMDetector-InicioAl iniciar Windows (-AtStartup)Cada arranque del equipoInventaría hipervisores, VMs registradas y archivos de disco virtual tras cada reinicio para detectar VMs nuevas instaladas mientras el equipo estaba apagado o en reposo
VMDetector-LogonAl iniciar sesión cualquier usuario (-AtLogOn)Cada login (incluye reinicios desde sesión)Repite el inventario cuando un usuario inicia sesión, útil para detectar VMs registradas por instaladores silenciosos que se ejecutan con la cuenta de usuario
Cómo funcionan las tareas programadas: Las dos tareas se ejecutan como SYSTEM con privilegios elevados y en modo oculto (sin ventana visible). El script es idempotente en modo auditoría: leer y registrar el estado no modifica nada del sistema. La carga sobre el equipo es mínima: cada ejecución consume unos pocos segundos de CPU. El CSV histórico en C:\Logs\vm-detector-historico.csv deja constancia de cada ejecución con el número de hipervisores y VMs detectados, lo que te permite ver tendencias a lo largo del tiempo.

📥 Pasos para instalar y activar el inventario automático

  1. Abre PowerShell como administrador: pulsa la tecla Windows, escribe PowerShell, haz clic derecho sobre Windows PowerShell y selecciona Ejecutar como administrador.
  2. Permite la ejecución de scripts en la sesión actual (no afecta a futuras sesiones):
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  3. Crea la carpeta de scripts del sistema: el script se instalará en C:\Scripts\ para que las tareas programadas lo encuentren siempre en la misma ruta:
    New-Item -ItemType Directory -Path "C:\Scripts" -Force
  4. Crea el archivo del script: abre el Bloc de notas, pega el código que verás más abajo y guárdalo como VMDetector.ps1 directamente en C:\Scripts\. Asegúrate de que el tipo de archivo sea Todos los archivos, no .txt.
  5. Si usas VMs legítimas, deja las líneas destructivas comentadas (así se ejecuta solo el inventario, sin deshabilitar nada). Si quieres bloquear por completo la virtualización en el equipo, descomenta las líneas marcadas como # DESTRUCTIVO.
  6. Ejecuta el script por primera vez desde PowerShell (esto aplicará el inventario Y creará las dos tareas programadas):
    C:\Scripts\VMDetector.ps1
  7. Verifica que las dos tareas programadas se crearon correctamente:
    Get-ScheduledTask -TaskName "VMDetector-*"
  8. Revisa el log y el CSV histórico: C:\Logs\vm-detector.log contiene los resultados detallados y C:\Logs\vm-detector-historico.csv el resumen de cada ejecución.
  9. Reinicia el equipo: la tarea de inicio se ejecutará automáticamente y el inventario quedará registrado en el CSV.

💻 Script unificado de detección de VMs (copia y pega)

# ============================================================
# Script: VMDetector - deteccion de maquinas virtuales
# Autor:  seguridadenmipc.com
# Compat: Windows 10 / 11 / Server 2019+
# Uso:    Ejecutar como administrador (1a vez)
#         Despues se reaplica solo: inicio y logon
# Ruta:   C:\Scripts\VMDetector.ps1
# Modo auditoria por defecto (lineas destructivas comentadas)
# ============================================================

# 1. Verificar privilegios de administrador
if (-not ([Security.Principal.WindowsPrincipal] `
    [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
    exit
}

# 2. Preparar log y CSV historico
$logDir = "C:\Logs"
if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null }
$log = "$logDir\vm-detector.log"
$csv = "$logDir\vm-detector-historico.csv"
Start-Transcript -Path $log -Append | Out-Null

$disparador = if ($args[0]) { $args[0] } else { "Manual" }
Write-Host "=== VMDetector - inventario de maquinas virtuales ===" -ForegroundColor Cyan
Write-Host "Fecha: $(Get-Date)  |  Disparador: $disparador" -ForegroundColor Gray

$hipervisores = 0
$vmTotales    = 0
$archivosVM   = 0

# 3. DETECCION DE VIRTUALBOX
Write-Host "`n--- VirtualBox ---" -ForegroundColor Yellow
$vboxPath = @(
    "${env:ProgramFiles}\Oracle\VirtualBox\VBoxManage.exe",
    "${env:ProgramFiles(x86)}\Oracle\VirtualBox\VBoxManage.exe"
) | Where-Object { Test-Path $_ } | Select-Object -First 1

if ($vboxPath) {
    Write-Host "[!] VirtualBox detectado en: $vboxPath" -ForegroundColor Red
    $hipervisores++
    try {
        $vboxVMs = & $vboxPath list vms 2>$null
        $countVbox = ($vboxVMs | Measure-Object).Count
        Write-Host "[i] $countVbox VMs registradas en VirtualBox:" -ForegroundColor Cyan
        $vboxVMs | ForEach-Object { Write-Host "    - $_" -ForegroundColor Gray }
        $vmTotales += $countVbox

        # DESTRUCTIVO (descomenta para detener todas las VMs de VirtualBox):
        # & $vboxPath list runningvms | ForEach-Object {
        #     $name = ($_ -split '"')[1]
        #     & $vboxPath controlvm $name poweroff
        # }
    } catch { Write-Host "[!] Error listando VMs de VirtualBox: $_" -ForegroundColor Yellow }
} else {
    Write-Host "[OK] VirtualBox no instalado." -ForegroundColor Green
}

# 4. DETECCION DE VMWARE (Workstation / Player)
Write-Host "`n--- VMware ---" -ForegroundColor Yellow
$vmrun = @(
    "${env:ProgramFiles(x86)}\VMware\VMware Workstation\vmrun.exe",
    "${env:ProgramFiles}\VMware\VMware Workstation\vmrun.exe",
    "${env:ProgramFiles(x86)}\VMware\VMware VIX\vmrun.exe"
) | Where-Object { Test-Path $_ } | Select-Object -First 1

if ($vmrun) {
    Write-Host "[!] VMware detectado en: $vmrun" -ForegroundColor Red
    $hipervisores++
    try {
        $vmwareVMs = & $vmrun list 2>$null
        Write-Host "[i] VMs en ejecucion de VMware:" -ForegroundColor Cyan
        $vmwareVMs | ForEach-Object { Write-Host "    $_" -ForegroundColor Gray }

        # DESTRUCTIVO (descomenta para detener todas las VMs activas de VMware):
        # $vmwareVMs | Select-Object -Skip 1 | ForEach-Object {
        #     if ($_ -match '\.vmx$') { & $vmrun stop $_ hard }
        # }
    } catch { Write-Host "[!] Error listando VMs de VMware: $_" -ForegroundColor Yellow }
} else {
    Write-Host "[OK] VMware no instalado." -ForegroundColor Green
}

# 5. DETECCION DE HYPER-V
Write-Host "`n--- Hyper-V ---" -ForegroundColor Yellow
$hyperv = Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -ErrorAction SilentlyContinue
if ($hyperv -and $hyperv.State -eq "Enabled") {
    Write-Host "[!] Hyper-V esta habilitado en este equipo." -ForegroundColor Red
    $hipervisores++
    try {
        $hvVMs = Get-VM -ErrorAction SilentlyContinue
        Write-Host "[i] $($hvVMs.Count) VMs registradas en Hyper-V:" -ForegroundColor Cyan
        $hvVMs | ForEach-Object {
            Write-Host "    - $($_.Name) [$($_.State)]" -ForegroundColor Gray
        }
        $vmTotales += $hvVMs.Count

        # DESTRUCTIVO (descomenta para detener todas las VMs de Hyper-V):
        # Get-VM | Where-Object { $_.State -eq "Running" } | Stop-VM -TurnOff -Force
    } catch { Write-Host "[!] Error listando VMs de Hyper-V: $_" -ForegroundColor Yellow }
} else {
    Write-Host "[OK] Hyper-V no esta habilitado." -ForegroundColor Green
}

# 6. BUSQUEDA DE ARCHIVOS DE DISCO VIRTUAL EN DISCOS LOCALES
Write-Host "`n--- Archivos de disco virtual ---" -ForegroundColor Yellow
$extensiones = @("*.ova","*.ovf","*.vmdk","*.vdi","*.vhd","*.vhdx")
$rutas = @("C:\Users","C:\VMs","D:\","E:\") | Where-Object { Test-Path $_ }
$archivosEncontrados = @()
foreach ($ruta in $rutas) {
    try {
        $encontrados = Get-ChildItem -Path $ruta -Include $extensiones -Recurse `
            -ErrorAction SilentlyContinue -Force |
            Where-Object { -not $_.PSIsContainer }
        $archivosEncontrados += $encontrados
    } catch {}
}
$archivosVM = $archivosEncontrados.Count
if ($archivosVM -gt 0) {
    Write-Host "[!] $archivosVM archivos de disco virtual encontrados:" -ForegroundColor Red
    $archivosEncontrados | Select-Object -First 20 | ForEach-Object {
        $tamMB = [math]::Round($_.Length/1MB,1)
        Write-Host "    - $($_.FullName) ($tamMB MB)" -ForegroundColor Gray
    }
    if ($archivosVM -gt 20) {
        Write-Host "    ... y $($archivosVM - 20) archivos mas (ver log)." -ForegroundColor Gray
    }
} else {
    Write-Host "[OK] Ningun archivo .ova/.ovf/.vmdk/.vdi/.vhd/.vhdx detectado." -ForegroundColor Green
}

# 7. SERVICIOS DE VIRTUALIZACION ACTIVOS
Write-Host "`n--- Servicios de virtualizacion ---" -ForegroundColor Yellow
$serviciosVM = @("VBoxSDS","VMUSBArbService","VMAuthdService",
                 "vmms","vmcompute","hvhost")
foreach ($s in $serviciosVM) {
    $svc = Get-Service -Name $s -ErrorAction SilentlyContinue
    if ($svc) {
        Write-Host "[!] Servicio '$($svc.Name)' presente. Estado: $($svc.Status) | Inicio: $($svc.StartType)" `
            -ForegroundColor Red

        # DESTRUCTIVO (descomenta para deshabilitar servicios de virtualizacion):
        # Stop-Service -Name $svc.Name -Force -ErrorAction SilentlyContinue
        # Set-Service -Name $svc.Name -StartupType Disabled
    }
}

# 8. ADAPTADORES DE RED VIRTUAL EN MODO BRIDGED
Write-Host "`n--- Adaptadores virtuales (bridged) ---" -ForegroundColor Yellow
$vNics = Get-NetAdapter -ErrorAction SilentlyContinue |
    Where-Object { $_.InterfaceDescription -match "VirtualBox|VMware|Hyper-V" }
if ($vNics) {
    $vNics | ForEach-Object {
        Write-Host "[!] Adaptador virtual: $($_.Name) - $($_.InterfaceDescription) [$($_.Status)]" `
            -ForegroundColor Red
    }
} else {
    Write-Host "[OK] Sin adaptadores virtuales tipo VirtualBox/VMware/Hyper-V." -ForegroundColor Green
}

# 9. RESUMEN AL CSV HISTORICO
$resumen = [PSCustomObject]@{
    Fecha         = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
    Disparador    = $disparador
    Hipervisores  = $hipervisores
    VMsRegistradas= $vmTotales
    ArchivosVM    = $archivosVM
    AdaptadoresVR = ($vNics | Measure-Object).Count
}
$resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
Write-Host "`n[OK] Resumen anadido al CSV. Hipervisores: $hipervisores | VMs: $vmTotales | Archivos: $archivosVM" `
    -ForegroundColor Green

# 10. CREAR LAS 2 TAREAS PROGRAMADAS (solo si no existen)
$scriptPath = "C:\Scripts\VMDetector.ps1"

# 10a. Tarea: al iniciar Windows
try {
    if (-not (Get-ScheduledTask -TaskName "VMDetector-Inicio" -ErrorAction SilentlyContinue)) {
        $action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
            -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" Inicio"
        $trigger = New-ScheduledTaskTrigger -AtStartup
        $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
            -LogonType ServiceAccount -RunLevel Highest
        $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
            -DontStopIfGoingOnBatteries -StartWhenAvailable `
            -ExecutionTimeLimit (New-TimeSpan -Minutes 10)
        Register-ScheduledTask -TaskName "VMDetector-Inicio" `
            -Action $action -Trigger $trigger -Principal $principal -Settings $settings `
            -Description "Inventario de VMs al arranque - seguridadenmipc.com" | Out-Null
        Write-Host "[OK] Tarea 'VMDetector-Inicio' creada." -ForegroundColor Green
    } else {
        Write-Host "[i] Tarea 'VMDetector-Inicio' ya existe." -ForegroundColor Cyan
    }
} catch { Write-Host "[X] Error en tarea Inicio: $_" -ForegroundColor Red }

# 10b. Tarea: al iniciar sesion (logon / reinicio desde sesion)
try {
    if (-not (Get-ScheduledTask -TaskName "VMDetector-Logon" -ErrorAction SilentlyContinue)) {
        $action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
            -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" Logon"
        $trigger = New-ScheduledTaskTrigger -AtLogOn
        $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
            -LogonType ServiceAccount -RunLevel Highest
        $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
            -DontStopIfGoingOnBatteries -StartWhenAvailable `
            -ExecutionTimeLimit (New-TimeSpan -Minutes 10)
        Register-ScheduledTask -TaskName "VMDetector-Logon" `
            -Action $action -Trigger $trigger -Principal $principal -Settings $settings `
            -Description "Inventario de VMs al iniciar sesion - seguridadenmipc.com" | Out-Null
        Write-Host "[OK] Tarea 'VMDetector-Logon' creada." -ForegroundColor Green
    } else {
        Write-Host "[i] Tarea 'VMDetector-Logon' ya existe." -ForegroundColor Cyan
    }
} catch { Write-Host "[X] Error en tarea Logon: $_" -ForegroundColor Red }

Write-Host "`n[OK] VMDetector activo. Disparador: $disparador" -ForegroundColor Green
Write-Host "     Log: $log" -ForegroundColor Gray
Write-Host "     CSV: $csv" -ForegroundColor Gray
Stop-Transcript | Out-Null

↩️ Script de reversión (elimina las 2 tareas programadas)

Si quieres desactivar la vigilancia automática (por ejemplo, porque has empezado a usar VirtualBox o VMware de forma legítima para formación o desarrollo), ejecuta este script. Elimina primero las dos tareas programadas para que el inventario no vuelva a ejecutarse al siguiente arranque:

# ============================================================
# Revertir VMDetector
# ============================================================

# 1. ELIMINAR las 2 tareas programadas
$tareas = @("VMDetector-Inicio", "VMDetector-Logon")
foreach ($t in $tareas) {
    if (Get-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue) {
        Unregister-ScheduledTask -TaskName $t -Confirm:$false
        Write-Host "[OK] Tarea $t eliminada." -ForegroundColor Green
    }
}

# 2. (Opcional) Eliminar el script y los logs
# Remove-Item "C:\Scripts\VMDetector.ps1" -Force -ErrorAction SilentlyContinue
# Remove-Item "C:\Logs\vm-detector.log" -Force -ErrorAction SilentlyContinue
# Remove-Item "C:\Logs\vm-detector-historico.csv" -Force -ErrorAction SilentlyContinue

Write-Host ""
Write-Host "[OK] Tareas programadas eliminadas. VMDetector desactivado." -ForegroundColor Green
Write-Host "    Logs preservados en C:\Logs\vm-detector.log" -ForegroundColor Cyan
Write-Host "    (Descomenta las lineas del paso 2 si quieres borrar tambien el script y los logs.)" `
    -ForegroundColor Yellow

⚠️ Riesgos y efectos reales del script

Conviene entender exactamente qué hace y qué no hace este script antes de ejecutarlo. En su modo por defecto es un script de auditoría puramente lectora: no detiene VMs, no deshabilita servicios y no elimina archivos. Las acciones potencialmente destructivas están comentadas con # para que el usuario decida conscientemente si activarlas.

Función del sistema¿Se ve afectada?Detalle técnico
Inicio de sesión y arranque de Windows🟢 NoLas tareas se ejecutan en background tras el arranque, sin bloquearlo
Banca, Gmail y navegación web🟢 NoEl script no toca DNS, hosts, proxy ni pila de red del host
Instalación de VirtualBox, VMware o Hyper-V🟢 NoSolo lee el estado; no desinstala software ni elimina claves del registro
VMs en ejecución🟢 No (por defecto)Las líneas que detendrían VMs con poweroff, stop o Stop-VM están comentadas
Servicios de virtualización🟢 No (por defecto)Las líneas Set-Service -StartupType Disabled están comentadas; solo si las descomentas, se deshabilitan VBoxSDS, vmms, vmcompute, etc.
Archivos .ova/.vmdk/.vhd existentes🟢 NoEl script solo los lista y registra su tamaño; nunca los elimina
Registro de Windows🟢 NoSolo lectura de servicios y adaptadores
Rendimiento del equipo🟡 MínimoCada ejecución dura entre 5 y 30 segundos según el número de discos analizados
Auditoría y trazabilidad🟢 Sí (positivo)Genera log detallado + CSV histórico con fecha, disparador, hipervisores, VMs y archivos detectados
🚨 Antes de descomentar las líneas destructivas, ten en cuenta:
  • Si detienes VMs con poweroff o Stop-VM -TurnOff, equivale a tirar del cable: los sistemas huésped pueden quedar con el disco en estado inconsistente
  • Deshabilitar vmms o vmcompute impide que Hyper-V arranque cualquier VM, incluidas las tuyas legítimas
  • Deshabilitar VBoxSDS o VMAuthdService puede romper instalaciones legítimas de VirtualBox o VMware
  • Si tu equipo tiene WSL2 o Docker Desktop, dependen de la plataforma de hipervisor de Windows (vmcompute); deshabilitarlo los deja inoperativos
  • Nunca descomentes las líneas destructivas en un equipo de uso profesional sin haber probado antes el script en modo auditoría y revisado el log

🔎 ¿Cómo verificar que el inventario de VMs está activo?

💡 ¿Cómo comprobar que VMDetector funciona?

Ejecuta estos comandos en PowerShell como administrador para verificar el estado de las tareas programadas y el contenido del CSV histórico:

# Verificar que las 2 tareas programadas existen y estan activas
Get-ScheduledTask -TaskName "VMDetector-*" | `
  Select TaskName, State, LastRunTime, LastTaskResult

# Ver el CSV historico con todas las ejecuciones
Import-Csv C:\Logs\vm-detector-historico.csv | Format-Table -AutoSize

# Ver la ultima ejecucion del log
Get-Content C:\Logs\vm-detector.log -Tail 80

Las dos tareas deben aparecer en estado Ready con LastTaskResult = 0. En el CSV histórico verás una fila por cada ejecución (inicio, logon o manual) con las columnas Hipervisores, VMsRegistradas, ArchivosVM y AdaptadoresVR. Cualquier incremento repentino entre dos filas consecutivas del CSV es una señal a investigar: puede indicar que un tercero ha registrado una VM nueva sin tu conocimiento.


Buenas prácticas para la seguridad en máquinas virtuales

🧩 Buenas prácticas para la seguridad en máquinas virtuales

  • 🏗️ Crea tus propias VMs desde ISOs oficiales, es la base de la seguridad en máquinas virtuales y elimina la superficie de ataque de imágenes de terceros
  • 🔄 Mantén las VMs actualizadas, aplica parches de seguridad dentro de la VM; un sistema huésped desactualizado es un vector de ataque incluso en entornos controlados
  • 🔒 Limita los permisos, no ejecutes el hipervisor con privilegios de administrador del host si no es necesario
  • 📊 Monitoriza el tráfico de red, usa Wireshark o el monitor de red del hipervisor para detectar comunicaciones no autorizadas desde el entorno virtualizado
  • 📸 Usa snapshots regulares para revertir a un estado limpio si la seguridad del entorno se ve comprometida
  • 🚫 Desactiva las carpetas compartidas y el portapapeles compartido entre el host y la VM cuando no sean necesarios; son vectores de movimiento lateral documentados
  • 🛡️ Mantén activo Windows Defender en el host para detectar actividad maliciosa procedente del entorno virtualizado
  • 🔑 Aplica el hardening de cuentas Windows en el sistema anfitrión siguiendo el principio de mínimo privilegio

🏁 Conclusión

La seguridad en máquinas virtuales depende del origen de la imagen y de la configuración del entorno de virtualización. Las VMs de terceros de fuentes no verificadas son uno de los vectores de distribución de malware más efectivos porque el usuario confía en ellas sin revisar su contenido ni la integridad del archivo OVA/OVF. La medida más eficaz es crearlas siempre desde ISOs oficiales, aislar la red en modo host-only y verificar el hash SHA256 antes del primer arranque.

Lo más valioso de esta guía es que el control es inmediato y gratuito: verificar el hash SHA256 en PowerShell tarda diez segundos y descarta cualquier imagen manipulada antes de que se ejecute. El script VMDetector complementa esta verificación aplicando un inventario automático en cada arranque y cada login, de modo que cualquier VM registrada por un tercero sin tu conocimiento queda registrada en el CSV histórico y puedes investigarla. Encuentra más guías sobre protección digital en nuestros contenidos de seguridad online, en la guía completa de seguridad online y en todos los artículos etiquetados como ciberseguridad.

  • 🔒 Verifica siempre el hash SHA256 antes de ejecutar: Get-FileHash .\archivo.ova -Algorithm SHA256 en PowerShell tarda diez segundos y garantiza la integridad del archivo
  • 🔒 Configura la red en modo host-only por defecto; solo cambia a NAT si la VM necesita Internet por razones concretas y verificadas
  • 🔒 Nunca introduzcas credenciales reales en una VM de origen desconocido; una RAT preinstalada puede exfiltrar datos en segundos a través del tráfico de red cifrado
  • 🔒 Crea un snapshot antes de cualquier cambio; revertir a estado limpio es la respuesta más rápida ante actividad sospechosa en el entorno virtualizado
  • 🔒 Mantén el hipervisor actualizado; las técnicas de VM escape documentadas en MITRE T1611 explotan vulnerabilidades no parcheadas de VirtualBox, VMware y Hyper-V
  • 🔒 Desactiva las carpetas compartidas y el portapapeles compartido cuando no sean necesarios; son los vectores de movimiento lateral más frecuentes entre la VM y el host
  • 🔒 Activa el script VMDetector con sus dos tareas programadas; cualquier VM registrada sin tu conocimiento quedará detectada en el siguiente arranque o login

¿Tienes una VM de terceros activa y no sabes si es segura? Sigue los pasos de verificación de esta guía o contáctanos. Tu seguridad digital es nuestra prioridad.

Comparte este artículo con quien descargue VMs de repositorios sin verificar. Una imagen de máquina virtual puede contener un backdoor activo que lleva meses enviando datos al atacante sin que el usuario lo sepa.


❓ Preguntas frecuentes sobre seguridad en máquinas virtuales

¿Es seguro descargar máquinas virtuales de terceros?

👉 Solo si provienen de fuentes oficiales verificadas. Las imágenes de disco virtual descargadas de repositorios no oficiales no ofrecen ninguna garantía de integridad del archivo y pueden contener malware preinstalado según MITRE T1204.003. Comprueba siempre el hash SHA256 antes de importar cualquier archivo OVA o OVF.

¿Pueden las máquinas virtuales comprometer la seguridad del host?

👉 Sí. Una imagen de VM puede incluir malware, herramientas de acceso remoto (RAT) o mineros de criptomonedas preinstalados que afectan al sistema anfitrión. Además, las técnicas de VM escape documentadas en MITRE T1611 permiten salir del entorno virtualizado en hipervisores no actualizados.

¿Cómo aislar una máquina virtual de la red local?

👉 Configurando el adaptador de red en modo host-only o NAT sin port forwarding. Nunca uses el modo bridged con VMs de origen desconocido, ya que expone la VM directamente a la red local. Es la recomendación del NIST SP 800-125A para garantizar la seguridad en máquinas virtuales de entornos de prueba.

¿Crear una máquina virtual propia mejora la seguridad?

👉 Sí, siempre. Para garantizar la seguridad en máquinas virtuales, crear desde una ISO oficial verificada es la opción óptima: tienes control total sobre la cadena de custodia del contenido desde el primer momento, sin malware preinstalado ni backdoors ocultos.

¿Una máquina virtual puede infectar el sistema anfitrión?

👉 En condiciones normales el aislamiento de procesos del hipervisor previene infecciones directas al host. Sin embargo, las técnicas de VM escape (MITRE T1611) pueden romper ese aislamiento en hipervisores no actualizados. Por eso es imprescindible mantener VirtualBox, VMware o Hyper-V siempre en su última versión.

¿Cómo verificar la seguridad de una máquina virtual antes de ejecutarla?

👉 Comparando el hash SHA256 del archivo descargado con el publicado oficialmente. En PowerShell: Get-FileHash .\archivo.ova -Algorithm SHA256. Si el hash no coincide, la imagen ha sido manipulada: no la ejecutes bajo ningún concepto. Este proceso de verificación de integridad tarda menos de diez segundos y es la primera línea de defensa ante imágenes de disco virtual comprometidas.

¿Qué diferencia hay entre modo NAT y modo host-only en una VM?

👉 En modo NAT la VM comparte la IP del host y tiene acceso a Internet, pero no es visible desde la red local. En modo host-only la VM solo puede comunicarse con el host, sin acceso a Internet ni a la red local. Para VMs de origen desconocido, el modo host-only es siempre la opción más segura porque elimina el riesgo de comunicación C2 con el atacante.

¿Qué es un snapshot y para qué sirve en seguridad?

👉 Un snapshot (o instantánea) es una copia del estado completo de la VM en un momento concreto: disco, memoria y configuración. En seguridad, permite revertir el entorno virtualizado a un estado limpio ante cualquier actividad sospechosa sin necesidad de reinstalar. Tomar un snapshot antes del primer arranque de una VM nueva es una buena práctica fundamental.

¿Qué hace exactamente el script VMDetector y es seguro ejecutarlo?

👉 VMDetector es un script PowerShell de auditoría puramente lectora por defecto: inventaría VirtualBox, VMware y Hyper-V, lista las VMs registradas, busca archivos .ova/.vmdk/.vhd en el equipo y registra todo en un log y en un CSV histórico. No detiene VMs, no deshabilita servicios ni elimina archivos. Las acciones destructivas están comentadas y el usuario decide si activarlas. Es seguro ejecutarlo en equipos con VMs legítimas porque no las afecta.

¿Cómo desactivo las tareas programadas de VMDetector?

👉 Tienes dos opciones. La rápida: ejecuta el script de reversión incluido en esta guía, que elimina las dos tareas (VMDetector-Inicio y VMDetector-Logon) en un solo paso. La manual: abre el Programador de tareas (Win+R → taskschd.msc), localiza las dos tareas en la Biblioteca y pulsa Eliminar en cada una. Los logs y el CSV histórico se mantienen intactos para consulta posterior.

Autor

Entusiasta de la seguridad informática con años de experiencia en protección de sistemas Windows y defensa contra amenazas digitales. Apasionado por la tecnología y la privacidad, comparto en este blog consejos prácticos, análisis detallados y guías paso a paso para que cualquier usuario pueda fortalecer la seguridad de su PC y su vida digital

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir