by: Cerebrux
Σε περίπτωση που έχετε κάποιον Server στον οποίο συνδέεστε με SSH τότε σας ενδιαφέρει προφανώς το πως να κάνετε το SSH περισσότερο ασφαλές. Ακολουθούν δέκα εύκολες και γρήγορες ρυθμίσεις για την προστασία του openssh server.
Το SSH (εκ του Secure Shell) πρωτόκολλο χρησιμοποιείται για ασφαλείς (κρυπτογραφημένες) συνδέσεις με απομακρυσμένους υπολογιστές / servers. Χρησιμοποιείται όχι μόνο για εκτέλεση εντολών σε τερματικό του server αλλά και για μεταφορά αρχείων από και προς τον server (π.χ. με FileZilla για μεταφορά αρχείων σε Server ) ή ακόμα και για μεταφορά ήχου μέσω ssh.
Βασικά στοιχεία μιας SSH σύνδεσης
Το SSH παρέχει ένα «ασφαλές κανάλι» μέσω ενός μη ασφαλούς δικτύου (internet) χρησιμοποιώντας αρχιτεκτονική πελάτη-διακομιστή (client-server) ήτοι συνδέει μια εφαρμογή πελάτη SSH με έναν διακομιστή SSH. Με άλλα λόγια, ο υπολογιστής (ή κινητό) είναι ο «πελάτης» το οποίο δημιουργεί μια «συνεδρία» (session) με κάποιον απομακρυσμένο server με χρήση του πρωτοκόλλου SSH.
Στο παρόν οδηγό θα αναλύσουμε 10 βασικές ρυθμίσεις που πρέπει να έχετε κάνει στον SSH server σας για να διασφαλίσετε τον διακομιστή σας. Στο παρόν άρθρο, χρησιμοποιήσαμε ένα VPServer των 5$ από την Digitalocean. Μπορείτε να δημιουργήστε έναν νέο λογαριασμό από το παρακάτω link και θα λάβετε 100$ credits για να τα χρησιμοποιήσετε μέσα σε 60 ημέρες:DigitalOcean
Οι βασικότερες ρυθμίσεις του SSH server γίνεται στα παρακάτω αρχεία και φακέλους:
/etc/ssh/sshd_config
: Ρυθμίσεις του SSH server για το πως θα δέχεται συνδέσεις και πως θα λειτουργεί~/.ssh/config
: Ρυθμίσεις του SSH client στον υπολογιστή σας~/.ssh/
: Περιέχει τα δημόσια και τα ιδιωτικά κλειδιά σύνδεσης
Μετά από επεξεργασία και αποθήκευση, θα πρέπει να κάνετε reload την υπηρεσία SSH:
1 | sudo systemctl reload sshd |
Βήμα 1 | Χρησιμοποιήστε κλειδιά SSH αντί για κωδικούς πρόσβασης
Αφού έχετε αφιερώσει «10 λεπτά για την ρύθμιση ενός ασφαλούς server» θα έχετε ήδη κάνει τα βασικά σχετικά με την SSΗ σύνδεσή σας. Εκεί είδαμε συνοπτικά μία από τις βασικότερες ρυθμίσεις που μας παρέχει ασφαλή logins χωρίς password.
Τα κλειδιά SSH παρέχουν ένα ασφαλές μέσο σύνδεσης σε έναν διακομιστή SSH διότι οι περισσότεροι κωδικοί πρόσβασης μπορούν να σπάσουν με Brute Force ή dictionary attacks ενώ μέχρι στιγμής τα κλειδιά SSH δεν είναι ανοιχτά σε τέτοιου είδους επιθέσεις.
Πριν δούμε πως δημιουργούμε τα κλειδιά είναι βασικό να καταλάβουμε το πως δουλεύει αυτή η σύνδεση στο background.
Πως λειτουργεί το SSH key based Authentication
Όταν δημιουργείτε κλειδιά SSH, δημιουργείτε ένα ζευγάρι κλειδιών. Το ένα είναι το δημόσιο κλειδί (αρχείο με κατάληξη .pub
)
και το άλλο είναι το ιδιωτικό κλειδί. Το δημόσιο κλειδί θα πρέπει να
είναι εγκατεστημένο στους διακομιστές στους οποίους θέλετε να
συνδεθείτε. Το ιδιωτικό κλειδί, όπως λέει και το όνομα, πρέπει να το
«φυλάξτε σας τα μάτια σας».
Όταν λοιπόν κάνετε ένα αίτημα σύνδεσης, ο απομακρυσμένος server χρησιμοποιεί το αντίγραφο του δημόσιου κλειδιού σας για να δημιουργήσει ένα κρυπτογραφημένο μήνυμα που αποστέλλεται πίσω στον υπολογιστή σας. Επειδή κρυπτογραφήθηκε με το δημόσιο κλειδί σας, ο υπολογιστής σας μπορεί να το αποκρυπτογραφήσει με το ιδιωτικό σας κλειδί.
Ο υπολογιστής σας στη συνέχεια εξάγει ορισμένες πληροφορίες από το μήνυμα, το κρυπτογραφεί και το στέλνει πίσω στο διακομιστή. Εάν ο διακομιστής μπορεί να τον αποκρυπτογραφήσει με το αντίγραφο του δημόσιου κλειδιού σας και εάν οι πληροφορίες μέσα στο μήνυμα ταιριάζουν με αυτές που σας έστειλε ο διακομιστής, επιβεβαιώνει ότι η σύνδεσή προέρχεται από εσάς και σας επιτρέπει την είσοδο.
Στον προσωπικό σας υπολογιστή, θα δημιουργήσουμε ένα ζεύγος Ιδιωτικού-Δημόσιου κλειδιού με τον αλγόριθμο Ed25519 (αντί του κοινού RSA). Έπειτα το δημόσιο κλειδί θα το ανεβάσουμε στον Server και αφού πούμε στον server να μην δέχεται συνδέσεις με χρήση κωδικού, θα μπορείτε πλέον να συνδέεστε σε αυτόν μόνο εσείς που έχετε το ιδιωτικό κλειδί.
Γιατί Ed25519 και όχι RSA;
Το Ed25519 κυκλοφόρησε με την έκδοση 6.5 του OpenSSH. Χρησιμοποιεί κρυπτογραφία ελλειπτικής καμπύλης η οποία προσφέρει καλύτερη ασφάλεια με ταχύτερη επίδοση σε σύγκριση με το DSA ή το ECDSA.
Σήμερα, το RSA είναι ο πιο διαδεδομένος αλγόριθμος που χρησιμοποιείται για την δημιουργία κλειδιών SSH. Ωστόσο, σε σύγκριση με το Ed25519, είναι πιο αργό και μάλιστα θεωρείται μη ασφαλές εάν δημιουργείτε κλειδί μικρότερο από 2048 bit (π.χ. 1024).
Από την άλλη το δημόσιο κλειδί Ed25519 είναι συμπαγές και μικρό. Περιέχει μόνο 68 χαρακτήρες σε αντίθεση με το RSA π.χ. 3072 bit που έχει 544 χαρακτήρες. Η δημιουργία του κλειδιού είναι επίσης σχεδόν τόσο γρήγορη όσο η διαδικασία υπογραφής όπως π.χ. όταν εκτελείτε μαζική επαλήθευση υπογραφής με το Ed25519.
Δημιουργία Ζεύγους κλειδιών
Πάμε λοιπόν στο προσωπικό σας υπολογιστή και εκτελέσετε στο τερματικό:
1 | ssh -keygen -t ed25519 |
Αν θέλετε περισσότερο έλεγχο μπορείτε να εκτελέσετε :
1 | ssh -keygen -t ed25519 -f ~/. ssh /id_ed25519 -C "tamtakos@servermou.gr" |
όπου:
-t
: Ο τύπος κλειδιού (στην περίπτωσή μας ed25519)-f
: Όνομα και διαδρομή αποθήκευσης κλειδιού-C
: Ένα προαιρετικό σχόλιο όπως π.χ. που ή γιατί το χρησιμοποιείτε
Αφού πατήσετε Enter, θα σας ζητήσει να δώσετε ένα συνθηματικό το οποίο ασφαλίζει το Ιδιωτικό τμήμα του κλειδιού (αυτό που θα μείνει στον υπολογιστή σας). Μπορείτε να πατήσετε Enter για να μην δώσετε συνθηματικό, αν είστε σίγουροι ότι ο υπολογιστής σας, η το ιδιωτικό κλειδί δεν θα πέσει σε λάθος χέρια. Αν όμως είναι π.χ laptop ή υπολογιστής δουλειάς, καλό είναι να προσθέσετε και ένα συνθηματικό για το ιδιωτικό κλειδί ώστε μόνο εσείς να μπορείτε να το χρησιμοποιήσετε.
Τώρα, μπορείτε να αντιγράψετε το δημόσιο κλειδί στον server σας όπως περιγράψαμε στον οδηγό «10 λεπτά για την ρύθμιση ενός ασφαλούς server«. Έτσι όταν θα συνδέεστε στον SSH server σας, θα σας ζητάει μόνο το συνθηματικό του κλειδιού σας (εκτός και αν δεν το έχετε κλειδώσει) και τα σας συνδέσει αυτόματα.
Βήμα 2 | Απενεργοποιήστε τον έλεγχο με κωδικού πρόσβασης
Φυσικά, η λογική επέκταση της χρήσης κλειδιών SSH είναι ότι εάν π.χ. συνεργάζεστε με κάποιον στον ίδιο server και χρησιμοποιείτε κλειδιά SSH τότε, μπορείτε να απενεργοποιήσετε εντελώς τον έλεγχο κωδικού πρόσβασης.
Για να το κάνουμε αυτό θα πρέπει να επεξεργαστούμε το αρχείο ρυθμίσεων του SSH πχ με το VIM:
1 | sudo vim /etc/ssh/sshd_config |
Εκεί βρείτε το #PasswordAuthentication yes
, αφαιρέστε το #
από την αρχή της γραμμής και αλλάξτε το «yes» σε «no» και αποθηκεύστε το αρχείο.
Βήμα 3 | Απόρριψη αιτημάτων σύνδεσης χωρίς κωδικούς πρόσβασης
Για να διασφαλίσουμε τον έλεγχο ταυτότητας όλων των αιτημάτων που γίνονται για SSH σύνδεση θα πρέπει να επιβεβαιώσουμε ότι απορρήπτονται τα αιτήματα σύνδεσης χωρίς κωδικούς.
Επεξεργαζόμαστε το αρχείο διαμόρφωσης του SSH:
1 | sudo vim /etc/ssh/sshd_config |
όπου θα δείτε τη γραμμή #PermitEmptyPasswords no
και αφαιρούμε το #
από την αρχή της γραμμής και αποθηκεύουμε το αρχείο.
Βήμα 4 | Αποφύγετε την Port 22
Στην προεπιλεγμένη διαμόρφωσή του, ένας διακομιστής SSH θα ακούσει για εισερχόμενες συνδέσεις στη Port 22. Επειδή πρόκειται για μια γνωστή θύρα , είναι στόχος για κακόβουλα bots. Τα bots είναι αυτοματοποιημένα και σαρώνουν μια σειρά διευθύνσεων IP αναζητώντας ανοιχτές θύρες. Οι θύρες ελέγχονται έπειτα για να δουν εάν υπάρχουν ευπάθειες που μπορούν να αξιοποιηθούν.
Εάν θεωρείτε ότι «Είμαι ασφαλής, υπάρχουν μεγαλύτεροι και καλύτεροι στόχοι από εμένα για να στοχεύουν τα bots ή οι hackers» τότε αναθεωρείστε διότι τα bots δεν επιλέγουν στόχους με βάση οποιαδήποτε αξία αλλά αναζητούν μεθοδικά τα συστήματα που μπορούν να παραβιάσουν για να τα προσθέσουν στο δίκτυο των αυτοματοποιημένων bot τους. Δεν είναι λίγες οι φορές που έχουμε δει σε διάφορα forum να αναφέρουν οι χρήστες τους ότι η IP του server τους έχει μπει σε blacklist λόγο αυτοματοποιημένων, κακόβουλων αποστολών spam mails. Δεν θα θέλατε να συμβεί αυτό σε κάποιο server σας.
Εάν όμως χρησιμοποιείτε διαφορετική θύρα, τότε προσθέτει λίγη παραπάνω ασφάλεια μέσω της αφάνειας μέσα στα 65χιλιάδες διαθέσιμα Ports του server σας. Φυσικά το Security through obscurity δεν θεωρείται αληθινό μέτρο ασφαλείας διότι μερικά από τα πιο έξυπνα bots επίθεσης διερευνούν όλες τις ανοιχτές θύρες. Αλλά η χρήση μιας μη τυπικής θύρας μπορεί να βοηθήσει στη μείωση του «θορύβου» και της κακής κυκλοφορίας στη θύρα 22.
Για να ρυθμίσετε μια μη τυπική θύρα, επεξεργαστείτε το αρχείο ρυθμίσεων SSH:
1 | sudo vim /etc/ssh/sshd_config |
Αφαιρέστε το #
από την αρχή της γραμμής Port
και αντικαταστήστε το «22» με τον αριθμό θύρας της επιλογής σας.
Για να μην βάζετε συνέχεια την παράμετρο -p xxxx
με τον αριθμό θύρας, μπορείτε να διαμορφώστε τον ssh client
σας να το παίρνει αυτόματα. Για να το κάνετε αυτό επεξεργαστείτε το αρχείο:
1 | vim ~/.ssh/config |
και διαμορφώστε το ανάλογα με τις ανάγκες σας:
123456 | Host ena-onoma HostName IP-h-domain-tou-server-sas User onoma-xristi Port XXXXX IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes |
Έπειτα θα μπορείτε να κάνετε SSH στον server σας απλά γράφοντας:
1 | ssh ena-onoma |
Βήμα 5 | Χρησιμοποιήστε το SSH Protocol Version 2
Το 2006, το πρωτόκολλο SSH ενημερώθηκε από την έκδοση 1 στην έκδοση 2 . Ήταν μια σημαντική αναβάθμιση, ειδικά όσον αφορά την κρυπτογράφηση και την ασφάλεια μιας και η έκδοση 2 δεν είναι συμβατή με την έκδοση 1. Να σημειώσουμε ότι σε όλο το άρθρο, όταν αναφερόμαστε στο SSH μιλάμε πάντα για το OpenSSH μιας και το SSH 2 δεν είναι ελεύθερο λογισμικό.
Για να αποτρέψετε τώρα συνδέσεις από clients της έκδοσης 1, μπορείτε
να ορίσετε ότι ο server σας θα δέχεται συνδέσεις μόνο από πελάτες της
έκδοσης 2. Για να το κάνετε αυτό, επεξεργαστείτε το αρχείο /etc/ssh/sshd_config
Προσθέστε τη γραμμή:
Protocol 2
Και αποθηκεύστε το αρχείο. Με αυτόν τον τρόπο, απορρίπτονται μόνο οι πιο αδύναμες και λιγότερο ασφαλείς συνδέσεις του OpenSSH πρωτοκόλλου 1.
Βήμα 6 | Απενεργοποίηση X11 Forwarding
Η προώθηση X11 επιτρέπει στους χρήστες να εκτελούν γραφικές εφαρμογές απευθείας από τον διακομιστή στον προσωπικό υπολογιστή (π.χ. Thunar file manager για προβολή αρχείων του server). Στα χέρια ενός κακόβουλου χρήστη, μια διεπαφή GUI μπορεί να διευκολύνει τους επιβλαβείς σκοπούς του.
Επομένως καλό είναι να το απενεργοποιήσετε. Για να το κάνετε αυτό, επεξεργαστείτε το αρχείο /etc/ssh/sshd_config
δείτε τη γραμμή που ξεκινά με το #X11 Forwarding no
και αφαιρέστε το #
από την αρχή της γραμμής και αποθηκεύστε το αρχείο.
Βήμα 7 | Ορίστε χρόνο αποσύνδεσης
Αν ο χρήστης φύγει από τον υπολογιστή του και να είναι απασχολημένος αλλού θα πρέπει να εξασφαλιστεί ότι η σύνδεση SSH θα διακοπεί μετά από μια ανενεργή περίοδο.
Για άλλη μια φορά, θα επεξεργαστούμε το αρχείο /etc/ssh/sshd_config
στη γραμμή που ξεκινά με #ClientAliveInterval 0
και θα αφαιρέσουμε το #
από την αρχή της γραμμής. Στην συνέχεια θα πρέπει να αλλάξτε το 0
σε π.χ. 300, δηλαδή 5 λεπτά.
Βήμα 8 | Ορίστε ένα όριο στις προσπάθειες σύνδεσης
Σε περίπτωση που θέλετε να κρατήσετε κάποιο λογαριασμό που δεν συνδέεται με κλειδί κρυπτογράφησης αλλά θέλετε να καθορίσετε ένα ορίου για τον αριθμό των προσπαθειών (π.χ. για αποτροπή επιθέσεων Brute Force).
Μετά τον καθορισμένο αριθμό αιτημάτων ελέγχου ταυτότητας, ο χρήστης
θα αποσυνδεθεί από τον διακομιστή SSH. Από προεπιλογή, δεν υπάρχει όριο
οπότε θα επεξεργαστούμε το αρχείο /etc/ssh/sshd_config
στη γραμμή που ξεκινά με #MaxAuthTries 0
και αφού αφαιρέσουμε το #
από την αρχή της γραμμής, αλλάζουμε το 0 π.χ. σε 3 για τρεις προσπάθειες.
Βήμα 9 | Απενεργοποιήστε το Root Login
Όπως και στην περίπτωση του γνωστού από όλους Port 22, έτσι και εδώ ο
λογαριασμός root είναι γνωστός σε όλα τα bots. Άρα το σωστό είναι να
μην επιτρέπουμε συνδέσεις SSH στον λογαριασμό root αλλά μόνο στον χρήστη
που έχει δικαιώματα sudo
Επεξεργαστείτε το αρχείο /etc/ssh/sshd_config
στη γραμμή που ξεκινά με το #PermitRootLogin
και αλλάξτε το σε:
PermitRootLogin no
Βήμα 10 | SSH Audit
Μέχρι τώρα καλύψαμε τις βασικές ρυθμίσεις και τώρα αφού έχουμε
αποθηκεύσει και επανεκκινήσει την υπηρεσία SSH μπορούμε να
χρησιμοποιήσουμε ένα απλό εργαλείο ssh-audit
Το SSH Audit είναι ένα Python script που θα σαρώσει τον διακομιστή SSH για ορισμένα ζητήματα ασφαλείας. Κατεβάστε το απο το:
και εκτελέστε το όπως οποιοδήποτε άλλο python script ορίζοντας τον SSH server σας και την Port.
python ssh-audit.py -p xxxxx onoma-touserver.gr
Το αποτέλεσμα θα είναι μια αναφορά όπως π.χ. στην παρακάτω εικόνα
Αυτή η αναφορά μας δίνει μια ματιά στους αλγορίθμους κρυπτογράφησης αλλά και προτάσεις για την εξάλειψη των αδύναμων του OpenSSH server σας.
Παραπομπές:
- SSH Hardening Guides
- Mozilla SSH server hardening
- OpenSSH (Arch Linux Wiki)
Πηγή άρθρου: https://planet.ellak.gr/ https://cerebrux.net