https://github.com/ShaneK2/inVtero.net/blob/master/quickdumps/publish.zip
Linux использует серверы символов для разрешения типов, это просто работает;)
Ознакомьтесь с выпуском inVteroCore, чтобы обеспечить целостность XEN и VMWare в Linux (или везде, где работает CORECLR, OSX и FBSD).
##$ ВАЖНО (пользователи Windows в .NET) => Вам необходимо зарегистрировать msdia140.dll «cmd /c regsvr32 msdia140.dll» (см. zip-архив)
Никакой настройки не требуется, полностью динамическая/утиная печать.
Новый пользовательский интерфейс для редактирования поддерживаемых форматов памяти (разборка/сборка и исправление). Используйте «Loader()» на экземпляре vtero, например;
Loader(test(MemList))
Измените строку MemoryDump, чтобы она указывала на дамп памяти. Пример обхода дампа памяти и объяснение системы типов в анализе.py, см. WalkProcListExample().
quickdumps
>>> MemList = [ "c:\temp\win10.64.xendump" ]
>>> test(MemList)
++++++++++++++++++++++++++++++ ANALYZING INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
PART RUNTIME: 00:00:08.5211677 (seconds), INPUT DUMP SIZE: 4,303,692,448.00 bytes.
SPEED: 466,980 KB / second (all phases aggregate time)
++++++++++++++++++++++++++++++ DONE WITH INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
>>> Loader(vtero)
Находить/извлекать процессы, гипервизоры (в том числе вложенные) в дампах памяти с использованием независимых от микроархитектуры методов интроспекции виртуальных машин. Кроссплатформенные, мультиархитектурные, высокопроизводительные инструменты анализа физической памяти.
x64-релиз |
---|
Quickdumps — это пример использования API inVtero.net для извлечения и проверки физической памяти.
При инициализации трансляции виртуального адреса в физический нет зависимости от формата входного файла. Любые .DMP, .RAW, .DD подойдут. К сожалению, существует большое «если», если базовый формат захвата использует некоторую форму хранилища экстентов (т. е. не использует физическую память для NULL или NOT PRESENT страниц), ваш пробег может отличаться. Существует множество инструментов для преобразования дампов памяти, волатильности — rekal — хорошее начало. БИТМАП. Файлы DMP находятся на стадии разработки, чтобы упростить анализ liveump (в настоящее время все работает лучше всего, если вы вручную запускаете синий экран с настроенным полным дампом или используете сторонний инструмент типа raw dd).
Чтобы гарантировать, что мы взаимодействуем с пользователем только тогда, когда это необходимо, используется несколько концепций. Аналогично проекту Actaeon на github @eurecom-s3/actaeon основная цель — найти и использовать страницу VMCS для обнаружения настроенного EPTP (указатель расширенной таблицы страниц), который необходим для поиска физических страниц, принадлежащих экземпляр гостевой ОС. Google @google/rekall rekal впоследствии реализовал более расширенную реализацию, которая требует от пользователя запуска модуля ядра Linux в системе, из которой создается данный дамп памяти, который предназначен для создания специализированного профиля, который можно использовать для последующего импорта в локальный rekal. профиль, который позволит вам затем изолировать/извлечь гостевую память из дампа физического хоста.
На CanSecWest/DC22 я представил высококачественную технику (основанную на взаимодействии нижнего уровня между уровнями ЦП и ОС) для идентификации любого процесса, запущенного в системе, путем проверки снимков физической памяти. Этот механизм основан на так называемом указателе на себя (Windows) или рекурсивном указателе каталога страниц (*BSD), который всегда должен быть найден (если только ваша система Windows не имеет сильно модифицированного/исправленного mm или просто специального ядра для * БСД). Конечным результатом этого является то, что мы знаем все заданные значения регистра CR3. Поскольку VMCS содержит как минимум одно известное значение CR3 (второе значение может быть эмулировано или динамически переназначено), мы уверены, что полный дамп памяти можно выполнить, не зная ничего о базовой версии ОС (например, XP(64bit)->Win2016 последовательный) или микроархитектура.
Грубая сила всегда побеждает в конце концов! По крайней мере, я так слышал... В любом случае, если обнаружено неизвестное сопоставление VMCS (индекс EPTP), быстрые дампы выдадут набор возможных значений/индексов. Список обычно небольшой, максимум 10-20. Будущая функция — автоматизировать попытки для каждого возможного значения до тех пор, пока не будет найдено «работающее». Это должно гарантировать, что мы будем работать с будущими микроархитектурами ЦП без каких-либо изменений кода (или я, скорее всего, настрою какой-нибудь класс, который их определяет, чтобы облегчить жизнь). В любом случае, перебор должен быть довольно быстрым. Я стараюсь максимально эффективно использовать многоядерные процессоры, поэтому, если у вас есть дополнительные ядра, они, скорее всего, получат нагрузку, если вы будете анализировать огромный дамп со многими виртуальными машинами.
Пример запуска с ноутбука:
Process CR3 [00000002DD41F000] File Offset [0000000293A12000] Diff [FFFFFFFFB65F3000] Type [Windows]
159 candiate process page tables. Time so far: 00:01:01.4826693, second pass starting. rate: 32588.149 MB/s
Hypervisor: VMCS revision field: 16384 [00004000] abort indicator: NO_ABORT [00000000]▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [00000001262DA000]
[435][00000000006F0054]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001308D3000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000130AD1000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001314CF000]
[14][000000007433301E]
Hypervisor: VMCS revision field: 0 [00000000] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [0000000160643000]
[106][00000000001E001C]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000195922000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001959A3000]
[14][000000007433301E]
159 candiate VMCS pages. Time to process: 00:02:51.8973861
Data scanned: 34,171,150,654.00Second pass done. rate: 1277.967 MB/s▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
grouping and joinging all memory
Scanning for group correlations
MemberProces: Groupt 1 Type [Windows] Group Correlation [100.000 %] PID [1AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [16A0000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [1FCA000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [62AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [34CE8000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [37300000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [7DCC6000]
Finished Group 1 collected size 48 next group
Scanning for group correlations
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [65C8000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6B51000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6CC9000]
В приведенном выше примере EPTP VMWARE имеет индекс 14 в VMCS.
* Посмотрим, удастся ли мне это выбить, но сейчас он только выгружает память ядра с каждого уровня. Работа в пользовательском пространстве с виртуальных машин гостевой ОС.
Много TODO, но я собираюсь добавить их как можно скорее. Основная проблема сейчас заключается в том, что я действительно не решаюсь добавлять что-либо, поставляемое ОС, даже если это будет огромной помощью. Я думаю, что доступен достаточный контекст, чтобы избежать добавления каких-либо логических зависимостей ОС. Мне нравится, как Рекал обещает это, но, похоже, их архив профиля тоже очень большой, так что и то, и другое.
Осталось еще немного почистить. Это пока альфа, но будет активно развиваться.
Расширьте доступ к более известным типам EPTP, чтобы не требовалась грубая сила.
Собираюсь создать индекс растрового изображения PFN для автоматического определения запусков (в настоящее время, если вы попытаетесь сделать дамп/запросить что-либо после запуска, это вызовет проблемы или будет пропущено и т. д. Мы добавим это следующим, чтобы гарантировать, что мы получим 100% полные дампы. .
Воздерживаться от использования логических структур ОС для поддержки анализа памяти. Вполне вероятно, что злоумышленник может манипулировать большинством структур уровня ОС, данными, кодом и объектами, чтобы неправильно направить усилия аналитика.
Будущая функциональность для отображения карты целостности для кодовых страниц, которую можно будет сопоставить обратно с криптографически безопасными хэш-значениями блока/страницы (например, SHA256 или TIGER192). Наши результаты показывают, что уровень проверки до Win10 превышает 99%, энергозависимая память после Win10 проверяема практически на 100%. Это исключает существенные догадки и неизвестные ошибки, возникающие из-за традиционной ручной обработки/просмотра/разборки памяти при попытке обнаружить/анализировать входные данные объемом в несколько гигабайт.
Документация
Реализация графического интерфейса