History chanel В своём первоначальном значении, которое появилось более десятка лет назад:
Полиморфный вирус – тело вируса накрыто полиморфным декриптором.
Метаморфный вирус – способный мутировать своё тело целиком, пересобирая его по внутренним “чертежам”.
Пермутирующий вирус – способный мутировать откомпилированный код, обычно свой. То есть, он дизассемблирует код, мутирует его и кладёт на место.
Полноценные реализацииметаморфного и пермутирующего вируса вызывают много споров. Стоит отметить, что эти идеи возникли в те времена, когда все были уверены, что стоит написать хороший пермутирующий вирус и сигнатурное детектирование станет невозможным.
Конечно оно будет сильно затруднено, но современные эвристики и проактивкиявляются достойным решением возникшей угрозы сигнатурным сканерам. Говоря по-простому, эти красивые идеи несколько порастеряли свою актуальность, а вырванные из контекста термины используются совсем в других областях… Исторический экскурс закончен, подробней вы сможете почитать в разделе ссылок, а мы переходим к современным реализациям.
Декрипторы Зашифровать код и вызвать декриптор перед исполнением – наиболее распространённое решение. Код меняет свою бинарную форму? Да, он превращается в мусор и без исполнениядекриптора бесполезен. Но как быть с появлением сигнатур на декрипторе? Тут на нам помощь приходит полиморфизм! Поиграть с этим декриптором можно здесь.
У декрипторов в современных ОС есть одна проблемка – для работы расшифрованного кода, он должен иметь атрибуты памяти Read|Write|Execute, что достигается:
назначением таких прав в pe-хидерах, на что плохо реагирует эвристика хидеров.
динамическим вызовом VirtualProtect(PAGE_EXECUTE_READWRITE) или VirtualAlloc(PAGE_EXECUTE_READWRITE), что может заинтересовать эвристику эмулятора.
Получается, что сначала морфленный шеллкод создаёт плацдарм для расшифровки, меняя атрибуты памяти, после чего отрабатывает декриптор. Разумеется, эмулятор должен прекратить работу до получения секции с PAGE_EXECUTE_READWRITE ибо это защита от сканера only!
Генераторы Алгоритмы, способные создавать разные ассемблерные представления одного кода, называютполиморфными движками:
Суть любого движка в абстрагировании: от бинарной реализации мы переходим к всё более высокоуровневым формам. Давайте мысленно проследим развитие одной команды полиморфного генератора:
GEN_MOV_REG_0 – умеет генерировать одну команду mov reg,0
SET_REG_0 – умеет генерировать случайную из 21 варианта
SET_REG_0_MEGATRASH – мусор становится сложнее, на каждый целевой опкод приходится по сотне вложенных функций с WinApi.
На данном этапе сложность движка зависит только от фантазии автора, Вы можете разбавлять кодантиотладочным трюками, антиэмуляцией или поэмами Шекспира.
Ссылки Почитайте эти тщательно отобранные труды, но помните о чём мы говорили выше =)
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Эксклюзивный стрим с хакерами мирового класса
15 апреля в 19:00 Hussein и Niksthehacker раскроют все карты.