Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Антивирус — крайне полезная штука, но только не тогда, когда тебе нужно остаться незамеченным в атакуемой сети. Сегодня мы поговорим о том, как при пентесте можно обмануть антивирусные программы и избежать обнаружения в скомпрометированной системе.
info
Эта статья — продолжение цикла публикаций, посвященных постэксплуатации. В предыдущих сериях:
Наверняка тебе знакома ситуация, когда доступ к атакуемой сети получен и до цели остался один шаг. Но антивирус не дает выполнить нужное действие, запустить ту или иную программу. В моей практике были случаи, когда имелась лишь одна попытка, которая проваливалась из‑за поднятой антивирусом тревоги. Антивирусы иногда могут удалить и совсем безобидные файлы, причем не только исполняемые. Поэтому скрыть настоящую угрозу — крайне непростая задача.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный с использованием информации из данной статьи.
Вообще, задача обхода антивируса может возникнуть в двух случаях:
В первом случае достаточно лишь применить известную технику — полиморфизм. Изменяем код, не меняя его функциональность. Хорошая тактика — написать код самому. Например, с помощью двадцати строк кода на VBS можно реализовать простой reverse shell и успешно обойти любой антивирус. Нас же больше будет интересовать второй случай, и именно это и будет темой данной статьи.
Многие полезные инструменты для обхода антивируса можно сделать с помощью того же Meterpreter, но для начала его следует как минимум запустить. В каждом рассматриваемом способе именно запуск Meterpreter и будет для нас конечной целью. Ведь данное средство обладает всеми необходимыми возможностями, а при желании может использоваться и для запуска другого специализированного ПО прямо в оперативной памяти. А все, что происходит в оперативной памяти, почти недостижимо для средств защиты, поскольку детальный и постоянный анализ памяти влечет за собой колоссальные накладные расходы, на которые антивирусы пойти не могут.
Для того чтобы эффективно обойти антивирус, нам потребуется мыслить как антивирус, пытаться предугадать его логику. Антивирус для нас, безусловно, будет черным ящиком. Мы не знаем в подробностях, как он устроен, но, опираясь на его поведение в разных ситуациях, можем заключить, что он тщательно отслеживает источник загрузки исполняемого файла, а также следит, запускался ли он до этого, и если запускался, то сколько раз. Повторные запуски будут происходить уже под меньшим «надзором».
По большому счету мы имеем дело с двумя механизмами защиты:
При сигнатурном анализе антивирус учитывает множество факторов, в частности большое влияние на результат оказывает компилятор. Вот достаточно забавные результаты VirusTotal для безобидного helloworld-приложения, написанного на С:
Что же касается анализа поведения программы, тут нужно понимать, что, даже если тебе удалось обойти сигнатуры, ты все еще можешь спалиться, поскольку всякий migrate PID или sekurlsa::logonPasswords
может быть перехвачен по причине использования характерных сочетаний WinAPI-функций, которые антивирусы очень внимательно мониторят.
Я предлагаю сосредоточиться именно на сигнатурном движке, обхода которого для большинства случаев достаточно. В статье не будет прямых упоминаний конкретных названий антивирусов, чтобы не создавать никому рекламы или антирекламы. В то же время мы не станем «затачиваться» под конкретный антивирус. Результаты будем проверять именно на работающем антивирусе, при этом попробуем использовать некий универсальный способ, чтобы каждый раз не придумывать все новые методы обхода. В каждом случае целью будет тайком протащить на скомпрометированную машину Meterpreter, который позволит нам исполнить в памяти что угодно, запустить весь имеющийся в нашем распоряжении хакерский арсенал.
Лучший бой — это тот, которого удалось избежать. Поэтому в борьбе с антивирусами часто используются легальные средства. Да, они не могут предоставить многие «продвинутые штуки», но необходимый минимум в виде reverse shell при persistence и lateral movement, а также встроенный прокси‑сервер и гибкую систему редиректа трафика при pivoting они реализовать могут. И это замечательные, всем известные утилиты — nc.exe, ncat.exe, socat.exe, plink.exe. Примеры их использования были описаны в моих прошлых статьях. Блеки же и вовсе порою используют обычные средства облачного удаленного администрирования вроде RMS.
Если же в скомпрометированной системе требуется развернуть целый «плацдарм» в виде Metasploit и аналогичных хакерских тулз, то можно укрыться за виртуализацией. Пошаговый гайд описан еще в одной моей статье.
Техника встраивания кода в уже запущенные, а значит, прошедшие проверку процессы широко известна. Идея состоит в том, что мы имеем отдельную программу shellcode_inject.exe
и сам shellcode в разных файлах. Антивирусу сложнее распознать угрозу, если она раскидана по нескольким файлам, тем более по отдельности эти файлы не представляют угрозы.
shellcode_inject.exe не содержит угроз
В свою очередь, наш shellcode выглядит еще более безобидно, если мы преобразуем его в печатные символы.
Cоздание автономного (не staged) шелл‑кода. Выглядит безобидно
Глядя на содержимое meter.txt
, я бы скорее решил, что это строка в Base64, чем шелл‑код.
Источник: xakep.ru