MSBuild & Cobalt Strike
Hallo, dit is Stevens hier, Sr. Handler at the Internet Storm Center. Renato wrote a very interesting diary entry on cobblestrike beacons being implanted through MS-bill scripts. I have such a sample here, this is how it looks, project, tool version, language C-sharp. En hier heb je een exadesimale representatie van de beacon dat gaat over en over. Dus dat is iets dat we met base 64 dumpen kunnen detecteren. Je ziet dat er een issue zal zijn, ik zal het later explainen. Dus ik ga al de encodings proberen te proberen. En ik wil ook een unieke list, zodat het list niet te lang is. En dan ga ik het hier doen. Oké, en ik heb mijn uitgang. Oké, nu is dat een beetje onvermiddeld hier, dat ik verschillende stringen heb. Ik heb een string van exadesimale data verwijderd. Zoals hier, 0x exadesimale data, 0x en zo. Ik heb een grote string verwijderd en hier heb ik veel grote strings gevonden. Dus ik dacht eerst dat er een onvermiddeldige karakter was in daar, maar dat was niet het geval. En ik laat je laten zien wat er gebeurt. Het is hier. Dus deze encoding dat ik proberen heb, verwijderd twee exadesimale digiten. En dat is het geval voor de eerste twee bytes, maar het is niet het geval voor de tweede byte. Er is geen voedsel hier. Dus ik heb mijn B64 dump programma adept en het is in deze nieuwe versie hier, 0020. Dus laten ik deze oude versie hier nemen. En laten we de command weer doen. Dus ik wil alle encodings alleen unieke hier op de sample. Oké en nu heb ik een heel grote geval gevonden en de naam voor de encoding dat ik geef is zxcn. Dus zxc staat voor 0x, 0x, en daar heb je exadesimale data. 0xcn is ook 0x, en dan exadesimale data, maar n staat voor geen voedsel. Zoals value 8 hier heeft geen voedsel. Dus dat is de encoding dat we willen zxcn. Dus ik kan nu mijn B64 dump tool doen met alleen dat encoding. En ik krijg twee strings, één heel lange string, dat moet de beacon zijn. En dan deze short string hier die de code doet. Als ik op de code kijk, dan gaan we door alle codes zoals dit. Hier heb je alle beacons, exadesimale representatie van de beacon.  Oké, en let's scroll down. Nu hier heb je die tweede sequentie. En dat is hier een keycode. En als je op deze code kijkt, hier deze stuk van code heb je een keycode en buffer die de encoded beacon heeft. En hier heb je een XOR-operatie. Dus dit is een XOR-key voor dit encoded beacon. En je kunt zien dat de XOR-key hier op het eind repeats. Dat is te bekijken, omdat een normale beacon, een PE-file, heeft veel 0's op het eind. En als je XOR 0's met de key hebt, heb je de key. En dat is wat we zien hier. Dus ik ga dit decrypte. Laten we hier de key krijgen. Oké, dit is de key. Dus pay 64 dump. Encoding ZXCN. En ik wil de eerste eind selecten en deze van nummer 7, sorry, van deze sample. En dat zal de XOR encoded beacon selecten. En dan ga ik dit in mijn translate tool pijpen. Want dat tool kan XOR decoding doen. Normaal translate.py werkt byte per byte. Maar hier gaan we op alle bytes werken op dezelfde tijd. Dus ik ga een full read doen. En dan heb ik een pijpenfunctie om de decoding te doen. Dus ik gebruik een lambda functie met data. Dus dat is het argument. Dus de decoded string hier is in site data. Dus wat ik doe, ik gebruik de XOR functie dat is een built-in functie in base 64 dat je kunt gebruiken. En je moet de XOR data proberen. En dan de key, die is een binary key. Dus dat is de key hier. Laten we dit copy paste. Zo. Oké, en dit lambda functie zal de decoded data hier krijgen en de XOR decoding doen en dan spelen dat uit naar standaard art. Dus laten we dit passen op de hoofd. Oké, en dan hier zien we de data. Je ziet dat het begint met mzar. Dat is typisch voor een 64-bit cobelstrike beacon. Dus, omdat dit een beacon is, kan ik dit passen naar mijn 1068 tool om de configuratie van de beacon te ontdekken. En inderdaad hier hebben we de configuratie, zoals hier de IP address en de URI de key. En als Renato uitgevoerd is, zijn ze een ongeven private key gebruikt, zodat we de decryptie kunnen doen. Dat is wat Renato deed in zijn diariëntie. 