Entradas de SOC, TI e IR

Recorrido forense: a la caza del mal con AmCache

Introducción

En el campo de la informática forense, AmCache es una herramienta esencial para descubrir actividades maliciosas en sistemas Windows. Este artefacto permite identificar la ejecución tanto de software legítimo como de software malicioso en un equipo. Se encuentra bajo la administración del sistema operativo y, al momento de redactar este artículo, no se conoce ninguna forma de modificar o eliminar los datos que AmCache recopila. Por lo tanto, en un escenario de respuesta a incidentes, podría ser la clave para identificar artefactos perdidos (por ejemplo, ransomware que se autoelimina), lo que permitiría a los analistas buscar los patrones dejados por el atacante, como nombres y rutas de archivos. Además, AmCache almacena los hashes SHA-1 de los archivos ejecutados, lo que permite a los profesionales de DFIR realizar búsquedas en fuentes públicas de inteligencia de amenazas —como OpenTIP y VirusTotal —y generar reglas para bloquear este mismo archivo en otros sistemas de la red.

En este artículo, presentamos un análisis exhaustivo del artefacto AmCache, que permite a los lectores comprender mejor su funcionamiento interno. Además, presentamos una nueva herramienta llamada AmCache-EvilHunter, que cualquier profesional puede utilizar para analizar con facilidad el archivo Amcache.hve y extraer indicadores de compromiso (IoC). La herramienta también es capaz de consultar las fuentes de inteligencia mencionadas para verificar detecciones de archivos maliciosos. Este nivel de automatización incorporada reduce el esfuerzo manual y acelera la detección de amenazas, lo cual es de gran valor para los analistas y encargados de dar respuestas.

La importancia de la evidencia de ejecución

La evidencia de ejecución tiene una importancia fundamental en la informática forense y la respuesta a incidentes, ya que ayuda a los investigadores a reconstruir cómo se utilizó un sistema durante una intrusión. Artefactos como Prefetch, ShimCache y UserAssist ofrecen pistas sobre lo que se ejecutó. AmCache también es un artefacto confiable para evidenciar la ejecución, ya que preserva metadatos que indican la presencia y ejecución de un archivo, incluso si se lo ha eliminado o modificado. Otra ventaja de AmCache sobre otros artefactos de Windows es que, a diferencia de ellos, almacena el hash del archivo, lo cual es de gran utilidad para los analistas, ya que se lo puede utilizar para buscar archivos maliciosos a lo largo y ancho de la red, aumentando la probabilidad de identificar, contener y erradicar completamente la amenaza.

Introducción a AmCache

Application Activity Cache (AmCache) se introdujo por primera vez en Windows 7 y empezó a mostrar todo su potencial en Windows 8 y versiones posteriores. Su propósito es reemplazar el antiguo RecentFileCache.bcf en sistemas más nuevos. A diferencia de su predecesor, AmCache incluye información forense valiosa sobre la ejecución de programas y binarios, sobre la carga drivers.

Este artefacto se almacena como un archivo de colmena del registro llamado Amcache.hve en el directorio C:\Windows\AppCompat\Programs. Los metadatos que se almacenan en este archivo incluyen rutas de archivos, datos del editor, marcas de tiempo de compilación, tamaños de archivos y hashes SHA-1.

Es importante destacar que el formato de AmCache no depende de la versión del sistema operativo, sino de la versión de las bibliotecas (DLLs) responsables de llenar la caché. De este modo, incluso los sistemas Windows con diferentes niveles de parches aplicados podrían tener pequeñas diferencias en la estructura de los archivos AmCache. Las bibliotecas conocidas que se utilizan para llenar esta caché se almacenan bajo %WinDir%\System32 con los nombres:

  • aecache.dll
  • aeevts.dll
  • aeinv.dll
  • aelupsvc.dll
  • aepdu.dll
  • aepic.dll

Cabe destacar que este artefacto tiene sus peculiaridades y limitaciones. AmCache calcula el hash SHA-1 solo sobre los primeros 31 457 280 bytes (≈31 MB) de cada ejecutable, por lo que compararlo con el hash almacenado en línea puede fallar para archivos que superen este tamaño. Además, Amcache.hve no es un verdadero registro de ejecución: registra archivos en directorios escaneados por el Evaluador de Compatibilidad de Microsoft, ejecutables y drivers copiados durante la ejecución del programa, y aplicaciones GUI que requirieron ajustes (shimming) de compatibilidad. Solo la última categoría indica de manera confiable la ejecución real. Los elementos en los dos primeros grupos se limitan a confirmar la presencia del archivo en el sistema, sin datos sobre si se ejecutaron o cuándo lo hicieron.

