hacktricks/network-services-pentesting/pentesting-ssh.md

31 KiB
Raw Blame History

22 - Ελεγχος Εισβολής SSH/SFTP

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks AWS)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια πρεμιέρα πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε αμοιβές έως και $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Βασικές Πληροφορίες

SSH (Secure Shell ή Secure Socket Shell) είναι ένα πρωτόκολλο δικτύου που επιτρέπει μια ασφαλή σύνδεση σε έναν υπολογιστή μέσω ενός μη ασφαλούς δικτύου. Είναι απαραίτητο για τη διατήρηση της εμπιστευτικότητας και ακεραιότητας των δεδομένων κατά την πρόσβαση σε απομακρυσμένα συστήματα.

Προεπιλεγμένη θύρα: 22

22/tcp open  ssh     syn-ack

Διακομιστές SSH:

  • openSSH OpenBSD SSH, περιλαμβάνεται σε διανομές BSD, Linux και Windows από τα Windows 10 και μετά
  • Dropbear Υλοποίηση SSH για περιβάλλοντα με περιορισμένη μνήμη και επεξεργαστικούς πόρους, περιλαμβάνεται στο OpenWrt
  • PuTTY Υλοποίηση SSH για Windows, ο client χρησιμοποιείται συχνά, αλλά η χρήση του διακομιστή είναι σπάνια
  • CopSSH υλοποίηση του OpenSSH για Windows

Βιβλιοθήκες SSH (υλοποίηση στην πλευρά του διακομιστή):

  • libssh πολυπλατφορμική βιβλιοθήκη C που υλοποιεί το πρωτόκολλο SSHv2 με δεσμεύσεις σε Python, Perl και R; χρησιμοποιείται από το KDE για sftp και από το GitHub για τη υποδομή git SSH
  • wolfSSH Βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και σχεδιασμένη για ενσωματωμένα, RTOS και περιβάλλοντα με πεεριορισμένους πόρους
  • Apache MINA SSHD Η βιβλιοθήκη Java Apache SSHD βασίζεται στο Apache MINA
  • paramiko Βιβλιοθήκη πρωτοκόλλου Python SSHv2

Απαρίθμηση

Ανάκτηση Μπάνερ

nc -vn <IP> 22

Αυτοματοποιημένο ssh-audit

Το ssh-audit είναι ένα εργαλείο για τον έλεγχο διαμόρφωσης του διακομιστή και του πελάτη ssh.

Το https://github.com/jtesta/ssh-audit είναι ένα ενημερωμένο fork από το https://github.com/arthepsy/ssh-audit/

Χαρακτηριστικά:

  • Υποστήριξη διακομιστή πρωτοκόλλου SSH1 και SSH2;
  • Ανάλυση διαμόρφωσης πελάτη SSH;
  • Λήψη banner, αναγνώριση συσκευής ή λογισμικού και λειτουργικού συστήματος, ανίχνευση συμπίεσης;
  • Συγκέντρωση αλγορίθμων ανταλλαγής κλειδιών, κλειδιών κεντρικής αυθεντικοποίησης, κρυπτογράφησης και κώδικα ελέγχου αυθεντικότητας μηνυμάτων;
  • Πληροφορίες αλγορίθμου εξόδου (διαθέσιμο από, αφαιρεμένο/απενεργοποιημένο, μη ασφαλές/αδύναμο/παλιό, κλπ);
  • Συστάσεις αλγορίθμου εξόδου (προσθήκη ή αφαίρεση βάσει αναγνωρισμένης έκδοσης λογισμικού);
  • Πληροφορίες ασφάλειας εξόδου (σχετικά θέματα, ανατεθειμένη λίστα CVE, κλπ);
  • Ανάλυση συμβατότητας έκδοσης SSH βάσει πληροφοριών αλγορίθμου;
  • Ιστορικές πληροφορίες από OpenSSH, Dropbear SSH και libssh;
  • Λειτουργεί σε Linux και Windows;
  • Χωρίς εξαρτήσεις
usage: ssh-audit.py [-1246pbcnjvlt] <host>

