1. El orden importa: contexto antes que profundidad
Este checklist está pensado para los primeros quince minutos después de obtener una shell. Su objetivo no es escalar privilegios ni moverse a otro sistema, sino responder de forma reproducible: quién soy, dónde estoy, qué red ve el host, qué actividad sostiene su funcióny qué rutas merecen una revisión posterior autorizada. Ejecuta un bloque, interpreta su salida y anota el límite antes de continuar.
- Confirmar activo, horario, cuenta permitida y contacto de emergencia
- Registrar identidad efectiva, terminal o proceso de shell y hora con zona horaria
- Identificar hostname, versión y arquitectura del sistema operativo
- Inventariar interfaces, direcciones, DNS y rutas sin generar tráfico de reconocimiento
- Observar usuarios, procesos, servicios y sockets; no detener ni modificar ninguno
- Revisar solo metadatos de archivos dentro de rutas autorizadas
- Conservar salida mínima, errores y conclusiones separando hecho de inferencia
2. Checklist: identidad, hostname y sistema operativo
Empieza por la identidad efectiva, no por el nombre que te hayan dado. En Windows, whoami /allmuestra usuario, grupos y privilegios del token actual; en Linux, id muestra UID, GID y grupos. La hora sirve para correlacionar tu actividad con registros defensivos. El proceso de la shell ayuda a explicar por qué una propiedad o comando puede no estar disponible.
idwhottyps -p $$ -o pid,ppid,user,lstart,comm,argsdate --iso-8601=secondswhoami /all$PIDGet-Process -Id $PID | Select-Object Id,ProcessName,StartTime,PathGet-Date -Format oComprueba ahora que el nombre del host pertenece al activo autorizado. Una versión de kernel no equivale siempre a la distribución; por eso Linux combina uname con /etc/os-release. En Windows,Get-ComputerInfo reúne producto, versión, build y arquitectura. Una ruta de proceso vacía o un campo omitido puede ser un límite de permisos o de compatibilidad, no una invitación a elevarlos.
hostnameuname -acat /etc/os-releasehostnameGet-ComputerInfo | Select-Object CsName,WindowsProductName,WindowsVersion,OsBuildNumber,OsArchitecture3. Checklist: interfaces, DNS y rutas
Estas órdenes leen la configuración local: no escanean subredes ni prueban conectividad con otros hosts. Relaciona cada dirección con su interfaz y busca la ruta por defecto. Una interfaz de contenedor, VPN o loopback no demuestra por sí sola que exista una red alcanzable desde fuera. DNS indica resolutores configurados; no confirma que respondan.
ip -brief addressip route showcat /etc/resolv.confGet-NetIPConfigurationGet-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric | Select-Object DestinationPrefix,NextHop,InterfaceAlias,RouteMetricGet-DnsClientServerAddress | Select-Object InterfaceAlias,AddressFamily,ServerAddresses4. Checklist: usuarios, procesos, servicios y escuchas
Separa cuentas configuradas, sesiones activas y procesos. No son la misma cosa. La lista de cuentas ayuda a entender el rol del host, mientras que las sesiones y procesos son una fotografía cambiante. En Linux,getent respeta las fuentes de identidad configuradas; en Windows, Get-LocalUser muestra cuentas locales y puede no estar disponible en PowerShell de 32 bits sobre un sistema de 64 bits.
whogetent passwd | awk -F: '$7 !~ /(nologin|false)$/ { print $1, $3, $6, $7 }'Get-CimInstance Win32_ComputerSystem | Select-Object UserNameGet-LocalUser | Select-Object Name,Enabled,LastLogonOrdena procesos para reducir ruido, pero no interpretes consumo alto como actividad maliciosa. Después cruza servicios activos con sockets en escucha. Un puerto confirma una escucha local, no su exposición desde otra red. Algunos nombres de proceso o rutas solo son visibles con permisos superiores; registra esa ausencia.
ps -eo user,pid,ppid,lstart,pcpu,pmem,comm --sort=-pcpu | head -n 25systemctl --type=service --state=running --no-pagerss -lntupGet-Process | Sort-Object CPU -Descending | Select-Object -First 25 Name,Id,CPU,PathGet-Service | Where-Object Status -eq 'Running' | Sort-Object DisplayNameGet-NetTCPConnection -State Listen | Sort-Object LocalPort | Select-Object LocalAddress,LocalPort,OwningProcess5. Checklist: qué significa «archivo interesante»
Interesante significa relevante para el rol técnico del activo: configuración de la aplicación, logs, directorios temporales, despliegues recientes o rutas autorizadas con permisos inesperados. Empieza por metadatos. No abras el contenido hasta que la necesidad y la autorización estén documentadas. Limita siempre la raíz, el sistema de archivos y la profundidad; una búsqueda desde / o C:\ añade ruido, carga y datos fuera del objetivo.
find /opt /var/www -xdev -type f -mtime -7 -size -1M -printfind /tmp /var/tmp -xdev -type f -mtime -1 -size -10M -printfind /opt /var/www -xdev -type f -writable -printstat /ruta/autorizada/archivo$Scope = 'C:\ruta\autorizada'Get-ChildItem -LiteralPath $Scope -File -Recurse -Depth 3 -ErrorAction Continue | Sort-Object LastWriteTime -Descending | Select-Object -First 50 FullName,Length,LastWriteTimeGet-Acl -LiteralPath 'C:\ruta\autorizada\archivo' | Format-List Owner,AccessSí: metadatos y contexto
Ruta, propietario, permisos, tamaño, fechas y relación con el servicio o despliegue autorizado.
No: coleccionar por si acaso
Llaves privadas, tokens, hashes de contraseñas, buzones, historiales, perfiles o documentos personales.
Un error también es evidencia
Conserva «Permission denied» o «Access is denied». No lo ocultes ni cambies de identidad para evitarlo.
6. Guarda evidencia mínima sin ensuciar el objetivo
La opción preferida es capturar la transcripción desde la estación del analista. Si las reglas permiten crear archivos temporales en el objetivo, usa una carpeta dedicada, permisos restrictivos y solo las consultas necesarias. No incluyas el listado de archivos sensibles. Calcula el hash después de cerrar el archivo: un hash demuestra si cambió, no quién lo creó ni si su contenido es verdadero.
umask 077mkdir -p /tmp/cubix-evidencia{ date --iso-8601=seconds; id; hostname; uname -a; ip -brief address; ip route show; } | tee /tmp/cubix-evidencia/contexto.txtsha256sum /tmp/cubix-evidencia/contexto.txt | tee /tmp/cubix-evidencia/contexto.sha256sha256sum --check /tmp/cubix-evidencia/contexto.sha256$Evidence = Join-Path $env:TEMP 'cubix-evidencia'New-Item -ItemType Directory -Force -Path $Evidence | Out-NullGet-Date -Format o | Out-File (Join-Path $Evidence 'contexto.txt')whoami /all | Out-File (Join-Path $Evidence 'contexto.txt') -AppendGet-ComputerInfo | Select-Object CsName,WindowsProductName,WindowsVersion,OsBuildNumber,OsArchitecture | Out-File (Join-Path $Evidence 'contexto.txt') -AppendGet-FileHash (Join-Path $Evidence 'contexto.txt') -Algorithm SHA256 | Format-List | Out-File (Join-Path $Evidence 'contexto.sha256')7. Interpreta, comunica y cierra la sesión
Convierte la salida en frases verificables: «observé una ruta por defecto mediante interfaz X» es un hecho; «el host puede alcanzar toda la red» es una hipótesis que requeriría una prueba adicional autorizada. Una ausencia también necesita contexto: un servicio puede usar otro gestor, un cmdlet puede faltar o la shell puede estar dentro de un contenedor.
- El hostname y el activo autorizado coinciden; si no, detuve la actividad
- He registrado usuario, grupos, hora, proceso de shell, SO y arquitectura
- He asociado interfaces con direcciones y rutas sin conectar a nuevos destinos
- He distinguido cuentas, sesiones, procesos, servicios y sockets
- Solo he recogido metadatos de rutas explícitamente autorizadas
- Los errores de permisos figuran como límites y no intenté elevar privilegios
- La evidencia mínima tiene fecha, autor, ubicación, hash y acceso restringido
- Cada conclusión separa observación, inferencia y siguiente validación autorizada
Glosario
Shell
Interfaz de texto que interpreta órdenes y las ejecuta con la identidad y el contexto de una sesión.
Identidad efectiva
Cuenta y grupos cuyos permisos aplica el sistema a las acciones del proceso actual.
Hostname
Nombre asignado a un equipo dentro de su sistema o red; debe contrastarse con el inventario autorizado.
Interfaz de red
Punto lógico o físico por el que un sistema envía y recibe tráfico, asociado a direcciones y estado.
Tabla de rutas
Reglas que indican por qué interfaz y siguiente salto debe salir el tráfico hacia cada destino.
Proceso
Instancia de un programa en ejecución, identificada normalmente por un PID.
Servicio
Proceso o unidad gestionada que presta una función de forma continuada o bajo demanda.
Socket en escucha
Extremo de red preparado para aceptar conexiones en una dirección, protocolo y puerto.
Metadato de archivo
Dato descriptivo como ruta, tamaño, propietario, permisos o fecha, distinto del contenido del archivo.
Evidencia mínima
Conjunto más pequeño de datos verificables que permite sostener una observación sin recopilar información innecesaria.