Какую главную цель преследует любой уважающий себя зловред? Быть может, заработать создателю миллион долларов? Захватить весь мир? Стащить нюдсы бывшей? Все это может быть потом, но первая и важнейшая задача — скрыться! И Sleep-обфускация в этом отлично помогает. Этот способ скрытия может применяться как к шелл‑коду, так и ко всей копии файла в памяти в целом.
Большинство антивирусов обращает пристальное внимание на любые области памяти с правами на исполнение. Конечно, не все так просто, важно верно учитывать регион памяти (глупо было бы блокировать все RX-данные в Image-секциях), но Sleep-обфускация не об этом.
Представь, что сканер так и рыщет злыми глазами по памяти уже зараженного процесса, пытаясь выцепить своими когтищами наш бедный маленький шелл‑код. Чтобы скрыть себя в памяти, он может взять и поменять разрешения своего региона с RX на, например, RW или вообще PAGE_NO_ACCESS
. После чего дополнительно поксориться на удачу. И всё, шелл‑код в домике. А Око Касперского останется ни с чем.
Собственно, эту задачу и решает Sleep-обфускация. Она позволяет изменить разрешения памяти, спрятать шелл‑код, а затем через некоторое время вернуть его к жизни путем расшифровки и восстановления Execute-прав.
Предлагаю сразу разобраться с терминами. Поспрашивав экспертов и поглядев PoC на GitHub, я смело заявляю, что Sleep-обфускацию можно считать подвидом флуктуации шелл‑кода. Флуктуация решает ту же задачу — шифрование и изменение разрешений. Но лично я считаю, что Sleep-обфускация — это все то, что приводит, используя те же таймеры (или иные механизмы, связанные со временем), к выстрелу колбэка и последующему изменению разрешений памяти.
Флуктуация — это концепция такого поведения вредоноса в целом. Добиться флуктуации можно и без временных функций. Можно в шелл‑коде разместить PAGE_GUARD
или Hardware Breakpoint. Такой фокус при выполнении шелл‑кодом конкретной инструкции позволит активировать колбэк, который спрячет вредонос в памяти.
ROP
Почти все известные PoC на «спящую» обфускацию используют ROP-цепочки. Если очень вкратце, то ROP-цепочки считаются некоторой продвинутой заменой стандартному переполнению буфера. Вместо того чтобы помещать где‑то в стеке наш шелл‑код, мы, манипулируя адресами возврата, заставляем код выполнять необходимые нам инструкции. Набор инструкций называется ROP-гаджетом, несколько ROP-гаджетов — ROP-цепочкой.
Отличная картинка, наглядно представляющая этот механизм, есть в блоге ka1d0.
www
Больше про этот интересный способ эксплуатации можно почитать тут:
- Решение задания с pwnable.kr 26 — ascii_easy. Разбираемся с ROP-гаджетами с нуля раз и навсегда
- ROP-цепочки и гаджеты: учимся разрабатывать эксплойты
- Return Oriented Programming (ROP) attacks
- 32-bit Stack-based Buffer Overflow
- What is the difference between a buffer overflow attack and a ROP attack?
Впрочем, погружаться в самые дебри нам сегодня не понадобится. Связь между Sleep-обфускацией и ROP основана только на том, что после выполнения одной функции автоматически будет дергаться другая. Вот и всё! Давай посмотрим на примере.
Ekko
Простейший и самый наглядный PoC для демонстрации Sleep-обфускации — это Ekko. У него есть и более продвинутый вариант, но он не столь наглядный, и разобраться с ним будет сложнее.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»