Kategorie-Archiv: Planet Ubuntu

Kategorie für die Syndication mit dem Blog-Aggregator planet.ubuntuusers.

Wetterdatenerfassung mit ELV USB-WDE1-2 und ASH2200

Natürlich macht Wetterdatenerfassung mit munin Spaß! Gerade, wenn es auch etwas zu messen gibt, wie in meiner neuen Heimat in Baden-Württemberg. Hier ist es im Schnitt einige Grad Celsius wärmer als im Ruhrgebiet. Und was gibt es da besseres, als nachzumessen? Wie das mit Munin, ein wenig Python und einem Wetterdatenlogger von ELV funktioniert beschreibt der folgende Artikel.

usb-wde1-2.jpg

Hardware Komponenten

Zum Einsatz kommt dafür der ELV USB-WDE1-2 Datenlogger mit zwei ELV ASH2200 Temperatur- und Luftfeuchtigkeitssensoren. Der Clou am WDE1 ist, dass er mittels USB-Seriellwandler über die serielle Schnittstelle angesprochen werden kann.

Software einrichten

Für das Auslesen der Daten vom USB-WDE1-2 ist ein kleiner Hintergrunddienst erforderlich, der die über die serielle Schnittstelle ausgegebenen Daten in eine Datenbank speichert. Die dort gespeicherten Daten können dann von einem kleinen Kommandozeilenwerkzeug ausgelesen und durch munin-Plugins verarbeitet werden. Einzig erforderlich ist das Paket sqlite3, das wie folgt installiert wird.

apt-get install sqlite3

Darüber hinaus ist das Paket git-core sehr hilfreich, um meine Skripte von Github zu klonen.

git clone https://github.com/husemann/usb-wde1-tools

Installiert wird dann ausgehend vom Repository wie folgt.

# Dienst
cp wdeLog.py /usr/local/sbin/
chmod 750 /usr/local/sbin/wdeLog.py
# Client
cp wdeClient.py /usr/local/bin
chmod 755 /usr/local/bin/wdeClient.py
# init-Skript
cp scripts/wdeLog /etc/init.d/
chmod 755 /etc/init.d/wdeLog
update-rc.d wdeLog enable 2

Danach sollten kurz die fest eingegebenen Pfade in den Skripten geprüft werden und das Verzeichnis /var/lib/usb-wde1/ als Superuser angelegt werden. Folgend kann der Dienst mit dem Befehl /etc/init.d/wdeLog start gestartet werden. Die Ausgabe erfolgt ins syslog und kann dort geprüft werden.

munin Plugins

Natürlich fehlt jetzt noch der visuelle Teil: Die Graphen. Die Plugins (liegen im Verzeichnis munin) werden wie üblich zuerst nach /usr/share/munin/plugins/ kopiert und von dort mittel Symlinks nach /etc/munin/plugins verlinkt. Die Plugins verlinkt ihr am besten zuerst wie folgt, um den ersten Sensor auszulesen.

ln -s /usr/share/munin/plugins/wde_kombisensor_ /etc/munin/plugins/wde_kombisensor_1

Das Ergebnis sieht dann wie folgt aus.

wde1-munin-kombi

Wetterdaten-Webseite für Neckarsulm-Dahenfeld

Nachdem die Skripte liefen, kam ein Kontakt zum Ortsvorsteher des kleinen Dorfes in dem wir jetzt wohnen zustande. Das Ergebnis seht ihr sowohl auf der Dorf-Webseite als auch unter www.wetter-dahenfeld.de oder folgendem Screenshot.

wetter-dahenfeld

TP-Link WR841N(D) mit DD-Wrt bespielen

Günstig ein professionell einsetzbares und frei konfigurierbares WLAN- oder Routing-Gerät anschaffen und für ein paar kleine Euro die Reichweite des heimnischen WLANs erweitern, oder ein WLAN nach Firmenstandard (WPA2 Enterprise) aufbauen, dazu noch etwas Quality of Service und typische Firewall-Funktionen? Das geht mittlerweile auch für unter 20 Euro.

