seeseekey.net - Invictus Deus Ex Machina

Auf einem meiner Raspberry Pi-Rechner läuft eine in Mono geschriebene Server-Applikation. Damit die Server-Applikation funktionierte benötigte sie natürlich die Mono Runtime. Diese kann unter Raspbian einfach mittels des Kommandos:

apt-get install mono-runtime

installiert werden. Als ich die Serverapplikation nach der Installation von Mono ausführen wollte erhielt ich allerdings folgende Fehlermeldung:

Missing method .ctor in assembly Melinda.dll, type System.Runtime.CompilerServices.ExtensionAttribute
Can't find custom attr constructor image: Melinda.dll mtoken ...

Dieses Problem ließ sich durch die Installation der Bibliothek libmono-system-core4.0-cil beheben:

apt-get install libmono-system-core4.0-cil

Im Anschluss erhielt ich bei einem erneuten Startversuch eine weitere Fehlermeldung:

Grapevine.Exceptions.Server.UnableToStartHostException occurred
An error occured when trying to start the Grapevine.Server.RestServer

In diesem Fall kam die Fehlermeldung vom REST-API Framework Grapevine. Allerdings war der Fehler nicht wirklich in der Bibliothek zu finden. Stück für Stück kamen weitere Fehlermeldungen wie diese:

System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

zustande. Nach einiger Recherche war klar: auch in diesem Fall fehlten weitere Abhängigkeiten aus dem Mono-Framework. In diesem Fall half die Holzhammermethode; die Installation des kompletten Mono-Frameworks. Dazu wurde das Paket mono-complete mittels:

apt-get install mono-complete

installiert. Dieses nimmt ein paar mehr Megabyte als das Runtime-Paket in Anspruch, allerdings sind damit alle möglichen Abhängigkeiten installiert. Somit kann man sich auf die eigentliche Entwicklung und Ausführung der eigenen Applikationen konzentrieren, anstatt einer kuriosen Fehlermeldung nach der anderen hinter her zu jagen.

Seit November 2016 wird die Standarddistribution für den Raspberry Pi namens Raspbian, eine auf Debian basierende Distribution, mit deaktiviertem SSH-Server ausgeliefert. Was aus Sicherheitsgründen lobenswert ist hat natürlich für die schnelle Inbetriebnahme eines Raspberry Pi einige Nachteile.

Ein Raspberry Pi 3

Allerdings existieren zwei relativ einfache Wege den SSH-Dienst wieder zu aktivieren. Die erste Möglichkeit ist, nachdem das Image auf die für den Raspberry Pi verwendete SD- bzw. microSD-Karte gebracht wurde, auf der boot-Partion der Karte eine Datei mit dem Namen ssh anzulegen. Ist diese Datei vorhanden, so wird der SSH-Serverdienst beim Start des Raspberry Pi aktiviert.

Die entsprechende Option in raspi-config

Läuft der Raspberry Pi bereits und man hat Zugriff auf diesen kann der SSH-Dienst mittels des Konfigurationstools raspi-config aktiviert werden. Nachdem dieses gestartet wurde, wird dort der Punkt Interfacing Options ausgewählt. Dort findet sich der Unterpunkt P2 SSH. Wählt man diesen Unterpunkt an, wird nach der Bestätigung der Sicherheitsabfrage der SSH-Dienst aktiviert.

Nach der Sicherheitsabfrage wird der SSH-Dienst aktiviert

Nun kann sich (wenn das Raspbian noch in der Standardkonfiguration läuft) mittels:

ssh pi@raspberry.local

und dem Passwort raspberry eingeloggt werden. Da man dieses Passwort nach der Ersteinrichtung ändern sollte, erhält man beim Login über ssh folgenden Hinweis:

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

Dieses Hinweis sollte befolgt werden und das Passwort mit dem Kommando:

passwd

geändert werden. Anschließend kann der Raspberry Pi ohne Probleme mit dem SSH-Dienst genutzt werden. In der offiziellen Raspberry Pi Dokumentation wird weiterführend auf das Thema eingegangen. Dort wird neben der eigentlichen Einrichtung des SSH-Dienstes auch die Nutzung verschiedener Clients in den unterschiedlichen Betriebssystemen besprochen.

Wenn man unter Linux eingehende und abgehende Pakete kontrollieren, umleiten oder blockieren möchte, so kann man für diese Aufgabe iptables nutzen. Das Problem an iptables ist das es relativ kompliziert in der Anwendung ist.

Damit man hier nicht im Regen steht, gibt es (neben vieler anderer Firewall-Lösungen für Linux) die uncomplicated firewall kurz ufw. Technisch gesehen handelt es sich bei ufw um ein Frontend für iptables. Seit der Version 8.04 (Hardy Hedon) ist ufw ein Bestandteil der Ubuntu-Distribution. Neben Ubuntu ist ufw unter anderem auch für Debian verfügbar. Installiert werden kann ufw mittels des Befehls:

