|
Details:
Autor: |
Stefan Klaas / Hacking SSH – Angriffe gegen die Secure Shell |
Datum: |
30.05.2007 11:40:13 |
|
SSH Session Hijacking
Hat ein Hacker Zugriff auf einen Server (oder einen Client), kann er bestehende SSH-Verbindungen zu entfernten Systemen übernehmen. Es gibt verschiedene Möglichkeiten, dies zu erreichen. Einige dieser Attacken sind schwer, andere ziemlich einfach durchzuführen. Wir werden uns zwei der Methoden ansehen. Mit der ptrace()-Funktion ist es möglich, Programme während der Laufzeit zu verändern. Ein Hacker schreibt sich also ein Programm, welches ptrace() benutzt, um die Funktionen von SSH im Speicher zu verändern. Nun hat er die Möglichkeit, entweder einfach alles mitzulesen oder er injiziert eigene Kommandos in die bestehende SSH-Verbindung. Zum besseren Verständnis sehen wir uns allerdings eine weniger aufwändige Methode an. Gehen wir mal davon aus, dass ein Hacker Zugriff auf einen Server hat und dort eine SSH-Verbindung eines lokalen Benutzers zu einem entfernten Host besteht. Der Hacker sieht ausserdem, dass die Verbindung schon lange besteht, der Benutzer allerdings inaktiv ist. Somit weiß der Angreifer, dass diese Verbindung im Moment nicht aktiv genutzt wird. Er kann also Kommandos in ein Terminal injizieren, indem er das tty des Benutzers öffnet.
Gehen wir davon aus, wir sind auf Terminal A, während der Benutzer mit der offenen SSH-Verbindung auf Terminal B ist. Zuerst kompilieren wir unser Programm.
Wie wir sehen können, ist jemand auf dem Terminal pts/2 mit SSH zu einem entfernten Host verbunden (remote.host.tld). Zuerst öffnen wir netcat im Hintergrund und warten auf Port 1111 auf eine Verbindung. Unser Ziel ist es, von dem entfernten Host eine Verbindung zu unserem netcat-Prozess aufzubauen. Wir öffnen also /dev/pts/2 mit unserem Programm. Dann senden wir eine sog. Connect Back Shell zu unserem Hintergrundprozess. Wir könnten mit wget ein kleines Perl-Skript downloaden und es ausführen. Wir benutzen allerdings einen besseren Trick mit Hilfe von /dev/tcp.
Wie Sie sehen können, hat alles gut funktioniert und wir haben nun Zugriff auf den neuen Host. Auf dem Terminal B ist nun die /dev/tcp-Zeile zu sehen, doch sobald wir diese Verbindung wieder beenden, wird das reset-Kommando ausgeführt und somit verschwindet diese Zeile. Dadurch wird der Benutzer nicht gleich merken, was passiert ist, wenn er an seinen Arbeitsplatz zurückkehrt.
[Vorherige] 1 2 3 4 5 6 7 [Nächste]
|