Browsing posts in: Security

Multicraft – Lizenz und Python Internals

Multicraft ist ein All-In-One Minecraft Hosting und Server Verwaltung. Dabei können mehrere Server über einen sogenannten Deamon gesteuert werden, mehrere Deamons werden in einem großen Control-Panel mit Webinterface zusammengefasst. In der Free-Version kann man exakt einen Server auf einem Deamon hosten und ist auf 10 Spieler für diesen einen Server beschränkt. Es gibt weitere, skalierbare Lizenzen die mehrere Server, mehrere Deamons und unbegrenzte Spielerzahlen erlauben. Das höchste aller Gefühle ist dabei die „Dynamic“ Lizenz die unbeschränkt ist und mit steigender Anzahl der Server/Deamons immer teurer wird.

Multicraft wird für Windows und Linux angeboten. Die meisten Server laufen unter Linux, für mich persönlich ist aber das Reverse Engineering auf Windows leichter. Die auf Windows gewonnenen Erkenntnisse lassen sich zum Glück einfach auf Linux übertragen. Warum? Das hat mit dem etwas wilden Aufbau von Multicraft zu tun:

Schaut man sich diese vielen in Multicraft verwendeten Technologien an wird klar dass hier viel zusammengemixed wurde. Python, PHP und NodeJS sind komplett unterschiedliche Programmiersprachen. Vorallem fällt Python ins Auge was (nach diesem Artikelname wenig überraschend) die Haupttechnologie für Multicraft ist. In dem bin-Ordner findet sich neben einer python27.dll einige vorkompilierte *.pyd Module. Die eigentliche Multicraft Binary ist aber eine normale (und riesige) Excutable. Die Entwickler haben das ganze Python-Framework direkt mitgeschickt, damit der User es nicht noch installieren muss. Natürlich auf die Kosten von einer riesigen Installation. Vielleicht kann uns IDA mehr dazu verraten:

Diese Grafik stellt IDA zur Verfügung um den Aufbau der Binary zu beschreiben. Die blauen und orangefarbenen Regionen sind Programmcode, Grau sind Daten wie Strings und statische Adressbereiche. Schwarz wiederrum findet man in kaum einer Anwendung, es handelt sich dabei um nirgends referenzierte Adressbereiche und Daten die für IDA keinen Sinn ergeben. Solche finden sich oftmals bei gecrypteter Malware die wiederrum diesen Code erst entschlüsseln.

Continue Reading

5+

SQLiDumper 8.2 – Proxys!

Elektrotechnik wird zunächst einmal Beiseite gelegt, ich habe die Lust zum Reversen wiedergefunden. Ein Bekannter spielte mir ein Sample des SQLiDumpers 8.2 zu. Dieses universelle SQL Injection Tool nimmt faulen Leuten (und damit leider auch Leuten die keine Ahnung haben) die ganze Arbeit ab. Über das Suchen der SQL Injections per Google Dorks kann das Tool die gefunden Lücken direkt exploiten und auch Datensätze dumpen. Deswegen sei direkt gesagt: Das Tool wird hier definitiv nicht veröffentlicht, wer nur darauf aus ist kann sofort aufhören weiterzulesen.

Ich hatte bereits mit einigen alten Versionen dieses Tools zu tun, die immer unzureichend geschützt waren. Mal war es ein nativer Packer, der direkt die schön lesbare .NET Assembly lieferte, mal war der Code zum Generieren von gültigen Keys direkt mitgeliefert. Umso erstaunter war ich also, als ich ein Proxysystem entdeckte. Es ist lange nicht so komplex wie das Proxysystem von Confuser, was bereits behandelt wurde, aber dennoch komplex genug um spannende Erkentnisse mitzunehmen. Öffnen wir doch einfach die Assembly und schauen rein!

Ein paar Sachen fallen dem geübten Reverser direkt ins Auge: Wir haben eine Ressourcen Datei (Knappe 10 MB! ) und einen statischen <Module>.cctor-Konstruktor. In diesem Konstruktor stecken die Funktionen, die statische Variablen initialisert. Es wird daher von Obfuscatoren gerne genutzt um Anti-Debug funktionen zu starten oder Ressourcen zu entschlüsseln, denn diese Methode wird vor allen anderen aufgerufen. Des weiteren haben wir keine Namespaces und nur komisch benannte Klassen. Wer im .NET Bereich unterwegs ist erkennt sofort die Namen: Es sind Namen des .NET Frameworks die es so gibt! Allerdings enthalten sie nicht den Inhalt der originalen Framework-Klassen. Auch sieht man schon an dem Icon, dass es sich zum Teil um unterschiedliche Typen handelt. Wir behandeln erstmal den einfachsten Typ: Ein Delegate Proxy.