-1,  --ssh1             force ssh version 1 only
-2,  --ssh2             force ssh version 2 only
-4,  --ipv4             enable IPv4 (order of precedence)
-6,  --ipv6             enable IPv6 (order of precedence)
-p,  --port=<port>      port to connect
-b,  --batch            batch output
-c,  --client-audit     starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n,  --no-colors        disable colors
-j,  --json             JSON output
-v,  --verbose          verbose output
-l,  --level=<level>    minimum output level (info|warn|fail)
-t,  --timeout=<secs>   timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>

Δημόσιο κλειδί SSH του διακομιστή

Δείτε το σε λειτουργία (Asciinema)

ssh-keyscan -t rsa <IP> -p <PORT>

Αδύναμοι Αλγόριθμοι Κρυπτογράφησης

Αυτό ανακαλύπτεται από προεπιλογή από το nmap. Αλλά μπορείτε επίσης να χρησιμοποιήσετε το sslscan ή το sslyze.

Σενάρια Nmap

nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods

Shodan

  • ssh

Επίθεση με βία στα ονόματα χρηστών, τους κωδικούς πρόσβασης και τα ιδιωτικά κλειδιά

Απαρίθμηση Ονομάτων Χρηστών

Σε μερικές εκδόσεις του OpenSSH μπορείτε να κάνετε μια επίθεση χρονισμού για να απαριθμήσετε τους χρήστες. Μπορείτε να χρησιμοποιήσετε ένα ενότητα του metasploit για να εκμεταλλευτείτε αυτό:

msf> use scanner/ssh/ssh_enumusers

Βίαιη επίθεση

Κάποια συνηθισμένα διαπιστευτήρια ssh εδώ και εδώ και παρακάτω.

Βίαιη επίθεση με Ιδιωτικό Κλειδί

Αν γνωρίζετε κάποια ιδιωτικά κλειδιά ssh που θα μπορούσαν να χρησιμοποιηθούν... ας το δοκιμάσουμε. Μπορείτε να χρησιμοποιήσετε το script nmap:

https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html

Ή MSF βοηθητική μονάδα:

msf> use scanner/ssh/ssh_identify_pubkeys

Ή χρησιμοποιήστε το ssh-keybrute.py (φυσικό python3, ελαφρύ και έχει ενεργοποιημένους παλαιούς αλγόριθμους): snowdroppe/ssh-keybrute.

Γνωστά κακά κλειδιά μπορούν να βρεθούν εδώ:

{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}

Αδύναμα κλειδιά SSH / Προβλέψιμο PRNG Debian

Κάποια συστήματα έχουν γνωστές ελαττώσεις στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να οδηγήσει σε μειωμένο χώρο κλειδιών που μπορεί να αποκρυπτογραφηθεί με βία. Προ-δημιουργημένα σύνολα κλειδιών που δημιουργήθηκαν σε συστήματα Debian που επηρεάζονται από αδύναμο PRNG είναι διαθέσιμα εδώ: g0tmi1k/debian-ssh.

Θα πρέπει να ψάξετε εδώ για να αναζητήσετε έγκυρα κλειδιά για το μηχάνημα θύματος.

Kerberos

crackmapexec χρησιμοποιώντας το πρωτόκολλο ssh μπορεί να χρησιμοποιήσει την επιλογή --kerberos για πιστοποίηση μέσω kerberos.
Για περισσότερες πληροφορίες εκτελέστε crackmapexec ssh --help.

Προεπιλεγμένα Διαπιστευτήρια

Προμηθευτής Ονόματα Χρηστών Κωδικοί Πρόσβασης
APC apc, device apc
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
Dell root, user1, admin, vkernel, cli calvin, 123456, password, vkernel, Stor@ge!, admin
EMC admin, root, sysadmin EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Com admin, root, vcx, app, spvar, manage, hpsupport, opc_op admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin
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
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

SSH-MitM

Αν βρίσκεστε στο τοπικό δίκτυο όπως το θύμα που θα συνδεθεί στο διακομιστή SSH χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, μπορείτε να προσπαθήσετε να εκτελέσετε μια επίθεση MitM για να κλέψετε αυτές τις διαπιστευτήρια:

Διαδρομή επίθεσης:

  • Ανακατεύθυνση Κίνησης: Ο επιτιθέμενος ανακατευθύνει την κίνηση του θύματος στο μηχάνημά του, αποκτώντας αποτελεσματικά τη σύνδεση με τον διακομιστή SSH.
  • Ανάκτηση και Καταγραφή: Το μηχάνημα του επιτιθέμενου λειτουργεί ως διακομιστής μεσολάβησης, καταγράφοντας τα στοιχεία σύνδεσης του χρήστη προσποιούμενος ότι είναι ο νόμιμος διακομιστής SSH.
  • Εκτέλεση Εντολών και Μετάδοση: Τέλος, ο διακομιστής του επιτιθέμενου καταγράφει τα διαπιστευτήρια του χρήστη, προωθεί τις εντολές στον πραγματικό διακομιστή SSH, τις εκτελεί και στέλνει τα αποτελέσματα πίσω στον χρήστη, κάνοντας τη διαδικασία να φαίνεται ομαλή και νόμιμη.

SSH MITM κάνει ακριβώς αυτό που περιγράφεται παραπάνω.

Για να καταγράψετε την πραγματοποίηση της πραγματικής MitM μπορείτε να χρησιμοποιήσετε τεχνικές όπως η ARP spoofing, η DNS spoofing ή άλλες που περιγράφονται στις επιθέσεις διαπλάτησης δικτύου.

SSH-Snake

Αν θέλετε να διατρέξετε ένα δίκτυο χρησιμοποιώντας ανακαλυφθέντα ιδιωτικά κλειδιά SSH σε συστήματα, χρησιμοποιώντας κάθε ιδιωτικό κλειδί σε κάθε σύστημα για νέους οικοδεσπότες, τότε το SSH-Snake είναι αυτό που χρειάζεστε.

Το SSH-Snake εκτελεί αυτόματα και αναδρομικά τις ακόλουθες εργασίες:

  1. Στο τρέχον σύστημα, βρείτε οποιαδήποτε ιδιωτικά κλειδιά SSH,
  2. Στο τρέχον σύστημα, βρείτε οποιουσδήποτε οικοδεσπότες ή προορισμούς (χρήστης@οικοδεσπότη) που μπορεί να γίνουν δεκτοί τα ιδιωτικά κλειδιά,
  3. Προσπαθήστε να συνδεθείτε με SSH σε όλους τους προορισμούς χρησιμοποιώντας όλα τα ανακαλυφθέντα ιδιωτικά κλειδιά,
  4. Αν συνδεθείτε με επιτυχία σε έναν προορισμό, επαναλάβετε τα βήματα #1 - #4 στο συνδεδεμένο σύστημα.

Είναι πλήρως αυτοαναπαραγόμενο και αυτοδιαισθητούμενο - και εντελώς χωρίς αρχεία.

Λανθασμένες Ρυθμίσεις Παραμετροποίησης

Σύνδεση ως Root

Συνήθως οι διακομιστές SSH επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, πράγμα που αποτελεί σημαντικό κίνδυνο ασφάλειας. Η απενεργοποίηση της σύνδεσης ως root είναι ένα κρίσιμο βήμα για την ασφάλεια του διακομιστή. Η μη εξουσιοδοτημένη πρόσβαση με διαχειριστικά δικαιώματα και οι επιθέσεις με βία στον κωδικό πρόσβασης μπορούν να αντιμετωπιστούν με αυτήν την αλλαγή.

Για Απενεργοποίηση της Σύνδεσης ως Root στο OpenSSH:

  1. Επεξεργασία του αρχείου ρυθμίσεων SSH με: sudoedit /etc/ssh/sshd_config
  2. Αλλαγή της ρύθμισης από #PermitRootLogin yes σε PermitRootLogin no.
  3. Επαναφόρτωση της ρύθμισης χρησιμοποιώντας: sudo systemctl daemon-reload
  4. Επανεκκίνηση του διακομιστή SSH για να εφαρμοστούν οι αλλαγές: sudo systemctl restart sshd

Επίθεση Βίας SFTP

Εκτέλεση Εντολών SFTP

Συχνά συμβαίνει ένα κοινό λάθος με τις ρυθμίσεις SFTP, όπου οι διαχειριστές σκοπεύουν να επιτρέψουν στους χρήστες να ανταλλάσσουν αρχεία χωρίς να ενεργοποιούν τη

