<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Troubleshooting on kenji.blog</title><link>http://kenji.blog/ru/categories/troubleshooting/</link><description>Recent content in Troubleshooting on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 05:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/categories/troubleshooting/index.xml" rel="self" type="application/rss+xml"/><item><title>Расширенное устранение неполадок Windows с помощью инструментов Sysinternals</title><link>http://kenji.blog/ru/p/sysinternals-advanced-windows-troubleshooting/</link><pubDate>Sun, 13 Sep 2026 05:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/sysinternals-advanced-windows-troubleshooting/</guid><description>&lt;img src="http://kenji.blog/p/sysinternals-advanced-windows-troubleshooting/img/eyecatch.jpg" alt="Featured image of post Расширенное устранение неполадок Windows с помощью инструментов Sysinternals" />&lt;p>В среде Windows, когда вы сталкиваетесь с такими проблемами, как сбои системы, снижение производительности, заражение вредоносным ПО или непонятное поведение приложений, встроенных Диспетчера задач (Task Manager) и Просмотра событий (Event Viewer) часто бывает недостаточно для определения первопричины (Root Cause). Для такого расширенного устранения неполадок ИТ-специалисты, специалисты по реагированию на инциденты и системные администраторы по всему миру используют набор инструментов «&lt;strong>Windows Sysinternals&lt;/strong>».&lt;/p>
&lt;p>В этой статье мы подробно рассмотрим методы расширенного устранения неполадок, проникающие в самые глубины ОС Windows (граница между режимом ядра и пользовательским режимом, обработка прерываний, ETW, драйверы реестра и файловой системы), с использованием основных инструментов Sysinternals: &lt;strong>Process Explorer&lt;/strong>, &lt;strong>Process Monitor (ProcMon)&lt;/strong>, &lt;strong>Autoruns&lt;/strong> и &lt;strong>TCPView&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="1-архитектура-инструментов-sysinternals-и-основы-ядра-windows">1. Архитектура инструментов Sysinternals и основы ядра Windows
&lt;/h2>&lt;p>Чтобы понять, почему инструменты Sysinternals настолько мощны, необходимо усвоить базовые концепции архитектуры Windows. Windows работает в двух основных уровнях привилегий: «Пользовательский режим» (Ring 3) и «Режим ядра» (Ring 0).&lt;/p>
&lt;p>Такие инструменты, как Process Monitor и Process Explorer, не просто вызывают API пользовательского режима, но и динамически загружают специальные драйверы режима ядра (например, &lt;code>PROCMON24.SYS&lt;/code>), чтобы напрямую перехватывать или отслеживать события, происходящие в глубинах ОС.&lt;/p>
&lt;p>На следующей диаграмме архитектуры показано, как Process Monitor перехватывает активность файловой системы.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Пользовательское приложение (Ring 3)&amp;#34;] --&amp;gt; B[&amp;#34;ntdll.dll (Native API)&amp;#34;]
B --&amp;gt; C[&amp;#34;Инструкция Syscall / sysenter&amp;#34;]
C --&amp;gt; D[&amp;#34;ntoskrnl.exe (Режим ядра / Ring 0)&amp;#34;]
D --&amp;gt; E[&amp;#34;Диспетчер ввода-вывода (I/O Manager)&amp;#34;]
E --&amp;gt; F[&amp;#34;Диспетчер фильтров (FltMgr.sys)&amp;#34;]
F --&amp;gt; G[&amp;#34;PROCMON24.SYS (Драйвер-фильтр ProcMon)&amp;#34;]
G --&amp;gt; H[&amp;#34;Драйвер файловой системы (NTFS.sys)&amp;#34;]
G --&amp;gt; I[&amp;#34;Графический интерфейс ProcMon (Регистрация событий)&amp;#34;]
&lt;/pre>
&lt;p>Драйвер ProcMon регистрируется как драйвер мини-фильтра и отслеживает все IRP (I/O Request Packet), проходящие между диспетчером ввода-вывода и драйвером NTFS. Это позволяет раскрыть все попытки доступа, даже те, которые приложение пытается скрыть.&lt;/p>
&lt;hr>
&lt;h2 id="2-глубокий-анализ-процессов-и-вредоносного-по-с-помощью-process-explorer-procexp">2. Глубокий анализ процессов и вредоносного ПО с помощью Process Explorer (ProcExp)
&lt;/h2>&lt;p>Process Explorer — это «сверхмощный диспетчер задач». Он визуализирует не только использование ЦП/памяти, но и дерево процессов, дескрипторы (handles), загруженные DLL и стеки вызовов потоков.&lt;/p>
&lt;h3 id="21-выявление-утечек-дескрипторов-и-блокировок">2.1 Выявление утечек дескрипторов и блокировок
&lt;/h3>&lt;p>Часто возникает проблема, когда приложение дает сбой, оставив файл открытым, из-за чего этот файл невозможно удалить или переместить. Если вы получаете ошибку «Файл открыт в другой программе», используйте функцию &lt;strong>Find&lt;/strong> (&lt;code>Ctrl+F&lt;/code>) в ProcExp для поиска имени файла или каталога.
Как только процесс, удерживающий соответствующий дескриптор (File, Section, Mutex, Event и т. д.), будет найден, вы можете принудительно выполнить &lt;code>Close Handle&lt;/code>, щелкнув правой кнопкой мыши по целевому процессу. Это разблокирует файл без завершения самого процесса (однако имейте в виду риск нестабильной работы приложения).&lt;/p>
&lt;h3 id="22-выявление-перехватов-hooking-вредоносного-по-и-проверка-подписей">2.2 Выявление перехватов (Hooking) вредоносного ПО и проверка подписей
&lt;/h3>&lt;p>Когда вредоносное ПО или сложный руткит скрывается в системе, оно может внедрять собственные DLL (DLL Injection) в легитимные процессы (например, &lt;code>svchost.exe&lt;/code>, &lt;code>explorer.exe&lt;/code>).&lt;/p>
&lt;p>В ProcExp вы можете выявить подозрительные процессы, включив следующие настройки:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Options&lt;/strong> -&amp;gt; &lt;strong>Verify Image Signatures&lt;/strong>: Проверяет цифровые подписи исполняемых файлов и DLL. Файлы без подписи или с поврежденной подписью будут выделены.&lt;/li>
&lt;li>&lt;strong>Options&lt;/strong> -&amp;gt; &lt;strong>VirusTotal.com&lt;/strong> -&amp;gt; &lt;strong>Check VirusTotal.com&lt;/strong>: Автоматически отправляет хеш-значения всех процессов на VirusTotal и отображает показатель обнаружения вредоносного ПО (например, &lt;code>5/72&lt;/code>) в виде оценки.&lt;/li>
&lt;/ol>
&lt;p>Если обнаружен подозрительный процесс &lt;code>svchost.exe&lt;/code>, дважды щелкните по нему, проверьте вкладку &lt;strong>Strings&lt;/strong> и поищите различия между строками в памяти (Memory) и на диске (Image). Если различия значительны, велика вероятность того, что исполняемый файл упакован (Packed) или стал жертвой подмены процесса (Process Hollowing).&lt;/p>
&lt;h3 id="23-анализ-аппаратных-прерываний-и-100-скачков-процессора">2.3 Анализ аппаратных прерываний и 100% скачков процессора
&lt;/h3>&lt;p>Если вся система зависает на несколько секунд или звук прерывается (заикается), в Диспетчере задач можно заметить, что «Системные прерывания» (System Interrupts) потребляют ресурсы процессора.&lt;/p>
&lt;p>В планировании Windows аппаратные прерывания (ISR: Interrupt Service Routine) и отложенные вызовы процедур (DPC: Deferred Procedure Call) выполняются с более высоким приоритетом (IRQL: Interrupt Request Level), чем обычные пользовательские потоки. Иными словами, если неисправный драйвер затягивает выполнение DPC, процессор не сможет выполнять никакие другие задачи на этом ядре.&lt;/p>
&lt;p>Если использование ЦП процессами &lt;code>Interrupts&lt;/code> или &lt;code>DPCs&lt;/code> в верхней части списка ProcExp высокое, используйте Windows Performance Analyzer (WPA) для выявления виновного драйвера (&lt;code>.sys&lt;/code>). Расчет процессорного времени можно выразить следующей формулой:&lt;/p>
$$ U_{cpu} = \left( 1 - \frac{T_{idle}}{T_{total}} \right) \times 100 $$$$ T_{interrupt\_overhead} = \sum_{i=1}^{n} \left( T_{ISR(i)} + T_{DPC(i)} \right) $$&lt;p>Если $T_{interrupt\_overhead}$ занимает большую часть процессорного времени, подозреваются ошибки в драйверах NDIS (сеть), Storport (хранилище) или драйверах видеокарты.&lt;/p>
&lt;hr>
&lt;h2 id="3-сверхточная-трассировка-с-помощью-process-monitor-procmon">3. Сверхточная трассировка с помощью Process Monitor (ProcMon)
&lt;/h2>&lt;p>Process Monitor записывает активность файловой системы, реестра, сети, а также создание процессов/потоков с микросекундной точностью. Это самый мощный инструмент для устранения неполадок, но так как за несколько минут работы регистрируются миллионы событий, ключом к успеху является «эффективная фильтрация шума».&lt;/p>
&lt;h3 id="31-методология-расширенной-фильтрации">3.1 Методология расширенной фильтрации
&lt;/h3>&lt;p>Базовый рабочий процесс эффективного использования ProcMon показан на следующей диаграмме Mermaid.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;Запуск захвата ProcMon&amp;#34;] --&amp;gt; B[&amp;#34;Воспроизведение проблемы&amp;#34;]
B --&amp;gt; C[&amp;#34;Остановка захвата (Ctrl+E)&amp;#34;]
C --&amp;gt; D[&amp;#34;Фильтр: Исключить &amp;#39;Result IS SUCCESS&amp;#39;&amp;#34;]
D --&amp;gt; E[&amp;#34;Фильтр: &amp;#39;Process Name&amp;#39; IS &amp;#39;target.exe&amp;#39;&amp;#34;]
E --&amp;gt; F[&amp;#34;Анализ &amp;#39;NAME NOT FOUND&amp;#39; (Отсутствующие файлы/ключи)&amp;#34;]
F --&amp;gt; G[&amp;#34;Выявление первопричины (Перехват DLL, отсутствие зависимости)&amp;#34;]
E --&amp;gt; H[&amp;#34;Анализ &amp;#39;ACCESS DENIED&amp;#39;&amp;#34;]
H --&amp;gt; I[&amp;#34;Проверка разрешений NTFS / Уровней целостности / UAC&amp;#34;]
&lt;/pre>
&lt;p>&lt;strong>Использование фильтра отбрасывания (Drop Filter):&lt;/strong>
Если включить &lt;code>Filter&lt;/code> -&amp;gt; &lt;code>Drop Filtered Events&lt;/code>, отфильтрованные события больше не будут сохраняться в памяти или на диске. Это предотвратит сбой ProcMon из-за нехватки памяти (OOM) даже при длительной трассировке (например, при мониторинге спорадически возникающих проблем).&lt;/p>
&lt;h3 id="32-практический-сценарий-отладка-сбоя-загрузки-dll-side-loading--missing-dll">3.2 Практический сценарий: Отладка сбоя загрузки DLL (Side-Loading / Missing DLL)
&lt;/h3>&lt;p>Рассмотрим случай, когда бизнес-приложение &lt;code>AppServer.exe&lt;/code> ненормально завершает работу сразу после запуска без каких-либо диалоговых окон об ошибке (тихий сбой). В Просмотре событий (журнал Application) также нет полезной информации.&lt;/p>
&lt;ol>
&lt;li>Запустите ProcMon и начните захват.&lt;/li>
&lt;li>Запустите &lt;code>AppServer.exe&lt;/code> и добейтесь сбоя.&lt;/li>
&lt;li>Остановите захват ProcMon.&lt;/li>
&lt;li>Установите фильтр: &lt;code>Process Name is AppServer.exe&lt;/code>.&lt;/li>
&lt;li>Установите фильтр: &lt;code>Result is not SUCCESS&lt;/code>.&lt;/li>
&lt;/ol>
&lt;p>Проанализировав журнал, вы должны увидеть последовательность следующих событий:&lt;/p>
&lt;ul>
&lt;li>&lt;code>CreateFile&lt;/code> | &lt;code>C:\Program Files\MyApp\lib\CoreCrypto.dll&lt;/code> | &lt;code>NAME NOT FOUND&lt;/code>&lt;/li>
&lt;li>&lt;code>CreateFile&lt;/code> | &lt;code>C:\Windows\System32\CoreCrypto.dll&lt;/code> | &lt;code>NAME NOT FOUND&lt;/code>&lt;/li>
&lt;li>&lt;code>CreateFile&lt;/code> | &lt;code>C:\Windows\CoreCrypto.dll&lt;/code> | &lt;code>NAME NOT FOUND&lt;/code>&lt;/li>
&lt;li>&lt;code>CreateFile&lt;/code> | &lt;code>C:\Users\Kenji\AppData\Local\Microsoft\WindowsApps\CoreCrypto.dll&lt;/code> | &lt;code>NAME NOT FOUND&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Это типичное поведение &lt;strong>отсутствия зависимости DLL&lt;/strong> и &lt;strong>порядка поиска DLL (DLL Search Order)&lt;/strong>. Приложение требует &lt;code>CoreCrypto.dll&lt;/code>, но не может найти его в системе, поэтому инициализация завершается сбоем, а приложение закрывается без обработчика исключений. Помещение недостающей DLL в нужный каталог немедленно решит эту проблему.&lt;/p>
&lt;h3 id="33-устранение-неполадок-загрузки-с-помощью-boot-logging">3.3 Устранение неполадок загрузки с помощью Boot Logging
&lt;/h3>&lt;p>Если Windows загружается медленно или сразу после входа в систему появляется черный экран, может помочь функция &lt;strong>Enable Boot Logging&lt;/strong> в ProcMon. Если включить ее и перезагрузить компьютер, специальный драйвер загрузки ProcMon будет записывать все системные вызовы с самого начала загрузки Windows (когда загружается &lt;code>smss.exe&lt;/code>) и сохранять их в файл. При следующем входе в систему открытие ProcMon преобразует журнал, позволяя детально проанализировать, какие драйверы или службы вызывают узкие места ввода-вывода во время процесса загрузки.&lt;/p>
$$ \text{Throughput (MB/s)} = \frac{\sum_{i=1}^{N} \text{Size}(I/O_i)}{\Delta T_{capture}} \times \frac{1}{1024^2} $$&lt;p>
С помощью функции &lt;code>Tools&lt;/code> -&amp;gt; &lt;code>File Summary&lt;/code> в ProcMon вы можете мгновенно выполнить этот расчет в графическом интерфейсе.&lt;/p>
&lt;hr>
&lt;h2 id="4-анализ-механизмов-закрепления-persistence-и-задержек-загрузки-с-помощью-autoruns">4. Анализ механизмов закрепления (Persistence) и задержек загрузки с помощью Autoruns
&lt;/h2>&lt;p>Места автозапуска в Windows — это не просто папка «Автозагрузка» (Startup Folder) или ключи реестра &lt;code>Run&lt;/code>. Вредоносное ПО (особенно полезные нагрузки APT-атак или продвинутые руткиты) прячется в местах, скрытых от глаз системного администратора, чтобы обеспечить выполнение даже после перезагрузки (Persistence).&lt;/p>
&lt;p>Autoruns выполняет комплексное сканирование &lt;strong>всех точек расширения автозапуска (ASE: Auto-Start Extensibility Points)&lt;/strong> в системе.&lt;/p>
&lt;pre class="mermaid">
flowchart LR
A[&amp;#34;Загрузка системы / Последовательность входа&amp;#34;] --&amp;gt; B[&amp;#34;Выполнение при загрузке (smss.exe)&amp;#34;]
B --&amp;gt; C[&amp;#34;Службы и драйверы (services.exe)&amp;#34;]
B --&amp;gt; D[&amp;#34;Провайдеры LSA / WDigest (lsass.exe)&amp;#34;]
B --&amp;gt; E[&amp;#34;Вход пользователя (Winlogon.exe)&amp;#34;]
E --&amp;gt; F[&amp;#34;Проводник и ключи Run&amp;#34;]
F --&amp;gt; G[&amp;#34;Запланированные задачи и WMI&amp;#34;]
G --&amp;gt; H[&amp;#34;Полная область сканирования Autoruns&amp;#34;]
&lt;/pre>
&lt;h3 id="41-важные-вкладки-для-проверки-и-расширенные-функции">4.1 Важные вкладки для проверки и расширенные функции
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Logon&lt;/strong>: Стандартные ключи Run/RunOnce, папка автозагрузки.&lt;/li>
&lt;li>&lt;strong>Scheduled Tasks&lt;/strong>: Планировщик задач Windows. Вредоносное ПО часто создает поддельные задачи, маскируясь под «Adobe Update» или «Google Update».&lt;/li>
&lt;li>&lt;strong>Services / Drivers&lt;/strong>: Драйверы, загружаемые в режиме ядра. Здесь можно отключить подозрительные файлы &lt;code>.sys&lt;/code>, вызывающие 100% загрузку ЦП, о чем упоминалось ранее.&lt;/li>
&lt;li>&lt;strong>WMI&lt;/strong>: Место закрепления безфайлового вредоносного ПО (Fileless Malware) с использованием фильтров событий и потребителей WMI (Windows Management Instrumentation). Это место очень часто упускают из виду.&lt;/li>
&lt;li>&lt;strong>AppInit_DLLs / KnownDLLs&lt;/strong>: Список DLL, которые принудительно внедряются при каждом запуске приложения. Является рассадником для перехвата с помощью внедрения DLL.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Практика устранения неполадок:&lt;/strong>
В Autoruns, как и в ProcExp, включите &lt;code>Verify Code Signatures&lt;/code> и &lt;code>Check VirusTotal.com&lt;/code> в &lt;code>Options&lt;/code>. Если вы найдете в списке розовые записи (без подписи или неизвестный автор) или записи с красной оценкой VirusTotal, вы можете безопасно отключить их загрузку, просто сняв флажок, без удаления записи из реестра. Классический метод анализа заключается в том, чтобы перезагрузить систему и проверить (A/B тестирование), решена ли проблема (поведение вредоносного ПО или синий/черный экран).&lt;/p>
&lt;hr>
&lt;h2 id="5-отслеживание-скрытых-сетевых-подключений-с-помощью-tcpview">5. Отслеживание скрытых сетевых подключений с помощью TCPView
&lt;/h2>&lt;p>Состояние сети можно проверить на вкладке сети в Диспетчере задач или с помощью команды &lt;code>netstat -ano&lt;/code>, но они могут обновляться медленно, а сопоставление имен процессов с PID вручную утомительно.
TCPView отслеживает все конечные точки TCP и UDP в реальном времени и отображает список, показывающий, какой процесс взаимодействует с каким удаленным адресом и портом.&lt;/p>
&lt;h3 id="51-выявление-незаконного-c2-взаимодействия">5.1 Выявление незаконного C2-взаимодействия
&lt;/h3>&lt;p>Если вредоносное ПО установило бэкдор и отправляет маяк (Beacon) на внешний сервер C2 (Command and Control), ищите следующие признаки в TCPView:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Неестественное имя процесса&lt;/strong>: Например, &lt;code>svchost.exe&lt;/code>, но он работает с правами пользователя, а не системы, и поддерживает состояние &lt;code>ESTABLISHED&lt;/code> для связи с неизвестным зарубежным IP-адресом.&lt;/li>
&lt;li>&lt;strong>Связь процессов, которые обычно не работают с сетью&lt;/strong>: Например, калькулятор (&lt;code>calc.exe&lt;/code>) или блокнот (&lt;code>notepad.exe&lt;/code>) отправляют и получают большое количество пакетов через порт 443 или 80 (типичный признак подмены процесса).&lt;/li>
&lt;/ul>
&lt;p>При обнаружении подозрительного соединения вы можете принудительно разорвать TCP-сессию (выдать пакет RST), отправив &lt;code>Close Connection&lt;/code> прямо из TCPView, или принудительно завершить процесс с помощью &lt;code>End Process&lt;/code>.&lt;/p>
&lt;hr>
&lt;h2 id="6-заключение-суть-анализа-с-использованием-sysinternals">6. Заключение: Суть анализа с использованием Sysinternals
&lt;/h2>&lt;p>Инструменты Sysinternals — это мощный «рентген» для визуализации всех фоновых процессов, происходящих в ОС Windows. Чтобы эффективно использовать эти инструменты, следуйте следующим передовым практическим рекомендациям (best practices):&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Настройка символов (Symbols)&lt;/strong>:
Для точного разрешения стеков вызовов в ProcExp и ProcMon обязательно необходимо настроить публичный сервер символов Microsoft. Установите следующую переменную среды:
&lt;code>_NT_SYMBOL_PATH = srv*c:\symbols*https://msdl.microsoft.com/download/symbols&lt;/code>&lt;/li>
&lt;li>&lt;strong>Извлечение сигнала из шума (Повышение Signal-to-Noise Ratio)&lt;/strong>:
Журналы ProcMon могут содержать миллионы строк. Активно используйте фильтр &lt;code>Exclude&lt;/code>, чтобы отсеивать «нормальное поведение (SUCCESS)» и «безопасные процессы (System, explorer.exe и т. д.)», и сосредоточьтесь на сути проблемы (ACCESS DENIED, NAME NOT FOUND).&lt;/li>
&lt;li>&lt;strong>Всегда используйте последние версии&lt;/strong>:
Инструменты Sysinternals часто обновляются. Заходите напрямую на &lt;code>https://live.sysinternals.com/&lt;/code> из браузера и всегда используйте последние бинарные файлы (или версии для командной строки, такие как &lt;code>procdump&lt;/code>, &lt;code>psexec&lt;/code> и т. д.).&lt;/li>
&lt;/ol>
&lt;p>В расширенном устранении неполадок Windows интуиция и догадки (Guesswork) бесполезны. Проводя логическое расследование на основе фактов (процессов, потоков, дескрипторов, системных вызовов, событий реестра) с использованием инструментов Sysinternals, вы обязательно доберетесь до первопричины, какой бы сложной ни была проблема или как бы глубоко ни скрывалось вредоносное ПО.&lt;/p></description></item></channel></rss>