Continue Reading

0

EarthCore – Injecting, Sicherheit und Spieldaten

Earthcore: Shattered Elements ist ein Online Kartenspiel für Android und iOS, programmiert mit dem Unity Framework. Von den vier Handkarten spielt man drei auf das Spielfeld aus, wobei jede Karte eines von 3 Elementen hat: Feuer, Wasser oder Erde. Am Ende der Runde wird das eigene Kartenelement mit dem Element der gegnerischen, gegenüberliegenden Karte verglichen. Nun schlägt Wasser Feuer, Feuer Erde und Erde Wasser. Der Verlierer auf dem jeweiligen Feld bekommt Lebenspunkte abgezogen, die sich aus dem ausgespielten Kartenwert berechnen. Sollten sich gleiche Elemente gegenüberliegen, wird der Angriffswert jeweils für die nächste Runde gespeichert. Im Grunde also ein „Schere-Stein-Papier“ auf drei Feldern gleichzeitig. Spannend wird das Spiel, wenn man die Skills der Karten dazunimmt. Man kann Karten auf Feldern tauschen, die Elemente von Karten ändern oder auch Direktschaden am Gegener verursachen. Mehr möchte ich an dieser Stelle garnicht über das Spiel erzählen, hier geht es um die Internals, das Injecten und natürlich das Daten auslesen.

earthcoreNicht ohne Grund habe ich direkt im ersten Satz erwähnt, dass das Spiel mit Unity entwickelt wurde. Für den Programmierer ist das praktisch, da er Plattformunabhängig und sogar mit .NET Programmieren kann. Für uns hat das den Vorteil, dass wir den kompletten Sourcecode unobfuscated vor uns liegen haben! Dabei befinden sich alle interessanten Klassen in der Assembly-CSharp.dll, die wiederrum in den Ressourcen der APK liegt. Zwar hat man alle Daten unverschlüsselt vor sich liegen, nur ohne die Möglichkeit des Auslesens oder Veränderns bringen uns die schönsten Klassenstrukturen nichts. Wir müssen also eigenen Code in die Android Applikation bekommen. Während schon bei dem Hearthstone-Artikel das CLRHosting mit Mono fehlschlägt, haben hier hier nichtmal die Möglichkeit den Mono Kontext zu kapern. Nach einigem hin und herüberlegen fiel mir eine passable Lösung ein: Benötigt ist ein Loader, der wiederrum weitere DLLs zur Laufzeit nachladen kann. Dieser Loader wird mit in die APK gepackt und muss nun irgendwo im Spiel aufgerufen werden um den eigenen Thread zu starten. Was ist da passender, als die Init-Funktion des Hauptmenüs? In Unity erbt jede Klasse die Renderlogik enthält von „MonoBehaviour“. Davon wird die Start()-Methode aufgerufen sobald die Klasse initialisiert wird, und genau hier packen wir einen call auf unsere statische Loader-Klasse rein. Die will ich nun etwas genauer Besprechen:

Continue Reading

0

Quizduell – Es geht noch immer?!

quizduellZweieinhalb Jahre ist es her, dass auf diesem Blog ein Beitrag über Quizduell verfasst wurde. Damals, wie auch heute, ging es um das farbliche hervorheben der richtigen Antwort bevor man auf eine Antwort drückte. Der Beitrag ist auch der mit den meisten Kommentaren auf dem Blog! Es wurde über die SSL Zertifikate, das Signieren der App und sogar über fertige Bot-Implementationen und APIs diskutiert.  Mehr über Zufall fand die aktuelle Quizduell-App wieder ihren Weg auf mein Handy. Während dem Spielen packte mich wieder die Lust, der App unter die Haube zu schauen. Nach ein paar Probleme beim Unpacken mit dem apktool stand ich wieder vor vielen Klassen. Das erste was auffiel: die Obfuscation war geändert worden, es waren garkeine Klassennamen mehr auszumachen. Und auch der Fragen-Klasse fehlte die Methode zum setzen der richtigen Antwort-Attribute, die wiederrum direkt in der UI angezeigt werden. Stattdessen gab es zwei Funktionen „setWrong()“ und „setCorrect()“, die im Prinzip das gleiche machten. Nur wie und wo aufrufen? Die Lösung: Über einen Smali-Patch wird nach erstellen der Darstellung per Iterator alle Fragen durchlaufen und die intere Flag vergleichen. Je nachdem wie der Wert dieses Enums war, wurden dann die setWrong/setCorrect Methoden aufgerufen, die praktischerweise direkt die Farbe in der UI ändert. Zwar ein bisschen anderer Ansatz, aber dennoch das selbe Prinzip. Und auch nur 10 Zeilen zusammenkopierter Code.

