Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Вирусописатели придумывают все новые и новые способы скрытия своего ПО после инжекта в процесс. В последнее время стала популярна не просто обфускация, а Sleep-обфускация. Давай разберемся с этой техникой, познакомимся с ROP-цепочками, если ты с ними еще не знаком, и заценим публично доступные PoC.
Какую главную цель преследует любой уважающий себя зловред? Быть может, заработать создателю миллион долларов? Захватить весь мир? Стащить нюдсы бывшей? Все это может быть потом, но первая и важнейшая задача — скрыться! И Sleep-обфускация в этом отлично помогает. Этот способ скрытия может применяться как к шелл‑коду, так и ко всей копии файла в памяти в целом.
Большинство антивирусов обращает пристальное внимание на любые области памяти с правами на исполнение. Конечно, не все так просто, важно верно учитывать регион памяти (глупо было бы блокировать все RX-данные в Image-секциях), но Sleep-обфускация не об этом.
Представь, что сканер так и рыщет злыми глазами по памяти уже зараженного процесса, пытаясь выцепить своими когтищами наш бедный маленький шелл‑код. Чтобы скрыть себя в памяти, он может взять и поменять разрешения своего региона с RX на, например, RW или вообще PAGE_NO_ACCESS
. После чего дополнительно поксориться на удачу. И всё, шелл‑код в домике. А Око Касперского останется ни с чем.
Собственно, эту задачу и решает Sleep-обфускация. Она позволяет изменить разрешения памяти, спрятать шелл‑код, а затем через некоторое время вернуть его к жизни путем расшифровки и восстановления Execute-прав.
Предлагаю сразу разобраться с терминами. Поспрашивав экспертов и поглядев PoC на GitHub, я смело заявляю, что Sleep-обфускацию можно считать подвидом флуктуации шелл‑кода. Флуктуация решает ту же задачу — шифрование и изменение разрешений. Но лично я считаю, что Sleep-обфускация — это все то, что приводит, используя те же таймеры (или иные механизмы, связанные со временем), к выстрелу колбэка и последующему изменению разрешений памяти.
Флуктуация — это концепция такого поведения вредоноса в целом. Добиться флуктуации можно и без временных функций. Можно в шелл‑коде разместить PAGE_GUARD
или Hardware Breakpoint. Такой фокус при выполнении шелл‑кодом конкретной инструкции позволит активировать колбэк, который спрячет вредонос в памяти.
Почти все известные PoC на «спящую» обфускацию используют ROP-цепочки. Если очень вкратце, то ROP-цепочки считаются некоторой продвинутой заменой стандартному переполнению буфера. Вместо того чтобы помещать где‑то в стеке наш шелл‑код, мы, манипулируя адресами возврата, заставляем код выполнять необходимые нам инструкции. Набор инструкций называется ROP-гаджетом, несколько ROP-гаджетов — ROP-цепочкой.
Отличная картинка, наглядно представляющая этот механизм, есть в блоге ka1d0.
Наглядная иллюстрация ROP-цепочки www
Больше про этот интересный способ эксплуатации можно почитать тут:
Впрочем, погружаться в самые дебри нам сегодня не понадобится. Связь между Sleep-обфускацией и ROP основана только на том, что после выполнения одной функции автоматически будет дергаться другая. Вот и всё! Давай посмотрим на примере.
Простейший и самый наглядный PoC для демонстрации Sleep-обфускации — это Ekko. У него есть и более продвинутый вариант, но он не столь наглядный, и разобраться с ним будет сложнее.
Источник: xakep.ru