OpenVZ Kali Linux Template für Proxmox VE

kali-tm

Wie bereits aus dem letzten Beitrag zu Proxmox VE zu erahnen, entsteht hier gerade ein einfaches Penetrationstest Labor mit Proxmox. Dafür wird eine virtuelle Maschine mit Kali Linux benötigt. Zusätzlich muss ein einfacher grafischer Zugang mittels Linux Werkzeugen (vergleichbar zu Windows Remote Desktop) zur Verfügung stehen. Eine solche virtuelle Maschine gibt es bislang noch nicht für Proxmox und die Herstellung erfordert einige Tricks. Das Ergebnis präsentiert sich wie folgt.

Bildschirmfoto - 21.12.2013 - 20:30:48Bildschirmfoto - 21.12.2013 - 20:29:51

Proxmox bietet sowohl Vollvirtualisierung mittels KVM, wie auch Paravirtualisierung mittels OpenVZ. Das Template wird für OpenVZ erstellt, um ohne große Verluste mehrere Instanzen gleichzeitig ausführen zu können. Der entfernte grafische Zugang wird über X2go eingerichtet. Es stehen bereits Paketquellen für Debian „wheezy“ zur Verfügung, auf dem Kali Linux 1.0 aufbaut. X2go wird dafür sorgen, dass grafische Sitzungen im Hintergrund weiterlaufen, wenn der entfernte Zugang beendet wird (ähnlich zu screen).

Für Die Herstellung des Templates werden Superuser-Rechte benötigt, die zum Beispiel mittels sudo -s erlangt werden können.

1.1 Debootstrap herunterladen und anpassen

mkdir -p ~/Development/proxmox/kali-linux
cd ~/Development/proxmox/
wget http://archive.kali.org/kali/pool/main/d/debootstrap/debootstrap_1.0.48+kali1_all.deb

Sollte die debootstrap Quelle nicht mehr aktuell sein, kann der richtige Link hier eingesehen werden: http://archive.kali.org/kali/pool/main/d/debootstrap/

ar -xf debootstrap_1.0.48+kali1_all.deb
tar xzf data.tar.gz
tar xzf control.tar.gz

Jetzt muss geprüft werden, ob der Inhalt des Pakets unverändert auf dem lokalen System angekommen ist. Jedes Debian Paket liefert eine Datei md5sums mit, die Prüfsummen über die enthaltenen Dateien enthält. Mit dem folgenden Einzeiler lässt sich die Integrität des debootstrap Pakets prüfen.

cat md5sums | cut -d " " -f 3 | xargs md5sum $1 > md5sums.local; diff md5sums md5sums.local

Der Befehl darf keine Ausgabe erzeugen, sonst sind Daten verändert worden. Um jetzt per debootstrap installieren zu können, muss der Quelltext von debootstrap leicht angepasst werden.

nano usr/sbin/debootstrap

Die folgenden Zeilen entsprechend editieren

Suchen:

DEBOOTSTRAP_DIR=/usr/share/debootstrap

und ersetzen mit:

DEBOOTSTRAP_DIR=/tmp/usr/share/debootstrap

1.2 Installation durchführen

Um sicherzugehen, dass nur offizielle Pakete ohne Hintertüren auf dem neuen System installiert werden, müssen die Signaturen aller Pakete geprüft werden. Alle Debian Pakete sind durch öffentliche Schlüssel in einer Public-Key-Infrastruktur gesichert. Damit diese Signaturen geprüft werden können, muss der Hauptschlüssel des Kali Linux Archivs wie folgt importiert werden.

wget -q -O - http://archive.kali.org/archive-key.asc | gpg --import

Mit dem Befehl gpg --list-keys wird geprüft, ob der Schlüssel erfolgreich importiert wurde. Ist das der Fall, kann das Grundsystem wie folgt installiert werden.

usr/sbin/debootstrap --keyring=~/.gnupg/pubring.gpg --arch=amd64 --include=kali-archive-keyring,kali-debtags,kali-defaults,kali-linux,kali-menu,kali-root-login,gnome,openssh-server kali ./kali-linux/ http://archive.kali.org/kali

Bei der Ausführung des Befehls kann es zu einem Fehler mit der Nachricht W: Failure while installing base packages. This will be re-attempted up to five times. kommen. Dieser Fehler kann ignoriert werden. Auch kann es zu einem abschließenden Fehler im Zusammenhang mit dem Paket metasploit kommen. Auch dieser Fehler kann ignoriert werden. Er wird vor der Erstellung des Templates behandelt.

Nach der Installation des Grundsystems erfolgt die Anmeldung über den chrootBefehl, um die weitere Einrichtung durchzuführen.

mount -t proc none ./kali-linux/proc/
mount -o bind /dev ./kali-linux/dev/
mount -t tmpfs none ./kali-linux/tmp/
mount -o bind /sys ./kali-linux/sys
LANG=C chroot ./kali-linux /bin/bash