Weitere technische Infos gibt es in diesem Beitrag auch garnicht. Er er ist mehr Nachruf an den alten Beitrag gemeint. Und vielleicht als Erinnerung an FEO Media dass man die richtige Antwort der Frage besser auf einem Server hinterlegen sollte 😉

0

Anonymität – Traceless VPN, PGP und Grundregeln

Das Thema Anonymität im Netz wird immer aktueller. Inzwischen weiß man nicht mehr, welcher Internetverkehr aufgezeichnet wird oder wer hinter dem praktischen Hotspot „Free WiFi“ im Lieblingscafe sitzt. In diesem Post möchte ich daher auf mein Setup eingehen, mit dem ich mich im Netz sicher bewegen kann. Natürlich gibt es immer noch mehr Maßnahmen die man ergreifen kann, aber die wichtigsten Gebiete werden abgedeckt.

Ich gehe hierbei von zwei Szenarien aus, gegen die wir uns absichern wollen: Der Datenverkehr des WLANs wird aufgezeichnet und manipuliert und eine im Internet aufgerufene Website sollte nicht wissen woher und von wem die Anfrage kommt. Im ersten Szenario hilft ein VPN und Verschlüsselung von Daten und Emails, im zweiten Fall tut es ebenfalls ein VPN in Kombination mit dem Wissen über Tracking-Cookies und DNS Leaks. Aber alles ganz langsam, die komischen Begriffe werden alle im weiteren Verlauf erklärt.

Fangen wir mit dem VPN an, da es meiner Ansicht nach den größten Teil der Anonymität ausmacht. VPN steht für „Virtual Private Network“ und wird Hauptsächlich dazu verwendet, über das Internet sicher in ein interes Firmen oder Uni-Netzwerk zuzugreifen. Quasi eine gesicherte Tür über das Internet in ein lokales Netzwerk. Dabei gibt es verschiedene VPN Protokolle, auf die ich garnicht weiter eingehen möchte. WicTL_Networkhtig ist nur, dass alle (PPTP mal rausgelassen) eine sichere Verschlüsselung für die Kommunikation über den VPN bieten. Und genau das kann man auch ausnutzen, indem man den VPN nicht in ein internes Netzwerk leitet, sondern vielmehr alle Daten über diesen VPN in das Internet schickt. Verschlüsselung und Verschleierung der IP Adresse sind dadurch möglich. Ich wähle als Beispiel den Traceless VPN Anbieter. Warum ich für diesen unbekannten VPN Provider Werbung mache? Ich hab die beiden Betreiber auf einer Konfernz selbst kennen lernen dürfen und konnte mir so persönlich ein Bild von ihrem Service machen. Die Philosophie dahinter, die Freiheit im Internet zurück zu erlangen, gefällt mir und der Umfang des Angebots kann sich wirklich mit andren etablierten VPN Providern messen. Durch die Vielfalt der 7 angebotenen VPN Protokolle kann man den VPN auf so ziemlich jedem internetfähigen Gerät nutzen, sogar Windows selbst bringt von Haus aus eine solche Möglichkeit mit. Zum Einrichten empfehle ich euch, die OpenVPN Konfigurationsdateien zu verwenden, da hier bereits alle nötigen Zertifikate und Signaturen drin sind. Continue Reading

1+

Malware Analysis – SteamStealer, SharpBot RAT und Chrome Stealer

Malware in the Wild! Eines Abends wurde auf einem Twitch Channel ein Link im Chat gepostet. „https://bitly.com/Screenshot093 😀 😛 „. (ACHTUNG MALWARE!) . Dahinter steckt ein Dropbox-Direktdownload und mit einer Screenshot093.scr Datei. Eine SCR Datei, schon lange nicht mehr gesehn 🙂 Eigentlich sind das sog. „Screensaver“-Installer, die allerdings einen normalen PE Header haben und damit einfach als exe umbenannt werden können.