wr841n_ddwrt

Nötig sind nur drei Dinge:

DD-Wrt ist eine kleine eingebettete Linux-Distribution die seit etwa zehn Jahren gepflegt wird und aus der Hardware aktueller eingebetteter Geräte das Maximum an Funktion herausholt und in einer leichtverständlichen Weboberfläche präsentiert.

Der TP-Link WR841N ist in zwei Varianten erhältlich: Einer mit fest angebauten Antennen und einer (WR841ND genannt) mit RP-SMA Anschlüssen. Ergänzt braucht es noch die aktuelle Entwicklungsversion von DD-Wrt, die auch die aktuelle Hardwarerevision 9.2 unterstützt.

Diese ist unter diesem Link zu finden. Im aktuellsten Verzeichnis (zum Zeitpunkt der Verfassung dieses Beitrags ist es 12-22-2014-r25697) wird das passende Unterverzeichnis mit dem Namen tplink_tl-wr841ndv9 aufgerufen. Beide Firmwaredateien werden heruntergeladen. Die Datei factory-to-ddwrt.bin kann folgend über die Weboberfläche auf den Router gespielt werden.

Nach einem Neustart ist DD-Wrt installiert und der Router lauscht unterder IP-Adresse 192.168.1.1 und die DD-Wrt Oberfläche präsentiert sich, wie folgt.

Screenshot - 29.03.2015 - 12:08:36

rtorrent monit- und Init-Skript

Wer rtorrent regelmäßig und dauerhaft einsetzt, wünscht sich eine elegantere Lösung, als das händische Starten und Stoppen einer screen-Sitzung. Ohne viele weitere Ausschweifungen folgt meine Lösung für diesen Wunsch: Ein Init-Skript und eine Konfigurationsdatei für monit. Monit ist eine Prozessüberwachungs-Software.

Im Gegensatz zu den anderen kursierenden Skripten kann mit dem hier vorgestellten sowohl die niceness (CPU-Priorität) als auch die I/O-Klasse eingestellt werden, sodass rtorrent nicht mehr alle Prozessoren und jede Eingabe-/Ausgabe-Operation für sich beanspruchen kann. Dazu absolut zu empfehlen ist die manpage von ionice und nice. Wer noch nicht reingesehen hat, verpasst was.

rtorrent Init-Skript

Das Init-Skript wird im Verzeichnis /etc/init.d/ unter dem Namen rtorrent-beispielUser abgelegt. Mit dem Befehl update-rc.d rtorrent-beispielUser defaults kann es in den Startprozess eingebunden werden.

#!/bin/bash
### BEGIN INIT INFO
# Provides:          rtorrent-beispielUser
# Required-Start:    $syslog $local_fs
# Required-Stop:     $syslog $local_fs
# Should-Start:      $remote_fs
# Should-Stop:       $remote_fs
# X-Start-Before:    xdm kdm gdm ldm sdm
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: rtorrent
# Description:       Load up rtorrent in a screen session
### END INIT INFO

###############
#
# TO INSTALL RUN
# sudo /usr/sbin/update-rc.d rtorrent defaults
#
##################


. /lib/lsb/init-functions

# EDIT THIS VARIABLE TO THE USER THAT YOU WANT RTORRENT TO RUN AS
USER=beispielUser
# Where to store the pidfile
PIDFILE="/var/run/rtorrent-${USER}.pid"
# Path to screen
SCREEN="/usr/bin/screen"
# Name of screen (visible via screen -ls)
SCREEN_NAME="rtorrent-${USER}"
RTORRENT="/usr/local/bin/rtorrent"
# Default (0), lowest=7, highest=0
IOPRIO="7"
# Default (0), lowest=19, highest=-19
NICE="5"

