- Сообщения
- 60
- Реакции
- 70
Ты загружаешь файл на VirusTotal. 0 детектов из 72 движков. Зелёная галочка, всё чисто. Запускаешь — а через час все пароли из браузера, куки, крипто-кошельки и сессии Telegram уже на сервере у кого-то другого
Это не баг VirusTotal. Это не глупость антивирусов. Это целая индустрия, которая зарабатывает на том, чтобы малварь была невидимой. И техники там сильно сложнее чем "запаковать UPX-ом"
Разберём как это работает изнутри
Как устроена защита и почему она не работает
Антивирус проверяет файл двумя способами — сигнатурный анализ и поведенческий. Сигнатуры это по сути база "отпечатков" известных вредоносов. Поведенческий — запуск файла в песочнице (sandbox) и наблюдение за тем что он делает
Проблема в том что оба подхода предсказуемые. Сигнатуру можно поменять — перекомпилировал, добавил мусорный код, сменил пару байт. А песочницу можно определить и просто не запускать вредоносный код пока в ней сидишь
Вот тут начинается самое интересное
Определение виртуальной машины
Первое что делает нормальный стилер после запуска — проверяет, не сидит ли он в виртуалке. Потому что 99% песочниц это VMware, VirtualBox или Hyper-V. И каждая из них оставляет следы
Реестр Windows
VMware и VirtualBox прописывают себя в реестре. Малварь просто читает ключи:
Если хотя бы один существует — выход. Код не исполняется
Процессы
Гостевые утилиты виртуалок запускают фоновые процессы. Малварь перебирает список:
Нашёл хоть один — всё, прощай
MAC-адреса
У каждого гипервизора свой OUI-префикс сетевой карты:
Проверяется за миллисекунды. Один WMI-запрос — и понятно где ты
Железо
Виртуалки экономят на деталях. Часто — 1-2 ядра CPU, 2 ГБ оперативки, диск на 60 ГБ, видеокарта "Microsoft Basic Display Adapter". Малварь проверяет железо и если оно слишком бедное — считает что это песочница. Обычный юзер не сидит на машине с 2 ГБ RAM в 2026
WMI-запросы
Один запрос к Win32_ComputerSystem и ты знаешь всё:
Win32_Bios выдаёт SerialNumber со строкой "VMware-". Win32_VideoController — "VMware SVGA" или "VirtualBox Graphics Adapter". Win32_DiskDrive — размер меньше 60 ГБ. Каждый из этих запросов занимает одну строчку кода
CPUID — гипервизор на уровне процессора
Инструкция CPUID с EAX=1 возвращает бит 31 в ECX — hypervisor present bit. Если выставлен — ты в виртуалке. Дальше CPUID с EAX=0x40000000 отдаёт строку вендора: "VMwareVMware", "Microsoft Hv", "KVMKVMKVM", "XenVMMXenVMM". Это аппаратный уровень — подделать сложнее чем реестр
Файлы и драйверы
VMware и VirtualBox ставят свои драйверы в System32:
Плюс именованные устройства — CreateFile на \\.\VBoxGuest или \\.\HGFS. Если открылось — виртуалка
Малварь может проверять загруженные DLL в процессе. Lumma Stealer ищет sbiedll.dll (Sandboxie), api_log.dll (SunBelt Sandbox), vmcheck.dll (Virtual PC). Нашёл хоть одну — выход
Тайминг-атаки — когда время всё решает
Песочницы ограничены по времени. ANY.RUN даёт 60 секунд на бесплатном тарифе, Joe Sandbox — до 5 минут. Малварь это знает
Простой вариант — Sleep(300000). Пять минут сна и песочница уже выгрузила файл как "безопасный". Потом малварь просыпается и начинает работать
Но антивирусы научились ускорять Sleep. Поэтому малварь проверяет — действительно ли прошло столько времени, сколько она просила
Инструкция RDTSC (Read Time-Stamp Counter) считает тики процессора. Замеряешь до Sleep и после. Если реальное время не совпадает с запрошенным — значит кто-то ускорил таймер. Значит песочница
Другой приём — GetTickCount до и после вычислительной нагрузки. Если разница неадекватная — среда подкручена
Проверка на живого пользователя
В песочнице никто не двигает мышку, не кликает, не печатает. Малварь это проверяет
LummaC2 v4.0 (один из самых активных стилеров 2024-2025) использует тригонометрию для определения реального пользователя. Не метафора — буквально вычисляет углы
Алгоритм: GetCursorPos() в цикле ждёт пока курсор сдвинется. Потом захватывает 5 позиций с интервалом 50 мс. Строит 4 вектора между точками. Через dot product считает углы между каждой парой соседних векторов. Конвертирует радианы в градусы. Если все углы меньше 45 градусов — движение плавное, человеческое, можно работать. Если больше — это рывки автоматизации, повтор цикла
Песочницы двигают курсор по прямым линиям или рандомно. Реальный человек водит мышью плавными дугами. Разница в геометрии — и малварь это эксплуатирует
Другие варианты проще но тоже работают:
- Количество кликов за 30 секунд — ноль значит песочница
- История браузера — пустая = свежая среда
- Файлы на рабочем столе — один файл test.exe это очевидный аналитик
- Количество установленных программ — меньше 20 подозрительно
- Размер %TEMP% — у реального юзера мегабайты мусора, у песочницы чисто
- Username — проверка на "sandbox", "malware", "virus", "test", "john" (Lumma проверяет это отдельно)
- Имя EXE-файла — "sample.exe" или "malware.exe" = очевидно лаборатория
Антидебаг
Отдельный класс проверок — на отладчик. Если кто-то подключил дебаггер (x64dbg, IDA, OllyDbg) — значит реверс-инженер разбирает малварь
Три WinAPI вызова. Если хоть один возвращает True — малварь либо завершается, либо уходит в бесконечный цикл, либо начинает делать что-то безобидное
Кроме API есть хардварные трюки. Например, чтение PEB-структуры напрямую через mov eax, fs:[30h] — поле BeingDebugged. Или проверка флага NtGlobalFlag (0x70 означает что процесс создан отладчиком)
Малварь также проверяет наличие процессов анализа:
Криптеры и обфускация
Это коммерческая часть. На маркетплейсах продаются криптеры — сервисы которые перепаковывают малварь так, чтобы антивирусы не узнали
Как это работает — берётся исходный пейлоад (стилер, RAT, что угодно), шифруется, оборачивается в легитимно выглядящий лоадер. При запуске лоадер расшифровывает пейлоад в памяти и исполняет. На диске никогда не появляется "чистый" вредоносный файл — сигнатура не срабатывает
Olymp Loader (2025) рекламируется с показателем 1/72 на VirusTotal. Pure Crypter — аналогично, продаётся как FUD (Fully UnDetectable). Подписка от 50 до 300 баксов в месяц
Важный момент — разработчики криптеров постоянно тестируют свои сборки на сервисах вроде kleenscan или avcheck (не VirusTotal — он расшаривает семплы с антивирусными компаниями). Как только детект появляется — пересобирают. По сути подписка включает регулярные обновления обфускации
AMSI bypass и отключение защиты
Windows Antimalware Scan Interface — прослойка через которую антивирус проверяет скрипты и загружаемый код в памяти. Малварь патчит amsi.dll прямо в процессе — записывает ret-инструкцию в AmsiScanBuffer, и все последующие проверки возвращают "чисто"
Lumma Stealer использует открытый тулкит для AMSI bypass. Патч занимает 5-6 строк кода. После этого PowerShell-команды, .NET-сборки и любой скриптовый код проходят без проверки
ETW (Event Tracing for Windows) — то же самое. Малварь патчит NtTraceEvent чтобы EDR-решения не получали события. Слепая зона
Реальная картина в цифрах
Picus Security проанализировала 1,153,683 семплов малвари для Red Report 2026. Sandbox Evasion (MITRE T1497) — четвёртая по популярности техника, найдена в 20% всех образцов. Годом ранее её не было в десятке. При этом успешно блокируется только в 13% случаев — одна из самых сложных для защиты
ANY.RUN за 2024 год зафиксировал 134,260 детектов time-based evasion (T1497.003) в 4 миллионах задач. В 2025 эта цифра резко выросла
Kaspersky: детекты стилеров +59% за год, шпионского ПО +51%. Но FUD-семплов тоже больше — значит антивирусы ловят старое, а новое проходит
VirusTotal индексирует около 70 антивирусных движков для файлов (полный список — docs.virustotal.com). В октябре 2025 их ИИ-система Code Insight нашла macOS-стилер с 0 детектов от всех движков на момент загрузки. Не какой-то PoC, а рабочий многоэтапный AppleScript-инфостилер
Три самых активных стилера — Lumma, StealC, RedLine — ответственны за 75%+ заражений. Все три используют как минимум 3-4 техники из описанных выше. RedLine в октябре 2024 пережил Operation Magnus (совместная операция полиции нескольких стран), но семплы до сих пор в обороте
Что с этим делать
Антивирус не бесполезен — он ловит 95% мусора. Но против целевой или свежей малвари он бессилен
Если работаешь с чувствительными данными — не доверяй одному инструменту. Изоляция (отдельная машина или хотя бы VM для грязной работы), сегментация сетей, мониторинг исходящего трафика. Стилер может обойти антивирус, но не спрячет DNS-запросы к своему C2
Если пишешь или анализируешь малварь — знание evasion техник обязательно. Без этого ты либо напишешь что-то что поймают через час, либо не поймёшь как работает то что тебе прислали
Вопросы по теме кидайте в ветку, разберём
Это не баг VirusTotal. Это не глупость антивирусов. Это целая индустрия, которая зарабатывает на том, чтобы малварь была невидимой. И техники там сильно сложнее чем "запаковать UPX-ом"
Разберём как это работает изнутри
Как устроена защита и почему она не работает
Антивирус проверяет файл двумя способами — сигнатурный анализ и поведенческий. Сигнатуры это по сути база "отпечатков" известных вредоносов. Поведенческий — запуск файла в песочнице (sandbox) и наблюдение за тем что он делает
Проблема в том что оба подхода предсказуемые. Сигнатуру можно поменять — перекомпилировал, добавил мусорный код, сменил пару байт. А песочницу можно определить и просто не запускать вредоносный код пока в ней сидишь
Вот тут начинается самое интересное
Определение виртуальной машины
Первое что делает нормальный стилер после запуска — проверяет, не сидит ли он в виртуалке. Потому что 99% песочниц это VMware, VirtualBox или Hyper-V. И каждая из них оставляет следы
Реестр Windows
VMware и VirtualBox прописывают себя в реестре. Малварь просто читает ключи:
Код:
HKLM\SOFTWARE\VMware, Inc.\VMware Tools
HKLM\HARDWARE\ACPI\DSDT\VBOX__
HKLM\SYSTEM\CurrentControlSet\Services\VBoxGuest
Если хотя бы один существует — выход. Код не исполняется
Процессы
Гостевые утилиты виртуалок запускают фоновые процессы. Малварь перебирает список:
Код:
vmtoolsd.exe — VMware Tools
vmwaretray.exe — VMware Tray
VBoxService.exe — VirtualBox Guest
VBoxTray.exe — VirtualBox Tray
qemu-ga.exe — QEMU Guest Agent
Нашёл хоть один — всё, прощай
MAC-адреса
У каждого гипервизора свой OUI-префикс сетевой карты:
Код:
00:50:56 — VMware
00:0C:29 — VMware
08:00:27 — VirtualBox
00:15:5D — Hyper-V
Проверяется за миллисекунды. Один WMI-запрос — и понятно где ты
Железо
Виртуалки экономят на деталях. Часто — 1-2 ядра CPU, 2 ГБ оперативки, диск на 60 ГБ, видеокарта "Microsoft Basic Display Adapter". Малварь проверяет железо и если оно слишком бедное — считает что это песочница. Обычный юзер не сидит на машине с 2 ГБ RAM в 2026
WMI-запросы
Один запрос к Win32_ComputerSystem и ты знаешь всё:
Код:
Model: "VMware Virtual Platform" или "VirtualBox"
Manufacturer: "VMware, Inc." или "innotek GmbH"
NumberOfProcessors: < 2 → подозрение
Win32_Bios выдаёт SerialNumber со строкой "VMware-". Win32_VideoController — "VMware SVGA" или "VirtualBox Graphics Adapter". Win32_DiskDrive — размер меньше 60 ГБ. Каждый из этих запросов занимает одну строчку кода
CPUID — гипервизор на уровне процессора
Инструкция CPUID с EAX=1 возвращает бит 31 в ECX — hypervisor present bit. Если выставлен — ты в виртуалке. Дальше CPUID с EAX=0x40000000 отдаёт строку вендора: "VMwareVMware", "Microsoft Hv", "KVMKVMKVM", "XenVMMXenVMM". Это аппаратный уровень — подделать сложнее чем реестр
Файлы и драйверы
VMware и VirtualBox ставят свои драйверы в System32:
Код:
VBoxMouse.sys, VBoxGuest.sys, VBoxSF.sys — VirtualBox
vmhgfs.sys, vmmemctl.sys, vmci.sys, vm3dmp.sys — VMware
Плюс именованные устройства — CreateFile на \\.\VBoxGuest или \\.\HGFS. Если открылось — виртуалка
Малварь может проверять загруженные DLL в процессе. Lumma Stealer ищет sbiedll.dll (Sandboxie), api_log.dll (SunBelt Sandbox), vmcheck.dll (Virtual PC). Нашёл хоть одну — выход
Тайминг-атаки — когда время всё решает
Песочницы ограничены по времени. ANY.RUN даёт 60 секунд на бесплатном тарифе, Joe Sandbox — до 5 минут. Малварь это знает
Простой вариант — Sleep(300000). Пять минут сна и песочница уже выгрузила файл как "безопасный". Потом малварь просыпается и начинает работать
Но антивирусы научились ускорять Sleep. Поэтому малварь проверяет — действительно ли прошло столько времени, сколько она просила
Инструкция RDTSC (Read Time-Stamp Counter) считает тики процессора. Замеряешь до Sleep и после. Если реальное время не совпадает с запрошенным — значит кто-то ускорил таймер. Значит песочница
Код:
RDTSC → сохранить значение
Sleep(10000)
RDTSC → сравнить
Дельта слишком маленькая? → выход
Другой приём — GetTickCount до и после вычислительной нагрузки. Если разница неадекватная — среда подкручена
Проверка на живого пользователя
В песочнице никто не двигает мышку, не кликает, не печатает. Малварь это проверяет
LummaC2 v4.0 (один из самых активных стилеров 2024-2025) использует тригонометрию для определения реального пользователя. Не метафора — буквально вычисляет углы
Алгоритм: GetCursorPos() в цикле ждёт пока курсор сдвинется. Потом захватывает 5 позиций с интервалом 50 мс. Строит 4 вектора между точками. Через dot product считает углы между каждой парой соседних векторов. Конвертирует радианы в градусы. Если все углы меньше 45 градусов — движение плавное, человеческое, можно работать. Если больше — это рывки автоматизации, повтор цикла
Песочницы двигают курсор по прямым линиям или рандомно. Реальный человек водит мышью плавными дугами. Разница в геометрии — и малварь это эксплуатирует
Другие варианты проще но тоже работают:
- Количество кликов за 30 секунд — ноль значит песочница
- История браузера — пустая = свежая среда
- Файлы на рабочем столе — один файл test.exe это очевидный аналитик
- Количество установленных программ — меньше 20 подозрительно
- Размер %TEMP% — у реального юзера мегабайты мусора, у песочницы чисто
- Username — проверка на "sandbox", "malware", "virus", "test", "john" (Lumma проверяет это отдельно)
- Имя EXE-файла — "sample.exe" или "malware.exe" = очевидно лаборатория
Антидебаг
Отдельный класс проверок — на отладчик. Если кто-то подключил дебаггер (x64dbg, IDA, OllyDbg) — значит реверс-инженер разбирает малварь
Код:
IsDebuggerPresent()
NtQueryInformationProcess(ProcessDebugPort)
CheckRemoteDebuggerPresent()
Три WinAPI вызова. Если хоть один возвращает True — малварь либо завершается, либо уходит в бесконечный цикл, либо начинает делать что-то безобидное
Кроме API есть хардварные трюки. Например, чтение PEB-структуры напрямую через mov eax, fs:[30h] — поле BeingDebugged. Или проверка флага NtGlobalFlag (0x70 означает что процесс создан отладчиком)
Малварь также проверяет наличие процессов анализа:
Код:
x64dbg.exe, x32dbg.exe
ida.exe, ida64.exe
procmon.exe, procexp.exe
wireshark.exe
fiddler.exe
dnspy.exe
Криптеры и обфускация
Это коммерческая часть. На маркетплейсах продаются криптеры — сервисы которые перепаковывают малварь так, чтобы антивирусы не узнали
Как это работает — берётся исходный пейлоад (стилер, RAT, что угодно), шифруется, оборачивается в легитимно выглядящий лоадер. При запуске лоадер расшифровывает пейлоад в памяти и исполняет. На диске никогда не появляется "чистый" вредоносный файл — сигнатура не срабатывает
Olymp Loader (2025) рекламируется с показателем 1/72 на VirusTotal. Pure Crypter — аналогично, продаётся как FUD (Fully UnDetectable). Подписка от 50 до 300 баксов в месяц
Важный момент — разработчики криптеров постоянно тестируют свои сборки на сервисах вроде kleenscan или avcheck (не VirusTotal — он расшаривает семплы с антивирусными компаниями). Как только детект появляется — пересобирают. По сути подписка включает регулярные обновления обфускации
AMSI bypass и отключение защиты
Windows Antimalware Scan Interface — прослойка через которую антивирус проверяет скрипты и загружаемый код в памяти. Малварь патчит amsi.dll прямо в процессе — записывает ret-инструкцию в AmsiScanBuffer, и все последующие проверки возвращают "чисто"
Lumma Stealer использует открытый тулкит для AMSI bypass. Патч занимает 5-6 строк кода. После этого PowerShell-команды, .NET-сборки и любой скриптовый код проходят без проверки
ETW (Event Tracing for Windows) — то же самое. Малварь патчит NtTraceEvent чтобы EDR-решения не получали события. Слепая зона
Реальная картина в цифрах
Picus Security проанализировала 1,153,683 семплов малвари для Red Report 2026. Sandbox Evasion (MITRE T1497) — четвёртая по популярности техника, найдена в 20% всех образцов. Годом ранее её не было в десятке. При этом успешно блокируется только в 13% случаев — одна из самых сложных для защиты
ANY.RUN за 2024 год зафиксировал 134,260 детектов time-based evasion (T1497.003) в 4 миллионах задач. В 2025 эта цифра резко выросла
Kaspersky: детекты стилеров +59% за год, шпионского ПО +51%. Но FUD-семплов тоже больше — значит антивирусы ловят старое, а новое проходит
VirusTotal индексирует около 70 антивирусных движков для файлов (полный список — docs.virustotal.com). В октябре 2025 их ИИ-система Code Insight нашла macOS-стилер с 0 детектов от всех движков на момент загрузки. Не какой-то PoC, а рабочий многоэтапный AppleScript-инфостилер
Три самых активных стилера — Lumma, StealC, RedLine — ответственны за 75%+ заражений. Все три используют как минимум 3-4 техники из описанных выше. RedLine в октябре 2024 пережил Operation Magnus (совместная операция полиции нескольких стран), но семплы до сих пор в обороте
Что с этим делать
Антивирус не бесполезен — он ловит 95% мусора. Но против целевой или свежей малвари он бессилен
Если работаешь с чувствительными данными — не доверяй одному инструменту. Изоляция (отдельная машина или хотя бы VM для грязной работы), сегментация сетей, мониторинг исходящего трафика. Стилер может обойти антивирус, но не спрячет DNS-запросы к своему C2
Если пишешь или анализируешь малварь — знание evasion техник обязательно. Без этого ты либо напишешь что-то что поймают через час, либо не поймёшь как работает то что тебе прислали
Вопросы по теме кидайте в ветку, разберём
