
Обнаружение исключений EDR путем проверки загруженных модулей процессов
Этот инструмент ищет либо процессы, в которых загружен определённый бинарный файл, либо процессы, в которых он не загружен. Это полезно в следующих сценариях:
Возможно, вы найдёте другие полезные способы использования этого инструмента. Эти результаты получаются без перебора всех процессов в системе и с пониженным уровнем шума.
Инструмент получает все процессы, в которых загружен определённый бинарный файл, вызывая NtQueryInformationFile с флагом FileProcessIdsUsingFileInformation. Затем, и только если это необходимо, вызывается EnumProcesses для получения PID всех процессов, и наконец оба результата сравниваются для получения итогового списка PID. Если инструмент не запущен в тихом режиме, итоговые PID преобразуются в полный путь к главному модулю процесса.
Если вы хотите уменьшить межпроцессную активность, используйте тихий режим (--quiet или -q). В этом случае не будет открыт ни один дескриптор процесса, но инструмент получит только PID, а не полные пути.
Инструмент полностью совместим с Windows 10 и более поздними версиями, а также с Windows Server 2016 и более поздними версиями. Для более старых версий ОС, вызов OpenProcess (строка src::main.rs:108) требует PROCESS_QUERY_INFORMATION и PROCESS_VM_READ вместо просто PROCESS_QUERY_LIMITED_INFORMATION (или вы можете просто использовать тихий режим, который не открывает ни одного дескриптора процесса).
Поскольку мы используем плагин LITCRYPT для обфускации строковых литералов, перед компиляцией кода необходимо задать переменную окружения LITCRYPT_ENCRYPT_KEY:
C:\Users\User\Desktop\bin_finder\bin_finder> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
После этого просто скомпилируйте код и выполните инструмент:
C:\Users\User\Desktop\Bin-Finder> cargo build --release
C:\Users\User\Desktop\Bin-Finder\target\release> bin_finder.exe -h
Bin-finder имеет два различных режима использования. Режим по умолчанию ищет все процессы, в которых не загружен указанный бинарный файл. Например, мы можем найти все процессы, в которых не загружена DLL CrowdStrike:

Это довольно полезно, когда вы ищете каталоги/процессы в списке исключений EDR.
Если вы хотите уменьшить межпроцессную активность, можно использовать тихий режим для получения только PID:

Кроме того, если вы не знаете имя или путь искомой DLL, вы можете попробовать вывести список модулей, загруженных в обычном процессе, с помощью флага -l или --list (это также полезно для определения того, установлен ли EDR):

Второй режим использования — обратный поиск (флаги -r или --reverse), который ищет все процессы, в которых в данный момент загружен указанный бинарный файл. Например, возможно, вы заинтересованы в получении PID процесса, который запускает службу StorSvc. В этом случае просто выполните обратный поиск по DLL, которая реализует RPC-сервер, используемый этой службой:

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