Уклонение от отладчика
Злоумышленники могут использовать различные способы для обнаружения и избежания отладчиков. Отладчики обычно используются защитниками для трассировки и/или анализа выполнения потенциальных вредоносных полезных нагрузок.
Уклонение от отладчика может включать изменение поведения на основе результатов проверок наличия артефактов, указывающих на отлаживаемую среду. Аналогично Уклонению от виртуализации/песочницы, если злоумышленник обнаруживает отладчик, он может изменить свое вредоносное ПО, чтобы отключиться от жертвы или скрыть основные функции имплантата. Они также могут искать артефакты отладчика перед размещением вторичных или дополнительных полезных нагрузок.
Конкретные проверки будут различаться в зависимости от цели и/или злоумышленника. В Windows это может включать вызовы функций Native API, таких как IsDebuggerPresent() и NtQueryInformationProcess(), или ручную проверку флага BeingDebugged блока окружения процесса (PEB). В Linux это может включать запрос `/proc/self/status` для поля `TracerPID`, которое указывает, отслеживается ли процесс средствами динамического анализа. Другие проверки на наличие артефактов отладки также могут пытаться перечислить аппаратные точки останова, прерывания опкодов ассемблера, проверки времени или измерения, если в текущем процессе возникают исключения (предполагая, что присутствующий отладчик "поглотит" или обработает потенциальную ошибку).
Вредоносное ПО также может использовать структурированную обработку исключений (SEH) для обнаружения отладчиков, вызывая исключение и определяя, приостановлен ли процесс. SEH обрабатывает как аппаратные, так и программные исключения, обеспечивая контроль над исключениями, включая поддержку отладки. Если отладчик присутствует, управление программой будет передано отладчику, и выполнение кода будет приостановлено. Если отладчик отсутствует, управление будет передано обработчику SEH, который автоматически обработает исключение и позволит продолжить выполнение программы.
Злоумышленники могут использовать информацию, полученную в результате этих проверок отладчика, во время автоматизированного обнаружения для формирования дальнейшего поведения. Отладчиков также можно избежать, отсоединив процесс или заполнив журналы отладки бессмысленными данными с помощью сообщений, созданных циклическими вызовами функций Native API, таких как OutputDebugStringW().