Понимание Process Monitor

Серия уроков по пакету утилит SysInternals

1. Что такое инструменты SysInternals и как их использовать?

2. Знакомство с Process Explorer

3. Использование Process Explorer для устранения неполадок и диагностики

4. Понимание Process Monitor

5. Как пользоваться Process Monitor для устранения неполадок и нахождения скрытых ключей реестра

6. Использование Autoruns для работы с автоматически запускаемыми процессами и вредоносным ПО


В этом уроке мы собираемся научить вас, как утилита Process Monitor позволяет заглянуть под капот и увидеть, что ваши любимые приложения действительно делают за кулисами — к каким файлам они обращаются, какие ключи реестра меняют или считывают и многое другое.

В отличие от утилиты Process Explorer, с которой мы познакомились в предыдущих частях, Process Monitor предназначен для пассивного наблюдения за всем, что происходит на вашем компьютере, а не для активных действий, таких как завершение процессов или закрытие дескрипторов. Это похоже на просмотр глобального файла журнала для каждого отдельного события, которое происходит на вашем ПК с Windows.

Хотите понять, в каких разделах реестра ваше любимое приложение на самом деле хранит свои настройки? Хотите узнать, к каким файлам обращается служба и как часто? Хотите узнать, когда приложение подключается к сети или открывает новый процесс? На помощь приходит Process Monitor.

Если вы когда-нибудь задумывались, как какой-нибудь компьютерщик обнаружил секретный ключ реестра системы, который никто никогда раньше не знал, то, вероятно, это было сделано с помощью Process Monitor.

Утилита Process Monitor была создана путём объединения двух разных старых утилит, Filemon и Regmon, которые, как следует из их названий, использовались для мониторинга файлов и активности реестра. Хотя эти утилиты все ещё доступны, и хотя они могут соответствовать вашим конкретным потребностям, вам будет намного лучше с Process Monitor, потому что он может лучше обрабатывать большой объем событий из-за того, что он был разработан для этого.

Также стоит отметить, что Process Monitor всегда требует режима администратора, потому что под капотом он загружает драйвер ядра для захвата всех этих событий. В Windows Vista и более поздних версиях вам будет предложено диалоговое окно UAC, но для XP или 2003 вам нужно будет убедиться, что используемая вами учётная запись имеет права администратора.

События, фиксируемые Process Monitor

Process Monitor собирает массу данных, но не всё, что происходит на вашем компьютере. Например, Process Monitor не заботится о том, перемещаете ли вы указатель мыши, и он не знает, оптимально ли работают ваши драйверы. Он не будет отслеживать, какие процессы открыты и расходуют ресурсы ЦП на вашем компьютере — в конце концов, это задача Process Explorer.

Что он делает, так это фиксирует определённые типы операций ввода-вывода, независимо от того, происходят ли они через файловую систему, реестр или даже сеть. Он также будет отслеживать несколько других событий в ограниченном режиме. Этот список охватывает события, которые он фиксирует:

  • Реестр — это может быть создание ключей, их чтение, удаление или запрос. Вы будете удивлены, насколько часто это происходит.
  • Файловая система — это может быть создание, запись, удаление файлов и т.д., и это может быть как для локальных жёстких дисков, так и для сетевых дисков.
  • Сеть — покажет источник и назначение TCP/UDP-трафика, но, к сожалению, не показывает данные, что делает его немного менее полезным.
  • Процесс — это события для процессов и потоков, в которых процесс запускается, поток запускается или завершается, и т. Д. Это может быть полезной информацией в определенных случаях, но часто это то, что вам нужно вместо этого просмотреть в Process Explorer.
  • Профилирование — эти события фиксируются Process Monitor для проверки количества процессорного времени, используемого каждым процессом, и использования памяти. Опять же, вы, вероятно, захотите использовать Process Explorer для отслеживания этих вещей большую часть времени, но здесь он пригодится, если вам это нужно.

Таким образом, Process Monitor может фиксировать любой тип операций ввода-вывода, независимо от того, происходит ли это через реестр, файловую систему или даже сеть, хотя фактические записываемые данные не фиксируются. Мы просто смотрим на тот факт, что процесс выполняет запись в один из этих потоков, чтобы позже мы могли больше узнать о том, что происходит.

Как запустить Process Monitor

Если вы скачали весь пакет SysInternals, то запустите файл Procmon64.exe или Procmon.exe — для 64-битных и 32-битных систем соответственно.

Как уже было сказано, у вас должны быть права администратора.

Интерфейс монитора процесса

Когда вы впервые загрузите интерфейс Process Monitor, вам будет представлено огромное количество строк данных, которые быстро прибывают, и это может быть ошеломляющим. Главное — иметь хоть какое-то представление о том, на что вы смотрите, а также о том, что ищете. За довольно короткое время там могут набраться миллионы строк.

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

Столбцы Process Monitor

Столбцы, которые присутствуют по умолчанию в интерфейсе Process Monitor, содержат массу полезной информации, но вам определённо понадобится некоторый контекст, чтобы понять, какие данные на самом деле содержит каждый, потому что некоторые из них могут выглядеть так, как будто произошло что-то плохое, когда они действительно невинные события, которые происходят все время когда работает операционная система. Вот для чего используется каждый из столбцов по умолчанию:

  • Time — Время — этот столбец не требует пояснений, он показывает точное время, когда произошло событие.
  • Process Name — Имя процесса — процесс, создавшый событие. По умолчанию здесь не отображается полный путь к файлу, но если вы наведёте курсор на поле, вы сможете точно увидеть, какой это был процесс.
  • PID — ИД процесса — идентификатор процесса, создавшего событие. Это очень полезно, если вы пытаетесь понять, какой процесс svchost.exe сгенерировал событие. Это также отличный способ изолировать один процесс для мониторинга, если он не запускается повторно.
  • Operation — Операция — это имя операции, которая регистрируется, и есть значок, который соответствует одному из типов событий (реестр, файл, сеть, процесс). Названия RegQueryKey или WriteFile могут немного сбить с толку, но мы постараемся помочь вам разобраться.
  • Path — Путь — это не путь процесса, это путь к тому, над чем работало это событие. Например, если произошло событие WriteFile, в этом поле будет отображаться имя файла или папки с которыми был обмен данных. Если бы это было событие реестра, он бы показал полный доступ к ключу.
  • Result — Результат — показывает результат операции, который имеет код SUCCESS (успех) или ACCESS DENIED (доступ запрещён). Хотя у вас может возникнуть соблазн интуитивно предположить, что BUFFER TOO SMALL (СЛИШКОМ МАЛЕНЬКИЙ БУФЕР) означает, что произошло что-то действительно плохое, в большинстве случаев это не так.
  • Detail — Подробности — дополнительная информация, которая часто не используется в обычном мире устранения неполадок.

Вы также можете добавить несколько дополнительных столбцов к отображению по умолчанию, выбрав Options → Select Columns. Это не является первостепенной необходимостью при знакомстве с программой, но, поскольку мы объясняем столбцы, об этом стоит упомянуть.

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

  • Command Line — Строка команды — хотя вы можете дважды щёлкнуть любое событие, чтобы увидеть аргументы командной строки для процесса, который сгенерировал каждое событие, может быть полезно быстро просмотреть все параметры.
  • Company Name — Название компании — основная причина, по которой этот столбец полезен, заключается в том, что вы можете просто быстро исключить все события Microsoft и сузить свой мониторинг до всего остального, что не является частью Windows. (Вы должны убедиться, что у вас нет каких-либо странных процессов rundll32.exe, запущенных с помощью Process Explorer, поскольку они могут скрывать вредоносные программы).
  • Parent PID — Родительский PID — это может быть очень полезно при устранении неполадок в процессе, который содержит множество дочерних процессов, таких как веб-браузер или приложение, которое продолжает запускать отрывочные вещи как другой процесс. Затем вы можете отфильтровать по родительскому PID, чтобы убедиться, что вы захватываете их всех.

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

Изучение отдельного события

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

