Saltar al contenido principal

Lab 11.2: Detección de Malware mediante Análisis de Memoria

Objetivos de Aprendizaje​

Al final de este laboratorio, usted será capaz de:

  • Identificar técnicas de malware en memoria
  • Utilizar herramientas de detección de anomalías
  • Comprender la inyección de procesos
  • Analizar un volcado de memoria básico
  • Reconocer los indicadores de compromiso en memoria

Duración Estimada​

55 minutos

Prerrequisitos​

  • Lab 11.1 completado
  • VM Windows 10/11 aislada
  • Process Explorer, Process Monitor
  • Derechos de administrador

Contexto Profesional​

La detección de malware en memoria es crítica porque:

  • El malware "fileless" no escribe en disco
  • El análisis de memoria revela comportamientos activos
  • Es una competencia esencial en respuesta a incidentes

ADVERTENCIA​

Este laboratorio utiliza técnicas únicamente con fines educativos. Ejecute solo en VMs aisladas y de prueba.


Parte 1: Técnicas de Malware en Memoria​

Paso 1.1: Visión general​

TécnicaDescripciónDetección
Process InjectionInyectar código en otro procesoRegiones RWX anómalas
DLL InjectionCargar una DLL maliciosaDLL no firmada/desconocida
Process HollowingReemplazar el código de un procesoImagen no coincide con el disco
Reflective LoadingCargar DLL sin pasar por la APIDLL sin archivo correspondiente
Fileless MalwareCódigo solo en memoriaScripts codificados, PowerShell sospechoso

Paso 1.2: Indicadores clave​

Señales de alerta:

  • Regiones de memoria RWX (Read-Write-Execute)
  • Procesos del sistema lanzados desde ubicaciones incorrectas
  • DLLs no firmadas en procesos sensibles
  • Hilos sin módulo asociado
  • Conexiones de red anómalas desde procesos legítimos

Parte 2: Detección con Process Explorer​

Paso 2.1: Configuración avanzada​

  1. Inicie Process Explorer como administrador
  2. Options > Verify Image Signatures
  3. View > Select Columns > Añada "Verified Signer"

Paso 2.2: Identificar procesos no firmados​

Los procesos en rosa/violeta tienen una firma no verificada.

Procesos que DEBEN estar firmados por Microsoft:

  • svchost.exe
  • csrss.exe
  • lsass.exe
  • services.exe
  • winlogon.exe
  • explorer.exe

Pregunta 1: ¿Todos sus procesos del sistema están firmados por Microsoft?

Paso 2.3: Verificar las rutas​

Procesos legítimos y sus rutas:
- svchost.exe -> C:\Windows\System32\
- csrss.exe -> C:\Windows\System32\
- lsass.exe -> C:\Windows\System32\
- services.exe -> C:\Windows\System32\
- explorer.exe -> C:\Windows\

Script de verificación:

# Verificar las rutas de los procesos críticos
$criticalProcesses = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"services" = "C:\Windows\System32\services.exe"
"winlogon" = "C:\Windows\System32\winlogon.exe"
}

Write-Host "=== VERIFICACIÓN PROCESOS CRÍTICOS ===" -ForegroundColor Cyan

foreach ($proc in $criticalProcesses.Keys) {
$running = Get-Process -Name $proc -ErrorAction SilentlyContinue

foreach ($p in $running) {
$expectedPath = $criticalProcesses[$proc]
$actualPath = $p.Path

if ($actualPath -ne $expectedPath) {
Write-Host "[ALERTA] $proc" -ForegroundColor Red
Write-Host " Esperado: $expectedPath"
Write-Host " Encontrado: $actualPath"
} else {
Write-Host "[OK] $proc - $actualPath" -ForegroundColor Green
}
}
}

Pregunta 2: ¿El script detecta anomalías?


Parte 3: Detección de Inyección de DLL​

Paso 3.1: Listar las DLLs de un proceso​

Process Explorer:

  1. Seleccione un proceso
  2. View > Show Lower Pane
  3. View > Lower Pane View > DLLs

PowerShell:

# Listar las DLLs de un proceso
$proc = Get-Process notepad
$proc.Modules | Select-Object ModuleName, FileName, Size

