Большинство утилит для поиска малвари анализируют систему в режиме live, то
есть во время ее работы. Но мало кто знает о существовании программ, которые,
помимо прочего, способны выполнять так называемые офлайн-исследования, позволяя
отыскать зло в памяти компьютера, когда к тому нет доступа или он вообще
выключен. Некоторое время назад я открыл для себя новый способ поиска малвари,
которым с тех пор эффективно пользуюсь. По правде говоря, основным назначением
применяемого инструмента является вовсе не поиск руткитов, а комплексный анализ
памяти. Но так получилось, что включенные в него техники идеально подходят для
того, чтобы отыскать хорошо затаившуюся в системе малварь. С утилитой Mandiant’s
Memoryze я познакомился, когда активно изучал программные решения для
компьютерной криминалистики.

Помимо основной категории продуктов, предназначенных для глубокого изучения
дисковых накопителей, широко используются также решения для анализа оперативной
памяти. Такие исследования выделяют в особый вид экспертиз — Memory Forensic.
Некоторые из приложений (и в том числе Memoryze) умеют не только выполнять
исследование "живой" системы, но и анализировать образ памяти, в который
заблаговременно было помещено все содержимое оперативной памяти компьютера. Это
дает большой простор для деятельности. Имея такой образ, ничто не мешает позже
разобраться, какие приложения запущены в системе (на момент создания дампа,
разумеется) или, например, с какими хостами взаимодействуют интересующие нас
процессы. Ну и само собой, это еще и отличный способ для поиска малвари. Можно
сделать дамп на проблемной машине и далее на своем собственном компьютере без
каких-либо неудобств разбираться, какая ерунда загружена в памяти. Тут надо
понимать, что в образ помещается все содержимое памяти, которое считывает и
анализирует специальный парсер. И какими бы продвинутыми методиками для сокрытия
активных процессов и драйверов не пользовалась малварь, их присутствие
обязательно будет отражено в дампе.

 

Что такое Memoryze?

Программу Memoryze в кругах компьютерных криминалистов знают не понаслышке.
Это мощнейшее средство анализа памяти для многих стало частью джентльменского
набора, настоящей программой must have, которая не просто лежит про запас для
подходящего случая, а действительно часто используется. Ее создателями являются
Джэми Батлер и Питер Силбермэн, два маньяка-хардкорщика в области анализа памяти
и малвари. Ты можешь прямо сейчас сказать им спасибо, потому что они не только
разработали замечательный инструмент, но еще и делятся им совершенно бесплатно.
Дистрибутив доступен для загрузки из раздела с фриварными программами
компании
Mandiant
.

Что мы можем получить, используя Memoryze:

  • полный образ всего диапазона системной памяти (без использования
    API-вызовов), сохраненный в файл для дальнейшего анализа;
  • дамп адресного пространства любого процесса, включая список загруженных
    DLL и EXE, кучу и стэк (этот дамп можно дальше исследовать в дизассемблере);
  • образ всех загруженных драйверов или некоторых из них;
  • полный список всех процессов, включая те, что спрятаны руткитами, причем
    для каждого процесса есть возможность определить все хэндлы (например,
    используемых файлов или ключей реестра), сетевые сокеты, импортируемые и
    экспортируемые функции и так далее;
  • все строковые переменные, используемые процессами;
  • полный список всех драйверов, в том числе те, которые маскируются
    малварью;
  • перечень всех модулей ядра;
  • перечисление всех установленных хуков (они часто используются малварью);
  • и многое другое.

Вообще, когда говорят о Memoryze, чаще всего имеют в виду не одну, а две
утилиты: консольную Memoryze и GUI-приложение Audit Viewer. Они тесно связаны
между собой. Memoryze создает дамп и парсит различные структуры, чтобы извлечь
интересующие данные. Но работать в консоли не сильно удобно, поэтому в связке
используется другая утилита — Audit Viewer, которая позволяет работать с
извлеченными данными через удобный интерфейс. Таким образом можно узнать все о
том, что в момент создания образа было запущено в системе.