Вкладка Event («Событие») по умолчанию даёт вам информацию, которая во многом похожа на то, что вы видели в списке, но добавит немного больше информации о вечеринке. Если вы просматриваете событие файловой системы, вы сможете увидеть определённую информацию, такую как атрибуты, время создания файла, попытки доступа во время операции записи, количество записанных байтов и продолжительность.

Переключение на вкладку Process («Процесс») даёт вам много полезной информации о процессе, создавшем событие. Хотя обычно Process Explorer используется для работы с процессами, может быть очень полезно иметь много информации о конкретном процессе, который сгенерировал конкретное событие, особенно если это что-то, что произошло очень быстро, а затем исчезло из списка процессов. Таким образом и собираются данные.

Вкладка Stack («Стек») иногда бывает чрезвычайно нужной, но часто бывает совсем неполезной. Причина, по которой вам следует взглянуть на стек, заключается в том, что для устранения неполадок вы работаете со вкладкой Module («Модуль») на предмет чего-либо, что выглядит не совсем правильно.

В качестве примера представьте, что процесс постоянно пытается запросить или получить доступ к файлу, которого не существует, но вы не знаете почему. Вы можете просмотреть вкладку Stack и посмотреть, есть ли какие-либо модули, которые выглядят некорректно, а затем изучить их. Вы можете обнаружить, что проблема связана с устаревшим компонентом или даже вредоносным ПО.

Или вы можете обнаружить, что здесь нет ничего полезного для вас, и это тоже нормально. Есть много других данных, на которые стоит обратить внимание.

Замечания о переполнении буфера

Прежде чем мы продолжим, мы хотим отметить код результата, который вы будете часто видеть в списке, и, исходя из всех ваших знаний, вы можете немного испугаться. Поэтому, если вы начнёте видеть в списке BUFFER OVERFLOW (ПЕРЕПОЛНЕНИЕ БУФЕРА), не думайте, что кто-то пытается взломать ваш компьютер.

Переполнение буфера

Хотя да, многие хакеры и создатели вредоносных программ используют уязвимость переполнения буфера для удалённого или локального взлома компонента и получения дополнительного доступа, это сообщение об ошибке фактически встроено в Windows API и означает полную противоположность.

Примечание: представьте себе буфер, похожий на коробку шоколадных батончиков возле кассы в продуктовом магазине. Люди продолжают покупать их, и когда в коробке заканчивается, магазин снова наполняет её.

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

Сообщение BUFFER OVERFLOW в Windows API и, в частности, в Process Monitor, на самом деле означает, что клиентское приложение запросило данные, но не имело достаточно большой корзины для хранения всех данных. Таким образом, сервер отвечает, чтобы сообщить клиенту, что ему нужна большая корзина.

В примере для снимка экрана выше приложение запросило в реестре конкретное значение, но приказало Windows API поместить результат в место в памяти, которое было слишком маленьким для размещения всех этих данных. Таким образом, Windows вернула сообщение, чтобы приложение знало, что им нужно место побольше, чтобы разместить все данные. Вот и все.

Переход к пути к данным события

Вся эта информация действительно хороша, но никто не хочет исследовать, вручную просматривая каждое место в списке. К счастью, вы можете щёлкнуть правой кнопкой мыши поле Path («Путь») для элемента и использовать опцию Jump To («Перейти к»), чтобы быстро получить доступ к этим данным, чтобы увидеть, что они содержат, и попытаться выяснить, почему приложение вообще запрашивает эти данные.

Примечание. Вы также можете использовать функцию Search Online (поиск в Интернете), чтобы быстро найти имя процесса, путь в реестре или любое другое поле, что может быть действительно полезно, когда вы не понимаете, для чего что-то используется.

В приведённом выше примере вы можете видеть, что приложение, которое мы отслеживали, пыталось просмотреть значение реестра, поэтому мы использовали функцию Jump To, и Process Monitor сразу же открыл редактор реестра, в котором уже найден этот ключ.

Итак, теперь мы знаем, что приложение пытается выяснить, где находится моя папка appdata, и мы знаем, какая это была папка… что помогает объяснить, что происходит.

