in diesem Video zeige ich dir wie du
einen eigenen honeypod in pipen
programmieren kannst sodass sich Hacker
die Zähne an dem SSH Zugang ausbeißen
dazu verwenden wir die pipifenbibliothek
paramiko zuvor schauen wir uns aber noch
einmal kurz an was man unter einem
honeypod überhaupt versteht ein honeypod
ist eine Sicherheitsvorkehrung die
eingesetzt wird um potenzielle Angreifer
zu täuschen zu identifizieren und zu
überwachen wie die Bienen von Honig
angeloggt werden so logt man mit einem
honeypod Angreifer an und kann ihre
Aktivitäten in einer kontrollierten
Umgebung überwachen dies gelingt z.B
durch die Simulation eines bekannten
Dienstes wie SSH der wie das Original
standardmäßig auf Port 22 lauscht in
Wirklichkeit aber keine Kombination aus
Benutzernamen oder Passwörtern zulässt
und genau das werden wir jetzt mit Hilfe
von paramiko selbst programmieren dafür
wird die pyenbibliothek paramiko
benötigt diese kann dazu genutzt werden
um SSH in pythonanwendungen zu verwenden
sie ermöglicht es Entwicklern SSH
Verbindungen herzustellen und zu
verwalten was besonders nützlich ist
wenn man auf entfernte Server oder
Geräte zugreifen muss mit paramiko
können SSH Verbindungen erstellt Befehle
ausgeführt Dateien übertragen und viele
andere Aufgaben im Zusammenhang mit SSH
durchgeführt werden für die Installation
öffnest du die CMD oder das Terminal und
gibst den Befehl PIP install paramiko
ein nach der erfolgreichen Installation
beginnen wir nun mit der Implementierung
des honeypods in Python wir starten mit
dem sheibang in Zeile 1 und importieren
uns dann die drei Bibliotheken socket
paramiko und threading danach erzeugen
wir eine eigene Klasse SSH Server die
von dem serverinterface des Moduls
paramiko erbt deshalb schreiben wir
paramiko.serverinterface in runden
Klammern direkt hinter den Klassennamen
solltest du Fragen zuur
objektorientierten Programmierung haben
dann schau dir gerne mein Video dazu an
innerhalb unserer eigenen SSH
serverklasse die von dem Server
interterface von paramiko erbt
überschreiben wir die beiden bereits
vorhandenen Funktionen checkoutth
password und checkoutth Public Key
checkoutth password übernimmt die
Authentifizierung mit Benutzernamen und
Passwort egal was der Benutzer eingibt
es wird am Ende mit
paramiko.or failed immer die Meldung
zurückgegeben dass der Anmeldeversuch
fehlgeschlagen ist wir lassen uns zuvor
jedoch ausgeben was der Angreifer
einzugeben versucht hat also den von ihm
verwendeten Benutzernamen und das
dazugehörige Passwort wie bereits
erwähnt ist diese Funktion in der
serverinterface Klasse bereits vorhanden
wir überschreiben Sie nur also so dass
nicht nach einem korrekten Benutzernamen
und einem Passwort gefragt wird sondern
einfach immer au fail zurückgegeben wird
die Funktion Check au public key
überprüft ob sich der Angreifer mit
einem Public Key anzumelden versucht das
ist die zweite Variante wie man sich
gegenüber eines SSH Servers
authentifizieren kann wenn das der Fall
ist wird mit
paramiko.orfiled direkt mitgeteilt dass
die Authentifizierung fehlgeschlagen ist
mit diesem Konstrukt ist ein Angreifer
niemals in der Lage sich anzumelden egal
welche Zugangsdaten er verwendet da
immer
paramiko.orth fail zurückgegeben wird
das bremst ihn aus und ermöglicht uns zu
sehen
welche Zugangsdaten er verwendet hat ob
ein bestimmter Benutzer attackiert
werden soll etc jetzt definieren wir uns
eine Funktion handle connection die ein
Client socket und ein Server key erhält
innerhalb dieser Funktion definieren wir
ein
paramico.transportobjekt das für die SSH
Kommunikation zwischen dem Server also
dem honeypod und dem Client das ist der
potenzielle Angreifer verwendet wird der
übergebene serverkey wird dann dem
Transport hinzugefügt der serverkey wird
verwendet um die Authentizität des
Servers gegenüber dem Client zu
gewährleisten dieser Schritt ist
notwendig damit der Client den
öffentlichen Schlüssel des Servers hat
um Verschlüsselung und Authentifizierung
zu ermöglichen anschließend wird ein SSH
Server erzeugt und direkt danach
gestartet jetzt programmieren wir die
mainfunktion innerhalb dieser Funktion
definieren wir zuerst ein socketobjekt
dieses Objekt wird verwendet um auf
eingehende Netzwerkverbindungen zu
lauschen es wird für das TCP Protokoll
das signalisieren wir durch
socket.sockstream und die IPv4
adressfamilie das ist dann mit
socket.af_init gemeint konfiguriert in
der nächsten Zeile setzen wir eine
socket Option
so_reuse address die es uns ermöglich
den gleichen Port erneut zu verwenden
auch wenn vorherige Verbindungen noch
aktiv sind wir bereiten uns also nicht
nur auf ein sondern auf potenziell
mehrere Angreifer gleichzeitig vor
danach beinden wir auf Port 22 und
erlauben zunächst einmal bis zu 100
Verbindungsanfragen in der Warteschlange
wenn du wissen willst warum wir hier die
IP-Adresse
0.0.0.0 verwendet haben dann schau dir
mein Video zu diesem Thema an den Link
findest du unten in der
Videobeschreibung jetzt erzeugen wir uns
einen serverkey und akzeptieren in einer
Endlosschleife eingehende
Verbindungsanfragen sobald eine
Verbindungsanfrage eingegangen ist
zeigen wir sie an daraufhin wird die
Verbindung mit der Funktion handle
connection in einem eigenen Thread
vorbereitet und der Thread gestartet im
Hauptprogramm rufen wir nun lediglich
die mainfunktion auf bevor wir das
Programm testen verschieben wir jetzt
noch den echten SSH Server auf einen
anderen Port öffne dazu als sudo die
Konfigurationsdatei
sshd_cfig
unter/atc/ssh navigiere zu dem Eintrag
an dem aktuell noch Port 22 steht
kommentiere ihn durch Entfernen der
Router ein und ändere die Portnummer z.B
auf 2222 mit Steuerung s speicherst du
die Änderungen und mit Steuerung x
beendest du das Programm starte den SSH
Service anschließend mit dem Befehl
sududo System CTL restart SSH neu
perfekt auf dieser Maschine hier werden
wir gleich den honeypod starten sofort
schauen wir uns noch die IP-Adresse an
öffne dazu das Terminal und gibt den
Befehl ifcig ein hier siehst du die
IP-Adresse unserer Maschine also
10.0.2.15 wir starten den honeypod mit
Hilfe des Befehls Python
honeypod.pie ich habe parallel eine
zweite virtuelle Maschine gestartet das
ist in unserem Szenario der Angreifer
wir versuchen uns nun ganz klassisch per
SSH mit der Zielmaschine
10.0.2.15 zu verbinden ja dann wollen
wir doch mal direkt versuchen uns als
Administrator anzumelden dazu geben wir
SSH
[email protected] ein danach werden wir
gefragt ob wir dem Server vertrauen was
wir mit yes bejahen anschließend werden
wir mit dem klassischen SSH promt
begrüßt und nach einem Passwort gefragt
wir kennen das Passwort natürlich nicht
und versuchen es deshalb zu brotforcen
ich teste jetzt einfach mal ABC 1 2 3
okay das hat schon mal nicht geklappt
was ist mit geheim schade auch das geht
nicht und
Andromeda 2010 hm auch nicht mist dann
versuchen wir es einfach erneut ich gebe
hier im Hintergrund wieder drei
passwörte ein doch wie du sehen kannst
will so keines wirklich gelingen wenn
wir zurück auf die Honeypot Maschine
wechseln dann sehen wir ganz genau was
der Angreifer gerade versucht hat er
surft offenbar mit der IP-Adresse
10.0.2.22 und hat zuerst
abc123 dann geheim und schlussendlich
andromida 2010 eingegeben um sich damit
als Administrator anzumelden der
Angreifer versucht es nun mit
kali10.0.2.15 und probiert erneut
Passwörter aus jetzt sehen wir dass
statt des Benutzers Admin der Benutzer
Kali mit denel Passwörtern zu knacken
versucht wurde das deutet auf einen
password spraying Angriff hin den wir
uns in einem anderen Video näher
anschauen werden herzlichen Glückwunsch
du hast in diesem Video gelernt wie man
ein handoneypod in Python realisiert und
testet deine Aufgabe wäre es nun das
Programm so zu erweitern dass die vom
Angreifer eingegebenen Anmeldedaten in
einer Logdatei auf dem Rechner
gespeichert werden solltest du weitere
Fragen haben kannst du sie gerne unten
in den Kommentaren posten vielen Dank
fürs zusehen und bis zum nächsten Video