Σε περίπτωση που έχετε κάποιον 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 ημέρες:

Οι βασικότερες ρυθμίσεις του SSH server γίνεται στα παρακάτω αρχεία και φακέλους:

  • /etc/ssh/sshd_config : Ρυθμίσεις του SSH server για το πως θα δέχεται συνδέσεις και πως θα λειτουργεί
  • ~/.ssh/config : Ρυθμίσεις του SSH client στον υπολογιστή σας
  • ~/.ssh/ : Περιέχει τα δημόσια και τα ιδιωτικά κλειδιά σύνδεσης

Μετά από επεξεργασία και αποθήκευση, θα πρέπει να κάνετε reload την υπηρεσία SSH:

sudo systemctl reload sshd
Advertisements

Βήμα 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.

Δημιουργία Ζεύγους κλειδιών

Πάμε λοιπόν στο προσωπικό σας υπολογιστή και εκτελέσετε στο τερματικό:

ssh-keygen -t ed25519

Αν θέλετε περισσότερο έλεγχο μπορείτε να εκτελέσετε :

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "tamtakos@servermou.gr"

όπου:

  • -t: Ο τύπος κλειδιού (στην περίπτωσή μας ed25519)
  • -f: Όνομα και διαδρομή αποθήκευσης κλειδιού
  • -C: Ένα προαιρετικό σχόλιο όπως π.χ. που ή γιατί το χρησιμοποιείτε

Αφού πατήσετε Enter, θα σας ζητήσει να δώσετε ένα συνθηματικό το οποίο ασφαλίζει το Ιδιωτικό τμήμα του κλειδιού (αυτό που θα μείνει στον υπολογιστή σας). Εδώ πρέπει να προσθέσετε και ένα συνθηματικό για το ιδιωτικό κλειδί ώστε μόνο εσείς να μπορείτε να το χρησιμοποιήσετε. Για το συνθηματικό, δεν χρειάζεται να παιδεύεστε, τρεις ή τέσσερις απλές λέξεις ενωμένες με σημεία στίξης είναι ένα καλό και ασφαλές μοντέλο για κωδικούς πρόσβασης και συνθηματικά. Απλά βεβαιωθείτε ότι θυμάστε το συνθηματικό. 

τρεις ή τέσσερις απλές λέξεις ενωμένες με σημεία στίξης
πηγή: https://xkcd.com/936/

Τώρα, μπορείτε να αντιγράψετε το δημόσιο κλειδί στον server σας όπως περιγράψαμε στον οδηγό «10 λεπτά για την ρύθμιση ενός ασφαλούς server«. Έτσι όταν θα συνδέεστε στον SSH server σας, θα σας ζητάει μόνο το συνθηματικό του κλειδιού σας (εκτός και αν δεν το έχετε κλειδώσει) και τα σας συνδέσει αυτόματα.

Βήμα 2 | Απενεργοποιήστε τον έλεγχο με κωδικού πρόσβασης

Φυσικά, η λογική επέκταση της χρήσης κλειδιών SSH είναι ότι εάν π.χ. συνεργάζεστε με κάποιον στον ίδιο server και χρησιμοποιείτε κλειδιά SSH τότε, μπορείτε να απενεργοποιήσετε εντελώς τον έλεγχο κωδικού πρόσβασης.

Για να το κάνουμε αυτό θα πρέπει να επεξεργαστούμε το αρχείο ρυθμίσεων του SSH πχ με το VIM:

sudo vim /etc/ssh/sshd_config

Εκεί βρείτε το #PasswordAuthentication yes , αφαιρέστε το # από την αρχή της γραμμής και αλλάξτε το «yes» σε «no» και αποθηκεύστε το αρχείο.

αφαιρέστε το # από την αρχή της γραμμής και αλλάξτε το "yes" σε "no"
Advertisements

Βήμα 3 | Απόρριψη αιτημάτων σύνδεσης χωρίς κωδικούς πρόσβασης

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

Επεξεργαζόμαστε το αρχείο διαμόρφωσης του SSH:

sudo vim /etc/ssh/sshd_config

όπου θα δείτε τη γραμμή #PermitEmptyPasswords no και αφαιρούμε το # από την αρχή της γραμμής και αποθηκεύουμε το αρχείο.

δείτε τη γραμμή #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:

sudo vim /etc/ssh/sshd_config

Αφαιρέστε το # από ​​την αρχή της γραμμής Port και αντικαταστήστε το «22» με τον αριθμό θύρας της επιλογής σας.

Για να μην βάζετε συνέχεια την παράμετρο -p xxxx με τον αριθμό θύρας, μπορείτε να διαμορφώστε τον ssh client σας να το παίρνει αυτόματα. Για να το κάνετε αυτό επεξεργαστείτε το αρχείο:

vim ~/.ssh/config

και διαμορφώστε το ανάλογα με τις ανάγκες σας:

Host ena-onoma
  HostName IP-h-domain-tou-server-sas
  User onoma-xristi
  Port XXXXX
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

Έπειτα θα μπορείτε να κάνετε SSH στον server σας απλά γράφοντας:

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 λεπτά. 

Advertisements

Βήμα 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 σας.

Παραπομπές: