Невидимый убийца: современные техники обхода EDR и антивирусов
Послушай, братан, если ты думаешь, что антивирусы и EDR — это непробиваемая стена, то сейчас я тебе глаза открою. Современные техники обхода защиты превратились в целое искусство, где хакеры постоянно на шаг впереди защитников. В этой статье я расскажу, как невидимый убийца проникает в системы, обходя все эти модные защитные решения.
Почему EDR и антивирусы больше не панацея
EDR (Endpoint Detection and Response) и антивирусы — это круто, но у них есть слабые места. Атакующие знают, что эти системы работают на уровне пользовательского режима (user-mode), что делает их уязвимыми для различных манипуляций. Современные техники позволяют патчить, обходить и даже полностью отключать защиту, не вызывая подозрений.
EDR-системы полагаются на хуки API, мониторинг поведения и сигнатурный анализ. Но если атакующий знает, как работают эти механизмы, он может их обмануть. Например, UEFI-буткиты вроде BlackLotus запускаются еще до загрузки операционной системы, что позволяет им отключать защиту на самом низком уровне.
Техники обхода: от классики до хардкора
Unhooking и патчинг памяти — одна из самых популярных техник. EDR-решения внедряют свои хуки в системные библиотеки (например, ntdll.dll), чтобы отслеживать вызовы API. Атакующий может загрузить чистую копию ntdll.dll прямо с диска и заменить хукнутую версию в памяти процесса. Результат? EDR слепнет и не видит вызовы системных функций.
AMSI Bypass — еще один классический прием. AMSI (Antimalware Scan Interface) сканирует скрипты PowerShell, VBScript и прочие на лету. Но что если просто запатчить функцию AmsiScanBuffer в памяти, удалив саму строку или заменив ее на безопасную? Бинго, антивирус больше не видит вредоносный код.
Bootkits уровня UEFI — вот где начинается настоящий хардкор. Такие штуки, как BlackLotus, устанавливаются на уровне прошивки и запускаются раньше Windows. Они могут отключать BitLocker, HVCI, Windows Defender и вообще любую защиту, потому что контролируют систему с самого момента загрузки. Даже если у тебя стоит Secure Boot, атакующие эксплуатируют уязвимости вроде CVE-2022-21894, чтобы обойти его.
Killing и отключение процессов защиты — старый добрый метод, который до сих пор работает. Используя легитимные утилиты вроде GMER, PowerTool или даже драйверы антивирусов (эксплуатация через BYOVD — Bring Your Own Vulnerable Driver), атакующие могут завершить процессы EDR или антивирусов. Например, Agrius использовал публичный драйвер для отключения EDR-сервисов при загрузке системы.
Модификация реестра и эксклюзии
Многие вредоносы добавляют себя в список исключений Windows Defender или других антивирусов, используя команды PowerShell или прямое редактирование реестра. Например, BlackByte добавляет расширения .JS и .EXE в исключения, чтобы антивирус игнорировал его файлы.
Также популярна модификация ключа реестра HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity, где значение Enabled устанавливается в 0 для отключения HVCI (Hypervisor-protected Code Integrity). Это открывает дорогу для загрузки вредоносных драйверов на уровне ядра.
Process Injection и DLL Unhooking
Process Injection остается актуальным методом. Атакующие внедряют код в легитимные процессы, такие как winlogon.exe или explorer.exe, чтобы избежать детектирования. При этом они используют техники unhooking — загружают чистую версию системных DLL и удаляют хуки, установленные EDR.
Например, малварь Bazar вручную загружает ntdll.dll с диска, чтобы идентифицировать и удалить API-хуки, установленные защитными решениями. APT38 также использовал unhooking DLL для обхода EDR и AV.
Отключение логирования и мониторинга
Атакующие часто модифицируют или отключают системы логирования, чтобы скрыть свои действия. Например, Sysmon может быть отключен через изменение значений Start и Enable в ключе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger\EventLog-Microsoft-Windows-Sysmon-Operational.
Ebury, например, отключает SELinux и деактивирует PAM-модули для снижения уровня защиты. Hildegard модифицирует DNS-резолверы, чтобы избежать обнаружения через мониторинг DNS-запросов.
Код для unhooking ntdll.dll
Вот тебе конкретный пример на C#, как можно unhook’нуть ntdll.dll, чтобы обойти EDR:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System; using System.Runtime.InteropServices; class Program { [DllImport("kernel32.dll")] static extern IntPtr LoadLibrary(string path); [DllImport("kernel32.dll")] static extern IntPtr GetProcAddress(IntPtr hModule, string procName); [DllImport("kernel32.dll")] static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect); static void Main() { // Загружаем чистую копию ntdll.dll с диска IntPtr cleanNtdll = LoadLibrary(@"C:\Windows\System32\ntdll.dll"); // Получаем адрес функции в памяти процесса IntPtr hookedNtdll = GetProcAddress(LoadLibrary("ntdll.dll"), "NtCreateFile"); // Получаем адрес чистой функции IntPtr cleanFunc = GetProcAddress(cleanNtdll, "NtCreateFile"); // Меняем права доступа на запись uint oldProtect; VirtualProtect(hookedNtdll, (UIntPtr)12, 0x40, out oldProtect); // Копируем чистые байты поверх хукнутых Marshal.Copy(new IntPtr(cleanFunc.ToInt64()), new byte[12], 0, 12); // Возвращаем права доступа VirtualProtect(hookedNtdll, (UIntPtr)12, oldProtect, out oldProtect); Console.WriteLine("Unhooking completed!"); } } |
Этот код загружает свежую версию ntdll.dll и заменяет хукнутые байты чистыми. EDR больше не видит твоих вызовов API.
AMSI Bypass через PowerShell
А вот простой способ обойти AMSI в PowerShell:
|
1 2 3 4 5 |
$a = 'System.Management.Automation.A'; $b = 'msiUtils'; $c = [Ref].Assembly.GetType(('{0}{1}' -f $a,$b)); $d = $c.GetField('amsiInitFailed','NonPublic,Static'); $d.SetValue($null,$true); |
Этот скрипт патчит AMSI, устанавливая флаг amsiInitFailed в true, что заставляет AMSI думать, что инициализация не удалась, и он перестает сканировать код.
Детектирование и защита
Чтобы ловить таких невидимок, нужно использовать многоуровневые стратегии. Мониторинг изменений в реестре, особенно ключей, связанных с безопасностью (HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender), должен быть приоритетом. Логи событий Windows (Event ID 7023 для остановки служб, Event ID 7036 для изменений в статусе служб) могут указать на отключение защиты.
Также полезно анализировать TCG (MeasuredBoot) логи, которые хранятся в C:\Windows\Logs\MeasuredBoot. Если в логах появились новые EFI-компоненты вроде grubx64.efi или подозрительные winload.efi, это может указывать на заражение буткитом.
Регулярный аудит исключений в антивирусах и EDR — это обязательная практика. В Microsoft Defender можно проверить исключения через PowerShell командой Get-MpPreference.
Принцип наименьших привилегий
Важно понимать, что большинство техник обхода требуют административных прав. Поэтому соблюдение принципа наименьших привилегий — это критично. Ограничивай локальные админские права, используй многофакторную аутентификацию и мониторь латеральное движение по сети.
Техники обхода EDR и антивирусов постоянно эволюционируют, и чтобы оставаться в игре, нужно знать, как думают атакующие. Unhooking, AMSI bypass, буткиты, эксклюзии, отключение логирования — все это реальные угрозы, которые используются прямо сейчас. Понимание этих методов поможет тебе как защищаться, так и создавать более эффективные инструменты для тестирования на проникновение.

На этом все. Всем хорошего дня!
