Kaboxer

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Kaboxer - Kali Applications Boxer

In den letzten 18 Monaten haben wir an Kaboxer gearbeitet, und kurz vor Kali 2021.1 ist es bereit, "Hallo Welt" zu sagen (dann wird es anfangen, Ihnen Anwendungen zu liefern).

TL;DR - Was ist das?

Was bedeutet der Name "Kaboxer"? Kali Applications Boxer

Was bedeutet das? Anwendungen in Containern, für Pakete (ein Weg für Anwendungen, die schwer ordentlich zu verpacken sind). Aber anstatt eigenständige Container zu sein, sind sie in die standardmäßigen Kali-Paketverwaltungssysteme integriert und können mit Standard-Apt-Befehlen installiert/entfernt werden.

Okay. Aber was macht Kaboxer? Nicht jedes Tool lässt sich leicht verpacken. Es gibt verschiedene Kriterien zu erfüllen, manchmal verrückte Abhängigkeitsbäume oder eigenartige Systemmodifikationen. Sie benötigen möglicherweise eine Legacy-Bibliothek oder müssen eine Konfiguration eines Elements ändern, was eine andere Anwendung unterbrechen würde. Was tun Sie? Wir arbeiten mit den Autoren von Tools zusammen, um es einfacher zu machen, oder wir verbringen viele späte Nächte damit, es anzupassen, oder wir können es einfach nicht verpacken.

Betritt Kaboxer. Mit Containern können wir komplexe nicht standardmäßige Pakete in einen Container legen und ihn in das restliche Betriebssystem integrieren und ihn in das Verpackungssystem einbinden. Das bedeutet, dass Sie ein Kaboxer-Programm mit Apt installieren können und es verwenden können, ohne spezielle Schritte unternehmen zu müssen.

Wie profitiere ich von Kaboxer?

Kaboxer hat einige Anwendungsfälle, abhängig davon, wer es verwendet:

Für Personen, die Kali Linux verwenden, ist es transparent, sodass Sie nicht bemerken werden, wenn Sie es verwenden (deshalb sehen Sie es möglicherweise nicht als "großes Ding"). Sie erhalten einfach mehr Werkzeuge! Für uns Kali-Entwickler ist das ein Spielwechsler. Für andere Debian-Paketierer könnte dies Ihr Interesse wecken. Für Tool-Autoren (die ihre Software in Kali haben möchten) gibt es Hoffnung für Sie ;-)

Was ist der Nachteil von Kaboxer?

Die Größe der Anwendung wird größer sein, weil sie die normale Overhead-Nutzung von Containern haben wird. Während das installierte Paket klein sein wird, wird seine Installation den erforderlichen Container herunterladen, der für eine einfache Anwendung sogar mehrere Hundert Megabyte verbrauchen kann.

Was wird wegen Kaboxer passieren?

Wir hoffen, mehr Werkzeuge in Kali Linux aufzunehmen, die zuvor nicht verpackt werden konnten, und Sie werden nicht bemerken, dass Sie sie über Kaboxer verwenden. Leider werden solche Werkzeuge nicht in unsere Standardinstallation aufgenommen, da die Größenzunahme für die ISO-Abbilder zu signifikant wäre.

Überblick

Es gibt verschiedene Werkzeuge, die für Kali-Benutzer von Vorteil wären, aber Probleme haben, ordnungsgemäß als *.deb-Pakete ausgeliefert zu werden. Dies könnte daran liegen, dass die Tools:

- Nicht für das Verpacken und die Systemintegration entwickelt wurden. Sie gehen davon aus, dass sie spezifische Versionen von Bibliotheken installieren können oder Bibliotheken patchen können oder Softwareteile zur Laufzeit anstelle der Installationszeit herunterladen können. Dies widerspricht den Verpackungsstandards und ist auch schlechte Softwaretechnik. - Sich vielleicht berechtigt fühlen, mit dem Betriebssystem oder anderen Anwendungen zu tun, was sie wollen. Solche Aktionen sollten nicht erlaubt sein, und die Software muss isoliert werden. Wir haben Aktionen gesehen wie:

 - Erstellen von Benutzern mit bestimmten UID/GID.
 - Verwendung von Pfaden, die gegen den Filesystem Hierarchy Standard (FHS) verstoßen.
 - Verwendung von TCP- oder UDP-Ports, die normalerweise anderen Diensten zugewiesen sind.
 - Neu konfigurieren von bestehenden Diensten.
 - Interaktion mit externen Servern (möglicherweise auf unsichere Weise), sodass der Software selbst nicht vollständig vertraut werden kann. Als Ergebnis ist es möglicherweise eine gute Idee, solche Software von wertvollen oder sensiblen Daten, die möglicherweise auf dem System vorhanden sind, zu isolieren. Eine Möglichkeit, die erforderliche Isolation zu bieten, wäre die Verwendung von Containerisierung. Container ermöglichen das Ausführen einer Anwendung in einer isolierten Umgebung, wobei das Risiko einer unbeabsichtigten Interaktion mit dem Rest des Systems (Benutzer, Dienste, andere Anwendungen, vorhandene Dateien, spezifische Versionen von Bibliotheken usw.) drastisch reduziert wird.

Designentscheidungen

Obwohl wir nicht ausschließen, andere Containerisierungslösungen zu unterstützen, haben wir uns entschieden, mit Docker zu beginnen. Es ist bekannt, weit verbreitet und profitiert von einem großen Ökosystem von Images, was seine langfristige Lebensfähigkeit sicherstellt. Docker-Container können in vielerlei Hinsicht konfiguriert werden, um die verschiedenen Integrationen zu erreichen, die wir mit dem Host-System oder sogar zwischen mehreren Containern benötigen.

