Як подружитися з Procmon
(ProcMon) від Sysinternals.
Нещодавно розповідав одному юному падавану, як користуватися цим чудовим, а в деяких випадках незамінним інструментом. І поки розповідав спала на думку написати таку вступну інструкцію для тих, хто тільки починає свій тернистий шлях адміна.
Взагалі, на мою думку все, що стосується ProcMon, найкраще описано в книзі від розробників, яка так і називається “ Утиліти Sysinternals. Довідник адміністратора”.
Я ж не лізтиму в нетрі, і постараюся викласти з мінімумом теорії, і максимумом практики на конкретному прикладі.
Запуск ProcMon
Реєструє активність файлової системи, реєстру, мережі,процесів, потоків, і навіть завантаження образів у часі.
Ну як? Зрозуміло? ????
Якщо просто запустити ProcMon робоче вікно програми миттєво заповнився різними подіями, навіть якщо ви нічого не робите. Розібратися в цих подіях, і знайти цікаві навіть досвідченому майстру дуже складно. Та й не потрібно, але все по порядку.
Найчастіше ProcMon запускається з конкретною метою, наприклад, визначити, що робить та, чи інша програма, який процес пише файли у певний каталог чи гілка реєстру, куди подінеться місце на диску, тощо. Тому, якщо просто запустити ProcMon, то доведеться зупинити збір подій. Ctrl+E), очистити вже зібрані події ( Ctrl+X), налаштувати фільтри ( Ctrl+L), і знову запустити спостереження. Для того, щоб не робити стільки зайвого руху, передбачено параметр командного рядка /noconnect:
procmon /noconnect
Запуск із цим параметром запускає Procmon, але не починає спостереження, натомість відразу ж відкривається вікно фільтрів.
Взагалі для спрощення запуску, я роблю (і всім раджу робити так), як описується все в тій же книзі:
Мій співавтор Аарон зазвичай створює папку C:\Program Files\Sysinternals і розпаковує вміст пакету Sysinternals Suite. Там утиліти неможливо змінити без прав адміністратора. Потім він додає цей каталог до системної змінної оточення Path, що дозволяє легко запускати утиліти звідки завгодно, в тому числі через меню Start | Run (Пуск | Виконати).
Фільтри в ProcMon
Як було сказано вище, вікно фільтрів відкривається при запуску з параметром /noconnect. Якщо ви його ненароком закрили, або потрібно підправити вже налаштовані фільтри, відкрити вікно фільтрів можна поєднанням клавіш Ctrl+L, або через меню Filter | Filter….
Ось ми і дісталися практики????
Як моніторити реєстр я вже тому сьогодні будемо вчитися моніторити файлову систему. Для прикладу відстежуватимемо які зміни робить стандартний блокнот.
Отже, у нас відчинено вікно фільтрів.
Фільтри в ProcMon
Про всяк випадок натискаємо кнопку скидання фільтрів у стан за замовчуванням – Reset(за замовчуванням у ProcMon налаштовано до фіга фільтрів, не рекомендується їх видаляти) і додаємо фільтр
Process Name is notepad.exe include.
Натискаємо кнопку Add. Як зрозуміти з назви захоплюватися будуть лише події, пов'язані з процесом notepad.exe, тобто. ті події, що генерує блокнот.
Важливий момент:Ім'я процесу має бути вказане повністю – з розширенням, інакше ProcMon нічого не захопить. Як варіант можна використовувати фільтр
Process Name begins with notepad include
У такому разі будуть захоплені події, пов'язані з процесами, що починаються на notepad, це може бути як стандартний блокнот, так іNotepad++, або якийсь ще блокнот. Таким же чином додаємо фільтр на запис файлів:
Operation is WriteFile include
Натискаємо Addі OK(взагалі можна просто натиснути OK, в такому випадку ProcMon скаже, що такого фільтра ще немає, і запитає ми його додати. Справа в тому, що натискання кнопки закриває OKвікно фільтрів, якщо це не єдиний фільтр, краще натиснути кнопку Add, це дозволить додати фільтр, і залишити вікно фільтрів відкритим для наступних фільтрів).
Оскільки нас цікавить лише файлова активність, у головному вікні ProcMon відключаємо значки спостереження за реєстром, мережею та процесами – залишаємо лише спостереження за файловою системою (виділені на скріншоті нижче).
Ще один важливий момент.
За промовчанням ProcMon реєструє всю активність системи, навіть ті події, які не підпадають під фільтри, що в деяких випадках може призводити до гальмування роботи. Якщо ви впевнені в тому, що фільтри налаштовані правильно (в даному прикладі ми впевнені), і вам не потрібні події, приховані ними – їх можна відкинути за допомогою опції Filter | Drop Filtered Events(Видалення відфільтрованих подій) у меню Filter. Цей параметр діє лише для реєстрації поточних подій, раніше записані події з журналу не видаляються.
Після того як фільтри налаштовані запускаємо збір подій (кнопка із зображенням лупи, або Ctrl+E). Запускаємо блокнот, пишемо якийсь текст та зберігаємо файл. Дивимося, що вийшло:
Файлова активність у ProcMon
Як видно з скриношота ProcMon зафіксував подію запису файлу процесом notepad.exe на шляху C:\temp\test.txt.
Проведемо ще один експеримент.
Зупинимо захоплення подій ( Ctrl+E), закриємо блокнот та очистимо зібрані події ( Ctrl+X). Викличемо вікно фільтрів ( Ctrl+L), скинемо фільтри (кнопкою Reset) і додамо наступний фільтр:
Path begins with c:\temp\
Цим самим ми вказуємо, що нас цікавить будь-яка активність на шляху C:\temp. Оскільки значення вказано не точно (не is, а begins with), то будуть захоплюватися події не тільки з цього каталогу, але і з усіх його підкаталогів.
Перевірте, щоб увімкнено спостереження лише за файловою системою (при скиданні фільтрів все скидається в стан за замовчуванням)
Фільтри в ProcMon
Запустимо спостереження. Відкриємо провідник і перейдемо нашим шляхом. Заглянемо до ProcMon.
Так виглядає відкриття каталогу в ProcMon
Там буде купа незрозумілих нам подій, але вони нам і не потрібні, просто подивіться скільки подій відбувається, коли ви лише заходите в каталог.
Можете відкрити файл і подивитися яка плутанина буде в ProcMon. Ось чому я ніколи не раджу запускати ProcMon для того, щоб подивитися, що там відбувається в системі.
Щоб побачити самі події читання файлу, зупиніть збір подій, очистіть вікно результатів, додайте фільтр
Operation is ReadFile
і знову відкрийте файл.
Повинно вийти щось на кшталт цього (як видно зі скріншота я відкривав файл двома різними процесами):