case "$1" in
  start)
    log_daemon_msg "Starting rtorrent"
    start-stop-daemon --start --background --oknodo \
    --pidfile "$PIDFILE" --make-pidfile \
    --chuid $USER --iosched best-effort:$IOPRIO --nicelevel $NICE \
    --exec $SCREEN -- -DmUS $SCREEN_NAME $RTORRENT
    if [ $? -gt 0 ]; then
        log_failure_msg "FAILED."
        log_end_msg 1
        exit 0
    else
        log_end_msg 0

    fi
    ;;
  stop)
    log_daemon_msg "Stopping rtorrent"
    start-stop-daemon --stop --oknodo --pidfile "$PIDFILE"
    if [ $? -gt 0 ]; then
      log_failure_msg "FAILED."
      log_end_msg 1
    else
      log_end_msg 0 
    fi
    ;;
  restart)
    $0 stop
    sleep 1
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}"
esac
exit 0

rtorrent Monit-Konfigurationsdatei

Die Monit-Konfigurationsdatei wird im Verzeichnis /etc/monit/conf.d/ unter dem Namen rtorrent-beispielUser abgelegt. Nach einem Neustart kann der Status von rtorrent abgerufen werden.

check process rtorrent-beispielUser with pidfile /var/run/rtorrent-beispielUser.pid
	start program = "/etc/init.d/rtorrent-beispielUser start"
	stop program = "/etc/init.d/rtorrent-beispielUser stop"
        # Nur bei aktiviertem scgi_port 127.0.0.1:5001 wirksam, sonst auskommentieren
        if failed host 127.0.0.1 port 5001 type tcp then restart
        if 5 restart within 5 cycles then timeout

rtorrent für Debian wheezy kompilieren (UPDATE)

rtorrentlogo

Wenn es etwas aktueller sein muss, lässt sich rtorrent einfach aus den Quellen kompilieren. Das kann zum Beispiel dann der Fall sein, wenn die beliebte Weboberfläche rutorrent eingesetzt werden soll. Diese benötigt eine rtorrent Version mit Unterstützung von Umlauten in der xmlrpc Kommunikation.

Für die Integration von aus den Quellen kompilierter Software steht in den Debian Paketquellen das Programm checkinstall zur Verfügung, dass einfache Debian Pakete automatisch erzeugen kann. Checkinstall wird hier eingesetzt.

Zuerst werden die Abhängigkeiten installiert, die über die offiziellen Paketquellen verfügbar sind.

apt-get install checkinstall build-essential pkg-config libsigc++-2.0-dev libcurl4-openssl-dev libncurses5-dev libxml2-dev

Ergänzend wird eine aktuelle Version von xmlrpc-c benötigt. Diese kann wie folgt oder per Hand von hier heruntergeladen werden.

wget -O xmlrpc.tgz "http://downloads.sourceforge.net/project/xmlrpc-c/Xmlrpc-c%20Super%20Stable/1.25.26/xmlrpc-c-1.25.26.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fxmlrpc-c%2Ffiles%2FXmlrpc-c%2520Super%2520Stable%2F1.25.26%2F&ts=1385046127&use_mirror=heanet"

Dann wird die gewünschte Version von rtorrent und der zugehörigen libtorrent heruntergeladen.

wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.4.tar.gz
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.4.tar.gz

Zuerst wird die heruntergeladene Version von xmlrpc-c entpackt und kompiliert. Nach der Installation mittels checkinstall kann das Paket mit dem Befehl apt-get remove xmlrpc-c wieder entfernt werden.

tar xzf xmlrpc.tgz
cd xmlrpc-c-1.25.26
./configure --with-libwww-ssl --enable-libxml2-backend
make
checkinstall make install
cd ..

Dann wird die Bibliothek libtorrent kompiliert. Aufgrund einiger Randfälle im Installationsteil des Makefiles lässt sich die Bibliothek nicht als Paket installieren.

tar xzf libtorrent-0.13.4.tar.gz
cd libtorrent-0.13.4
CFLAGS="-Os -march=native" ./configure --with-posix-fallocate --enable-ipv6
make && make install
cd ..