En el mismo directorio, podemos encontrar archivos LOG adicionales que se utilizan para asegurar la coherencia y las operaciones de recuperación de Amcache.hve:

  • C:\Windows\AppCompat\Programs\Amcache.hve.*LOG1
  • C:\Windows\AppCompat\Programs\Amcache.hve.*LOG2

El archivo Amcache.hve se puede tomar de un sistema para luego someterlo a un análisis forense utilizando herramientas como Aralez , Velociraptor o Kape.

Estructura de Amcache.hve

El archivo Amcache.hve es una colmena del Registro de Windows en formato REGF; contiene varias subclaves que almacenan distintas clases de datos. Se puede implementar un simple analizador (parser) en Python para iterar a través de Amcache.hve y presentar sus claves:

El resultado de la ejecución de este parser es:

Claves de AmCache

Claves de AmCache

Desde una perspectiva de DFIR, las claves que más nos interesan son InventoryApplicationFile, InventoryApplication, InventoryDriverBinary e InventoryApplicationShortcut, que describiremos en detalle en las siguientes subsecciones.

InventoryApplicationFile

La clave InventoryApplicationFile es esencial para rastrear cada ejecutable descubierto en el sistema. En esta clave, cada ejecutable se representa por su propia subclave con un nombre único, que almacena los siguientes metadatos principales:

  • ProgramId: un hash único generado a partir del nombre, la versión, el editor y el idioma del binario (con tres o cuatro ceros agregados al comienzo del hash).
  • FileID: El hash SHA-1 del archivo (con cuatro ceros añadidos al comienzo del hash).
  • LowerCaseLongPath: la ruta completa al ejecutable, en minúsculas.
  • Name: Nombre base del archivo sin información de ruta.
  • OriginalFileName: El nombre de archivo original tal como figura en el recurso de versión del encabezado PE, que indica el nombre asignado por el desarrollador en el momento de la compilación.
  • Publisher: A menudo se utiliza para verificar si el origen del binario es legítimo. Si se trata de malware, esta subclave suele estar vacía.
  • Version: versión de compilación o lanzamiento específica del ejecutable.
  • Binary type Indica si el ejecutable es un binario de 32 bits o de 64 bits.
  • ProductName: El campo ProductName del recurso de versión, que describe el producto o suite de software más amplio al que pertenece el ejecutable.
  • LinkDate: La marca de tiempo de compilación extraída del encabezado PE.
  • Size: el tamaño del archivo en bytes.
  • IsOsComponent: un indicador booleano que especifica si el ejecutable es un componente integrado en el sistema operativo o una aplicación/biblioteca de terceros.

Con algunos ajustes en nuestro analizador de Python original, podemos leer la información almacenada dentro de esta clave:

InventoryApplicationFile subkeys

InventoryApplicationFile subkeys

También podemos usar herramientas como Registry Explorer para ver los mismos datos de manera gráfica:

InventoryApplicationFile inspeccionado usando Registry Explorer

InventoryApplicationFile inspeccionado usando Registry Explorer

Como se mencionó antes, AmCache calcula el hash SHA-1 solo sobre los primeros 31 457 280 bytes (≈31 MB). Para comprobarlo, hicimos un pequeño experimento, en el cual obtuvimos un binario más pequeño que 31 MB (Aralez) y uno más grande que este valor (una versión personalizada de Velociraptor). En el primer caso, el hash SHA-1 de todo el binario se almacenó en AmCache.

Primer escenario de almacenamiento SHA-1 en AmCache

Primer escenario de almacenamiento SHA-1 en AmCache

En el segundo caso, usamos la utilidad dd para extraer los primeros 31 MB del binario de Velociraptor:

Binario reducido de tamaño

Binario reducido de tamaño

Al revisar la entrada de Velociraptor en AmCache, descubrimos que, en efecto, almacena el hash SHA-1 calculado solo para los primeros 31 457 280 bytes del binario. Resulta de interés que el valor definido en Size representa el tamaño real del archivo original. Por lo tanto, cuando se trata de archivos grandes, puede que no sea suficiente confiar solo en el hash del archivo almacenado en AmCache para consultar portales de inteligencia sobre amenazas. Así que necesitamos verificar si el tamaño del archivo en el registro es mayor que 31 457 280 bytes antes de buscar en portales de inteligencia de amenazas.

Segundo escenario de almacenamiento SHA-1 en AmCache

Segundo escenario de almacenamiento SHA-1 en AmCache

Además, los atacantes pueden aprovechar esta característica para generar intencionalmente binarios maliciosos grandes. De esta manera, incluso si los investigadores descubren que un malware fue ejecutado o está presente en un sistema Windows, seguirán sin saber el hash SHA-1 real del binario, lo que hará que sea complicado rastrearlo a través de la red y recopilarlo de bases de datos públicas como VirusTotal.

InventoryApplicationFile: Ejemplo de caso de uso: Encontrar una herramienta eliminada tras su uso

Supongamos que se está buscando una posible amenaza interna. El usuario niega haber ejecutado programas sospechosos, y cualquier software sospechoso fue borrado de manera segura del disco. Pero en el archivo InventoryApplicationFile encuentras un registro de winscp.exe presente en la carpeta de Descargas del usuario. Aunque el archivo ya no esté, esto indica que la herramienta estuvo en la máquina y probablemente se la usó para transferir archivos antes de eliminarla. En nuestra práctica de respuesta a incidentes, hemos visto casos similares, donde esta clave resultó útil.

InventoryApplication

La clave InventoryApplication registra detalles sobre aplicaciones que han sido instaladas mediante un proceso formal en el sistema. A diferencia de InventoryApplicationFile, que registra cada ejecutable encontrado, InventoryApplication se enfoca en aquellos con registros de instalación. Cada entrada se nombra por su ProgramId único, lo que permite vincularla de forma unívoca con la clave correspondiente de InventoryApplicationFile. Además, InventoryApplication tiene las siguientes subclaves de interés:

  • InstallDate: cadena de fecha y hora que indica cuándo el sistema operativo (SO) registró o reconoció la aplicación por primera vez.
  • MsiInstallDate: presente solo si se instala a través de Windows Installer (MSI). Muestra la hora exacta en que se aplicó el paquete MSI, que se obtiene directo de los metadatos del MSI.
  • UninstallString: comando exacto utilizado para eliminar la aplicación.
  • Language: identificador de configuración regional numérico establecido por el desarrollador (LCID).
  • Publisher: nombre del proveedor o de la empresa de software.
  • ManifestPath: ruta del archivo al manifiesto de instalación utilizado por las aplicaciones UWP o AppX/MSIX.

Con un simple cambio en nuestro analizador, podemos verificar los datos contenidos en esta clave:

Subclaves de InventoryApplication

Subclaves de InventoryApplication

Cuando un ProgramId aparece aquí y también en InventoryApplicationFile, confirma que el ejecutable no solo está presente o ha sido ejecutado, sino que ha pasado por un proceso formal de instalación. Esta distinción nos ayuda a separar copias ad-hoc o ejecuciones transitorias del software instalado. La siguiente figura muestra el ProgramId del software WinRAR bajo InventoryApplicationFile.

Al buscar el ProgramId, encontramos una coincidencia exacta bajo InventoryApplication. Esto confirma que WinRAR sí estaba instalado en el sistema.

Otro detalle interesante sobre InventoryApplication es que contiene una subclave llamada LastScanTime, que se almacena por separado de los ProgramIds y tiene un valor que representa la última vez que se ejecutó Microsoft Compatibility Appraiser. Se trata de una tarea programada que lanza el binario compattelrunner.exe, y la información en esta clave solo debe actualizarse cuando esa tarea se ejecuta. En consecuencia, es posible que el software instalado después de la última ejecución de Appraiser no figure aquí. El valor LastScanTime se almacena en el formato FileTime de Windows.

Información de LastScanTime de InventoryApplication

Información de LastScanTime de InventoryApplication

InventoryApplication: ejemplo de caso de uso: Detectar software de acceso remoto

Supongamos que durante una respuesta a incidentes, se encuentra una entrada de AnyDesk en la clave InventoryApplication (aunque la aplicación ya no esté instalada). Lo más probable es que el atacante la haya usado para el acceso remoto y luego la haya eliminado para no dejar rastro. Incluso si se la borró del disco, esta clave prueba que estuvo presente. Hemos visto este escenario más de una vez en casos reales.

InventoryDriverBinary

La clave InventoryDriverBinary registra todos los drivers en modo kernel que el sistema ha cargado y aporta los metadatos esenciales para identificar drivers sospechosos o maliciosos. Bajo esta clave, cada driver se captura en su propia subclave con un nombre único e incluye:

  • FileID: el hash SHA-1 del binario del driver (con cuatro ceros agregados al comienzo del hash).
  • LowerCaseLongPath: la ruta completa (en minúsculas) al archivo del driver en el disco.
  • DigitalSignature: detalles del certificado de firma de código. Una firma válida y confiable ayuda a confirmar la autenticidad del driver.
  • LastModified: marca de tiempo de la última modificación del archivo tomada de los metadatos del sistema de archivos, que revela cuándo se modificó por última vez el binario del driver en el disco.