apt-get install ufw

Standardmäßig ist ufw deaktiviert, so das die Installation im ersten Schritt keinerlei Auswirkungen hat. Den aktuellen Status sowie die definierten Regeln können dabei mittels:

ufw status

eingesehen werden. Das könnte dann z.B. so aussehen:

Status: Aktiv

Zu                   Aktion      Von
--                   ------      ---
8080/tcp             DENY        Anywhere                                
22/tcp               ALLOW       Anywhere                            
22/tcp (v6)          ALLOW       Anywhere (v6)

Ist der Status auf inaktiv gesetzt, so muss ufw erst mit dem Befehl:

ufw enable

aktiviert werden. Hierbei muss man beachten das eine unbedachte Aktivierung von ufw dazu führen kann das man sich aus dem Rechner aussperrt. Dies liegt daran das am Anfang keinerlei Regeln definiert sind – so werden Pakete an Port 22 ignoriert; dies führt dazu das keine Verbindung per SSH möglich ist. Um dem vorzubeugen sollte eine Regel für SSH definiert werden, bevor ufw aktiviert wird:

ufw allow 22/tcp

Bei dieser Schreibweise handelt es sich um die vereinfachte Form zum Anlegen einer Regel. Neben allow, sind dabei auch die Werte deny und reject möglich. Während bei allow die Pakete passieren können, werden sie bei deny blockiert – im Gegensatz dazu wird bei reject der Absender darüber informiert das die Pakete abgelehnt wurden. Möchte man komplexere Regeln definieren nutzt man ufw nach folgendem Schema:

ufw allow proto tcp from any to 127.0.0.1 port 1234

Damit werden alle Verbindungen per TCP von beliebigen IP-Adressen an die spezifizierte IP-Adresse weitergeleitet. Als Port wird als Eingangs- und Zielport Port 1234 genutzt. Die Regeln welche ufw verwaltet werden in drei Dateien gespeichert:

/etc/ufw/before.rules
/var/lib/ufw/user.rules
/etc/ufw/after.rules

Abgearbeitet werden die Regeln in der Reihenfolge wie oben angegeben – somit könnte eine Regel in der user.rules-Datei definiert sein, welche anschließend von einer anderen Regel in der after.rules-Datei überschrieben wird. Die selbst definierten Regeln sind dabei in der user.rules zu finden. Neben dem Anlegen ist es natürlich auch möglich Regeln wieder zu löschen. Für obige SSH-Regel würde das dabei so aussehen:

ufw delete allow 22/tcp

Daneben ist es möglich ufw auf die Standardeinstellungen zu setzen. Dazu dient der Befehl:

ufw reset

Alle Regeln werden dabei auf die Standardeinstellungen zurückgesetzt. Für die bestehenden Regeln wird ein Backup im Verzeichnis /etc/ufw/ angelegt. Möchte man ufw wieder deaktivieren, so nutzt man den Befehl:

ufw disable

Beim beschriebenen reset-Befehl wird ufw ebenfalls deaktiviert. Damit sind die grundlegenden Konfigurationsschritte erklärt – für die weitergehende Konfiguration empfiehlt sich der entsprechende Artikel bei ubuntuusers.

Für Penetrationstest im IT-Umfeld gab es bis vor einiger Zeit die Distribution „Backtrack“. Mittlerweile steht der Nachfolger dieser zur Verfügung. Er trägt dabei den Namen „Kali Linux“. Die Basis für Kali Linux bildet dabei ein Debian, der Standard Desktop ist GNOME.

Kali Linux mit GNOME

Kali Linux mit GNOME

In der Distribution sind dabei viele Werkzeuge für unterschiedlichste Zwecke, wie forensische Auswertungen, Reverse Engineering, Sniffing, Spoofing und Stress Test Werkzeuge enthalten. Neben der Möglichkeit das ganze als Live CD zu benutzen, gibt es auch einen grafischen Installer. Bezogen werden kann Kali Linux unter http://www.kali.org. Es existieren dabei x86-Versionen für 32- und 64 Bit. Daneben wird auch die ARM Architektur unterstützt.

Weitere Informationen gibt es unter:
https://de.wikipedia.org/wiki/Kali_Linux
http://www.pro-linux.de/news/1/19561/kali-linux-10-erscheint-als-nachfolger-von-backtrack.html

Bei der Installation von „netatalk“ über den Paketmanager von Debian kam die Frage auf welche Version genau installiert wurde. Leider ist das aus den Konfigurationsdateien von „netatalk“ nicht ersichtlich, so das der Paketmanager zur Hilfe eilen musste. Mittels:

apt-cache show netatalk