Zuletzt wird rtorrent selbst entpackt und kompiliert. Das resultierende Paket lässt sich mit dem Befehl apt-get remove rtorrent wieder deinstallieren.

tar xzf rtorrent-0.9.4.tar.gz
cd rtorrent-0.9.4
CFLAGS="-Os -march=native" ./configure --with-xmlrpc-c --enable-ipv6
make
checkinstall make install

Um direkt nach der Installation rtorrent starten zu können, muss der Bibliotheks-Cache mit dem Befehl ldconfig aktualisiert werden. Eine Konfigurationsdatei die im Stammverzeichnis des Benutzers abgelegt werden muss, der rtorrent ausführen soll, gibt es hier.

Die Datei wird in Voreinstellung am Ort ~/.rtorrent.rc gesucht.

Überarbeitung der Anleitungen zur Voll-Verschlüsselung

tauchfahrt_submarine

In den letzten drei Wochen war es etwas still im Blog. Das liegt zum einen daran, dass meine Diplomarbeit mich in Beschlag nimmt, aber auch daran, dass ich die gesammelten Tauchfahrt mit Linux Anleitungen zur Voll-Verschlüsselung für euch überarbeite und neu strukturiere.

Wer Kommentare, Feedback oder Wünsche hat: Jetzt ist der Zeitpunkt dafür.

Talentwettbewerb – Bitte um Mithilfe!

UPDATE 12.05.2014: Ich habe dank Eurer Hilfe gewonnen.

Hallo,

mein Name ist Falk und heute wende ich mich das erstemal persönlich an meine Blogleser, also Euch. Seit einiger Zeit entwickle ich privat Konzepte, um Server durch Voll-Verschlüsselung zu schützen. Unter anderem für Debian GNU/Linux, Proxmox oder Kali Linux.

Zu diesem Thema durfte ich im letzten Semester eine Studienarbeit mit dem Titel Verteidigung externer Rechnerressourcen verfassen, einen Vortrag halten und habe über die Zeit viele sehr talentierte und engagierte Menschen kennenlernen dürfen. Neidlos gebe ich zu, dass es noch viel zu entdecken gibt.

Im Rahmen eines Talentwettbewerbs steht meine Studienarbeit jetzt zur Abstimmung und ich würde mich sehr freuen, wenn Ihr für mich abstimmt. Damit zeigt Ihr, dass meine privaten Bemühungen von euch geschätzt werden.

Ich veröffentliche regelmäßig Artikel zu Linux und IT-Sicherheit und lehne seit über vier Jahren jede kommerzielle Beeinflussung durch Werbung oder für euch nicht erkennbare Produktsponsorings ab. Bei meinen Artikel gebe ich mir größte Mühe, meine Meinung herauszuhalten und euch Fakten und Anleitungen zu präsentieren.

Falls das nicht als Motivation ausreicht:
Für die Dauer der Abstimmung gibt es unter dem Abstimmungslink ein Bild von mir. Das einzige im Internet.

Hier abstimmen

Grüße,
Falk

OS Command Injection am Beispiel Inter-Tech RPD-150

(Inter-Tech RPD-150 - Quelle: Inter-Tech Bilderpaket)
( RPD-150 )

Im Bereich eingebetteter Systeme ticken die Uhren langsamer, als im Desktop- und Server-Bereich. Hier lassen sich noch leicht klassische Schwachstellen wie Directory Traversal oder OS Command Injection finden. Letztere Variante findet sich auch im WLAN-Router RPD-150 der Firma PC-Professional, der durch Inter-Tech vertrieben wird. Das Gerät wird für circa 11 Euro angeboten und wird mit überragender Sicherheit beworben.

Bildschirmfoto - 17.04.2014 - 00:09:20
RPD-150: Mit überragender Sicherheit.

OS Command Injection Angriffe (nach OWASP) bezwecken es, Befehle die durch den Angreifer festgelegt werden, in eine anfällige Anwendung einzuschleusen. Dabei verhält sich die verwundbare Anwendung wie eine Pseudo-Shell, die es erlaubt, mit den Rechten und in der Umgebung in der sie ausgeführt wird, Befehle auf dem System auszuführen.

