Не вирусы, а аргументы: как команды стали новым методом незаметной атаки

Сегодня большинство антивирусов и EDR -систем следят за тем, какие команды запускаются в системе. Именно по содержимому командной строки защитные решения пытаются понять – нормальный это процесс или вредоносный. Но оказалось, что злоумышленники могут легко обмануть такие проверки, просто изменив вид команды, не меняя её суть. Такой приём называется обфускацией командной строки.

Раньше угрозу искали в вредоносных файлах – вирусах, троянах и так далее. Но теперь многие атаки вообще не используют вредоносное ПО. Вместо этого применяются обычные системные утилиты, такие как PowerShell, curl, msiexec или taskkill. Это называется malwareless intrusions (вторжения без вредоносных программ). Такая атака выглядит как обычная работа с компьютером, а значит, реже вызывает подозрение.

Чтобы хоть как-то отсеивать такие действия, защитные системы начали обращать внимание на аргументы команд. Например, запуск “taskkill /f /im winword.exe” может быть безобидным, а вот “taskkill /f /im security_process.exe” уже выглядит как попытка отключить защиту. Но и здесь появилась уловка: изменять команды так, чтобы они выглядели иначе, но работали так же. Это и есть суть обфускации.

Такая маскировкане зависит от оболочки: она работает за счёт особенностей обработки аргументов самой программы. Например, можно заменить символы, вставить лишние, использовать странные кавычки, изменить регистр букв. В итоге команда вроде “reg export HKLMSAM out.reg” превращается в “rEg “e”xP”o”rT HK”L”MS”A”M ouT.ReG”, но всё равно работает. И главное – антивирус может не распознать в ней угрозу.

На Windows таких трюков особенно много. Например:

  • Заменять “/f” на “-f”;
  • Использовать специальные символы вместо обычных, вроде “ˣ” вместо “x”;
  • Вставлять в команды невидимые или редкие юникод-символы;
  • Менять порядок аргументов;
  • Прятать путь через “..”, чтобы он выглядел иначе.

На Linux и macOS приёмов меньше, но они тоже есть. Например, можно обрезать часть длинного аргумента или указать IP-адрес в необычном формате, например, “2130706433” вместо привычного “127.0.0.1”.

Чтобы исследовать, насколько уязвимы системные утилиты, автор проекта проверил 68 популярных программ Windows, таких как curl, taskkill, reg, powershell, msiexec и другие. Он создал специальный инструмент analyse_obfuscation, который автоматически проверяет, работают ли команды с разными обфускациями. Если результат одинаковый, значит метод работает.

Затем для каждой программы был составлен специальный файл-модель, где описано, какие трюки работают, а какие нет. На основе моделей был разработан инструмент Invoke-ArgFuscator, который умеет генерировать обфусцированные команды. Он делает это по заданным правилам и с разной долей случайности, так что каждый раз команда получается новой.

Все результаты исследования собраны на сайте , где можно выбрать одну из 68 утилит, ввести команду и получить её обфусцированный вариант. Также можно менять настройки, отключать определённые методы или создавать свои модели.

Хотя такие методы сильно затрудняют защиту, есть способы бороться с ними. Например, можно искать в командной строке странные символы из юникода, большое количество кавычек или резкие изменения регистра. Также можно нормализовать команду перед анализом – убрать лишние символы, чтобы увидеть её реальный смысл. Но самое надёжное – не полагаться только на текст команды, а следить за поведением процессов: например, если msiexec выходит в интернет, это подозрительно, даже если строка запуска выглядит безобидно.

Public Release.