ATTACKER BEHAVIOR DETECTED
- Bas
- 4 mrt 2021
- 4 minuten om te lezen
Het is begin december en waar iedereen net het gezellige Sinterklaasweekend achter de rug heeft, en met de gedachten al bij de kerstdagen is, word ik opgeschrikt door een berichtje van Bas. Een screenshot van een alert met in hoofdletters “ATTACKER BEHAVIOR DETECTED”, gevolgd door “Suspicious process – Encoded GZIP Magic Bytes Passed To PowerShell.”. Adrenaline begint te stromen en duizenden gedachten schieten met door het hoofd: “is een collega aan het werk bij deze klant?” en “ben ik recent nog ingelogd geweest bij deze klant?” en “wat doen we in PowerShell dat dit kan veroorzaken?”. Ik kan enkel antwoorden met: “Dat was ik niet”. Direct daarna gaat de telefoon, Bas belt en de mededeling is niet goed. Als jij het niet was Thijs, dan hebben we een interessante uitdaging.
Wat dan volgt is een rollercoaster van enkele dagen. Uiteraard log je direct in op het systeem waar het incident zich voordoet. Als systeembeheerder ben je getraind om afwijkingen in een systeem op te merken en om terug te kunnen redeneren naar de bron van een probleem. Maar een hacker zal er alles aan doen om ongezien zijn doel te bereiken, zo ook in dit geval. Gelukkig is het beheren en beveiligen van systemen niet puur technisch. Er komt een behoorlijke portie psychologie en onderbuikgevoel bij kijken en in mijn geval jarenlange ervaring. Het valt me daarom direct op dat op dit specifieke systeem een account is ingelogd wat daar niet hoort. Een simpele zoektocht in taakbeheer vertelt mij dat onder dit account powershell.exe draait. Dat is niet logisch. Met Bas nog aan de lijn luidt de opdracht van beider zijde: kill process.
Gevaar afgewend, althans zo voelt het heel even. Maar direct giert de volgende sloot adrenaline door het lichaam. PowerShell was de indicator dat er iets aan de hand was, maar wat is de bron. De eigenaar van het account wordt gebeld en de opdracht gegeven het werk te bevriezen. Het is rond lunchtijd, dus het pauzemoment wordt aangegrepen voor verder onderzoek. Het account wordt dichtgezet en het wachtwoord wordt gewijzigd. Ondertussen monitoren we de systemen extra en begint de zoektocht in verzamelde logfiles in ons monitoringsysteem. Het incident is gelogd in dit systeem en geeft mij de code die is uitgevoerd in Powershell. Het draait met het commando “hidden” en de opdracht is versleuteld, uiteraard. Een hacker wil immers zo min mogelijk sporen achterlaten. Maar dit spoor heeft hij of zij wel achtergelaten en als een bloedhond stort ik me hierop. Hoewel de brij aan cijfers en letters me op het eerste oog niets zeggen, geeft het woordje encoded me voldoende aanknopingspunten om te weten dat we deze brij moeten ontsleutelen. Samen met de melding in het incident kom ik tot de conclusie dat deflaten en decoden me logische code op moet leveren. Aangezien PowerShell gebruikt wordt om de kwaadaardige code uit te voeren, heeft dit programma ook de sleutel in handen om mij de onversleutelde code te tonen. De code lijkt een simpele codering te hebben, we gebruiken deze ook om bijvoorbeeld PDF-bestanden in een XML te plaatsen. Een base64 decoder toont mij de werkelijke code. De adrenaline giert nog steeds door het lichaam, maar nu op een goede manier. Niet gedreven door angst, niet het gevoel slachtoffer te zijn, maar exact het omgekeerde. Ik ben nu op jacht en met iedere PowerShellopdracht wordt duidelijker wat het doel van het script is. Er wordt code in het geheugen geladen om vervolgens uitgevoerd te worden. We hebben dus te maken met zogenaamde fileless malware. Er wordt geen kwaadaardig bestand geplaatst, maar een legitiem proces wordt misbruikt. Ik moet echter voorkomen dat de code op mijn onderzoekssysteem wordt uitgevoerd. De truc is dus om de code niet uit te voeren, maar enkel te tonen. PowerShell heeft hier genoeg opties voor en met het weghalen van een paar opdrachten en nog een base64 decodering in Powershell rolt de code voor mijn ogen op het scherm. Het begint nu te voelen als een film met een goed einde, beelden van The Matrix schieten me door het hoofd.
Ik ben er bijna, ik zie dat het script wacht op een opdracht, maar waarvan is niet te zien. Er is nog één stukje code extra versleuteld. Ook hier weer een base64 codering, maar nu met een var_byte. Vele trucs worden uit de kast gehaald om te verbergen waarmee verbinding wordt gemaakt. Ook het decoderen hiervan lukt en nu komt een URL op mijn scherm waarmee het script verbinding maakt en wacht op opdrachten. We hebben de C&C-server gevonden. Het adrenalineniveau kan weer naar normaal niveau. Met het stoppen van het script is in dit geval de communicatie gestopt. De logs in onze monitoringsoftware tonen geen verdere verdachte verbindingen of gedragingen in het netwerk en op de systemen van deze klant. Met de eigenaar van het gecompromitteerde account wordt weer contact opgenomen. We hadden hier het geluk dat er al nieuwe systemen klaarstaan waar ze op verder kan werken. Het onderzoek stopt hier uiteraard niet, er is nog een weg te bewandelen om uit te vinden hoe de malware op het systeem is gekomen, maar ook met welke familie malware hebben we te maken. Meer daarover in deel 2.





Opmerkingen