Dahinter steckt ein .NET File, obfuscated mit der neusten .NET Reactor Version. Damit kann de4dot leider noch nicht umgehen, die AES verschlüsselten Ressourcendateien haben eine ungültige Größe. Doch ich vermutete dass die Malware nur ein Loader für weitere Schadsoftware war. Wir nutzen also den ultimativen Ansatz gegen gepackte .NET Files: Dumping. Jeder .NET Assembly wird, wenn nicht speziell dagegen vorgegangen wird, von der .NET Runtime im Speicher gehalten und kann von dort aus wieder extrahiert werden. Wenn der Packer nun die Assembly entschlüsselt und reinläd, können wir uns also einfach das entschlüsselte Image auf die Festplatte schreiben. Der Dump enthält neben der eigentlichen obfuscateten Assembly eine zusätzliche, gedroppte Assembly mit dem eindeutigen Namen „SteamStealer 5.0“. Diese Assembly enthält alles was wir gesucht haben: Ein Steam-Stealer und zwei Loader. Unobfuscated! o/

Dumping

SteamStealer:
Dieses offensichtlich selbstgeschriebene Tool kopiert die beiden „ssfn*“ Files sowie die loginusers.vdf, config.vdf und SteamAppData.vdf in ein Zip-Archiv. Diese sind nötig um den SteamGuard zu umgehen und Items verkaufen zu können. Dieses Archiv wird an folgende URL hochgeladen: http://prtscnhost.com/gate_new.php . Wenn das File keinen PK-Header hat, so werden wir mit der Meldung „Не могу открыть архив“ belohnt. Auf Deutsch heißt das „Kann das Archiv nicht öffnen“, daher können wir annehmen dass das Archiv direkt verarbeitet, ausgelesen und in eine Datenbank eingetragen wird.

Continue Reading

0

Cryptoanalyse – Known Plaintext

Es folgt der versprochene Beitrag zur Crypto-Analyse eines Usernet Account-Checkers. Dieser erlaubt es, den Account-Status per BB-Code in andere Seiten grafisch einzubinden. Klingt eigentlich nach einer netten Sache… Wenn dabei nur nicht die Account-Daten übergeben werden! Denn das PHP-Skript, welches das Bild erzeugt nimmt Usenet Username und Passwort als GET-Parameter entgegen. Um zu verhindern, dass die Accountdaten ausgelesen werden, wird der Accountname verschlüsselt.

usenetcheck

Ein solcher Include-Link sieht folgendermaßen aus:

usenext-check/image.php?a=vLjWqt+jvNGWm9S54bU==&p=dGVzdA==

Mit  dem scharfen Kryptoanalyse-Blick stellt man fest, dass a (der Accountname) und p (das Passwort) Base64 encodiert sind. Während das Passwort einfach ASCII-Encoded ist, bekommt man beim Decoden von Parameter a zunächst Probleme. Denn es hängt ein Gleichheitszeichen zu viel hinten dran! Wenn man dieses überflüssige Zeichen entfernt lassen sich die Daten zwar encodieren, aber es handelt sich nicht um einen ASCII-String. Anscheinend ist der Accountname verschlüsselt.

Nun haben wir den großen Vorteil zu einem Accountnamen den Chiptertext generieren können. Also haben wir eine Known-Plaintext-Attack und kommen mit etwas Glück auf den Key. Füttern wir den Account-Checker mit ein paar Werten und schauen uns das Resultat an. Vielleicht stellen wir ja Gesetzmäsigkeiten fest…

Continue Reading

0

CSCG geht in die nächste Runde

Die Cyber Security Challenge Germany Qualifikation hat erneut ihre Pforten geöffnet. In den kommenden drei Monaten kann man  in den 12 Aufgaben rund um Web-Security, Exploiting, Reverse Engineering, Cryptografie, Stegografie und Forensik sein können unter Beweis stellen. Warum ich dafür Werbung mache? Es ist ein cooles Event und die Aufgaben sind anspruchsvoll genug um Vorlesungen mit rumrätseln zu füllen. Man beschäftigt sich mit Themen, die einem noch nicht so geläufig sind und trifft coole Leute die Ahnung von Security haben.

Vorraussetzungen sind einzig, dass man zwischen 18 und 31 Jahre ist, noch keinen Master-Abschluss hat und aus Deutschland kommt. Für Östereich und Schweiz laufen übrigens ähnliche Qualifikationen, die dann im EuroCTF gipfeln.

Schaut vorbei und vielleicht sieht man sich in Berlin 😉

 

P.S. Es werden demnächst wieder andere Beiträge kommen. Freut euch schonmal auf Deobfuscation in C# und ein bisschen Crypto-Analyse eines Online-Account-Checkers.

0

DroidJack – Guter Ansatz, schlechte Implementierung