ssh -v noraj@192.168.1.94 id
...
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to 192.168.1.94 ([192.168.1.94]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending command: id
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
uid=1000(noraj) gid=100(users) groups=100(users)
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2480 bytes, in 0.1 seconds
Bytes per second: sent 43133.4, received 44349.5
debug1: Exit status 0

$ ssh noraj@192.168.1.94 /bin/bash

Εδώ υπάρχει ένα παράδειγμα ασφαλούς ρύθμισης SFTP (/etc/ssh/sshd_config - openSSH) για τον χρήστη noraj:

Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no

Αυτή η διαμόρφωση θα επιτρέψει μόνο το SFTP: απενεργοποίηση της πρόσβασης στο κέλυφος με την επιβολή της εντολής εκκίνησης και απενεργοποίηση της πρόσβασης TTY αλλά και απενεργοποίηση όλων των ειδών προώθησης θυρών ή τούνελινγκ.

SFTP Tunneling

Αν έχετε πρόσβαση σε ένα διακομιστή SFTP, μπορείτε επίσης να τουνελώσετε την κίνησή σας μέσω αυτού, για παράδειγμα χρησιμοποιώντας την κοινή προώθηση θυρών:

sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

Το sftp έχει την εντολή "symlink". Επομένως, αν έχετε δικαιώματα εγγραφής σε κάποιο φάκελο, μπορείτε να δημιουργήσετε συμβολικούς συνδέσμους για άλλους φακέλους/αρχεία. Εφόσον πιθανότατα βρίσκεστε παγιδευμένοι μέσα σε ένα chroot αυτό δεν θα είναι ιδιαίτερα χρήσιμο για εσάς, αλλά, αν μπορείτε να έχετε πρόσβαση στον δημιουργημένο συμβολικό σύνδεσμο από ένα υπηρεσία χωρίς chroot (για παράδειγμα, αν μπορείτε να έχετε πρόσβαση στον σύνδεσμο από το web), θα μπορούσατε να ανοίξετε τα αρχεία που έχουν συμβολικοώθεί μέσω του web.

Για παράδειγμα, για να δημιουργήσετε ένα συμβολικό σύνδεσμο από ένα νέο αρχείο "froot" προς "/":

sftp> symlink / froot

Μέθοδοι Πιστοποίησης

Σε περιβάλλοντα υψηλής ασφάλειας, είναι συνηθισμένο να ενεργοποιούνται μόνο οι μέθοδοι πιστοποίησης βασισμένες σε κλειδιά ή δύο παραγόντων αντί για την απλή πιστοποίηση βασισμένη σε κωδικό πρόσβασης. Ωστόσο, συχνά οι ισχυρότερες μέθοδοι πιστοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένα συχνό παράδειγμα είναι η ενεργοποίηση της publickey στη διαμόρφωση του openSSH και η ορισμός της ως προεπιλεγμένης μεθόδου, χωρίς όμως να απενεργοποιείται η password. Έτσι, χρησιμοποιώντας τη λεπτομερή λειτουργία του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι μια ασθενέστερη μέθοδος είναι ενεργοποιημένη:

ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive

Για παράδειγμα, εάν έχει οριστεί ένα όριο αποτυχίας πιστοποίησης και δεν έχετε ποτέ την ευκαιρία να φτάσετε στη μέθοδο κωδικού πρόσβασης, μπορείτε να χρησιμοποιήσετε την επιλογή PreferredAuthentications για να αναγκάσετε τη χρήση αυτής της μεθόδου.

ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password

Είναι απαραίτητο να ελέγξετε τη διαμόρφωση του διακομιστή SSH για να βεβαιωθείτε ότι είναι εξουσιοδοτημένες μόνο οι αναμενόμενες μεθόδοι. Η χρήση της λειτουργίας verbose στον πελάτη μπορεί να βοηθήσει να δείτε την αποτελεσματικότητα της διαμόρφωσης.

Αρχεία ρυθμίσεων

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

References

Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε αμοιβές έως $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

HackTricks Automatic Commands

Protocol_Name: SSH
Port_Number: 22
Protocol_Description: Secure Shell Hardening

Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh

Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks: