Посты о SOC, TI и IR

Артефакт AmCache: помощник в охоте на угрозы

Введение

В контексте цифровой криминалистики артефакт AmCache играет ключевую роль при выявлении вредоносной активности в системах Windows. Он позволяет определить факт запуска как легитимного, так и вредоносного ПО на компьютере. AmCache формирует и ведет операционная система, и на момент написания статьи не существует известных способов вмешаться в его данные или стереть их. Следовательно, в случае реагирования на инцидент именно эти данные могут помочь идентифицировать утраченные артефакты (например, сведения о шифровальщике, который автоматически удаляет себя). В записях AmCache аналитики могут обнаружить признаки действий атакующих — имена файлов, пути к ним и другую важную информацию. Более того, артефакт AmCache хранит хэши SHA-1 выполнявшихся файлов, что позволяет экспертам по цифровой криминалистике и реагированию на инциденты (DFIR) искать совпадения на публичных порталах с аналитическими данными об угрозах, таких как OpenTIP и VirusTotal, а также формировать правила для блокирования конкретного файла в других системах в пределах той же сети.

Эта статья предлагает детальный анализ артефакта AmCache и знакомит читателей с его внутренним устройством. Кроме того, мы разработали новый инструмент под названием AmCache-EvilHunter, с помощью которого любой специалист сможет без лишних усилий пропарсить файл Amcache.hve и извлечь из него индикаторы компрометации. Наш инструмент также позволяет обращаться к упомянутым выше порталам для сверки с данными о детектировании вредоносных файлов. Такой уровень встроенной автоматизации сокращает объем ручной работы и ускоряет выявление угроз, что по достоинству оценят как ИБ-аналитики, так и специалисты по реагированию на инциденты.

Важность информации о запуске ПО

Информация о запуске ПО имеет важное значение в цифровой криминалистике и при реагировании на инциденты, поскольку помогает ИБ-специалистам восстановить ход событий и понять, как использовалась система во время проникновения. Такие артефакты, как Prefetch, ShimCache и UserAssist, дают представление о том, какие программы запускались в системе. Артефакт AmCache также содержит метаданные, позволяющие установить, что бинарный файл находился в системе и выполнялся, даже если он был удален или модифицирован. Преимущество AmCache по сравнению с другими артефактами Windows заключается в том, что в нем хранятся хэш-суммы файлов, что имеет большое значение для криминалистики: зная хэши, можно проверить другие компьютеры в сети на наличие конкретных вредоносных файлов и повысить шансы выявить, предотвратить распространение и нейтрализовать вредоносную активность.

Знакомство с AmCache

Кэш активности приложений (AmCache) впервые появился в ОС Windows 7, а в полной мере заработал в Windows 8 и более поздних версиях. Он пришел на смену устаревшему файлу RecentFileCache.bcf. В отличие от своего предшественника, AmCache содержит ценную криминалистическую информацию о выполнении программ, запускавшихся бинарных файлах и загруженных драйверах.

Артефакт хранится в виде файла куста реестра под названием Amcache.hve в каталоге C:\Windows\AppCompat\Programs. В этом файле сохраняются такие метаданные, как пути к файлам, сведения об издателе, временные метки компиляции, размеры файлов и их хэши SHA-1.

Важно отметить, что формат AmCache зависит не от версии операционной системы, а от версии DLL-библиотек, отвечающих за наполнение этого кэша. По этой причине в структуре файлов AmCache в разных экземплярах Windows могут наблюдаться незначительные отличия, например, если установлены разные комбинации обновлений. Известные библиотеки, отвечающие за формирование этого кэша, хранятся в каталоге %WinDir%\System32 под следующими именами:

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

Отдельно стоит остановиться на особенностях и ограничениях этого артефакта. В AmCache вычисляется SHA-1-хэш только для первых 31 457 280 байт (≈31 МБ) каждого исполняемого файла, поэтому при сравнении сохраненного хэша с онлайн-базами могут возникать несоответствия для файлов, превышающих этот размер. Кроме того, Amcache.hve не является полноценным логом выполнения: он записывает файлы из каталогов, просканированных задачей Microsoft Compatibility Appraiser; исполняемые файлы и драйверы, которые были скопированы во время выполнения других программ; а также приложения с графическим интерфейсом, которые требовали применения shim для совместимости. Только последняя категория надежно указывает на факт исполнения. Записи, связанные с первыми двумя группами, лишь подтверждают наличие файла в системе — никаких сведений о том, когда он запускался и запускался ли вообще, они не предоставляют.

В той же директории находятся дополнительные файлы LOG, которые используются для обеспечения консистентности и восстановления файла Amcache.hve:

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

Файл Amcache.hve можно извлечь из системы для проведения криминалистического анализа — в том числе с помощью таких инструментов, как Aralez, Velociraptor или Kape.

Структура файла Amcache.hve

Файл Amcache.hve представляет собой файл куста реестра Windows в формате REGF и содержит множество подразделов, в которых хранятся разные классы данных. Для анализа файла Amcache.hve и перечисления его разделов можно использовать простой парсер на Python:

После выполнения парсер выводит следующий результат:

Разделы AmCache

Разделы AmCache

С точки зрения DFIR, больше всего нас интересуют разделы InventoryApplicationFile, InventoryApplication, InventoryDriverBinary и InventoryApplicationShortcut. Рассмотрим их подробнее.

InventoryApplicationFile

Раздел InventoryApplicationFile позволяет отследить все исполняемые файлы, обнаруженные в системе. Для каждого такого файла в нем создается подраздел с уникальным названием, в котором сохраняются следующие ключевые метаданные.

  • ProgramId: уникальная хэш-сумма, сгенерированная на основе имени, версии, издателя и языка бинарного файла (с несколькими нулями, добавленными в начало хэша).
  • FileID: хэш SHA-1 данного файла (с четырьмя нулями, добавленными в начало хэша).
  • LowerCaseLongPath: полный путь к исполняемому файлу, приведенный к нижнему регистру.
  • Name: базовое имя файла без указания пути.
  • OriginalFileName: оригинальное имя файла, указанное в ресурсе VERSION заголовка PE. Это имя присваивается разработчиком на этапе сборки.
  • Publisher: часто используется для проверки легитимности происхождения бинарного файла. Во вредоносных файлах этот подраздел, как правило, остается пустым.
  • Version: конкретный номер сборки или версия исполняемого файла.
  • BinaryType: тип исполняемого файла (32- или 64-разрядный).
  • ProductName: поле ProductName из ресурса VERSION, где указывается общее название программного продукта или пакета, частью которого является данный исполняемый файл.
  • LinkDate: временная метка компиляции из заголовка PE.
  • Size: размер файла в байтах.
  • IsOsComponent: булевый флаг, определяющий, является ли исполняемый файл встроенным компонентом операционной системы или сторонним приложением/библиотекой.

Если внести несколько правок в наш парсер на Python, мы сможем корректно считать информацию, хранящуюся в этом разделе:

Подразделы InventoryApplicationFile

Подразделы InventoryApplicationFile

Также эти данные можно просмотреть в графическом виде, например с помощью программы Registry Explorer:

Просмотр InventoryApplicationFile через Registry Explorer

Просмотр InventoryApplicationFile через Registry Explorer

Как уже упоминалось, для AmCache вычисляется хэш SHA-1 только по первым 31 457 280 байтам (примерно 31 МБ). Чтобы убедиться в этом, мы провели небольшой эксперимент с двумя бинарными файлами: один меньше 31 МБ (Aralez), другой — больше (модифицированная версия Velociraptor). В первом случае в AmCache был сохранен SHA-1-хэш всего бинарного файла.

Сохранение хэша SHA-1 в AmCache в первом сценарии

Сохранение хэша SHA-1 в AmCache в первом сценарии

Во втором сценарии мы воспользовались утилитой dd, чтобы извлечь первые 31 МБ данных бинарного файла Velociraptor:

Обрезанный бинарный файл

Обрезанный бинарный файл

Проверяя запись, связанную с Velociraptor, в артефакте AmCache, мы увидели, что в ней действительно сохранился хэш SHA-1, рассчитанный только по первым 31 457 280 байтам бинарного файла. Что интересно, в значении Size фиксируется настоящий размер оригинального файла. Следовательно, для крупных файлов одного лишь хэша из AmCache может быть недостаточно, чтобы найти совпадения через онлайн-порталы с данными об угрозах. Чтобы не тратить время впустую на запросы к таким порталам, сначала следует убедиться, что размер файла, указанный в записях артефакта, не превышает 31 457 280 байт.

Сохранение хэша SHA-1 в AmCache во втором сценарии

Сохранение хэша SHA-1 в AmCache во втором сценарии

Атакующие могут злоупотреблять этой особенностью артефакта и целенаправленно генерировать крупные вредоносные исполняемые файлы. Тогда, даже если исследователи установят, что вредоносное ПО запускалось или присутствовало в системе Windows, истинный хэш SHA-1 его исполняемого файла останется неизвестен, что усложнит задачу отслеживания этого зловреда в сети организации и его поиска в публичных базах данных, таких как VirusTotal.

Пример использования InventoryApplicationFile: поиск стертого инструмента злоумышленников

Предположим, вы расследуете потенциальную инсайдерскую угрозу. Пользователь отрицает запуск каких-либо сомнительных программ. Если подобные программы и присутствовали в системе, то они были надежно удалены с носителя. Однако в разделе InventoryApplicationFile вы находите запись о том, что в папке «Загрузки» этого пользователя был бинарный файл winscp.exe. И хотя самого файла там уже нет, у вас остается свидетельство того, что данный инструмент присутствовал на компьютере и, вероятно, использовался для передачи файлов, после чего был удален. В практике реагирования на инциденты у нас были схожие случаи, когда именно этот раздел артефакта оказался крайне полезным.

InventoryApplication

В раздел InventoryApplication вносятся сведения о приложениях, установленных в системе. В отличие от раздела InventoryApplicationFile, куда попадают все обнаруженные исполняемые файлы, InventoryApplication посвящен программам, которые внесены в список установленных. Название каждой записи в этом разделе соответствует уникальному идентификатору ProgramId, который позволяет напрямую связать ее с соответствующей записью из раздела InventoryApplicationFile. Кроме того, в InventoryApplication присутствует следующие несколько подразделов, которые могут нам пригодиться.

  • InstallDate: строка с датой и временем, указывающая, когда операционная система впервые зафиксировала или распознала данное приложение.
  • MsiInstallDate: значение присутствует только в случае установки программы с помощью Windows Installer (MSI). В нем фиксируется точное время применения пакета MSI, полученное напрямую из метаданных MSI.
  • UninstallString: точная командная строка, используемая для удаления программы.
  • Language: числовой идентификатор языка приложения, заданный разработчиком (LCID).
  • Publisher: имя издателя или поставщика программного обеспечения.
  • ManifestPath: путь к файлу установочного манифеста, используемого приложениями UWP или AppX/MSIX.

Мы можем внести небольшую корректировку в наш парсер, чтобы посмотреть данные из этого раздела:

Подразделы InventoryApplication

Подразделы InventoryApplication

Если ProgramId присутствует в этом разделе и в InventoryApplicationFile, это означает, что исполняемый файл не просто находился на устройстве или запускался, но был установлен. Так можно различать случайные копии или одноразовые запуски от установленного программного обеспечения. На приведенном ниже снимке экрана выделен ProgramId программы WinRAR в разделе InventoryApplicationFile.

При поиске этого ProgramId можно найти точное соответствие в разделе InventoryApplication, что подтверждает, что WinRAR действительно был установлен в системе.

Еще одна важная особенность InventoryApplication заключается в наличии подраздела LastScanTime, который отделен от записей ProgramId и содержит значение, соответствующее времени последнего запуска Microsoft Compatibility Appraiser. Это плановая задача, выполняющая бинарный файл compattelrunner.exe, и данные в этом разделе обновляются только при запуске этой задачи. Другими словами, если программа была установлена после последнего запуска Appraiser, она может отсутствовать в этом разделе. Значение LastScanTime представлено в формате Windows FileTime.

Значение LastScanTime в разделе InventoryApplication

Значение LastScanTime в разделе InventoryApplication

Пример использования InventoryApplication: выявление ПО для удаленного доступа

Предположим, что в ходе реагирования на инцидент вы обнаружили запись программы AnyDesk в разделе InventoryApplication, хотя сама программа уже отсутствует в списке установленных. Это указывает на то, что злоумышленник, вероятно, использовал ее для удаленного доступа, а затем удалил, чтобы замести следы. Даже если программа была полностью стерта с носителя, записи из этого раздела подтверждают, что она действительно присутствовала в системе. Мы наблюдали подобные сценарии в реальных случаях не один раз.

InventoryDriverBinary

В разделе InventoryDriverBinary фиксируется каждый драйвер режима ядра, загруженный системой. Эти метаданные являются критически важными при выявлении подозрительных или вредоносных драйверов. Информация о каждом драйвере хранится в отдельном подразделе с уникальным именем и включает следующее.

  • FileID: хэш SHA-1 бинарного файла драйвера (с четырьмя нулями, добавленными в начало хэша).
  • LowerCaseLongPath: полный путь к файлу драйвера на накопителе, приведенный к нижнему регистру.
  • DigitalSignature: сведения о сертификате подписи кода. Действительная доверенная подпись позволяет убедиться в подлинности драйвера.
  • LastModified: временная метка последнего изменения файла, извлекаемая из метаданных файловой системы. Она указывает на момент последнего внесения изменений в бинарный файл драйвера на накопителе.

Поскольку драйверы Windows работают с максимально возможными привилегиями, они часто эксплуатируются вредоносным ПО. Например, как показало недавнее исследование «Лаборатории Касперского», злоумышленники используют уязвимые драйверы для принудительного завершения процессов EDR. При расследовании инцидентов кибербезопасности специалисты проверяют для каждого драйвера криптографические хэши, пути к файлам, состояния цифровой подписи и метки времени последнего изменения. Это позволяет убедиться, что бинарный файл соответствует известной подписанной версии, выявить следы вмешательства при подозрительных значениях времени последнего изменения и отсеять неподписанные или подозрительно именованные драйверы для дальнейшего анализа. Проекты вроде LOLDrivers ведут списки уязвимых драйверов, которые злоумышленники эксплуатируют в реальных атаках.

Анализ InventoryDriverBinary

Анализ InventoryDriverBinary

Помимо InventoryDriverBinary артефакт AmCache содержит раздел InventoryApplicationDriver, в котором фиксируются все драйверы, установленные определенными программами. В этом разделе присутствуют две записи:

  • DriverServiceName— имя службы, связанной с установленным драйвером;
  • ProgramIds— идентификаторы программ, соответствующие именам подразделов в InventoryApplication, которые связаны с установкой данного драйвера.

Как показано на снимке экрана ниже, значение ProgramIds позволяет отследить связанную программу, использующую этот драйвер:

Просмотр сведений о программе по идентификатору ProgramIds

Просмотр сведений о программе по идентификатору ProgramIds

Пример использования InventoryDriverBinary: поиск плохого драйвера

Если система была скомпрометирована с помощью известного уязвимого или вредоносного драйвера, его присутствие можно подтвердить через раздел InventoryDriverBinary. Даже если драйвер был удален или скрыт, оставшиеся в этом разделе записи позволяют установить, что он когда-то загружался, что помогает выявить компрометацию на уровне ядра и восстановить хронологию событий в ходе расследования. Именно таким способом был обнаружен зловред AV Killer.

InventoryApplicationShortcut

Этот раздел содержит записи о файлах ярлыков .lnk, которые находились в папках вроде меню «Пуск» или рабочего стола каждого пользователя. В каждом подразделе, связанном с конкретным ярлыком, присутствует значение ShortcutPath, фиксирующее абсолютный путь к файлу LNK на момент его обнаружения. Значение ShortcutTargetPath содержит путь, на который указывал ярлык. Кроме того, с помощью значения ShortcutProgramId можно найти соответствующую запись ProgramId в разделе InventoryApplication по тому же принципу, что и при работе с драйверами.

Раздел InventoryApplicationShortcut

Раздел InventoryApplicationShortcut

Пример использования InventoryApplicationShortcut: подтверждение запуска удаленного приложения

Вы установили, что с компьютера была удалена подозрительная программа, однако пользователь отрицает, что когда-либо ее запускал. Согласно записям в разделе InventoryApplicationShortcut, на рабочем столе этого пользователя находился ярлык данной программы и недавно его открывали. Если сопоставить эти сведения с дополнительными уликами, например с анализом Prefetch, можно подтвердить факт выполнения подозрительной программы.

Сравнение разделов AmCache

В таблице ниже представлена сводная информация по каждому рассмотренному разделу артефакта AmCache с указанием ключевых особенностей каждого из них.

Раздел Содержимое Указывает на выполнение?
InventoryApplicationFile Метаданные для всех исполняемых файлов, обнаруженных в системе Возможно (факт присутствия = высокая вероятность запуска)
InventoryApplication Метаданные установленного программного обеспечения Нет (факт установки не обязательно свидетельствует о запуске)
InventoryDriverBinary Метаданные о загруженных драйверах режима ядра Да (драйвер загружался в память)
InventoryApplicationShortcut Сведения о файлах LNK Возможно (для подтверждения нужны сопутствующие улики)

AmCache-EvilHunter

Несомненно, Amcache.hve является крайне важным артефактом для криминалистического анализа. Однако нам не удалось найти ни одного инструмента, способного эффективно парсить его содержимое и сопоставлять найденные улики с аналитическими данными об угрозах. Поэтому мы разработали утилиту командной строки AmCache-EvilHunter, которая умеет парсить и анализировать кусты реестра Amcache.hve , находить признаки запуска и подозрительные исполняемые файлы, а также отправлять запросы в Kaspersky OpenTIP и VirusTotal.

AmCache-EvilHunter может обработать файл Amcache.hve, отфильтровав записи по диапазону дат с помощью параметров --start и --end. Также доступен поиск по ключевым словам (--search), что полезно для выявления известных имен и шаблонов, применяемых злоумышленниками. Результаты работы утилиты можно сохранять в формате CSV (--csv) или JSON (--json).

На рисунке ниже приведен пример работы AmCache-EvilHunter с базовыми параметрами командной строки:

Результирующий файл содержит сведения обо всех приложениях, присутствовавших в системе 19 июня 2025 года. В последнем столбце указано, является ли файл компонентом операционной системы или нет.

Простой пример использования AmCache-EvilHunter

Простой пример использования AmCache-EvilHunter

Содержимое CSV с результатами

Содержимое CSV с результатами

Аналитики часто сталкиваются с большим количеством исполняемых файлов и артефактов. Чтобы сузить область анализа и отфильтровать шум, можно использовать параметр --find-suspicious, который позволяет выявлять известные подозрительные бинарные файлы. В шаблонах поиска, применяемых нашим инструментом, учитываются; распространенные названия вредоносного ПО; имена процессов Windows с незначительными опечатками (например, scvhost.exe); легитимные исполняемые файлы, которые часто использовались злоумышленниками в разных инцидентах; имена файлов из одного символа (например, 1.exe или a.exe); случайные шестнадцатеричные строки. В примере ниже показаны результаты работы этого параметра. На рисунке выделены два файла: svchost.exe — часть операционной системы и второй — не связанный с ОС. Последний — неплохой кандидат для сбора и дальнейшего анализа, если он не был удален.

Идентификация подозрительных файлов

Идентификация подозрительных файлов

Вредоносные файлы обычно не содержат сведений об издателе и уж точно не являются компонентами операционной системы. Поэтому в AmCache-EvilHunter предусмотрены параметры --missing-publisher и --exclude-os, которые помогут отсеять подозрительные бинарные файлы и ускорить процесс сбора информации об угрозах, что критически важно при реагировании на инцидент.

Еще одной важной функцией, выделяющей AmCache-EvilHunter среди других подходов, является возможность сопоставлять найденные хэши с базами Kaspersky OpenTIP (--opentip) и VirusTotal (--vt). Это позволяет аналитикам быстро оценить образцы и принять решение о необходимости проведения полного анализа артефакта.

Проверка по онлайн-базам

Проверка по онлайн-базам

Исполняемые файлы инструмента доступны на нашей странице GitHub как для Linux, так и для Windows.

Заключение

Amcache.hve является важным артефактом для криминалистического анализа Windows-систем. Он содержит обширные метаданные для каждого обнаруженного в системе исполняемого файла, включая полные пути, хэши SHA-1, временные метки компиляции, сведения о версии и издателе. Хотя этот артефакт не является настоящим логом выполнения, его ценность заключается в документировании существования файла и пути к нему. Он незаменим при выявлении аномальных бинарных файлов, проверке легитимности файлов с помощью онлайн-баз угроз и сопоставлении значений LinkDate с датами известных кампаний.

Весь аналитический потенциал данных AmCache раскрывается в сочетании с другими артефактами, такими как Prefetch, ShimCache и журналы событий Windows, которые помогают подтвердить факт выполнения бинарных файлов и построить точную хронологию событий. Сопоставление записей в разделах InventoryApplicationFile  и InventoryApplication позволяет определить, был ли файл формально установлен или просто сохранен на накопителе. Выявление нетипичных записей драйверов может указывать на скрытые руткиты и механизмы закрепления в системе. Используя продвинутые парсеры, такие как AmCache-EvilHunter, и сверяя данные с базами VirusTotal или проприетарными базами данных об угрозах, можно составлять индикаторы компрометации и эффективнее реагировать на инциденты. Это делает использование артефакта AmCache ценным навыком для специалистов по DFIR.

Артефакт AmCache: помощник в охоте на угрозы

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

ToddyCat — ваш скрытый почтовый ассистент. Часть 1

Эксперты «Лаборатории Касперского» разбирают атаки APT ToddyCat через корпоративную электронную почту. Изучаем новую версию TomBerBil, инструменты TCSectorCopy и XstReader, а также способы кражи токенов доступа из Outlook.

Криптоафера группы BlueNoroff: «призрачные» инвестиции и фиктивные рабочие предложения

Эксперты команды GReAT проанализировали кампании GhostCall и GhostHire APT-группы BlueNoroff: несколько цепочек вредоносного ПО для macOS, поддельные клиенты Zoom и Microsoft Teams, а также изображения, улучшенные с помощью ChatGPT.

Mem3nt0 mori – Hacking Team снова с нами!

Исследователи «Лаборатории Касперского» впервые обнаружили шпионское ПО Dante, разработанное Memento Labs (бывшей Hacking Team) в дикой природе и нашли его связь с APT ForumTroll.