Erste Stelle, die oft für Command Injection Angriffe besonders interessant ist, ist die Ausführung von Diagnosebefehlen in der administrativen Oberfläche eines Routers. Hier werden teilweise Eingaben ungefiltert an die entsprechenden Systembefehle wie ping oder traceroute weitergegeben. So auch beim RPD-150. Das folgende Bildschirmfoto zeigt, wie mit Hilfe der PING Funktion und Einbettung von Shellbefehlen ein Telnet-Server gestartet werden kann.

command_injection

Ein kurzer Test bestätigt den Start des Telnet-Servers, wie auf folgendem Bildschirmfoto zu sehen.

Bildschirmfoto - 20.04.2014 - 14:06:47

Ein laufender Telnet-Server ist aber nicht gleichbedeutung mit vollem Superuser-Zugriff auf den Router. Dafür muss ein Kennwort gebrochen werden. Da das Webinterface mit Root-Rechten ausgeführt wird (eine Eingabe von 127.0.0.1; echo $USER bestätigt das), ist die Gewinnung der Datei /etc/passwd kein Problem.

Sie enthält bei eingebetteten Systemen nicht nur die bekannten Informationen zu Benutzernamen und User-IDs, sondern darüber hinaus auch das gehashte Kennwort. Auf Desktop-Systemen wird es sonst in der Datei /etc/shadow/ gespeichert. Durch Ausnutzung der Schwachstelle mit dem Befehl 127.0.0.1; cat /etc/passwd kann der Inhalt der Datei gewonnen werden: root:C75rzlQ3E2Dkc:0:0:root:/:/bin/sh.

Das Kennwort des Superusers kann darauf folgend mit John the Ripper in kurzer Zeit gebrochen werden. Es lautet admin.

Mit dem Kennwort kann jetzt eine Verbindung als Superuser zum vorher gestarteten Telnet-Server hergestellt werden, wie das folgende Bildschirmfoto zeigt.

Bildschirmfoto - 17.04.2014 - 00:10:06

Die Schwachstelle ist natürlich nur geringfügig, da eine Anmeldung im Webinterface erforderlich ist.

Besonderer Dank an Inter-Tech, die sehr schnell reagierten und der Veröffentlichung des Artikels zugestimmt haben. Quelle des Produktfotos: Inter-Tech RPD-150 Bilderpaket.

Studienarbeit „Verteidigung externer Rechnerresourcen“ (mit Linux)

In den letzten Wochen ist es leider etwas still im Blog geworden, besonders zum Thema IT-Sicherheit. Das liegt zum einen daran, dass ich meine Diplomarbeit schreibe. Aber auch daran, dass ich im Wintersemester 2013/14 am Lehrstuhl 4 an der TU-Dortmund eine Studienarbeit im Themenbereich IT-Sicherheit schreiben durfte.

Der Titel lautet „Verteidigung externer Rechnerresourcen – Risiken durch die Aufgabe der physikalischen Kontrolle und Gegenmaßnahmen am Beispiel gemieteter Linux Server„.


Studienarbeit Verteidigung externer Rechnerressourcen (PDF)

Darin beschreibe ich ausführlich die auftretenden Probleme, sobald dem Provider nicht mehr vertraut wird. Im Anschluss wird eine Taktik basierend auf Anti-Forensik und einfacher Militärtaktik entwickelt, die einen voll-verschlüsselten gemieteten Server noch etwas besser schützt, indem der forensische Prozess behindert wird. Mit Implementierung für Debian Linux.

Die Arbeit löst ausdrücklich nicht das Problem, dass bei gemieteten Servern keine Vertrauenswurzel existiert, bietet aber einige Verbesserungen an. Zu diesem Vertrauensproblem gibt es einiges im Chaosradio 199 ab 1:37:00 bis 1:39:30 zu hören, falls Interesse besteht.