Der Wert von Kaboxer liegt darin, wie es einfach ist, Docker-Container mit dem Host-System zu verknüpfen, durch die üblichen Docker-Funktionen wie Mountpoints und Portweiterleitungen, aber auch durch die Integration von Desktop-Menüeinträgen. Alle diese Integrationen sowie die Anweisungen zum Erstellen oder Abrufen des Docker-Images werden in einer einzigen YAML-Datei spezifiziert.

Diese einzelne YAML-Datei wird in den von uns in Kali bereitgestellten .deb-Dateien ausgeliefert, und das Nachinstallations-Skript dieser Pakete wird das Bild transparent herunterladen, damit die Anwendung danach einsatzbereit ist.

Erstellung von Docker-Images

Der Aufbau der Docker-Images wird ebenfalls von Kaboxer vermittelt, aber es gibt nichts Magisches daran. Es läuft darauf hinaus, `docker build` auf einem bestimmten Dockerfile mit einigen Variablen aufzurufen.

Es liegt in der Verantwortung des Paketierers, dieses Dockerfile zu schreiben, aber dieser Schritt kann trivial sein, wenn das Upstream-Projekt bereits ein Dockerfile hat oder wenn es ein einsatzbereites Docker-Image bereitstellt.

Veröffentlichung von Docker-Images

Dieser Schritt ist so langweilig, dass wir ihn mit GitLab CI automatisiert haben. Jedes Mal, wenn wir eine Änderung an einem Repository vornehmen, das einer "kaboxed" Anwendung gewidmet ist, wie z.B. Covenant, wird GitLab CI das zugehörige Docker-Image neu erstellen und es im Image-Register speichern.

Integration der Images in das System

Sobald die App containerisiert ist, müssen wir sie dem Benutzer auf nahtlose Weise zur Verfügung stellen, auf eine Art und Weise, die idealerweise nicht einmal bemerkt wird. Der Benutzer sollte nicht einmal wissen, dass die App in einem Container läuft.

Wir haben bereits erklärt, dass Benutzer weiterhin mit Kali-Paketen interagieren, um containerisierte Anwendungen zu installieren und zu entfernen, obwohl diese Pakete größtenteils leere Schalen sind, die Kaboxer-Befehle in den verschiedenen Wartungsskripten des Maintainers ausführen. Sie stellen auch .desktop-Dateien bereit, damit die Anwendungen aus dem üblichen Desktop-Menü gestartet werden können, und Befehlszeilenhilfen, damit sie aus einem Terminal gestartet werden können, ohne etwas über Kaboxer wissen zu müssen.

Um Docker-Container ausführen zu können, benötigen die Benutzer einige erhöhte Berechtigungen: Wir haben den Kali-Installer modifiziert, um diesen Benutzern, die während des Initialisierungsprozesses der Installation erstellt wurden, standardmäßig diese Berechtigungen zu gewähren. Für andere Benutzer müssen sie der Kaboxer-Gruppe hinzugefügt werden (`adduser $USER kaboxer`).

Benutzer möchten natürlich, dass ihre Anwendungsdaten erhalten bleiben, daher bietet Kaboxer Einrichtungen zur Konfiguration von Volumes, die zwischen dem Host und dem Container gemeinsam genutzt werden, um die Persistenz auch dann zu gewährleisten, wenn Container nur kurzlebig sind. Und je nach Art der Anwendung benötigen Sie wahrscheinlich spezifischere Integrationen:

- Für GUI-Anwendungen muss der Host-X11-Socket zugänglich sein. - Für Webanwendungen möchten wir den HTTP-Port freigeben und den Webbrowser auf die entsprechende URL starten. Diese grundlegenden Bedürfnisse werden durch die aktuellen Kaboxer-Funktionen abgedeckt, aber es ist wahrscheinlich, dass in Zukunft weitere Arten von Integrationen erforderlich sein werden.

Wenn Sie mehr über Kaboxer erfahren möchten, sehen Sie sich bitte seine Homepage (und den Quellcode) sowie unsere Dokumentation (mit einem "Hello World"-Beispiel) an.

Als Beispiele für "Real World"-Anwendungen können Sie unsere ersten "Kaboxed Apps" ansehen:

- Covenant, ein Framework zur Hervorhebung der Angriffsfläche von .NET. Covenant wird als Hintergrundserver gestartet, zusammen mit einer Web-App, die im Browser ausgeführt wird. - Firefox Developer Edition, ein Webbrowser, den wir ausgewählt haben, da er eine komplexe, große GUI-Anwendung ist. - Zenmap, die offizielle GUI für NMAP. Zenmap verlässt sich auf veraltete Python-2-Bibliotheken, die in Kali Linux nicht verfügbar sind.

Möchten Sie es selbst ausprobieren?

kali@kali:~$ sudo apt update && sudo apt -y install covenant-kbx
...
kali@kali:~$
kali@kali:~$ covenant-kbx
Verwendung: covenant-kbx start|stop
kali@kali:~$
kali@kali:~$ covenant-kbx start
>>> Initialisierung der Benutzerdaten in ~/.local/covenant/data
>>> Start von Covenant
Bitte warten Sie während des Starts, es kann eine lange Zeit dauern...
>>> Öffnen von https://127.0.0.1:7443 mit einem Webbrowser
covenant/default gestartet
ENTER drücken, um zu beenden
kali@kali:~$
kali@kali:~$ ss -at | grep 7443
LISTEN 0      4096         0.0.0.0:7443        0.0.0.0:*
kali@kali:~$

Vergessen Sie nicht, https://localhost:7443 in einem Webbrowser zu öffnen!

Wenn Sie Kaboxer selbst erkunden und sehen möchten, was unter der Oberfläche geschieht:

kali@kali:~$ kaboxer
Verwendung: kaboxer [-h]

Quelle