Heute geht es mal wieder um Malware, genauer gesagt um das Android Remote-Administration-Tool DroidJack. Für dieses überteuerte Tool wird es zwar keinen Leak geben, aber dafür ein paar Infos über den Crackschutz. Getreu nach dem Motto: „Guter Ansatz, schlechte Implementierung“.

DroidJack wirft dem Benutzer beim Öffnen des Programms einen Login-Bildschrim entgegen. Durch sniffen wird schnell klar, dass die Logindaten mitsamt Hardware-ID an die Access/DJ4.php des Servers geschickt wird. Ein Punkt gibts bereits Abzug, es wird kein HTTPS verwendet 😉

DJ

Java-Programme lassen sich, ähnlich wie .NET, einfach analysieren. Zumindest solange der Java-Zwischencode nicht verunstaltet wurde, denn in dem Fall versagen die gängigen Decompiler. Die meisten dieser Codeverunstalter-Tools (Obfuscatoren) ändern die Typenbezeichner, Klassennamen, Methoden und alles sonst, was Informationen enthalten könnte. Der hier verwendete Obfuscator schaffte es aber zugleich, Fehler beim Decompilen zu erzeugen. Somit musste ich mich mit dem Java-VM-Bytecode arbeiten, der ähnlich wie MSIL aufgebau ist. Da mir das zu blöd war, schaute ich mir erstmal die DJ4.php Datei an.

Continue Reading

0

Sicherheit in Onlinespielen – Wichtige Grundregeln

Egal ob Browsergame oder Multiplayer PvP, Onlinespiele sind in der heutigen Zeit sehr gefragt. Es macht einfach mehr Spass, gemeinsam mit Freunden zu Spielen, statt sich mit einer pseudoklugen KI an der Seite herrum zu schlagen. Der Trend geht klar Richtung Onlinespiele, was wiederrum auch Gamehacker anlockt. In dem heutigen Artikel werden Grundlagen besprochen, auf die man beim Programmieren achten sollte. Anschaulich wird das ganze durch Beispiele erklärt.

Das Spektrum von Hacks, über Bots und Exploits ist zu groß, als dass man es alles in einem Artikel abdecken könnte. Daher werden primär nur Echtzeit-Onlinespiele betrachtet. Diese Techniken lassen sich aber beliebig auf andere Multiplayer-Spiele übertragen. Und noch kurz zu den verwendeten Begriffen in diesem Artikel:

  • Server: Dabei handelt es sich um einen zentralen (!) Server, der das eigentliche Spiel hostet. Er nimmt Daten von anderen Spielern entgegen und verteilt die „Änderungen“ im Spiel an alle verbundenen Clients. In machen Spielen wird der Server auch als „Host“ bezeichnet, was im Prinzip nichts anderes bedeutet.
  • Client: Ein Spieler, der mit dem Server verbunden ist und aktiv Stati (Schießen, Laufen) an den Server sendet

Der wohl bedeutenste Grundsatz dürfte sein: Traue nie den vom Client empfangenden Daten. Der Client schickt, wie schon oben erwähnt, in regelmäsigen Abständen Daten wie seine eigene Position und seine Attribute an den Server. Wenn ein Gamehacker die Welt-Position des Clients verändert, wird diese auch zum Server gesendet. Wenn der Server diese Daten nun ungeprüft übernimmt, haben wir einen sog. Teleport-Hack. Solche Teleport-Hacks befanden sich u.a. in großen Onlinespielen wie Metin 2.

Während sich der entstehende Vorteil durch Teleportierungen noch in Grenzen hält, hört der Spass bei sog. Masskill-Hacks auf. Dabei sendet der Client die Nachricht „Ich habe XX Schaden am Gegner Y gemacht“. Der Server übernimmt dieses ungeprüft und tötet den Gegner Y. In Battlefield 3 ist dieser Hack inzwischen gefixxt, die Kollisionserkennung ist allerdings immernoch Clientseitig. So sind „Instant Kills“ möglich, indem man einfach den Schaden, den eine Waffe verursacht, ins unendliche erhöht. Daher die Regel Nummer 2: Auf Plausibilität prüfen! Im Falle einer clientbasierten Kollisionserkennung kann man durch Wände schießen. Wenn der Server nun einmalig prüft, ob Spieler X den Spieler Y überhaupt treffen kann, wären solche Hacks schon verhindert. Warum das nicht gemacht wird? Weil solche Checks relativ viel Rechenleistung brauchen und einen Server mit 64 Spielern überfordern würde.

Continue Reading

0

Seiten:12345