# Buscar DLLs sospechosas (no en System32 o Program Files)
$proc.Modules | Where-Object {
$_.FileName -notlike "C:\Windows\*" -and
$_.FileName -notlike "C:\Program Files*"
} | Select-Object ModuleName, FileName

Paso 3.2: DLLs sospechosas a buscar​

IndicadorDescripción
DLL en TempUbicación anómala
DLL en AppDataPotencialmente malicioso
DLL no firmadaFalta de verificación
Nombre aleatorioPosible malware
Tamaño muy pequeñoStub/loader

Paso 3.3: Script de detección de DLL​

# Detección de DLLs sospechosas
Write-Host "=== ANÁLISIS DLLs SOSPECHOSAS ===" -ForegroundColor Cyan

$suspiciousPaths = @(
"*\Temp\*",
"*\AppData\Local\Temp\*",
"*\Downloads\*",
"*\Desktop\*"
)

Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$procName = $_.Name
$_.Modules | ForEach-Object {
$dll = $_
foreach ($path in $suspiciousPaths) {
if ($dll.FileName -like $path) {
Write-Host "[SOSPECHOSO] $procName carga: $($dll.FileName)" -ForegroundColor Red
}
}
}
}

Write-Host "`nAnálisis finalizado." -ForegroundColor Green

Pregunta 3: ¿Se cargan DLLs sospechosas?


Parte 4: Detección de Process Hollowing​

Paso 4.1: Concepto​

Process Hollowing:

  1. Crear un proceso legítimo en modo suspendido
  2. Vaciar ("hollow") su memoria
  3. Inyectar código malicioso
  4. Reanudar la ejecución

Resultado: El proceso parece legítimo pero ejecuta código malicioso.

Paso 4.2: Indicadores de detección​

IndicadorDescripción
Imagen ≠ MemoriaEl código en memoria difiere del archivo
PEB modificadoProcess Environment Block alterado
Secciones anómalasTamaño/permisos inesperados

Paso 4.3: Verificación básica​

# Comparar el tamaño de la imagen en memoria vs en disco
# Requiere herramientas avanzadas para una detección real

Get-Process | Where-Object { $_.Path } | ForEach-Object {
$proc = $_
try {
$fileSize = (Get-Item $proc.Path -ErrorAction Stop).Length
$memorySize = $proc.WorkingSet64

# Ratio muy alto puede indicar una anomalía
$ratio = [math]::Round($memorySize / $fileSize, 2)

if ($ratio -gt 100) {
Write-Host "[INFO] $($proc.Name) - Ratio mem/file: $ratio" -ForegroundColor Yellow
}
} catch {}
}

Parte 5: Análisis con Process Monitor​

Paso 5.1: Capturar la actividad​

procmon64.exe /accepteula

Paso 5.2: Filtros útiles para detección​

Cree filtros para detectar comportamientos sospechosos:

  1. Filter > Filter...
  2. Añada:
    • Operation is WriteFile then Include
    • Path contains \Temp\ then Include
    • Process Name is powershell.exe then Include

Paso 5.3: Comportamientos a vigilar​

OperaciónSospechoso si...
WriteFileEn Temp con extensión .exe/.dll
CreateFileCreación en carpetas del sistema
RegSetValueModificación de claves Run
CreateRemoteThreadEn otro proceso
VirtualAllocExAsignación en proceso remoto

Parte 6: Crear un Volcado de Memoria​

Paso 6.1: Volcado de un proceso (método simple)​

Task Manager:

  1. Pestaña Detalles
  2. Clic derecho en el proceso
  3. "Crear archivo de volcado"

PowerShell:

# Usar procdump (Sysinternals)
# procdump64.exe -ma <PID> dump.dmp

# O vía comsvcs.dll (atención: detectado por los AV)
# Método utilizado por atacantes para volcar lsass

Paso 6.2: ¿Dónde se almacenan los volcados?​

# Ubicación por defecto
$env:LOCALAPPDATA + "\Temp"

# Listar los volcados existentes
Get-ChildItem "$env:LOCALAPPDATA\Temp" -Filter "*.dmp" -ErrorAction SilentlyContinue

