Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Bei meiner Arbeit stoße ich immer wieder auf Netzwerke und Webseiten mit erheblichen Sicherheitsproblemen. In diesem Buch versuche ich dem Leser zu vermitteln, wie leicht es mittlerweile ist, Sicherheitslücken mit diversen Tools auszunutzen. Daher sollte meiner Meinung nach jeder, der ein Netzwerk oder eine Webseite betreibt, ansatzweise wissen, wie diverse Hackertools arbeiten, um zu verstehen, wie man sich dagegen schützen kann. Selbst vor kleinen Heimnetzwerken machen viele Hacker nicht halt. Wenngleich das Thema ein sehr technisches ist, werde ich dennoch versuchen, die Konzepte so allgemein verständlich wie möglich erklären. Ein Informatikstudium ist also keinesfalls notwendig, um diesem Buch zu folgen. Dennoch will ich nicht nur die Bedienung diverser Tools erklären, sondern auch deren Funktionsweise so weit erklären, dass Ihnen klar wird, wie das Tool arbeitet und warum ein bestimmter Angriff funktioniert.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 509
Veröffentlichungsjahr: 2024
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Zunächst möchte ich mich an dieser Stelle bei all denjenigen bedanken, die mich während der Anfertigung dieses Buchs unterstützt und motiviert haben.
Ganz besonders gilt der Dank meiner Freundin, die mich während der gesamten Arbeit motiviert hat und es mir nicht übelnahm, dass ich so viel von unserer gemeinsamen Freizeit in dieses Projekt steckte - danke Schatz!
Was Sie in diesem Buch erwartet ist eine grobe Einführung in Linux und die Installation der Linux-Distribution Kali. Danach werden wir uns mit der Konfiguration etwas beschäftigen bevor wir mit diversen Tools arbeiten werden.
Sie werden einen Einblick in die wichtigsten Teilbereiche erhalten und lernen, wie man mit fertigen Tools arbeitet, wie man an Probleme herangeht, wie man mit System Schwachstellen aufdeckt und an manchen Stellen werden Sie sogar lernen, wie man kleine Tools selber schreibt.
An dieser Stelle will ich in aller Deutlichkeit sagen - wer das hier Erlernte gegen fremde Webseiten, Netzwerke oder Rechner ohne Zustimmung der Eigentümer einsetzt, macht sich strafbar! Wer allerdings die Tools dafür benutzt seine eigene IT-Landschaft zu testen wird die Sicherheit enorm steigern können, indem er mögliche Einfallstore und Schwachstellen identifizieren und danach beheben kann.
Wer seine eigenen Webseiten angreift, sollte auch vorab den Hoster um Erlaubnis fragen damit die Administratoren Bescheid wissen und nicht sofort einen Abuse-Report an Ihren Internet-Anbieter senden. Darüber hinaus ist es auch ratsam den eigenen Provider zu informieren damit der nicht vorsorglich Ihren Internet-Anschluss sperrt, sobald er merkt was Sie da treiben.
Dieses Buch ist nicht als Anleitung zum Begehen von Straftaten gedacht und auch nicht als Anleitung wie man einer eventuellen Strafverfolgung entgehen kann!
Hacker, Cracker, Scriptkiddies
Was ist Linux?
Wo liegt der Vorteil von Linux?
Installation von Kali-Linux
Schnelleinstieg in Linux
Arbeiten mit der Shell und die wichtigsten Befehle
Die Xfce Benutzeroberfläche von Kali
Die wichtigsten Befehle im Überblick
Nessus einrichten
Einrichten von OpenVAS / GVM
WLAN-Netzwerke knacken
WEP knacken
WPA und WPA2 knacken
WPS - Bequemlichkeit hat einen Preis
WPA/WPA2 mit GPU oder Rainbowtables knacken
WPA und WPA2 angezählt
Passwortgeschützte Dateien knacken
Informationsbeschaffung mit Scannern
GVM - Sicherheitslücken aufdecken
Exploit-Suche mit Armitage
Scannen wie ein Profi
Sicherheitslücken ausnutzen
Armitage – GUI für die msfconsole
MSF & Meterpreter im Detail
Pivoting - Weiter in ein Netzwerk vordringen
BeEF - Angriff auf Browser
Netzwerkverkehr belauschen
SSL-Verschlüsselung umgehen
Phishing
SET in Aktion
Trojaner erstellen
Tor & Proxychains
TOR installieren und einrichten
Webseiten angreifen
Passwort brutforcen
Schwachstellen finden
BurpSuite
XSS (Cross-Site Scripting)
CSRF (Cross-Site Request Forgery)
Fehler in Datei-Upload-Funktionen ausnutzen
Hash Werte identifizieren
Sicherheitsrelevante Fehlkonfigurationen und Fehlkonzeptionen
Diverse andere Techniken
Schwache RDP-Passwörter mit rpdsploit finden
Mobiltelefone hacken
Ausnützen von Fehlkonfigurationen
Physische Angriffe - Bad USB
Keelog AirDrive Keylogger Kabel / Modul
Physische Angriffe - Packet Squirrel
Buffer overflows
Exploit Entwicklung
KI Hacking
Buchempfehlungen
Bei meiner Arbeit stoße ich immer wieder auf Netzwerke, Webseiten, etc. mit erheblichen Sicherheitsproblemen. Mir geht es nicht darum zu zeigen wie man in fremde Webseiten, Netzwerke oder Computer eindringt, sondern darum, dem Leser zu vermitteln wie leicht es mittlerweile ist, dies mit diversen Tools zu erreichen. Daher sollte meiner Meinung nach jeder, der ein Netzwerk oder eine Webseite betreibt ansatzweise wissen wie diverse Hackertools arbeiten, um zu verstehen, wie man sich dagegen schützen kann. Selbst einfache Anwender mit Ihrem Heim-PC sind heute beliebte Ziele. Daher wäre es auch für diese Gruppe von Personen ratsam, sich etwas mit dem Thema Sicherheit auseinanderzusetzen.
Wenn gleich das Thema ein sehr technisches ist, werde ich dennoch versuchen, die Konzepte so allgemeinverständlich wie möglich zu erklären. Ein Informatikstudium ist also keinesfalls notwendig, um diesem Buch zu folgen. Dennoch will ich nicht nur die Bedienung diverser Tools erklären, sondern auch deren Funktionsweise grob umreißen. Zumindest so weit, dass Ihnen klar wird, wie das Tool arbeitet und warum eine bestimmte Maßnahme dagegen hilft.
Ich bemerke schon seit Längerem einen Trend - im Internet tauchen immer mehr Tutorials und Fragen zu Kali-Linux (ehemals Backtrack) auf. Scheinbar wird das Hacken langsam aber sicher zum "Volkssport". Zum einen stört mich an den meisten Tutorials, dass zwar gezeigt wird, wie in einer bestimmten Situation ein Angriff funktioniert, aber so gut wie nie wird darauf eingegangen, was genau passiert und wie das Tool im Detail arbeitet. Genau das ist jedoch das Entscheidende um das Sicherheitsproblem zu verstehen und zu wissen, wie man es beseitigen kann.
Andererseits ist genau das auch der Lichtblick - diese sogenannten "Scriptkiddies", die diverse Tools besitzen und in bestimmten Situationen anwenden können, verstehen nicht die Zusammenhänge dahinter und sind dann in der Regel hoffnungslos überfordert, wenn sie vom "Schema F" abweichen müssen.
Wenn Sie Kritik, Anregungen oder auch nur ein Lob loswerden wollen, können Sie mir gerne eine Email an die Adresse [email protected] senden.
Ich werde versuchen Ihren Input in weiteren Buchprojekten oder einer kommenden Neuauflage umzusetzen.
Da es keine allgemeingültige Definition gibt und auch die Begriffe einen fließenden Übergang haben nenne ich Ihnen meine persönliche Definition:
Einen Hacker kann man als eine Person definieren, die sich mit der Sicherheit von Computersystemen beschäftigt und in den Systemen nach Schwachstellen sucht. Dies kann unterschiedliche Gründe haben vom Zeitvertreib bis hin zum Wissensdrang. Findet ein Hacker eine solche Schwachstelle, dann wird er diese veröffentlichen, um die Welt auf den Fehler aufmerksam zu machen. Was ein Hacker aber nicht machen wird, ist diese Schwachstelle zum eigenen Vorteil auszunutzen, um daraus Kapital zu schlagen. Daher bezeichnet man diese Hacker auch als Whitehats.
Cracker hingegen sind jene Hacker, die nicht diesem Moralkodex folgen und in Systeme eindringen, um Schaden anzurichten, Geheimnisse auszuspionieren und diese dann zu verkaufen, Computersysteme lahmlegen um Geld zu erpressen, und so einiges mehr. Der Antrieb dieser Personen ist in der Regel Kapital aus Ihren Fähigkeiten zu schlagen und möglichst viel Geld in möglichst kurzer Zeit zu verdienen. Mittlerweile sind viele dieser Cracker Teile größerer Organisationen und allein in Deutschland für über 200 Milliarden Euro Schaden pro Jahr (Stand 2022) verantwortlich. Diese Gruppe wird auch als Blackhats bezeichnet.
Whitehats wie auch Blackhats sind technisch versiert und in der Lage Schwachstellen in Software zu finden und Tools zu entwickeln, die diese Schwachstellen ausnutzen.
Scriptkiddis besitzen diese Fähigkeiten nicht. Sie verfügen im besten Fall über das Wissen, wie man Hacker-Tools einsetzt. Oftmals beschränkt sich Ihr Wissen sogar nur auf den Bruchteil der Funktionen diverser Tools. Weiters wissen Scriptkiddies in der Regel auch nicht wirklich wie genau die Tools, mit denen sie hantieren, arbeiten und wie die technischen Hintergründe sind, die ihre bevorzugten Hacker-Tools ausnützen. Daher wissen sich auch viele der Scriptkiddies nicht selber zu helfen, wenn die Standard-Vorgehensweise einmal nicht klappen würde. Aber das macht sie nicht weniger gefährlich. Diese Gruppe umfasst gut 90-95% der Personen, die Angriffe auf ein IT-System durchführen und in dieser Gruppe ist alles enthalten - von 14-Jährigen, der nur mal ausprobieren will, was er im Internet gefunden hat bis hin zum hauptberuflichen Cyberkriminellen, der an Ihre Kontodaten und Kreditkartendaten will.
In weiterer Folge des Buches werde ich den Begriff "Hacker" als Überbegriff für alle hier genannten Unterarten benutzen, wie es die meisten Leute aus dem üblichen Sprachgebrauch gewohnt sind. Die Differenzierung um welche Art von "Hacker" es sich in einem bestimmten Fall handelt überlasse ich an der Stelle Ihnen als Leser.
Nach langem hin- und her habe ich mich entschieden, unsere gemeinsame Reise ganz am Anfang zu beginnen, um Ihnen einen fundierten Einstieg zu ermöglichen, auch ganz ohne Vorkenntnisse. Wer schon Erfahrung mit Linux hat, kann dieses Kapitel getrost überspringen. Allerdings empfehle ich denjenigen, die über Linux-Erfahrung verfügen, das Kapitel mit der Installation und Konfiguration von Kali zumindest zu überfliegen.
Linux ist ein Betriebssystem wie zB Windows oder Mac OS. Wie jedes Betriebssystem enthält eine Linux-Installation eine ganze Menge von Tools. Diese Tools wären zB ein Browser, ein Taschenrechner, ein Editor oder ein Player für Musik und Videos. Bei Windows und Mac OS ist diese Softwarezusammenstellung standardisiert - je nach Version kann sich die Zusammenstellung der Tools ändern aber in jedem Windows 7 Home Premium sind immer die gleichen Tools enthalten. Das ist ja auch vollkommen logisch, da Windows von nur einer Firma erstellt wird. Gleiches gilt für Mac OS.
Linux ist freie Software. Das heißt, jeder kann sich den Kern von Linux herunterladen und seine eigene Distribution daraus machen. Eine Distribution ist eine Software-Zusammenstellung. Derzeit gibt es Hunderte Linux-Distributionen die von genau so vielen verschiedenen Anbietern zur Verfügung gestellt werden. Darunter ist alles dabei - von firmeneigenen Distributionen die für den Eigenbedarf erstellt wurden über Hobby-Projekte von Enthusiasten, bis hin zu professionellen Distributionen die auch teilweise kostenpflichtigen Support für Ihr Produkt anbieten.
Die Distributionen lassen sich auch nach Ihrem Einsatzgebiet einteilen. So sind manche Distributionen darauf ausgelegt als Firewall zu laufen, andere sollen ein möglichst stabiles Arbeitsumfeld mit langfristigem Support (LTS) liefern, andere stellen die neuesten Programme zur Verfügung und sind somit für Entwickler zum Testen Ihrer Software interessant, laufen dafür aber nicht so stabil, usw. Kali-Linux, um das es eigentlich in diesem Buch gehen soll, ist eine Distribution, die mit einer enormen Sammlung an Tools für Sicherheitstests, Datenforensik, usw. ausgeliefert wird.
Kali-Linux ist quasi ein System, das mit allem geliefert wird, was man benötigt um in Computersysteme einzudringen. Das ist ideal zum Testen der eigenen Sicherheit aber auch ein Geschenk für jedes Scriptkiddie, das damit ein perfektes System zum Hacken hat.
Bevor wir Kali Linux installieren können, müssen wir eine ISO-Datei von der folgenden Webseite herunterladen:
https://www.kali.org/get-kali/#kali-installer-images
Danach kann man das Image mit Balena Etcher (https://etcher.balena.io/) auf einen USB-Stick extrahieren oder auf DVD brennen.
Nachdem wir Kali zum ersten Mal vom Installationsmedium gebootet haben sehen wir folgenden Bildschirm:
Falls Ihr PC Kali nicht fehlerfrei booten kann, sollten Sie Folgendes prüfen:
Errechnen Sie die MD5-Summe der ISO-Datei und prüfen Sie, ob diese mit den Angaben auf der Kali-Webseite übereinstimmt. Falls nicht, wurde die ISO-Datei beim Herunterladen beschädigt und Sie müssen sie erneut downloaden und einen neuen Boot-Datenträger erstellen.
Prüfen Sie Ihre BIOS-Einstellungen. Manchmal gibt es mit dem Boot-Modus UEFI Probleme. Stellen Sie den Boot-Modus auf "Legancy" oder deaktivieren Sie "Secure Boot". Wie genau Sie das BIOS-Setup aufrufen, verrät Ihnen die Betriebsanleitung des Mainboards. Im Normalfall müssen Sie beim Starten des Rechners eine bestimmte Taste drücken, um das BIOS aufzurufen.
Falls beides nichts nützt kann das Laufwerk ein Problem haben, die DVD zu lesen. In dem Fall versuchen Sie es am besten mit der USB-Stick-Variante oder brennen Sie die DVD mit einer langsameren Geschwindigkeit.
Mit der obersten Option starten wir die grafische Installation. Sie bestätigen die Option mit einem Druck auf die Enter- bzw. Return-Taste. Falls der Rechner gar nicht von der DVD oder dem USB-Stick bootet, müssen Sie beim Start des Rechners eine Taste drücken, um das Boot-Menü aufzurufen. Welche genau, erfahren Sie im Handbuch zu Ihrem Mainboard. Alternativ können Sie auch die Boot-Reihenfolge im BIOS umstellen so, dass der Rechner immer zuerst versuchen wird, von der DVD oder einem USB-Stick zu booten.
Keine Panik, das Installationsprogramm können wir gleich im nächsten Schritt auf Deutsch umstellen. Wobei gute Englisch-Kenntnisse in dem Zusammenhang nicht schaden würden, denn viele Dokumentationen und Webseiten zu den Themen Hacken und Linux sind auf Englisch. Nichtsdestotrotz ist Kali natürlich auch auf Deutsch verfügbar:
Wählen Sie hier nun Deutsch aus und klicken auf "continue".
Unter Umständen sehen Sie folgenden Dialog, der Sie vor einer unvollständigen Übersetzung warnt.
Falls dies der Fall ist, bestätigen Sie mit Ja, dass Sie die Installation in Deutsch fortsetzen wollen und klicken Sie dann auf weiter.
Im nächsten Schritt der Installation werden Sie nach dem Standort gefragt. Wählen Sie das Land durch Anklicken aus und Bestätigen Sie es mit einem Klick auf weiter.
Dann werden wir nach dem Tastaturlayout gefragt – wählen Sie das passende Layout für Ihre Tastatur aus und klicken Sie auf weiter oder drücken Sie Enter.
Danach versucht Kali-Linux Ihre Hardware zu identifizieren. Und die entsprechenden Treiber zu laden. Dieser Schritt kann einige Sekunden dauern.
Weiters wird nach einer Internetverbindung gesucht und versucht diese zu konfigurieren. Daher würde ich Ihnen empfehlen, die Installation durchzuführen während der PC mit einem Netzwerkkabel an Ihrem Router angeschlossen ist.
Diese Konfiguration ist für Kali am einfachsten zu erkennen und Kali wird automatisch vom DHCP-Server auf Ihrem Router eine IP anfordern und sich dann mit dem Internet verbinden.
Im nächsten Schritt können Sie einen Namen für den Rechner vergeben. Hierbei würde ich persönlich sagen, dass Rechnernamen wie "Kali" oder noch schlimmer "MeinHackPC" oder dergleichen bei jedem Administrator alle Alarmglocken schrillen lassen, wenn diese auf der Lease-Liste eines DHCP-Servers oder etwas Ähnlichem auftauchen. Bei "MeinHackPC" oder Ähnlichem wird auch der unbedarfteste User stutzig, falls ein solcher PC in der Netzwerk-Umgebung angezeigt wird. Daher verwende ich hier in der Regel einen nichtssagenden Namen, weil ich bei einem Test eines Netzwerks nicht allein schon durch den Rechnernamen auffallen will.
Nochmals an der Stelle - wenn ich Netzwerke teste dann auf Wunsch des Kunden. Alles andere ist illegal!
Für unser Buch belasse ich es aber beim vorgeschlagenen Namen "kali" und klicke auf weiter.
Den Domainnamen können Sie beliebig wählen. Ich verwende hier in der Regel "local.net".Zum Übernehmen der Eingabe klicken wir wieder einmal auf weiter.
Ist doch gar kein Hexenwerk bis jetzt - oder?
Im nächsten Schritt werden wir nach dem Namen des Benutzers gefragt – geben Sie hier Ihren Namen an...
Daraus wird dann der vorgeschlagene Benutzername abgeleitet. Ich übernehme dies so, Sie können den Usernamen auch gerne ändern, wenn Sie dies wünschen.
Jetzt müssen wir ein Passwort festlegen. Der erste Benutzer wird auch in die sudoers Liste eingetragen. Das bedeutet, dass das Passwort dieses Benutzers es erlaubt temporär root-Rechte zu erhalten. root ist unter Linux der Administrator und dessen Befehle werden ohne Widerworte und teilweise sogar ohne Sicherheitsfrage befolgt. Daher sollten Sie erstens gut aufpassen was Sie als root machen und andererseits auch ein vernünftiges Passwort vergeben.
Ein sicheres Passwort ist mindestens 10 Zeichen, besser noch 12 bis 16 Zeichen lang und in keinem Wörterbuch zu finden. Also fallen Ihr Vorname und die immer noch sehr beliebten Passwörter passwort, Passwort1, 123456 und dergleichen schon einmal aus. Am besten verwendet man Groß- und Kleinbuchstaben mit Sonderzeichen und Ziffern gemeinsam. Außer man möchte seinen Rechner anderen Leuten, die mit Kali und den darin enthaltenen Tools etwas besser umgehen können zur Verfügung stellen.
Nun geht es um das Partitionslayout. Partitionen sind vereinfacht gesagt Unterteilungen einer Festplatte. Damit kann man eine Platte virtuell in mehrere "Festplatten" aufteilen. Das bringt den Vorteil, dass man zB System und Daten trennen kann. Würde man die System-Partition formatieren, um das System neu aufzusetzen, wären danach die Daten auf der Daten-Partition noch immer vorhanden.
Zunächst wählen Sie die Festplatte auf der das System installiert werden soll aus. Achten Sie darauf, dass Sie nicht den USB-Stick von dem Sie gebootet haben auswählen!
Ich bevorzuge ein etwas komplexeres Partitionslayout. Einer der Gründe ist es, dass ich das System neu installieren kann ohne meine Daten zu verlieren, der andere Grund ist der, dass wenn die System- oder Root-Partition voll ist und kein Speicher mehr vorhanden wäre, kann Linux nicht mehr fehlerfrei booten. Daher gönne ich Verzeichnissen die so etwas verursachen könnten eine eigene Partition.
Ich wähle hier Separate /home-Partition aus. Auf meinem System habe ich allerdings auch dem /var und /tmp-Ordner eine separate Partition gegönnt. Falls Ihre Festplatte ausreichend groß ist, sollten Sie dies auch tun. Was diese Verzeichnisse beinhalten werden wir etwas später klären.
Nach der Auswahl erhalten Sie folgende Übersicht:
Ich partitioniere in der Regel manuell da ich der root-Partition (/) eher 50-70GB als nur 30GB geben würde aber dies können Sie als Übung gerne selber versuchen. Es gibt ausreichend Anleitungen im Internet! Dies hätte den Vorteil, dass wir mehr Platz hätten für zusätzlich installierte Pakete und andere Dinge.
Ich bestätige den Vorschlag an dieser Stelle mit einem Klick auf weiter.
Jetzt kommt eine Sicherheitsfrage, die wir mit ja beantworten um die Änderungen auf die Festplatte zu schreiben.
Nach der Partitionierung beginnt die Installation:
Diese kann einige Minuten dauern...
Im nächsten Schritt wird gefragt, welche zusätzlichen Komponenten wir installieren wollen. Außerdem können wir zwischen Xfce, GNOME und KDE als Windowmanager (grafische Benutzeroberfläche) wählen. Ich empfehle Ihnen Xfce und die Installation aller Tools!
Auch die Installation der zusätzlichen Software wird ein paar Minuten dauern. Manchen Lesern wird es komisch vorkommen, dass die grafische Benutzeroberfläche eine Option ist oder, dass man zwischen verschiedenen wählen kann.
Linux ist sehr modular aufgebaut und man kann es auch ohne GUI (Grafical User Interface) betreiben, wie es bei Servern üblich ist. Daher ist es auch nicht verwunderlich, dass sich mehrere Windowmanager mit unterschiedlichen Bedienkonzepten etabliert haben.
Nach der Installation sehen wir folgendes:
Nun wird gefragt, ob wir den GRUB-Bootloader im Master Boot Rekord, kurz MBR, installieren wollen. Dies beantworten wir ebenfalls mit "Ja" und klicken auf weiter.
Wählen Sie nun die Platte aus auf der Sie Kali-Linux installiert haben und bestätigen Sie diese Auswahl mit weiter.
Nachdem uns wieder ein Ladebalken den Fortschritt der Installation mitgeteilt hat, bekommen wir den letzten Bildschirm der Installation zu sehen:
Klicken Sie auf weiter und achten Sie darauf das Installationsmedium zu entfernen, damit der Rechner nicht wieder in die Kali-Installation bootet.
Vor dem Neustart bekommen wir wieder einmal einen Ladebalken zu sehen, der uns mitteilt, dass der Rechner für den Neustart vorbereitet wird und nun nicht mehr benötigter Datenmüll der Installation vorher noch beseitigt wird. Wenn alles bei der Installation glatt gelaufen ist, sollten Sie nach dem Neustart diesen Bildschirm sehen:
Hier können Sie sich nun mit ihrem zuvor angelegten Usernamen und dem von Ihnen gewählten Passwort einloggen. Danach sollten Sie folgenden Desktop sehen:
Wer schon einmal Windows aufgesetzt hat, wird die Installation von Treibern vermissen - diese ist unter Linux in der Regel nicht notwendig. Nur sehr wenig Hardware benötigt eigene Treiber. So gut wie alles läuft mit den mitgelieferten Standardtreibern ohne Probleme.
Wer sich unnötiges Herumbasteln mit den Treibern ersparen will sollte im Vorfeld kurz abklären, ob alle Hardware mit Linux problemlos läuft. In der Regel wird gängige Hardware unterstützt und es gibt nur bei einigen exotischeren Komponenten Probleme.
Bevor wir allerdings mit der Konfiguration loslegen, will ich mit Ihnen noch ein paar grundlegende Dinge über Linux besprechen.
Windows-User sind es gewohnt Ihr System in Laufwerke mit bestimmten Buchstaben als Kürzel zu unterteilen. So entspricht C:\ der Systemplatte und D:\ könnte zB die Datenplatte sein. Dann würde E:\ für das DVD-Laufwerk verwendet werden und der angesteckte USB-Stick bekäme F:\ als Laufwerksbuchstaben. Netzlaufwerke von zB einem NAS könnten dann ebenfalls als Laufwerk (zB alsN:\) eingebunden werden. Alles ist "schön geordnet" und jedes Laufwerk ist separat ansprechbar über einen eindeutigen Buchstaben.
Nicht so bei Linux! Da gibt es lediglich ein Root-Verzeichnis / und in diesem befinden sich die folgenden Ordner und Dateien:
Na erraten Sie schon, wie der Hase läuft? Kommen Ihnen einige der Ordner bekannt vor?
Unter Linux werden die Platten oder Partitionen an einen Einhängepunkt gebunden. In unserer Partitionierung haben wir zB die erste Partition als / eingehängt. Daher liegen alle Daten auf dieser ersten Partition mit einigen Ausnahmen.
Als Nächstes haben wir eine eigene Partition für /home und eventuell auch für /var und /tmp erstellt. Also liegen alle Daten, die sich im Ordner /home befinden auf dieser zweiten Partition. Gleiches gilt für die optional erstellten anderen Partitionen.
Klingt erst mal unübersichtlich und kompliziert aber wenn man genauer nachdenkt, wird es schnell klar, dass diese Organisation deutlich besser ist. Im Verzeichnis /var legen Serverdienste Ihre Daten ab und auch die System-Logdateien landen dort. Würde jetzt der Speicherplatz in /var knapp werden, könnte man eine zweite Platte einfach innerhalb von /var einhängen und den Speicherplatz damit erweitern indem man zB die Daten von /var/www/ auf eine eigene Platte bzw. Partition verschiebt und diese dann dort einhängt. Somit kann man Speicherplatz flexibel erweitern. Das ist zB mit LVM oder BRTFS noch komfortabler umsetzbar. BRTFS unterstützt zB auch Snapshots des Dateisystems und einige andere nützliche Funktionen für Storage-Server. Daher ist die Wahl des Dateisystems und die Partitionierung wichtig im professionellen Einsatz.
Stellen Sie sich vor, unter Windows würde eine Platte voll werden. Dann hätten Sie nur die Möglichkeit die Daten auf zwei Platten zB D:\ (Daten 2011-2015) und E:\ (Daten 2016-heute) zu verteilen. Wären nun auf diesen zwei Platten Kundendaten dann müsste man um die Daten eines Kunden über alle Jahre hinweg zu finden auf beiden Platten danach suchen. In einigen Jahren käme dann die dritte Platte hinzu, usw. Natürlich gibt es auch da wieder einen Workaround. Man besorgt einfach eine größere Platte und kopiert alle alten Daten auf die neue Platte, was Zeit kostet und dann steht auch nur noch der freie Restspeicherplatz zur Verfügung und die alte Platte verstaubt unnütz im Schrank. Da ist Linux also deutlich flexibler - finden Sie nicht?
Damit Sie sich etwas besser zurechtfinden, gehen wir einmal alle Verzeichnisse durch:
/bin/
Beinhaltet Binaries. Das sind ausführbare Dateien (Programme) der Kernfunktionen. So findet man hier zB den ping-Befehl mit dem man die Erreichbarkeit von Rechnern im Netzwerk prüft.
/boot/
Beherbergt unter anderem den GRUB-Bootloader und die Startdatei mit dem Namen vmlinuz. Die Konfigurationsdateien von GRUB findet man ebenfalls unter /boot/grub/grub.cnf.
/dev/
Ist die Heimat der sogenannten Gerätedateien. Über diese Dateien wird die Hardware im Betrieb angesprochen. Hier finden wir zB /dev/sda oder /dev/sda1 usw. Hierzu sollte ich kurz erklären wie Linux Festplatten benennt.
Das sd steht für SCSI-Controller Drive, ältere IDE-Platten wurden als hd bezeichnet. Da auch SATA-Platten in Linux als SCSI-Controller gesehen werden, gilt hier auch der Prefix sd. Das a steht für die erste Platte bzw. die Platte am ersten Controller. Daher ist /dev/sda zB die Festplatte am ersten SATA-Controller. Die darauffolgende Nummer ist die Nummer der Partition. Somit kann die erste Partition dieser Platte mit /dev/sda1 und die ganze Platte mit /dev/sda angesprochen werden. Auch USB-Sticks fallen hierunter. Gesetzt dem Fall es gibt keine weiteren Festplatten in Ihrem PC, dann wäre der erste eingesteckte USB-Stick /dev/sdb und dessen erste Partition /dev/sdb1. Hier findet man ebenfalls die Datei /dev/cdrom und /dev/dvd, die ein Link auf das tatsächliche CD- bzw. DVD-Laufwerk sind. (Ein Link ist am ehesten mit einer Verknüpfung in Windows vergleichbar.)
/etc/
Beheimatet Konfigurationsdateien und steht für "editable text configuration" (änderbare Text-Konfiguration). Hier findet man zB die Datei /etc/fstab, in der die Einhängepunkte der Partitionen konfiguriert werden oder den Ordner /etc/apt/, der die Konfiguration des Update- und Installations-Mechanismus von Kali enthält.
/home/
Beinhaltet die Verzeichnisse der normalen Benutzer. Für jeden Benutzer mit Ausnahme von root gibt es hier ein Verzeichnis. In der Regel sieht die Standard-Konfiguration vor, dass ein Benutzer nur Lese- und Schreibzugriff auf sein eigenes Heimatverzeichnis hat. Aber dazu mehr, wenn wir uns das Rechte-System ansehen.
/lib/, /lib32/, /lib64/, /libx32/
Hier finden sich die Bibliotheken oder auch Shared-Objekts genannt. Dabei handelt es sich nicht um große Gebäude voll mit Büchern, sondern um Programmbibliotheken. Das sind ausgelagerte Teile von Programmen, die bei Bedarf nachgeladen werden können und mehreren Programmen gleichzeitig zur Verfügung stehen.
Die Zahlen 32 und 64 beziehen sich auf 32- bzw. 64-Bit und sind damit ein Indikator dafür in welcher Variante die Programmbibliotheken vorliegen.
/lost+found/
In diesem Ordner findet man Dateien die nach einem Systemabsturz eventuell beschädigt sind. Das macht es für den Systemadministrator leichter die betroffenen Dateien zu identifizieren und manuell zu prüfen.
/media/
Dieses Verzeichnis dient als Sammelpunkt für nachträglich eingehängte Wechseldatenträger. So findet man hier zB den Ordner /media/cdrom0/ in dem bei Bedarf eine eingelegte CD-Rom eingehängt wird oder /media/[username]/[label]/ in dem beispielsweise USB-Sticks automatisch eingehängt werden. Hierbei seht [username] für den Benutzernamen des Users der den Stick eingehängt hat und [label] für das Label der eingehängten Partition, die beim formatieren des Datenträgers vergeben wurde – zB: /media/mark/KEYLOG/
/mnt/
Dieser Ordner ist in der Regel leer. mnt steht für mount, also das Einhängen. Hier können zB temporär benötigte Datenträger eingehängt werden.
/opt/
Hier findet man zB Programme, die manuell installiert wurden und ihre eigenen Bibliotheken mitbringen. Damit es nicht zu Überschneidungen mit Bibliotheken kommt, die vom Update-Mechanismus immer auf der aktuellen Version gehalten werden, sollten händisch installierte Programme in diesem Ordner einen Platz finden.
/proc/
Ist ein Pseudo-Verzeichnis. Das bedeutet, dass alles was hier liegt, in dieser Form nur im laufenden Betrieb existiert. Man kann es als eine Art Datei- und Ordnerbasierte Schnittstelle zum RAM-Speicher sehen. Diverse Dinge können hier einfach erfragt werden - zB die Kernel-Version mittels /proc/version oder nähre Informationen zu einem laufenden Programm. Jede Anwendung bekommt beim Start eine eindeutige Nummer (PID) und im /proc/-Verzeichnis wird ein Unterordner mit dieser PID-Nummer angelegt. Darin befinden sich dann die verfügbaren Informationen -zB:
root@kali:~#
cat /proc/1414/status
Name:
xfce4-terminal
Status:
s (selleping)
Tgid:
1414
...
(Ausgabe gekürzt)
Wie Sie sehen konnten, wird der Name des Programms, der Status, die PID und vieles mehr geliefert. Es ist sogar möglich die Speicherbelegung im RAM zu beobachten und so zu sehen, was ein Programm genau macht.
/root/
Ist das Heimatverzeichnis des Systemadministrators, unter Linux Superuser oder root genannt.
/run/
Wurde mit dem systemd eingeführt. Der systemd verwaltet die Systemdienste und eben diese legen Daten in /run/ ab. Das d am Ende des Namens steht übrigens für Daemon, so nennt man die Systemdienste unter Linux. Generell sollen diese Dateien den Zustand des Gesamtsystems speichern. Ältere Programme greifen dazu aber noch auf /var/run/ zu.
/sbin/
Steht für System-Binaries und beinhaltet die ausführbaren Dateien der Administrationswerkzeuge.
/srv/
Soll Dateien von Systemdiensten (Services) beinhalten. Da es eine noch recht neue Erweiterung der Linux-Ordnerstruktur ist, wird es noch nicht von allen Programmen genutzt.
/sys/
Dieses Verzeichnis ist ebenfalls sehr neu und besteht wie /proc/ aus Kernel-Schnittstellen. Als Kernel wird der Systemkern von Linux bezeichnet.
/tmp/
Wie der Name vermuten lässt, ist das der Ort für temporäre Dateien. Möchte man eine Datei nach einem Neustart wiederfinden, sollte man sie hier keinesfalls hineinlegen. Das Verzeichnis wird bei jedem Boot-Vorgang geleert.
/usr/
Diese Abkürzung steht für Unix specific resources. Hier findet man angefangen von Programmdokumentationen (/usr/share/man/) über diverse Anwenderprogramme (/usr/bin/) bis hin zum Programm-Quelltexten (/usr/src/) so einiges.
/var/
Steht für variable data. Hier legen diverse Server-Dienste Ihre Daten ab. zB findet man hier das Basis-Verzeichnis vom Apache Webserver (webroot), die Datenbanken von MySQL oder die Log-dateien vom System und den meisten anderen Server-Diensten.
Wann immer ein Fehler auftritt hilft in der Regel ein Blick in /var/log/messages, /var/log/dmesg oder /var/log/syslog bzw. in die Log-Datei des entsprechenden Serverdienstes – zB: /var/log/apache2/error.log!
Eigentlich stimmt auch diese Aufzählung nicht mehr ganz denn einige der Verzeichnisse sind nur noch Links zu den neuen Speicherorten um das System mit älteren Programmen kompatibel zu halten.
Dies sehen wir in der Ausgabe von ls -l / sehr deutlich:
lrwxrwxrwx 1 root root 7 10. Aug 11:15 bin -> usr/bin
drwxr-xr-x 3 root root 4096 10. Aug 11:53 boot
drwxr-xr-x 17 root root 3440 10. Aug 12:12 dev
drwxr-xr-x 175 root root 12288 10. Aug 11:55 etc
drwxr-xr-x 4 root root 4096 10. Aug 11:51 home
lrwxrwxrwx 1 root root 33 10. Aug 11:16 initrd.img -> boot/initrd.img-
6.1.0-kali9-amd64
lrwxrwxrwx 1 root root 33 10. Aug 11:16 initrd.img.old -> boot/
initrd.img-6.1.0-kali9-amd64
lrwxrwxrwx 1 root root 7 10. Aug 11:15 lib -> usr/lib
lrwxrwxrwx 1 root root 9 10. Aug 11:15 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 10. Aug 11:15 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 10. Aug 11:15 libx32 -> usr/libx32
drwx------ 2 root root 16384 10. Aug 11:15 lost+found
drwxr-xr-x 3 root root 4096 10. Aug 11:15 media
drwxr-xr-x 2 root root 4096 10. Aug 11:15 mnt
drwxr-xr-x 3 root root 4096 10. Aug 11:31 opt
dr-xr-xr-x 212 root root 0 10. Aug 11:55 proc
drwx------ 4 root root 4096 10. Aug 11:55 root
drwxr-xr-x 33 root root 820 10. Aug 11:57 run
lrwxrwxrwx 1 root root 8 10. Aug 11:15 sbin -> usr/sbin
drwxr-xr-x 3 root root 4096 10. Aug 11:36 srv
dr-xr-xr-x 13 root root 0 10. Aug 11:55 sys
drwxrwxrwt 12 root root 4096 10. Aug 12:16 tmp
drwxr-xr-x 16 root root 4096 10. Aug 11:23 usr
drwxr-xr-x 12 root root 4096 10. Aug 11:21 var
lrwxrwxrwx 1 root root 30 10. Aug 11:16 vmlinuz -> boot/vmlinuz-6.1.0-
kali9-amd64
lrwxrwxrwx 1 root root 30 10. Aug 11:16 vmlinuz.old -> boot/vmlinuz-
6.1.0-kali9-amd64
Ein Link ist durch das l am Anfang der Zeile und den -> der auf den eigentlichen Speicherort zeigt leicht zu erkennen...
Unter Linux gibt es aus Sicherheitsgründen ein Berechtigungssystem, das sich in folgende drei Bereiche teilt:
Besitzer der Datei oder des Ordners
Gruppe(n) in der der Besitzer der Datei oder des Ordners Mitglied ist
Alle anderen
Zur Verdeutlichung ein kleines Beispiel - Stellen Sie sich eine Firma vor. Dort gibt es eine Abteilung Buchhaltung. Um das abzubilden, wurde eine Gruppe Namens buchhaltung erstellt. In der Gruppe buchhaltung gibt es zwei Benutzer - meier und huber.
Aufgabe 1 wäre es, dass die Benutzer die Daten des jeweils anderen lesen, aber nicht verändern dürfen. Da kommt der zweite Teil der Rechte ins Spiel. Jedes Objekt (Ordner, Datei, Link, etc.) hat drei Berechtigungen. Lesen (r), Schreiben (w) und Ausführen (x)!
Die Lösung hierfür sieht dann so aus - Benutzer huber und meier sind beide in der Gruppe buchhaltung und ihre Benutzerverzeichnisse haben folgende Berechtigungen:
root@kali:~#
ls -lh /home
drwxr-x---
2 huber buchhaltung 4,0K Feb 5 02:37 huber
drwxr-x---
3 meier buchhaltung 4,0K Feb 5 02:37 maier
Zerlegen wir eine der Zeilen in die Bestandteile:
root@kali:~#
ls -lh /home
drwxr-x---
2 huber buchhaltung 4,0K Feb 5 02:37 huber
drwxr-x---
3 meier buchhaltung 4,0K Feb 5 02:37 maier
Zerlegen wir eine der Zeilen in die Bestandteile:
d
..............
Directory, also ein Ordner
rwx
............
read, write, execute - Lesen, Schreiben, Ausführen (
User
)
r-x
............
read, execute - Lesen, Ausführen (
Gruppe
)
---
............
keine Rechte denn der - bedeutet nicht erlaubt (
alle Anderen
)
3
..............
Anzahl der Hardlinks
meier
..........
Username
buchhaltung
....
Hauptgruppe
4,0K
...........
Größe
Feb 5 02:37
...
Erstellungsdatum
maier
..........
Datei- bzw. Ordnername
Als zweite Aufgabe soll nun der Betriebsleiter ebenfalls auf die Daten der Buchhaltung lesend zugreifen können. Daher kommen die Benutzer huber und meier zusätzlich in die Gruppe direktion. Damit können die Mitglieder der Direktion ebenfalls auf die Daten zugreifen. Allerdings könnten damit auch die Benutzer huber und meier die Daten der Direktion einsehen. Damit das nicht passiert, dürfen auf den Verzeichnissen der Direktions-Benutzer keine Leserechte für die Gruppe vergeben sein. Damit sehe das home-Verzeichnis dann wie folgt aus:
root@kali:~#
ls -lh /home
drwxr-x---
2 huber
fibu
4,0K Feb 5 02:37 huber
drwxr-x---
3 meier
fibu
4,0K Feb 5 02:37 maier
drwx------
3 berger
direktion
4,0K Feb 5 02:37 berger
Es wäre jetzt sogar denkbar in den Benutzer-Ordnern von huber und meier jeweils einen Ordner namens Ablage zu erstellen und diesem dann auch Schreibrechte für die Gruppe zuzuweisen. Somit kann man sich quasi Dokumente auf den Schreibtisch legen und muss nicht permanent Dokumente intern per Mail versenden. Das sähe dann so aus:
root@kali:~#
ls -lh /home/huber
drwxrwx---
2 huber
fibu
4,0K Feb 5 02:37 Ablage
drwxr-x---
3 huber
fibu
4,0K Feb 5 02:37 Dokumente
usw.
Ziemlich praktisch und nicht mal schwer zu realisieren - finden Sie nicht? Eine Sache gilt es zu bedenken. Ein Ordner braucht immer neben der Lese- oder Schreibberechtigung auch die Berechtigung für das Ausführen. Ohne dieser kann man den Ordner nicht öffnen!
Gäbe es mehrere Benutzer in der Gruppe Direktion, welche die Verzeichnisse der anderen jeweils lesen dürfen sollen, hätte man auch Herrn Berger zusätzlich in die Gruppe buchhaltung stecken können. Man sieht hier aber auch, dass komplexe Berechtigungs-Strukturen nicht wirklich gut abzubilden sind. Darum gibt es als Erweiterung der klassischen Datei- und Ordner-Berechtigungen die ACLs (Access Control Lists). Sich darin einzuarbeiten überlasse ich an dieser Stelle interessierten Lesern als kleine Übung...
Einige Sonderfälle gehen wir anhand des Systems durch:
root@kali:~# ls -lh /initrd.img
lrwxrwxrwx 1 root root 33 Feb 5 01:52 /initrd.img -> boot/initrd.img-4.6.0-kali1-amd64
Das l steht, wie bereits erwähnt, für einen Link. Das wird durch den Pfeil noch deutlicher. Man kann es so lesen, dass /initrd.img auf /boot/initrd.img-4.6.0-kali1-amd64 zeigt. So etwas kommt oft in Linux vor. In dem Fall handelt es sich um die initiale Ramdisk und der Link zeigt auf die neueste Version. Sollte in dieser ein Fehler enthalten sein, durch den das System nicht mehr booten würde, könnte der Administrator den Link einfach auf die letzte funktionierende Version abändern und das Problem wäre vorerst behoben.
root@kali:~# ls -lh /bin/su
-rwsr-xr-x 1 root root 40K Nov 12 2015 /bin/su
Hier ist ein s anstatt des x bei den Berechtigungen des Besitzers gesetzt. Das steht für Set-UID und bedeutet, dass jeder User, der dieses Programm ausführt, die Berechtigungen des Besitzers der Datei erbt. Das macht in dem Fall auch Sinn denn das Programm su wird dazu verwendet auf einen anderen Benutzer zu wechseln. So kann man mit su ohne Angabe des Benutzernamens auf den Benutzer root wechseln. Und für derartige Aktionen sind nun mal root-Rechte erforderlich, denn root ist der Einzige, der über dem Rechte-System von Linux steht und alles darf.
Jedes Mal wenn Sie ein Terminal öffnen, dann sehen Sie vor dem blinkenden Cursor eine Zeile wie diese: root@kali:~#.
Diese Zeile gibt ihnen ein paar Infos, wer sie sind, an welchem Rechner Sie angemeldet sind und in welchem Verzeichnis sie sich befinden. Zerlegen wir diese Zeile in Ihre Bestandteile:
root ...
Benutzername
@ ......
Angemeldet an
kali ...
Rechnername
: ......
Trennzeichen zum Verzeichnis
~ ......
Verzeichnis (
~
steht für das Benutzerverzeichnis
)
# ......
Trennzeichen für
root
, Normale User haben das
$
als Trennzeichen
Daher sieht man oft in Webseiten oder Büchern die Schreibweise # befehl wenn ein Befehl mit root-Rechten ausgeführt werden soll und $ befehl, wenn User-Rechte reichen.
Wie Sie anhand der bisherigen Beispiele gesehen haben, hebe ich den eingegebenen Befehl jeweils fett hervor. Dies werde ich auch das ganze Buch hindurch so machen.
Beim neuesten Kali 2023.2 gibt es keinen dezidierten root-User mehr. Sie können sich temporär root-Rechte verschaffen, indem Sie einem Befehl sudo voranstellen - zB:
mark@kali:~$ sudo apt update
[sudo] Passwort für user:
Holen:1 http://mirror.karneval.cz/pub/linux/kali kali-rolling InRelease [30,5 kB]
Holen:2 http://mirror.karneval.cz/pub/linux/kali kali-rolling/main Sources [13,0 MB]
... Ausgabe gekürzt
Bei der ersten Verwendung von sudo werden Sie nach Ihrem Passwort gefragt. Tippen Sie es ein und bestätigen Sie die Eingabe mit Enter, lassen Sie sich aber nicht davon beirren, dass Sie nichts sehen. Linux zeigt nicht an, dass Sie tippen. Um nicht mal die Länge des Passwortes preiszugeben, werden auch keine Sternchen oder dergleichen angezeigt.
Danach merkt sich dies das System für einige Minuten. Innerhalb dieser Zeit müssen Sie Ihr Passwort nicht erneut eingeben.
Um dauerhaft root-Rechte zu bekommen innerhalb der Terminal-Sitzung können Sie folgenden Befehl verwenden:
mark@kali:~$ sudo -i
[sudo] Passwort für mark:
root@kali:~#
Windows-Nutzer sind es gewohnt Programme aus dem Internet herunterzuladen und dann die Installation zu starten und diverse Dialoge mit weiter zu bestätigen um ein Programm zu installieren.
Linux geht hier einen ganz anderen Weg. Paketverwaltung heißt das Zauberwort. Viele Linux-Distributionen bieten grafische Werkzeuge an um Programme zu installieren. Kali bietet standardmäßig nur die Konsolenbefehle an, aber wir können grafische Installationswerkzeuge auf Wunsch nachinstallieren. Ich werde mich hier auf die Installation mit den Kommandozeilen-Tools beschränken.
Als Erstes sollte man immer versuchen, Software über die Paketverwaltung zu installieren. Software, die damit installiert wird, ist mit dem System sicher kompatibel und für die jeweilige Distribution angepasst. Je nach Distribution gibt es zB andere Pfade für Konfigurationsdateien, etc. Außerdem kann es durchaus sein, dass ein Programm bestimmte Bibliotheken, Schriften, weitere Hilfsprogramme, usw. benötigt, um korrekt zu arbeiten. Hierbei spricht man von Abhängigkeiten. All das erkennt die Paketverwaltung und lädt die zusätzlich benötigten Pakete herunter und installiert diese.
Das zeige ich Ihnen am besten anhand eines Beispiels. Da wir Xfce nutzen, möchte ich zuerst einige zusätzliche Plugins installieren. Da ich die genauen Namen der Pakete nicht auswendig weiß, werden wir zunächst danach suchen. Ich würde Ihnen empfehlen, diese Schritte mit mir
gemeinsam zu machen da die hier installierten Plugins meiner Meinung nach die Arbeit mit Kali etwas erleichtern oder anderweitig nützlich sind.
Dazu bringen wir als Erstes die Paketliste auf den neuesten Stand. Das sollten Sie vor jeder Installation oder jedem Update machen.
Um zu beginnen, öffnen Sie ein Terminal. Dieses finden Sie unter: Anwendungen oben Links und dann Terminal. Danach öffnet sich ein schwarzes Fenster in dem Sie die folgenden Befehle eintippen können:
root@kali:~# apt update
OK:1 http://mirror.karneval.cz/pub/linux/kali kali-rolling InRelease
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Aktualisierung für 947 Pakete verfügbar. Führen Sie »apt list --upgradable« aus, um sie anzuzeigen.
Danach suchen wir nach den Begriffen "xfce" und "plugin" mittels:
root@kali:~# apt search xfce4 plugin
... Ausgabe gekürzt
xfce4-appmenu-plugin/kali-rolling 0.7.6+dfsg1-4+b1 amd64
Application Menu plugin for xfce4-panel
xfce4-battery-plugin/kali-rolling,now 1.1.4-1 amd64
[Installiert,automatisch]
battery monitor plugin for the Xfce4 panel
xfce4-clipman-plugin/kali-rolling 2:1.6.3-1 amd64
[aktualisierbar von: 2:1.6.2-1]
clipboard history plugin for Xfce panel
... Ausgabe gekürzt
Damit wir jetzt nicht dutzende Paketnamen eingeben oder nacheinander herauskopieren müssen, können wir auch Platzhalter verwenden. Wenn wir uns die Paketnamen ansehen merken wir, dass diese einem Schema folgen: xfce4-[irgendwas]-plugin. Daher können wir mit
root@kali:~# apt install xfce4-*-plugin
alle Plugins auf einmal installieren. Mit dem Befehl
root@kali:~# apt-get install xfce4-whiskermenu-plugin
... könnten wir nur das Whisker-Menü installieren. Da ich jedoch noch weitere Plugins benötige und die ohnehin kaum Speicherplatz belegen werde ich gleich alle auf einmal installieren.
root@kali:~# apt install xfce4-*-plugin
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Hinweis: »xfce4-weather-plugin« wird für »xfce4-*-plugin« gewählt.
Hinweis: »xfce4-xkb-plugin« wird für »xfce4-*-plugin« gewählt.
... Ausgabe gekürzt
xfce4-wavelan-plugin wurde als manuell installiert festgelegt.
xfce4-xkb-plugin ist schon die neueste Version (1:0.8.3-1).
xfce4-xkb-plugin wurde als manuell installiert festgelegt.
Die folgenden zusätzlichen Pakete werden installiert:
appmenu-gtk-module-common appmenu-gtk2-module appmenu-gtk3-module
... Ausgabe gekürzt
xfce4-whiskermenu-plugin
7 aktualisiert, 25 neu installiert, 0 zu entfernen und 940 nicht aktualisiert.
Es müssen 4.691 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 13,1 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
Sehen wir uns diese Ausgabe einmal näher an:
Zuerst werden Ihnen die Pakete aufgelistet, die ausgewählt wurden zB:
Hinweis: »xfce4-weather-plugin« wird für »xfce4-*-plugin« gewählt.
Bei einigen Paketen werden Sie darauf hingewiesen, dass diese bereits in der neuesten Version installiert sind zB:
xfce4-xkb-plugin ist schon die neueste Version (1:0.8.3-1).
Danach werden Sie darauf hingewiesen, dass weitere Software mitinstalliert wird, da diese für die Funktion der Pakete, die Sie ausgewählt haben, notwendig ist - siehe:
Die folgenden zusätzlichen Pakete werden installiert:
appmenu-gtk-module-common appmenu-gtk2-module appmenu-gtk3-module
Die Punkte Vorgeschlagene Pakete und Empfohlene Pakete weisen Sie auf weitere Pakete hin, die Sie eventuell benötigen könnten oder die zu Ihrer Auswahl passen. Windowsuser kennen den Fall, dass man ein Programm installiert und wenn man nicht gut aufpasst, sind drei Browserbars und zwei Testversionen von irgendwas mitinstalliert worden. Das ist hier nicht der Fall. Einerseits werden dies Pakete nicht installiert, wenn man Sie nicht explizit mit in die Liste aufnimmt und andererseits wird hier kein Werbe-Müll vorgeschlagen, sondern sinnvolle Ergänzungen.
Zu guter Letzt erhalten Sie Informationen darüber wie viel Daten aus dem Internet geladen werden müssen und wie viel zusätzlicher Speicherplatz auf der Festplatte von den Paketen verbraucht wird.
Wenn Sie damit einverstanden sind, bestätigen Sie die Frage mit J und drücken Enter bzw. Return.
Die Pakete werden nun heruntergeladen, entpackt, installiert und wenn nötig mit einer Standrad-Konfiguration eingerichtet. Während apt arbeitet, können Sie sich einen Kaffee holen oder eine Rauchpause einlegen.
Sie könnten zB auch den Befehl apt install x y z mit einigen weiteren Befehlen in eine einfache Textdatei packen und diese dann als Shell-Script laufen lassen falls Sie zB mehrere PCs mit der gleichen Software aufsetzen wollen. Ich nutze das in der Regel bei meinen Kunden. Kommt ein neuer PC dazu, dann mache ich die Grundinstallation vom System, starte das Installations-Script von einem USB-Stick und die Installation der Software, das Einhängen von Netzwerk-Speichern, die Einrichtung von automatischen Backups und einiges mehr macht das Script für mich während ich ein Schwätzchen mit den Angestellten halte, oder mich um andere Dinge kümmere. Das ist nur bedingt und deutlich aufwendiger unter Windows realisierbar.
Wie man sich ein solches Script erstellt sowie ein kleines Beispiel-Script folgt im Anschluss.
Manchmal ist ein bestimmtes Programm nicht in der Paketverwaltung enthalten. Oftmals stellen die Hersteller der Software aber dennoch Pakete zur Verfügung, die über die Homepage heruntergeladen werden können.
Das ist einer Installation aus dem Quelltext vorzuziehen, da diese Pakete für ihre Distribution optimiert sind und Sie hierbei in der Regel sehr selten auf Probleme stoßen. Also warum sich das Leben schwer machen?
Zur Demonstration dieser Installationsmethode verwenden wir Nessus. Nessus ist ein Scanner, der Schwachstellen in PCs sucht, die wir mit Exploits ausnutzen können. Da wir Nessus in weiterer Folge ohnehin benötigen werden, will ich hier kurz die Installation aufzeigen.
Nessus ist nicht gerade billig, eine Lizenz kostet mehr als 2.000 USD. Glücklicherweise gibt es eine Test-Version und eine unbegrenzt gültige Essentials-Version. Da wir uns ohnehin darauf geeinigt haben nur das eigene Netzwerk zu "hacken" werden wir hier nun die Installation der Essentials-Version von Nessus in Angriff nehmen.
Zuerst müssen wir die Homepage des Herstellers aufrufen und den Aktivierungscode anfordern:
https://de.tenable.com/products/nessus/activation-code
Dazu müssen Sie sich mit einem Namen und einer E-Mail-Adresse registrieren. Der Lizenzschlüssel wird Ihnen dann per Mail zugesandt. Danach können Sie Nessus downloaden und Installieren.
Beim Download haben Sie die Auswahl verschiedenster Pakete für Linux. Da Kali-Linux auf Debian-Linux basiert verwendet auch Kali sogenannte .deb-Pakete. Es ist wichtig zu wissen, dass Kali nur mit .deb-Paketen umgehen kann. Beispielsweise .rpm-Pakete sind für das Redhat Paket Management System gemacht und können unter Redhat, Centos, Fedora und zig weiteren Distributionen verwendet werden, jedoch nicht unter Kali. Egal von wo Sie Pakete zur Installation eines Programmes herunterladen - achten Sie darauf, dass diese Pakete für die Debian-Paketverwaltung gemacht sind. Das erkennen Sie an der Dateierweiterung .deb!
Die Installation ist wieder mit apt machbar:
root@kali:~# apt install /home/mark/Downloads/Nessus-10.5.4-ubuntu1404_amd64.deb
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Hinweis: »nessus« wird an Stelle von »/home/mark/Downloads/Nessus-10.5.4-
ubuntu1404_amd64.deb« gewählt.
Die folgenden NEUEN Pakete werden installiert:
nessus
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 947 nicht aktualisiert.
Es müssen noch 0 B von 66,7 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Holen:1 /home/mark/Downloads/Nessus-10.5.4-ubuntu1404_amd64.deb nessus amd64 10.5.4
[66,7 MB]
Vormals nicht ausgewähltes Paket nessus wird gewählt.
(Lese Datenbank ... 397560 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../Nessus-10.5.4-ubuntu1404_amd64.deb ...
Entpacken von nessus (10.5.4) ...
nessus (10.5.4) wird eingerichtet ...
HMAC : (Module_Integrity) : Pass
SHA1 : (KAT_Digest) : Pass
... Ausgabe gekürzt
ECDH : (KAT_KA) : Pass
RSA_Encrypt : (KAT_AsymmetricCipher) : Pass
RSA_Decrypt : (KAT_AsymmetricCipher) : Pass
RSA_Decrypt : (KAT_AsymmetricCipher) : Pass
INSTALL PASSED
Unpacking Nessus Scanner Core Components...
You can start Nessus Scanner by typing systemctl start nessusd.service
Then go to https://kali:8834/ to configure your scanner
Hierbei müssen Sie mark durch ihren eigenen Benutzernamen ersetzen!
Alternativ dazu ist auch eine Installation mit dpkg -i dateiname.deb möglich. apt sorgt allerdings gleich dafür, dass Abhängigkeiten aufgelöst werden und ist daher zu bevorzugen.
Die Installation dauert einige Sekunden und danach sollten Sie die oben gezeigten Meldungen sehen.
Ab und an kommt es vor, dass ein Entwickler keine Pakete zur Verfügung stellt, sondern lediglich den Quellcode zum Download anbietet. In solchen Fällen ist man gezwungen das Programm aus dem Quellcode zu bauen. Da das recht selten der Fall ist und es, je nach dem um welches Programm es sich handelt, kleine Unterschiede zu beachten bzw. andere Probleme zu lösen gilt, will ich es hier nur am Rande erwähnen.
Eine Anleitung, die Ihnen erklärt wie man welche Probleme lösen kann und was dabei alles schief gehen könnte, würde den Rahmen des Buches bei Weitem sprengen. In solchen Fällen helfen Foren, IRC-Chatrooms und diverse Anleitungen weiter.
Ich will an der Stelle aber dennoch etwas theoretisch auf die Vorgehensweise eingehen:
Zuerst müssen Sie den Quellcode herunterladen. Der wird in der Regel in einem komprimierten Archiv zum Download angeboten. Nach dem Download muss das Archiv entpackt werden.
Welcher Befehl dazu benötigt wird hängt, vom Dateityp ab. tar, bunzip und unzip wären die "üblichen Verdächtigen".
Danach müssen Sie ein Terminal öffnen und in den Ordner navigieren, der den Quelltext enthält. In der Regel erfolgt die Installation mit dem klassischen Dreisatz:
root@kali:~/QuellcodeOrdner# ./configure
root@kali:~/QuellcodeOrdner# make
root@kali:~/QuellcodeOrdner# make install
In der Regel enthält die Homepage des Programmierers oder die Seite auf der Sie den Quellcode herunterladen zumindest rudimentäre Anleitungen. Meist findet sich auch eine Installationsanleitung im Ordner mit dem Quellcode. Diese sollte man unbedingt vorher ansehen, denn nicht jedes Programm kann mit dem oben gezeigten Dreisatz übersetzt und installiert werden.
Meist werden auch bestimmte Pakete benötigt, um den Quelltext zu übersetzen. Welche das sind, wird in besagter Anleitung erklärt. Falls eines oder mehrere der Pakete fehlen müssen diese vorher installiert werden. Dass man Anpassungen an diversen Dateien vornehmen muss, ist ebenfalls keine Seltenheit. Daher ist diese Installationsmethode nur etwas für erfahrene Linux-User.
In diesem Fall werde ich die Erklärungen direkt in dem Script unterbringen. Dies wird anhand von Kommentaren passieren. Kommentare sind Erklärungstexte in einem Script und werden vom Interpreter (dem Programm, das das Script ausführt) ignoriert. Bevor es losgeht noch zwei Dinge:
1. Ein Kommentar beginnt bei Shell-Scripts immer mit dem Raute-Zeichen (#). In Scripts wie diesem hier werde ich allerdings die Kommentare fett hervorheben um die Erklärungen stärker zu betonen.
2. Ein Bashscript wird immer mit einem Pseudokommentar in der Form #!/bin/bash begonnen.
#!/bin/bash
# Paketlisten aktualisieren
apt update
# Installation von Software
# Die Option -y bestätigt die Frage, ob die Software
# installiert werden soll, automatisch mit Ja
# Geany ist ein guter grafischer Texteditor,
# Abiword und Gnumeric sind ein rudimentärer Ersatz für Word und Excel
# Weitere Pakete können durch Leerzeichen getrennt angehängt werden
apt -y install xfce4-*-plugin geany gnumeric abiword
# NAS-Freigabe mittels samba mounten
# 1) Mountpoint anlegen
mkdir /mnt/nas
# 2) Eintrag in fstab für automatisches Mounten beim Bootvorgang hinzuf.
# username=user (anstatt user den Loginnamen der Freigabe einsetzen)
# password=pass (anstatt pass das Passwort der Freigabe einsetzen)
echo "//192.168.1.2/freigabe /mnt/nas cifs
rw,username=user,password=pass,user,users,exec 0 0" >> /etc/fstab
# 3) Einhängen der Freigabe
mount /mnt/nas
# User anlegen & zur sudo-Gruppe hinzufügen (siehe Kapitel Konfiguration)
# username können Sie nach Bedarf abwandeln
useradd -m username
passwd username
usermod -a -G sudo username
chsh -s /bin/bash username
# Backup-Ordner in der eingehängten NAS-Freigabe erstellen
# Name des Rechners mit dem hostname-Kommando ermitteln und in "ordner" speichern
ordner=$(hostname)
# Unterordner für den Rechner auf der NAS-Freigabe im Ordner "backup" erstellen
mkdir /mnt/nas/backup/$ordner
# Cronjob für automatische Backups täglich um 2:30 Früh erstellen
# Das Backup sichert /home, /etc und /root
echo "30 2 * * * root cp -ru /home /mnt/nas/backup/$ordner && cp -ru /etc
/mnt/nas/backup/$ordner cp -ru /root /mnt/nas/backup/$ordner" >> /etc/crontab
Abgesehen von der Zeile passwd username läuft das Script automatisch durch. Die Abarbeitung der nachfolgenden Zeilen wird jedoch nur wenige Sekunden dauern. Daher wissen Sie, sobald Sie nach dem neuen Passwort für den User gefragt werden, ist die Einrichtung quasi fertig.
Zugegeben Linux-Profis werden sich bei dieser Backup-Lösung schon einiges denken. Vor allem weil das Backup nicht berücksichtigt, dass Dateien nachdem man Sie in einen anderen Ordner verschiebt im Backup doppelt (alte Position und neue Position) vorhanden wären. Somit wäre dieses Backup recht chaotisch. Sie können ja als Übung ein besseres Backup-Script erstellen. Zur besseren Lesbarkeit wäre es auch gut das Backup-Script zuerst in eine Datei zu schreiben und diese dann in der crontab auszuführen. Hierzu ein kleiner Tipp - sehen Sie sich rsync an! Alternativ kann man zB mit tar Archive erstellen, die sich komprimieren lassen und so ein Backup-Archiv aufbauen. Vor allem riesige Textdokumente wie Wortlisten lassen sich sehr gut komprimieren. Bevor Sie mit dieser Übung beginnen, rate ich Ihnen sich noch den Abschnitt "Arbeiten mit der Shell und die wichtigsten Befehle" anzusehen.
Wenn Sie jetzt schon glauben, dass die bash und bash-Scripts mächtig sind, dann werden Sie im weiteren Verlauf "Augen machen". Was Sie bis dato gesehen haben, ist erst ein ganz kleiner Ausblick auf das, was möglich ist. Eines der Tools, die wir später noch verwenden werden, wurde zur Gänze als bash-Script realisiert. Außerdem werden wir ein kleines Bash-Script für einen Angriff auch selber schreiben.
Als erste Übung wollen wir uns ansehen wie man in der Shell zwischen Ordnern wechselt. Dazu stehen einem zwei Adressierungen zur Verfügung:
Die absolute Adressierung erfolgt immer ausgehend von dem Wurzel-Verzeichnis /. Bei absoluten Adressierungen beginnt der Pfad also immer mit einem /.
zB: cd /home/mark/Downloads/ oder cd /var/log/apache2/
Bei der relativen Adressierung gibt man nur den Teil des Pfades an, der absolut gesehen nach dem Verzeichnis stehen würde, in dem man sich befindet. Man gibt also nur den Teilpfad ausgehend von dem aktuellen Verzeichnis an. Nehmen wir nun an wir befinden uns derzeit in /home/markus/ und wollen in den Ordner Downloads wechseln, dann wäre der Befehl cd Downloads/. Denkbar wäre auch die folgende Schreibweise: cd ./Downloads/
Unter Linux gibt es zwei Pseudo-Verzeichnisse:
Das
.
Verzeichnis steht für den aktuellen Ordner und
das
..
Verzeichnis für den übergeordneten Ordner.
Zur Anwendung kommt das . Verzeichnis in der Regel dann, wenn man Programme aus einem Pfad heraus starten will in dem Linux nicht nach ausführbaren Dateien sucht.
root@kali:~# machwas.sh
-bash: machwas.sh: Kommando nicht gefunden.
Der Befehl konnte nicht gefunden werden da Linux im aktuellen Ordner nicht nach einem ausführbaren Befehl namens machwas.sh sucht.
root@kali:~# machwas.sh
OK, ich hab was gemacht...
Durch die Angabe von ./ wurde dem System mitgeteilt, dass sich die Datei im aktuellen Ordner befindet und dort konnte das Programm gefunden und ausgeführt werden.
Befinden Sie sich zB im Ordner /home/mark/Downloads/ dann würden Sie durch die Eingabe von cd .. auf den übergeordneten Ordner /home/mark/ wechseln. Jedes Mal wenn man cd .. eingibt, springt man eine Ebene höher bis man im /-Verzeichnis ankommt. Um direkt zwei Verzeichnis-Ebenen hinauf zu springen, kann man cd ../.. eingeben. Natürlich lässt sich das auch für 3, 4 oder 10 Ebenen entsprechend erweitern. Vor allem beim Webhacking ist ein Verständnis für relative Adressierung sehr wichtig.
Ein weiteres sehr praktisches Werkzeug in der Shell sind Pipes. Damit wird die Ausgabe eines Programms einem anderen Programm als Eingabe übergeben. Sehen wir uns dazu ein Beispiel an:
Stellen wir uns vor wir wollen wissen ob das Script machwas.sh noch läuft. Wenn wir ps ax verwenden, um das zu prüfen, werden alle Prozesse aufgelistet. Leider ist diese Liste sehr lang:
root@kali:~#
ps ax
PID TTY
STAT
TIME COMMAND
1?
Ss
0:01 /sbin/init
2?
S
0:00 [kthreadd]
3?
S
0:00 [ksoftirqd/0]
... Ausgabe gekürzt
1122 pts/1
S
0:00 /bin/bash ./machwas.sh
... Ausgabe gekürzt
Um uns das Suchen zu erleichtern, können wir die Ausgabe mit grep filtern. Am einfachsten geht das mit einer Pipe:
root@kali:~#
ps ax | grep machwas
1122 pts/1
S 0:00 /bin/bash ./machwas.sh
1172 pts/1
S+ 0:00 grep machwas
Durch das | Zeichen wird die Ausgabe von ps ax als Eingabe für grep verwendet und grep sucht dann nach dem regulären Ausdruck "machwas" und verkürzt die Ausgabe auf die Zeilen, in denen dieser Ausdruck vorkommt.
Pipes lassen sich allerdings auch beliebig oft hintereinander einsetzen. Nehmen wir nun an, wir benötigen die PID (1. Spalte) um in einem Shellscript zu ermitteln ob machwas.sh läuft. Dann erreichen wir das wie folgt:
root@kali:~# ps ax | grep machwas | grep -v grep
1122 pts/1 S 0:00 /bin/bash ./machwas.sh
Mit grep -v grep wird die Ausgabe nochmals gefiltert, um den Prozess der grep-Suche aus der Liste zu entfernen. Dabei steht -v grep für das Ausschließen von Zeilen die "grep" enthalten.
root@kali:~# ps ax | grep machwas | grep -v grep | awk '{print $1}'
1122