Erzeugen die Befehle keine Fehlermeldung, wurde erfolgreich in das frisch installierte Kali Linux gewechselt.

1.3 System einrichten und aktualisieren

Um die Signaturen der in Zukunft zu installierenden Pakete prüfen zu können, müssen die Schlüssel der Paketquellen auch im neuen OpenVZ Template importiert werden.

# kali
apt-key adv --recv-keys --keyserver keys.gnupg.net ED444FF07D8D0BF6
# x2go
apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E

Jetzt werden die Paketquellen aktualisiert und das System auf den Stand der den neuen Paketquellen entspricht, gebracht. Neuer Inhalt der Datei /etc/apt/sources.list hat wie folgt zu lauten.

## KALI Main
deb http://http.kali.org/kali kali main non-free contrib
deb-src http://http.kali.org/kali kali main non-free contrib

## KALI Sec
deb http://security.kali.org/kali-security kali/updates main contrib non-free

## X2Go
deb http://packages.x2go.org/debian wheezy main
deb-src http://packages.x2go.org/debian wheezy main

Durchführung der Aktualisierung wie folgt.

apt-get update
apt-get upgrade -f

Jetzt kann X2go installiert werden.

apt-get install x2goserver x2goserver-extensions x2goserver-compat x2goserver-fmbindings

1.4 Anpassungen des Proxmox Templates

Damit jede virtuelle Maschine eigene SSH Host-Schlüssel hat, muss die Datei /etc/rc.local wie folgt vor dem Befehl exit 0 ergänzt werden und danach der Befehl rm /etc/ssh/ssh_host_* ausgeführt werden.

# SSH-Keys bei Erststart erzeugen
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server

Damit der SSH-Dienst im Gegensatz zur Voreinstellung von Kali Linux beim Systemstart gestartet wird, ist das Anlegen der Verknüpfungen aus den Runleveln zu SSH sowie die korrekte Ablegung des start-stop-daemon Skripts notwendig. Folgende zwei Befehle erledigen die Arbeit.

update-rc.d ssh enable 2 3
cp /sbin/start-stop-daemon.REAL /sbin/start-stop-daemon

Jetzt muss das Kennwort des Superusers der virtuellen Maschine mit dem Befehl passwd mit dem bekannten Wert toor initialisiert werden. Daraufhin werden alle lokalen Konsolen (gettys) bis auf das Erste in der Datei /etc/inittab wie folgt auskommentiert.

1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Danach wird die chroot-Umgebung mit dem Befehl exit verlassen. Die temporär eingehängten Systemverzeichnisse müssen jetzt ausgehängt werden.

umount ~/Development/proxmox/kali-linux/proc
umount ~/Development/proxmox/kali-linux/tmp
umount ~/Development/proxmox/kali-linux/sys
umount -l ~/Development/proxmox/kali-linux/dev

1.5 Template erstellen und speichern

Folgend kann das Template erstellt werden.

cd kali-linux
GZIP=-9 tar --numeric-owner -zcf ~/Development/proxmox/kali-1.0.5-standard_1.0.5-1_i386.tar.gz .

Im Anschluss kann das erstellte Template in den Storage-Bereich von Proxmox hochgeladen und provisioniert werden.

Bildschirmfoto - 27.12.2013 - 10:40:09

1.6 Verbindung mittels X2go

Nach der Provisionierung ist die Verbindung zur virtuellen Maschine mittels X2Go mit folgenden Einstellungen möglich (IP-Adresse anpassen!). Das verwendete Icon gibt es hier.

X2Go Kali Linux Einstellung
X2Go Kali Linux Einstellung

Um die Provisionierung abzuschließen, muss in einem Terminal der Befehl apt-get install -f eingegeben werden und ein MySQL-Kennwort vergeben werden. Zuletzt folgt die Konfiguration der lokalen Sprache.

dpkg-reconfigure locales

Hier wird de_DE.UTF-8 gewählt. Die Zeitzone muss auch gesetzt werden, in der Regel auf Europa/Berlin.

dpkg-reconfigure tzdata

Wem die Anpassungen nach der Provisionierung zuviel sind, oder wer das Template nur in einer Sprache benötigt, kann aus dem Verzeichnis /var/lib/vz/private/VZID ein neues finalisiertes Template erzeugen.

Viel Spaß!

KALI LINUX ™ is a trademark of Offensive Security.

Frohe Weihnachten

weihnachtsbaum

Ich wünsche allen Lesern meines Blogs frohe Weihnachten und einige ruhige Tage mit euren Familien.

PS.: Um diesen Artikel auf einigen Aggregatoren posten zu dürfen, muss ich hier (planet ubuntu) schreiben, dass ich der Meinung bin, dass ASCII Art eine viel zu geringe Rolle im heutigen Alltagsleben spielt (Verhaltenskodex Regel 8). Für das OSBN muss ich noch sagen: Man kann Proxmox VE über Debian wheezy installieren. Krass, was?