В данном случае приложение представляло собой поисковую вредоносную программу Conduit, которая искала мою пользовательскую папку, запрашивая регистрацию, чтобы начать возиться с файлами и папками в моем профиле Google Chrome.

Фильтрация данных, которые собирает Process Monitor

Как мы уже упоминали пару раз, фильтры, которые предоставляет Process Monitor, позволяют вам точно контролировать, какие события вы собираетесь захватывать, что значительно упрощает вам работу по выяснению того, что важно в списке. Если вы знаете, что вас не интересуют все события, генерируемые, например, explorer.exe, то было бы разумно просто отфильтровать их, удалив из списка.

Вы можете очень быстро выполнить фильтрацию по любому столбцу, используя контекстное меню и функции Include («Включить») или Exclude («Исключить») - если вы включите элемент, список будет содержать только события, соответствующие этому конкретному элементу или любым другим, которые вы специально включили, но не будут содержать что-нибудь ещё. Если вы исключите элемент, будет отображаться всё, кроме событий, которые соответствуют конкретному элементу, который вы исключили.

В этом случае мы решили включить процесс cltmng.exe, и теперь все, что мы видим в списке, связано с этим процессом.

Вы также можете использовать опцию Edit Filter («Редактировать фильтр») в меню или получить доступ к разделу Filters («Фильтры») меню, чтобы отобразить список фильтров и отредактировать их. Вы можете выбрать из раскрывающихся диалоговых окон и сопоставить по любому из доступных полей, выбрать, будет ли значение, которое вы вводите в поле, совпадать точно, или просто «начинается с», или ряд других параметров. Затем вы можете выбрать, включать или исключать события, соответствующие этим критериям.

Только не забудьте нажать кнопку Add («Добавить») после того, как вы определили фильтр, и прежде чем нажимать «ОК» или Apply («Применить»), потому что в противном случае ваш новый фильтр фактически не будет активирован. Поверьте, это частая ошибка!

Вы также можете удалить или отредактировать фильтры, выбрав их в списке, а затем изменив или удалив их.

Слишком много данных? Попробуйте удалить отфильтрованные события

Если вы точно знаете, что у вас правильные фильтры, чтобы смотреть только на то, что вы действительно хотите видеть, вы можете рассмотреть возможность использования функции Filter -> Drop Filtered Events (Отбросить отфильтрованные события).

На самом деле здесь происходит то, что экземпляр Process Monitor показывает только те элементы, которые соответствуют фильтру, но все остальное по-прежнему фиксируется в фоновом режиме, что может быть ТОННОЙ данных за очень короткое время — обратите внимание на строку состояния в приведённом ниже примере мы работали всего несколько минут. Если бы у нас была включена опция Drop Filtered Events («Отбрасывать отфильтрованные события»), она захватывала бы только те события, которые нам нужны.

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

Сохранение дампов для последующего анализа

И последнее, о чем мы поговорим сегодня, - это функция Open / Save ("Открыть / Сохранить"), которую мы обычно не выделяем в других приложениях, но в данном случае это действительно важно.

Представьте, что вы работаете на чьём-то действительно старом и паршивом компьютере и хотите диагностировать конкретную проблему, но компьютер просто работает слишком медленно, чтобы сидеть на нем и все время заниматься этим. Вы можете просто запустить сканирование Process Monitor на их компьютере, сохранить данные на флэш-накопитель, а затем загрузить Process Monitor на свой невероятно быстрый персональный ноутбук и приступить к работе, анализируя, что могло произойти. Вы даже можете пойти в кофейню и проанализировать оттуда.

И, конечно же, вы также можете удалённо попросить запустить Process Monitor, выполнить сканирование, сохранить файл и отправить его вам для анализа. Таким образом вы можете сделать работу удалённо.

Следующий урок

В следующем уроке мы соберём воедино все полученные знания и покажем, как использовать Process Monitor в реальном мире для выполнения забавных и интересных вещей.


Добавить комментарий

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

wp-puzzle.com logo