В некоторых ситуациях очень удобно иметь программу при себе, поэтому ее лучше
всего разместить на флешку достаточного объема, чтобы туда поместился еще и
сграбленный дамп памяти. К счастью, утилита из коробки является portable, и
установить ее можно прямо из командной строки:

msiexec /a MemoryzeSetup.msi /qb TARGETDIR=путь_до_флешки_и_папки_на_ней

Не лишним будет записать на флешку и файлы Audit Viewer’а, чтобы сразу иметь
возможность проанализировать полученный дамп или вообще выполнить "живое"
исследование системы.

 

Создаем образ памяти

Теперь, когда все приготовления завершены, попробуем программу в деле. Как я
уже говорил, Memoryze работает из командной строки. Но для большего удобства с
программой поставляют несколько batch-скриптов для выполнения наиболее типичных
задач.

Так, для получения образа с полным содержанием оперативной памяти есть
сценарий MemoryDD.bat, его-то мы и будем использовать. После запуска он
генерирует конфиг c настройками и выполняет memoryze.exe с нужными параметрами:

G:\\\\memoryze\\\\MemoryDD.bat

После выполнения команды есть два варианта: программа успешно создаст дамп с
памятью или у нее ничего не выйдет. Последнее очень вероятно. Дело в том, что
для работы Memoryze использует kernel-mode драйвер, предоставляющий программе
прямой доступ к памяти. Нет драйвера – нет дампа. Есть несколько причин, по
которым драйвер не сможет загрузиться, но в первую очередь — из-за отсутствия
прав администратора. Поэтому убедись, что запускаешь ее из рутовой командной
строки. Другая распространенная причина — антивирус, который может
препятствовать прямому обращению к памяти. Возможно, что на время его придется
отключить. Если все пройдет успешно, полученный дамп будет сохранен в папке с
выходными результатами (по умолчанию в папке с Memoryze/Audits). Структура
каталога устроена таким образом, чтобы повторные выполнения процедуры не
перезаписывали ранее полученные образы. Так что всегда легко определить, на
каком компьютере и когда был создан образ.

 

Анализируем дамп

Для анализа и просмотра образа памяти, как я уже сказал, используется другая
утилита — Audit Viewer. Причем содержание оперативной памяти необязательно
должно быть сдамплено с помощью Memoryze. Гораздо большее значение имеет
операционная система, на которой создавался образ. Причиной тому являются
структуры памяти, которые могут значительно отличаться от одной версии
операционной системы к другой. В некоторых случаях даже один установленный (или,
наоборот, неустановленный) патч может влиять на возможность выполнить анализ
данных. Анализатор может парсить только структуры известной ему ОС. Поэтому,
прежде чем говорить, что Memoryze и Audit Viewer не работают, необходимо
убедиться, что ты не пытаешься выполнить анализ неподдерживаемой системы
(например, Windows XP SP1). К счастью, для внушительного списка ОС все должно
без проблем получиться:

  • Windows 2000 Service Pack 4 (32-bit);
  • Windows XP Service Pack 2 and Service Pack 3 (32-bit);
  • Windows Vista Service Pack 1 and Service Pack 2 (32-bit);
  • Windows 2003 Service Pack 2 (32-bit);
  • Windows 2003 Service Pack 2 (64-bit);
  • Windows 7 Service Pack 0 (32-bit);
  • Windows 7 Service Pack 0 (64-bit);
  • Windows 2008 Service Pack 1 and Service Pack 2 (32-bit);
  • Windows 2008 R2 Service Pack 0 (64-bit).

Курсивом в этом списке обозначены те системы, поддержка которых находится в
бета-тестировании.

Для анализа дампа достаточно запустить auditviewer.exe и выбрать пункт "Configure
Memoryze". Не обращай внимания на опцию "Open Existing Results" — она
предназначена для повторного открытия уже существующего файла с анализом дампа.
Для выполнения исследования программа попросит тебя указать путь до исполняемого
файла Memoryze и выбрать папку для сохранения результатов. Далее есть два
варианта: выполнить анализ имеющегося дампа памяти (возможно, с совершенно
другого компьютера) или проанализировать память с текущего компьютера. Выбираем
первый режим и указываем путь до img-файла с нашим образом.