Debido a que los drivers de Windows operan en el nivel de privilegio más alto, es frecuente que el malware los explote. Por ejemplo, un estudio anterior realizado por Kaspersky muestra que los atacantes están explotando drivers vulnerables para finalizar procesos de EDR. Al tratar con un incidente de ciberseguridad, los investigadores correlacionan el hash criptográfico de cada driver, la ruta del archivo, el estado de la firma y la marca de tiempo de modificación. Esto puede ayudar a verificar si el binario coincide con una versión conocida y firmada, a detectar cualquier manipulación mediante la identificación de fechas de modificación inesperadas y a señalar drivers no firmados o con nombres anómalos para un análisis más profundo. Proyectos como LOLDrivers ayudan a identificar los drivers vulnerables que utilizan los atacantes.

Inspección de InventoryDriverBinary

Inspección de InventoryDriverBinary

Además del InventoryDriverBinary, AmCache también proporciona la clave InventoryApplicationDriver, que realiza un seguimiento de todos los drivers que han sido instalados por aplicaciones específicas. Incluye dos entradas:

  • DriverServiceName, que identifica el nombre del servicio vinculado al driver instalado; y
  • ProgramIds, que enumera los identificadores de programa (correspondientes a los nombres de clave en InventoryApplication) que fueron responsables de instalar el driver.

Como se muestra en la siguiente figura, la clave ProgramIds se puede usar para rastrear el programa asociado que utiliza este driver:

Uso de ProgramIds para verificar información del programa

Uso de ProgramIds para verificar información del programa

InventoryDriverBinary, ejemplo de caso de uso: Detección de un driver defectuoso

Si un sistema fue comprometido mediante el abuso de un driver vulnerable o malicioso conocido, se puede usar la clave de registro InventoryDriverBinary para confirmar su presencia. Incluso si el driver se ha eliminado o escondido, los restos en esta clave pueden revelar que alguna vez fue cargado, lo que ayuda a identificar compromisos a nivel de kernel y a reconstruir la línea de tiempo durante la investigación. Es justo así como se descubrió el malware AV Killer.

InventoryApplicationShortcut

Esta clave contiene las entradas de archivos.lnk (accesos directos) que estaban presentes en carpetas como el Menú de Inicio o el Escritorio de cada usuario. Dentro de cada clave de acceso directo, ShortcutPath proporciona la ruta absoluta al archivo LNK en el momento de su descubrimiento. ShortcutTargetPath muestra hacia dónde apuntaba el acceso directo. También podemos buscar la entrada ProgramId dentro de la clave InventoryApplication usando el ShortcutProgramId (similar a lo que hicimos para los drivers).

Clave InventoryApplicationShortcut

Clave InventoryApplicationShortcut

InventoryApplicationShortcut, ejemplo de caso de uso: Confirmación del uso de una aplicación eliminada

Supongamos que se descubre que se ha eliminado un programa sospechoso de la computadora, pero el usuario afirma que nunca lo ejecutó. La clave InventoryApplicationShortcut muestra que había un acceso directo a ese programa en su escritorio, y que fue accedido hace poco. Con evidencia complementaria, como el análisis de Prefetch, se puede confirmar la ejecución del software.

Comparación de claves de AmCache

La siguiente tabla resume la información presentada en las subsecciones anteriores, destacando la información principal sobre cada clave de AmCache.

Clave Contenido ¿Indica ejecución?
InventoryApplicationFile Metadatos de todos los ejecutables vistos en el sistema. Es probable (presencia = probabilidad de que se haya ejecutado)
InventoryApplication Metadatos sobre software instalado de manera formal. No (indica instalación, no implica ejecución)
InventoryDriverBinary Metadatos sobre los drivers cargados en modo kernel. Sí (el driver fue cargado en la memoria)
InventoryApplicationShortcut Información sobre archivos .lnk. Es probable (combinar con otros datos para confirmación)

AmCache-EvilHunter

Sin duda, Amcache.hve es un artefacto forense muy importante. Sin embargo, no pudimos encontrar ninguna herramienta que analice su contenido de forma eficaz y que al mismo tiempo proporcione inteligencia de amenazas al analista. Con esto en mente, desarrollamos AmCache-EvilHunter, una herramienta de línea de comandos que sirve para analizar los subárboles de registro Amcache.hve de Windows, identificar evidencia de ejecución, ejecutables sospechosos e integrar búsquedas de Kaspersky OpenTIP y VirusTotal para mejorar la inteligencia sobre amenazas.