Vortrag IT-Sicherheit und Angriffsmethoden

Am 16.12 durfte ich in der Vorlesung Rechnernetze und verteilte Systeme einige Angriffsmethoden quer über den TCP/IP Stack verteilt vorstellen. Die Vorlesung richtet sich an Bachelor-Studenten im dritten Semester.

Die Folien stehen hier zum Ansehen bereit:

Vortrag „IT-Sicherheit im Fakultätsnetz (PDF)

Je mehr Vorträge ich halte, desto mehr Spaß macht es, die Zuhörer für die Themen zu begeistern und desto weniger Stress macht es.

Snapraid 5.1 erschienen und Aktualisierung von früheren Versionen

Version 5.1 des nicht-standardisierten Snapshot-RAIDs SnapRAID ist im Dezember erschienen. Über das grundsätzliche Verfahren von SnapRAID habe ich bereits hier berichtet.

index

Die neue Version bietet in einigen Punkten sinnvolle Verbesserungen.

 

  • Bis zu sechs Paritätsfestplatten
  • Bessere Unterstützung für ARM- und AMD-Prozessoren
  • Geringerer Speicherverbrauch

Aktualisieren

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. Dir notwendigen Pakete, um SnapRAID aus den Quellen zu übersetzen, sind hier zu finden.

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

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

Everything OK
echo Success!
Success!
make[1]: Leaving directory `/usr/local/src/snapraid-5.1'

Jetzt muss die bereits installierte Version von SnapRAID deinstalliert werden. Zur Sicherheit wird eine Sicherungskopie der Konfigurationsdatei in /var/tmp angelegt.


apt-get remove snapraid
cp /etc/snapraid.conf /var/tmp/snapraid.conf.bak

Daraufhin kann SnapRAID und die SnapRAID-Konfiguration installiert werden.

checkinstall make install

Ist die Installation fehlerfrei durchgeführt, muss das Snapshot-RAID neu Synchronisiert werden.

snapraid sync

Proxmox VE 3.1 „Nag Screen“ abschalten und nicht-kommerzielle Paketquellen

Wenn es um Virtualisierung für kleinere Umgebungen oder zuhause für Experimente und wenige virtuelle Server geht, dazu noch freie Software und bestenfalls auf Debian basierend sein soll, führt kaum ein Weg an Proxmox VE vorbei. Die Distribution basiert auf Debian und erlaubt es dem Nutzer virtuelle Server mittels OpenVZ und KVM zu betreiben. Alles in einem schönen Webinterface.

Aus finanziellen Gründen haben sich die Betreiber seit Version 3 dazu entschlossen, einen „Nag screen“ (engl. Nerv-Anzeige) anzuzeigen.

Proxmox VE 3.1 "Nag Screen"
Proxmox VE 3.1 „Nag Screen“

Darüber hinaus sind in Voreinstellung die kostenpflichtigen Paketrepositories vorkonfiguriert. Beides soll geändert werden.

Zuerst wird die folgende Datei geöffnet und die Paketquelle auskommentiert.

nano /etc/apt/sources.list.d/pve-enterprise.list

Dann wird eine neue Datei im selben Verzeichnis mit den Paketquellen für Nutzer ohne Abo angelegt. Die Paketquelle ist im Proxmox VE Wiki hinterlegt.

nano /etc/apt/sources.list.d/pve-no-subscription.list

Die Aktualisierungen aus diesem Repository lassen sich jetzt einfach installieren.

apt-get update && apt-get dist-upgrade

Und auch gegen die Nerv-Anzeige lässt sich etwas tun. Der folgende absichtlich minimal gehaltene Patch von Tyler J. Wagner deaktiviert sie und wird wie darauffolgt angewendet.

--- /usr/share/pve-manager/ext4/pvemanagerlib.js.orig	2013-08-28 10:33:15.000000000 +0100
+++ /usr/share/pve-manager/ext4/pvemanagerlib.js	2013-08-28 10:37:52.000000000 +0100
@@ -447,7 +447,7 @@
 	    success: function(response, opts) {
 		var data = response.result.data;
 
-		if (data.status !== 'Active') {
+		if (false && data.status !== 'Active') {
 		    Ext.Msg.show({
 			title: 'No valid subscription',
 			icon: Ext.Msg.WARNING,

Anwendung wie folgt.

cd /usr/share/pve-manager/ext4/
wget http://www.tolaris.com/blog/wp-content/uploads/2013/08/no_subscription_popup_pvemanagerlib.js-3.1.patch -O - | patch -p0

Es bleibt abzuwarten, ob die Proxmox Server Solutions GmbH, Hersteller von Proxmox VE, es bei diesen kleinen Einschränkungen belässt. Falls nein, wird sich wie üblich sicher ein Fork finden der einen Aktualisierungspfad eröffnet.