Несколько следующих шагов мастера необходимы для того, чтобы указать, что
именно нас интересует и насколько полную информацию мы хотим получить. Скажем,
если тебя интересуют только драйверы, которые работают в системе, можно не
парсить информацию о хуках и процессах. Подход "поставить все галки" здесь не
пройдет. Важно понять простую вещь: чем детальнее анализ будет выполнять Audit
Viewer, тем дольше она будет это делать. В некоторых случаях процесс может
затянуться на целый день. Но таких пыток легко можно избежать, минимизируя
количество проверок, которые будет выполнять программа. Например, включенная
опция для извлечения строковых переменных ("Extract strings") непременно
приведет к многочасовому анализу. Поэтому этот вид исследования рекомендуется
оставить на повторный проход (если такой понадобится), выполнив в первый раз
только те проверки, которые тебе действительно нужны. Хорошие результаты при
высокой скорости сканирования могут дать следующие настройки сканирования: режим
исследования процессов ("Process Enumiration") без определения хуков и
драйверов, но с большинством включенных опций за исключением уже упомянутой "Extract
Strings". Отдельно идут опции для извлечения (Acquisition) из памяти или образа
памяти адресного пространства драйверов или процессов. В основном это нужно,
если ты имеешь конкретные намерения исследовать что-то из извлеченных дампов в
дизассемблере.


А вот и список найденных в системе драйверов

 

Как это может помочь при Reverse Engineering?

С помощью Memoryze можно получить образ конкретного процесса или драйвера
со всеми его бинарными секциями из физической памяти. Причем можно извлечь
его как с "живой" системы, так и из ранее созданного дампа оперативной
памяти. На деле это позволяет, к примеру, обойти антиотладочные техники,
которые часто реализованы в малвари, после чего процесс или драйвер можно
анализировать в любимом дизассемблере. В программе заготовлены несколько
специально заточенных для этого аспекта сценариев.

Создание образа процесса:

  • ProcessDD.bat -pid<PID> — получение образа процесса из
    запущенной системы;
  • ProcessDD.bat -pid <PID> -input<filename> — извлечение
    образа из имеющегося дампа с памятью системы.

С извлечением драйвера и сохранения в файл все аналогично:

  • DriverDD.bat -driver<drivername>;
  • DriverDD.bat -driver<drivername> -input<fname>.

Как только все настройки анализа будут заданы, Audit Viewer начнет работу,
отобразив на экране прогресс-бар. В окне программы прямо во время парсинга дампа
памяти будут отображаться результаты анализа, включая информацию о процессах,
драйверах, хуках (в зависимости от выбранных настроек). Тут придется подождать,
но зато отчет тебя непременно впечатлит. Чего стоит только список
идентифицированных процессов со списком всех связанных DLL, хэндлов, секций
памяти и так далее. Еще раз обращаю твое внимание: это будет список абсолютно
всех процессов, включая те, которые, возможно, спрятаны в системе руткитами. Та
же история и с драйверами.

И не могу не рассказать об одном интересном трюке. Если дважды кликнуть по
названию процесса, в правой части программы появятся несколько новых вкладок. В
некоторых из них есть колонка "Occurrences" с цифровыми значениями (например,
для списка прилинкованных к процессу dll-библиотек). Эта фича основана на
параметре Least Frequency of Occurrences (LFO), описанном Питером Сильбермэном.
Идея очень простая, но очень эффективная: тела малвари обычно относительно
уникальны. Поэтому если компонент используется в нескольких процессах, то ему,
вероятно, можно доверять. А если же нет, есть повод насторожиться. Такой простой
принцип зачастую помогает быстро определить вредоносные библиотеки.


Список процессов с различными параметрами

 

Выполнение "живого" анализа памяти