Paso 6.3: Analizar un volcado (básico)​

Para un análisis profundo, se requieren herramientas como Volatility.

Con WinDbg (si está instalado):

windbg -z dump.dmp
!analyze -v
!process 0 0

Parte 7: Script de Detección Completo​

# Script de detección de anomalías en memoria
# ===========================================

param(
[switch]$Verbose
)

Write-Host @"
=====================================
DETECCIÓN ANOMALÍAS MEMORIA
=====================================
"@ -ForegroundColor Cyan

$alerts = @()

# 1. Verificar las rutas de los procesos críticos
Write-Host "`n[1/5] Verificación procesos críticos..." -ForegroundColor Yellow

$criticalPaths = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"services" = "C:\Windows\System32\services.exe"
}

foreach ($name in $criticalPaths.Keys) {
Get-Process -Name $name -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.Path -and $_.Path -ne $criticalPaths[$name]) {
$alerts += "[CRÍTICO] $name desde ruta incorrecta: $($_.Path)"
}
}
}

# 2. Buscar DLLs en ubicaciones sospechosas
Write-Host "[2/5] Análisis DLLs..." -ForegroundColor Yellow

$suspectDlls = @()
Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$_.Modules | Where-Object {
$_.FileName -like "*\Temp\*" -or
$_.FileName -like "*\Downloads\*"
} | ForEach-Object {
$alerts += "[SOSPECHOSO] DLL sospechosa: $($_.FileName)"
}
}

# 3. Procesos con conexiones de red inusuales
Write-Host "[3/5] Análisis conexiones..." -ForegroundColor Yellow

$networkProcs = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object { $_.RemoteAddress -notmatch "^(127\.|::1|0\.0\.0\.0)" }

foreach ($conn in $networkProcs) {
$proc = Get-Process -Id $conn.OwningProcess -ErrorAction SilentlyContinue
if ($proc.Name -in @("notepad", "calc", "mspaint")) {
$alerts += "[SOSPECHOSO] $($proc.Name) tiene una conexión de red: $($conn.RemoteAddress):$($conn.RemotePort)"
}
}

# 4. PowerShell con conexiones
Write-Host "[4/5] Verificación PowerShell..." -ForegroundColor Yellow

$psConnections = Get-NetTCPConnection -OwningProcess (Get-Process -Name powershell -ErrorAction SilentlyContinue).Id -ErrorAction SilentlyContinue |
Where-Object { $_.State -eq "Established" }

if ($psConnections) {
$alerts += "[INFO] PowerShell tiene conexiones de red activas"
}

# 5. Procesos con memoria RWX (requiere herramientas avanzadas)
Write-Host "[5/5] Verificación finalizada." -ForegroundColor Yellow

# Reporte
Write-Host "`n========== REPORTE ==========" -ForegroundColor Cyan

if ($alerts.Count -eq 0) {
Write-Host "[OK] No se detectaron anomalías mayores" -ForegroundColor Green
} else {
Write-Host "Alertas detectadas: $($alerts.Count)" -ForegroundColor Red
foreach ($alert in $alerts) {
if ($alert -match "CRÍTICO") {
Write-Host " $alert" -ForegroundColor Red
} elseif ($alert -match "SOSPECHOSO") {
Write-Host " $alert" -ForegroundColor Yellow
} else {
Write-Host " $alert" -ForegroundColor Gray
}
}
}

Write-Host "`n=============================" -ForegroundColor Cyan

Pregunta 4: Ejecute el script. ¿Qué alertas obtiene?


Entregables​

  1. Capturas de pantalla:

    • Process Explorer con firmas verificadas
    • DLLs de un proceso
    • Resultado del script de detección
  2. Respuestas a las 4 preguntas

  3. Informe (2 páginas):

    • Técnicas de malware en memoria
    • Métodos de detección utilizados
    • Resultados del análisis de su VM
    • Recomendaciones

Criterios de Evaluación​

CriterioPuntos
Process Explorer25%
Detección de DLLs25%
Script de detección30%
Informe y comprensión20%

Recursos​


Laboratorio desarrollado en el marco del curso Sistemas Operativos - MÓDULO 11