AmCache-EvilHunter es capaz de procesar el archivo Amcache.hve y filtrar registros por rango de fechas (con las opciones --start y --end). También hace posible buscar registros usando palabras clave (--search), lo cual es útil para buscar convenciones conocidas de nombres que hayan sido adoptadas por los atacantes. Los resultados pueden guardarse en formatos CSV (--csv) o JSON (--json).

La siguiente imagen muestra un ejemplo de ejecución de AmCache-EvilHunter con estas opciones básicas, utilizando el siguiente comando:

La salida contiene todas las aplicaciones que estaban presentes en la máquina el 19 de junio de 2025. La última columna contiene información sobre si el archivo es un componente del sistema operativo o no.

Uso básico de AmCache-EvilHunter

Uso básico de AmCache-EvilHunter

Resultado CSV

Resultado CSV

Los analistas a menudo se enfrentan a un gran volumen de ejecutables y artefactos. Para reducir el alcance y disminuir el ruido, la herramienta puede utilizar la opción --find-suspicious para buscar binarios sospechosos conocidos. Los patrones utilizados por la herramienta incluyen nombres comunes de malware, procesos de Windows que contienen pequeñas erratas (por ejemplo, scvhost.exe), ejecutables legítimos que generalmente se encuentran en uso durante incidentes, nombres de archivos de una letra o un dígito (como 1.exe, a.exe) o cadenas hexadecimales aleatorias. La figura a continuación muestra los resultados obtenidos al usar esta opción. Se destaca que un archivo svchost.exe es parte del sistema operativo y el otro no, lo que lo convierte en un buen candidato para la recolección y análisis si no se lo ha eliminado.

Identificación de archivos sospechosos

Identificación de archivos sospechosos

Los archivos maliciosos no suelen tener información del desarrollador, y en ningún caso forman parte del sistema operativo predeterminado. Por esta razón, AmCache-EvilHunter también incluye las opciones --missing-publisher y --exclude-os. Estos parámetros facilitan el filtrado de binarios sospechosos y también permiten una rápida recopilación de inteligencia de amenazas, algo crucial durante un incidente.

Otra característica importante que distingue nuestra herramienta de otros enfoques propuestos es que AmCache-EvilHunter puede consultar a Kaspersky OpenTIP (--opentip) y VirusTotal (--vt) para los hashes identificados. De este modo, los analistas pueden valorar con rapidez las muestras y determinar si procede efectuar un análisis exhaustivo del artefacto.

Consulta de inteligencia sobre amenazas

Consulta de inteligencia sobre amenazas

Los binarios de la herramienta para sistemas Linux y Windows están disponibles en nuestra página de GitHub.

Conclusión

Amcache.hve es un pilar del análisis forense en Windows, que registra metadatos detallados, que incluyen rutas completas, hashes SHA‑1, marcas de tiempo de compilación, y datos del editor y de la versión de cada ejecutable que aparece en un sistema. Si bien no sirve como un registro de ejecución definitivo, su fortaleza radica en documentar la presencia y la ruta de los archivos, lo que lo hace invaluable para detectar binarios anómalos, verificar la confiabilidad mediante búsquedas de hash en fuentes de inteligencia sobre amenazas y correlacionar valores de LinkDate con campañas de ataque conocidas.

Para aprovechar todo su potencial investigativo, los analistas deben combinar los datos de AmCache con otros artefactos (p. ej., Prefetch, ShimCache y los registros de eventos de Windows) para confirmar la ejecución real y reconstruir líneas de tiempo precisas. Comparar las entradas de InventoryApplicationFile con InventoryApplication revela si un archivo solo se ha descargado o también se ha instalado de manera formal, y la identificación de registros de drivers inesperados puede exponer rootkits sigilosos y mecanismos de persistencia. El uso de parsers como AmCache-EvilHunter y la verificación cruzada con VirusTotal o con bases de datos de amenazas propietarias permite generar indicadores de compromiso y da lugar a una sólida respuesta a incidentes, lo que convierte el análisis de AmCache en una habilidad fundamental para los profesionales de análisis forense digital y respuesta a incidentes.

Recorrido forense: a la caza del mal con AmCache

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

 

Informes

BlindEagle vuela alto en LATAM

Kaspersky proporciona información sobre la actividad y los TTPs del APT BlindEagle. Grupo que apunta a organizaciones e individuos en Colombia, Ecuador, Chile, Panamá y otros países de América Latina.

MosaicRegressor: acechando en las sombras de UEFI

Encontramos una imagen de firmware de la UEFI infectada con un implante malicioso, es el objeto de esta investigación. Hasta donde sabemos, este es el segundo caso conocido en que se ha detectado un firmware malicioso de la UEFI usado por un actor de amenazas.