Теперь рассмотрим случай, когда мы можем проанализировать память на имеющемся
в распоряжении компьютере. В этом случае необязательно создавать дамп — у Audit
Viewer есть live-режим, который имеет ряд преимуществ. Самая главная фишка в
том, что помимо непосредственно оперативной памяти ты можешь подключить для
анализа еще и swap-файл, а также выполнять проверку цифровых подписей. Это
информация используется для подсчета индекса MRI (Memoryze’s Malware Rating),
позволяющего поразительно быстро определить широкий круг малвари. Если программе
какой-то компонент покажется подозрительным, ты сразу об этом узнаешь. Имей в
виду, что при соответствующей включенной опции утилита будет вычислять хэш для
каждого исполняемого файла и библиотеки, ассоциированных с запущенными
процессами. Это может занять значительное время. Поэтому как минимум не надо
выбирать подсчет всех хэшей сразу (поддерживаются MD5, SHA1, SHA256). Можно
ограничиться одним из них, который ты действительно будешь использовать:
например, MD5. Выполнение "живого" анализа мало чем отличается от парсинга дампа
памяти. В том месте, где мы раньше указывали путь до img-файла, достаточно
выбрать режим "Acquire (and/or) Analyze Live Memory". И все. Тут стоит сказать,
что выполнение "живого" анализа никак не мешает нам сделать дамп памяти. Никогда
заведомо не знаешь, что позже ты можешь в нем обнаружить и увидеть. Для этого в
момент выбора режимов извлечения (там же, откуда ранее могли извлечь дамп
конкретного процесса или драйвера) надо не забыть выбрать опцию "Memory
Acquisition".

 

Почему Memoryze?

Связка Memoryze и Audit Viewer не единственная для проведения Memory Forensic.
Широко распространен также открытый проект
Volatility Framework.
При наличии MiniGW и интерпретатора Python его даже можно запустить под Windows,
но для этого придется повозиться. Намного проще совладать с ним под Linux
(особенно если иметь под рукой
мануал). В
специальном дистрибутиве для компьютерных криминалистов SANS Investigative
Forensic Toolkit фреймворк включен и сразу готов к работе. Сборка этой системы

выложена в виде образа для запуска под VMware
и доступна для бесплатной
загрузки.

И все-таки чувствуешь, что все как-то сложнее? По этой причине я и выбрал для
себя Memoryze. При всем богатстве функционала он не похож на серьезный продукт
для компьютерных криминалистов. Работать с ним можно сразу: для этого не надо
вникать в горы мануалов, чтобы получить результат. Записал файлы на флешку,
создал образ памяти в файл и проанализировал его с помощью Audit Viewer — все
просто, как дважды два. Не надо быть специалистом, чтобы распознать в полученных
результатах элементы зловреда. Используемые в программе метрики (Occurrences и
MRI) вкупе с проверкой цифровых подписей часто явно дают понять, какие из
найденных компонентов вызывают подозрения.

Вообще, сама тема Memory Forensic вызывает большой интерес, причем не только
как отдельный вид криминалистических расследований, но и как эффективный способ
для анализа системы (часто незаметного). Это, к тому же, еще и работающий метод
для излечения и реверсинга с целевого компьютера отдельных процессов и
драйверов.

 

Анализ

Вообще говоря, анализировать дамп памяти можно и без использования Audit
Viewer’а. Для получения наиболее востребованных данных c Memoryze идут
специальные batch-сценарии. Так, чтобы получить список всех процессов из
системы, достаточно запустить Process.bat. Вывод при желании
можно детализировать, запустив тот же сценарий с нужными ключами. Например,
"Process.bat –ports true" помимо непосредственно списка процессов указывает
еще и на открытые ими порты. Но, как ни крути, GUI-оболочка для изучения
образа памяти в использовании куда приятнее.

Оставить мнение

Check Also

Безумный олдскул. Самые необычные приставки и игровые аксессуары из прошлого

Если ты думаешь, что Guitar Hero, Kinect или Wii Remote — это странно, то спешим тебя заве…