bekommt man dabei heraus, welches Paket sich in den Paketquellen befindet und kann somit auf die installierte Version schließen. Die Ausgabe sollte dabei in etwa so aussehen:

Package: netatalk
Version: 2.2.2-1
Architecture: armhf
Maintainer: Jonas Smedegaard 
Installed-Size: 3329
Depends: libacl1 (>= 2.2.51-5), libattr1 (>= 1:2.4.46-5), libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libc6 (>= 2.13-28), libcomerr2 (>= 1.01), libcrack2 (>= 2.8.12), libcups2 (>= 1.4.0), libdb5.1, libgcc1 (>= 1:4.4.0), libgcrypt11 (>= 1.4.5), libgnutls26 (>= 2.12.17-0), libgssapi-krb5-2 (>= 1.10+dfsg~), libk5crypto3 (>= 1.6.dfsg.2), libkrb5-3 (>= 1.6.dfsg.2), libldap-2.4-2 (>= 2.4.7), libpam0g (>= 0.99.7.1), libwrap0 (>= 7.6-4~), zlib1g (>= 1:1.1.4), perl, netbase, libpam-modules
Recommends: lsof, rc, db-util, procps, cracklib-runtime, libpam-cracklib, avahi-daemon
Suggests: texlive-base-bin, groff, quota, db4.2-util
Homepage: http://netatalk.sourceforge.net/
Priority: extra
Section: net
Filename: pool/main/n/netatalk/netatalk_2.2.2-1_armhf.deb
Size: 1612042
SHA256: 1ff45497e7262353c8021b16d1a2e05942cb54b92d3ffd4525af1da01b2b6b2a
SHA1: 5282e61b063f3bdc7d16ee184cf91c8acb6b764d
MD5sum: 07574355726c9f1a65629dcdb89f086d
Description: AppleTalk user binaries
 Netatalk is an implementation of the AppleTalk Protocol Suite for
 BSD-derived systems.  The current release contains support for
 EtherTalk Phase I and II, DDP, RTMP, NBP, ZIP, AEP, ATP, PAP, ASP, and
 AFP.
 .
 This package contains all daemon and utility programs as well as Netatalk's
 static libraries.

Gleich in der zweiten Zeile ist der entsprechende Eintrag für die Version zu finden, in diesem Fall ist es die Version 2.2.2-1.

Ein Minicomputer mit der Grundfläche einer Kreditkarte auf welchem Linux läuft und welcher über HDMI, USB und einen LAN Anschluss verfügt für 25 €? Gibt es und nennt sich Raspberry Pi und soll bald verfügbar sein.

In dem Rechner werkelt ein ARM mit 700 Mhz, sowie eine Broadcom GPU welche auch in der Lage sein soll H264 Material bis 1080p ruckelfrei zu dekodieren. Die Videoausgabe erfolgt über HDMI, die Tonausgabe über einen Klinkenstecker (oder wieder über HDMI). Den Raspberry Pi gibt es dabei in zwei Varianten, die teurere (25 €) verfügt noch üben einen Ethernetanschluss mit maximal 100 MBit/s.

An Linux Distribution laufen auf dem Rechner Debian, Fedora und ArchLinux. Ubuntu entgegen anders lautender Gerüchte allerdings nicht, was wohl der fehlenden ARM Unterstützung geschuldet sein soll. Alles in allem ist der Raspberry Pi ein sehr interessantes Gerät mit einer Fülle von Anwendungsmöglichkeiten (z.B. als Streaming Client). Bestellt werden kann er (sobald verfügbar) unter http://www.raspberrypi.org.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Raspberry_Pi_Foundation

Ein NAS ist schön und gut, aber manchmal darf es etwas mehr sein z.B. Verschlüsselung. Natürlich kann man sich nun ein Ubuntu- oder Debiansystem aufsetzen und dort alles einrichten. Wer eine einfachere Lösung möchte der sollte sich einmal CryptoNAS anschauen. Dabei handelt es sich um ein einfach zu bedienendes NAS welches über den Webbrowser bedient werden kann und die Daten verschlüsselt. Zu finden ist das ganze Projekt unter http://cryptonas.org/.

Wenn man das Bedürfnis hat ein Paket für Debian bzw. Ubuntu zu erstellen (beide benutzen das deb Format, da Ubuntu von Debian abstammt), so ist man gut beraten sich erst einmal in die Materie einzulesen. Eine gute Dokumentation dazu findet sich unter folgenden Seiten:

http://debiananwenderhandbuch.de/debianrepositories.html
http://wiki.ubuntuusers.de/Paketbau
http://wiki.ubuntuusers.de/Grundlagen_der_Paketerstellung
http://wiki.ubuntuusers.de/Grundlagen_der_Paketerstellung/Menüeintrag
http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2008/02/Wie-am-Schnuerchen