Малварь по шагам [№6] Полиморфизм

Малварь по шагам [№6] Полиморфизм
Здравствуйте, мои маленькие любители малвари! Чувствую острую потребность расставить все точки на i в теме полиморфизма.

Все кому не лень, трактуют его по своему , Я же предлагаю прийти к общей терминологии, дабы облегчить общение.

Полиморфизм, как свойство – это наличие разных ассемблерных форм, для одного и того же кода.

Мутация – это процесс морфинга кода:
  • замена опкодов на аналоги
  • смешивание целевого кода с мусорным
  • математические преобразования
  • перестановка местами блоков кода
  • генерация случайного алгоритма декриптора
  • и многие другие бинарные девиации
History chanel
В своём первоначальном значении, которое появилось более десятка лет назад:
  • Полиморфный вирус – тело вируса накрыто полиморфным декриптором.
  • Метаморфный вирус – способный мутировать своё тело целиком, пересобирая его по внутренним “чертежам”.
  • Пермутирующий вирус – способный мутировать откомпилированный код, обычно свой. То есть, он дизассемблирует код, мутирует его и кладёт на место.
Полноценные реализации метаморфного и пермутирующего вируса вызывают много споров. Стоит отметить, что эти идеи возникли в те времена, когда все были уверены, что стоит написать хороший пермутирующий вирус и сигнатурное детектирование станет невозможным.

Конечно оно будет сильно затруднено, но современные эвристики и проактивки являются достойным решением возникшей угрозы сигнатурным сканерам. Говоря по-простому, эти красивые идеи несколько порастеряли свою актуальность, а вырванные из контекста термины используются совсем в других областях…
Исторический экскурс закончен, подробней вы сможете почитать в разделе ссылок, а мы переходим к современным реализациям.

Декрипторы
Зашифровать код и вызвать декриптор перед исполнением – наиболее распространённое решение. Код меняет свою бинарную форму? Да, он превращается в мусор и без исполнения декриптора бесполезен. Но как быть с появлением сигнатур на декрипторе? Тут на нам помощь приходит полиморфизм!

Поиграть с этим декриптором можно здесь .

У декрипторов в современных ОС есть одна проблемка – для работы расшифрованного кода, он должен иметь атрибуты памяти Read|Write|Execute, что достигается:
  1. назначением таких прав в pe-хидерах, на что плохо реагирует эвристика хидеров.
  2. динамическим вызовом VirtualProtect(PAGE_EXECUTE_READWRITE) или VirtualAlloc(PAGE_EXECUTE_READWRITE), что может заинтересовать эвристику эмулятора.
Получается, что сначала морфленный шеллкод создаёт плацдарм для расшифровки, меняя атрибуты памяти, после чего отрабатывает декриптор. Разумеется, эмулятор должен прекратить работу до получения секции с PAGE_EXECUTE_READWRITE ибо это защита от сканера only!

Генераторы
Алгоритмы, способные создавать разные ассемблерные представления одного кода, называютполиморфными движками:
Суть любого движка в абстрагировании: от бинарной реализации мы переходим к всё более высокоуровневым формам.
Давайте мысленно проследим развитие одной команды полиморфного генератора:
  1. GEN_MOV_REG_0 – умеет генерировать одну команду mov reg,0
  2. SET_REG_0 – умеет генерировать случайную из 21 варианта
  3. SET_REG_0_TRASH – прошлый шаг щедро разбавляется мусором
  4. SET_REG_0_MEGATRASH – мусор становится сложнее, на каждый целевой опкод приходится по сотне вложенных функций с WinApi.
На данном этапе сложность движка зависит только от фантазии автора, Вы можете разбавлять код антиотладочным трюками, антиэмуляцией или поэмами Шекспира.

Ссылки
Почитайте эти тщательно отобранные труды, но помните о чём мы говорили выше =)
P/S Кидaйте в комменты ссылки на ваши любимые генераторы =)

Ну и конечно, Вы можете помочь Ретвитами !
Alt text

Не ждите, пока хакеры вас взломают - подпишитесь на наш канал и станьте неприступной крепостью!

Подписаться

VxLab

Blog о вирусных технологиях