Auge um Auge, Socks5 um Socks5 + N0ise Bot Leaked
Heute morgen erhielt ich einen Pingback auf den schon etwas älteren Socks5 Artikel. Ich staunte nicht schlecht als mich eine Socks5-Implementierung über SSH erwartete, zum Teil basierend auf den Infos aus diesem verlinkten Artikel!
Zu dem Artikel und der Implementierung geht es hier lang! Der User Kataklysmos (Mitblogger des Shitstorm-Blogs) schaffte es mit diesen Infos den N0ise Socks5 Reverse Bot zu schlagen, und das nicht nur in der Namensgebung des Projekts (1337 h4xX0r VicSock)
Da ich in letzter Zeit die Socks5 Reverse Sache ein wenig aus den Augen verloren hatte, ist dies nun eine Motivationsquelle das ganze ohne SSH zu implementieren. Aber dazu folgen sicher noch Posts in der Zukunft
Dieser Post von Kataklysmos war auch ein Anstoß zum Reversen der N0ise Binary! In dem Malwareanalyse in C#-Post wurde eine Schicht des Crypters entpackt. Danach war die Binary mit dem EZIRIZ .net Reactor 4.3X gepackt, was zumindest für den Moment das Unpacking stoppte. Heute fing ich nochmal von vorne an. Mit einem MSIL-Patch dumpte ich die gecryptete Datei vor dem übergeben an das RunPE-Modul und machte mit dieser direkt weiter. Durch einen JIT-Dumper (wird im nächsten Post über .NET RE besprochen) sowie den Dotnet Dumper war ich nach einigen Versuchen in der Lage die Datei zu dumpen. Das Problem bestand darin, dass das Programm nach 3 Sekunden abstürzte, da der SSH-Server nicht mehr aktiv ist. Mit diesem gedumpten Programm konnte ich den Reactor Decrypter zu verwenden, welcher den MSIL-Code wiederherstellte.
So viel zur Theorie, das Praxisresultat sieht nicht so rosig aus. Wie es sich für einen ordentlichen Obfuscator gehört wurden alle Strings durch nicht darstellbare ASCII-Zeichen ersetzt, der Code ist durch die Code-Flow-Obfuscation nur sehr schwer nachzuvollziehen. Dazu kommt dass die Assembly nicht durch Mono.Cecil gelesen/geschrieben werden kann, also kommt ein Rebuild der Assembly nicht in Frage.
Doch selbst ist der Mann, nach ein bisschen Denkarbeit war ein Tool entstanden welches die Strings mit nicht-darstellbaren ASCII-Zeichen durch lesbare Zeichen von A-Z ersetzt. Dadurch ist der Source nicht wirklich informationshaltiger geworden, ABER er ist lesbar. Zudem musste die Assembly für diese Operation nicht neu geschrieben werden, was ja leider unmöglich gewesen wäre. Der Source ist im Anhang, erwartet aber nicht zu viel
Um den Artikel abzuschließen: Zwischendrin fand sich auch ein eine Methode mit der Bezeichnung “setPortForwardingR”! Wenn dass kein Beweis ist dass es sich hierbei um den N0ise Bot handelt weiß ich auch nicht weiter
Download: N0ise Socks5 Reverse Bot + Metadata String Renamer (511)
Greez Easy
Es hat mich ja schon wie wahnsinnig gefreut, dass du unter meinem Beitrag deinen Lob kund getan hast, aber bei so viel Ehre beginne ich ja schon beinahe vom Boden der Tatsachen abzuheben =)
Natürlich freut es mich sogar noch mehr, dass du dementsprechend an der Arbeit beim N0ise Bot weiter gemacht hast, welchen ich mir morgen mal mit Vergnügen zur Gemüte führen werde. Die von dir erwähnte Funktion “setPortForwardingR” weckte in mir auch noch wage Erinnerungen, da ich sie ja erst gestern bzw. heute morgen das letzte mal gelesen habe (Beispiel- Remote Portforwarding- Datei aus SharpSSH: http://www.tamirgal.com/home/SourceView.aspx?Item=SharpSSH&File=PortForwardingR.cs - da findet man “alte” Bekannte ;-P)
Kataklysmos