Barada: Πιστοποίηση δύο παραγόντων μέσω του Android

dimitris | Πέμ, 12/12/2013 - 13:48 | 12'

Αν συνδέεστε με έναν ή περισσότερους απομακρυσμένους υπολογιστές μέσω ssh θα σας έχει απασχολήσει η ασφάλεια και πως θα κρατήσετε μακρυά όλους όσους θέλουν να κάνουν πάρτι κάτω από τη μύτη σας. Μια καλή λύση είναι οι αλγόριθμοι Two-Mode Authentication, όπως το Barada, που βάζουν στην εξίσωση το κινητό σας τηλέφωνο.

Του Ευάγγελου Μπαλάσκα

Ο ντε φάκτο τρόπος για να συνδεθούμε σε ένα linux σύστημα, είναι μέσω ssh [1]. Το μηχάνημα στο οποίο θέλουμε να συνδεθούμε, μας στέλνει το δημόσιο κλειδί του, το αποθηκεύουμε στο αρχείο .ssh/known_hosts και στη συνέχεια κρυπτογραφούμε με το κλειδί αυτό ό,τι δεδομένα του στέλνουμε. Από τη μεριά του, το άλλο μηχάνημα αποκρυπτογραφεί την επικοινωνία με το ιδιωτικό του κλειδί. Και αντίστροφα.

Τι γίνεται όμως όταν χρειάζεται να συνδεθούμε στο email μας ή σε ένα απομακρυσμένο σύστημά από υπολογιστή που δεν μας ανήκει; Είμαστε σίγουροι ότι ο υπολογιστής ή το δίκτυο στο οποίο συνδεόμαστε είναι ασφαλές και δεν θα καταγραφούν οι κωδικοί μας; Σε τέτοια συστήματα (πχ. Internet cafe) θα πρέπει να αποφεύγουμε να συνδεόμαστε. Ακόμα κι εάν η σύνδεσή μας με το email μας είναι μέσω πρωτοκόλλου https ή χρησιμοποιούμε ssh για να συνδεθούμε στο linux server μας, κανείς δεν μπορεί να εγγυηθεί ότι δεν καταγράφονται οι κωδικοί.

Ο πιο ασφαλής τρόπος θα ήταν να χρησιμοποιούμε διαφορετικό κωδικό κάθε φορά που συνδεόμαστε, όπως για παράδειγμα όταν πραγματοποιούμε τραπεζικές συναλλαγές. Οι αλγόριθμοι που παράγουν τέτοιους κωδικούς, ονομάζονται OTPW (one-time password) [2]. Για να χρησιμοποιούμε κάθε φορά έναν μοναδικό κωδικό, θα πρέπει να κρατάμε μία λίστα για να θυμόμαστε τους κωδικούς που έχουμε χρησιμοποιήσει και ποιους έχουμε ακόμα διαθέσιμους. Φυσικά υπάρχουν ηλεκτρονικές συσκευές που παράγουν tokens που μπορούμε να χρησιμοποιήσουμε. Αλλά ακόμα κι αυτά (ή ακόμα κι αυτά με κωδικό) χρειάζεται με κάποιο τρόπο να συγχρονίζουμε το μηχάνημά μας με τις συσκευές αυτές.

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

Από την στιγμή που έχουμε μια Αndroid συσκευή, μπορούμε να εγκαταστήσουμε εφαρμογή που να υλοποιεί τον αλγόριθμο HOTP [3] και να χρησιμοποιήσουμε το κινητό μας για να παράγουμε μοναδικούς κωδικούς, τους οποίους θα χρησιμοποιούμε για να συνδεθούμε με έναν υπολογιστή ή το email account μας. Αυτό είναι η λεγόμενη πιστοποίηση δύο παραγόντων ή two-factor authentication (TFA).

Η πιο γνωστή εφαρμογή για Android είναι το google-authenticator [4], που φυσικά προσφέρει και pam module [5]. Το pam module είναι ο μηχανισμός με τον οποίο πιστοποιεί τον χρήστη με το σύστημά μας. Το google-authenticator παράγει εξαψήφιους κωδικούς και υπάρχει υλοποίηση για πολλές συσκευές. Αλλά εκτός από την δύσκολη εγκατάσταση του, βρήκα αρκετά αποθαρρυντικό το γεγονός ότι δεν προστατεύει την εφαρμογή στο κινητό μας με κάποιο PIN.

Εναλλακτικά χρησιμοποιώ το Gort [6], της client εφαρμογής του Barada [7]. To Gort θυμίζει λίγο την ταινία The Day the Earth Stood Still (1951) και φυσικά προσφέρει και το αντίστοιχο pam module. Η διαφορά με το google-authenticator είναι ότι για να το χρησιμοποιήσει κάποιος στο Android, χρειάζεται να βάλει pin. Η εγκατάσταση του Gort (client εφαρμογής) είναι αρκετά απλή, μπορείτε να την αναζητήσετε το Google Play.

Εγκατάσταση Barada
Για να μπορέσουμε να υλοποιήσουμε πιστοποίηση δύο παραγόντων σε έναν υπολογιστή, πρέπει να εγκαταστήσουμε το Barada pam module στον υπολογιστή αυτό και να τον ρυθμίσουμε να το χρησιμοποιεί. Αρχικά, για να κατεβάσουμε και να εγκαταστήσουμε το barada από τον πηγαίο κώδικα, αρκεί να ακολουθήσουμε τις παρακάτω τρεις εντολές:

wget -c http://goo.gl/dsJc3
tar xf barada-pam-0.5.3.tar.bz2
cd barada-pam

Θα πρέπει να έχουμε ήδη εγκαταστήσει τα εξής προγράμματα:

  • boost
  • boost-devel
  • pam-devel
  • openssl-devel

Στην συνέχεια δίνουμε:

./configure
make
sudo make install

Η εγκατάσταση έχει ολοκληρωθεί επιτυχώς!

Στη συνέχεια, μπορούμε να χρησιμοποιήσουμε το barada pam module σε οποιαδήποτε εφαρμογή/δαίμονα που κάνει χρήση pam modules (είναι όσα προγράμματα αναφέρονται στον κατάλογο /etc/pam.d). Για παράδειγμα, για να ενεργοποιήσουμε το barada στο sshd, αρκεί να επεξεργαστούμε το αρχείο /etc/pam.d/sshd προσθέτοντας το εξής στην αρχή του αρχείου:

auth       sufficient   pam_barada.so

Εάν το σύστημά μας είναι 64bit τότε θα πρέπει να βάλουμε το εξής:

auth       sufficient   /lib/security/pam_barada.so

Το  sufficient λέει απλά στο sshd, ότι εάν δεν πληκτρολογήσουμε σωστά το token του Gort, θα συνεχίσει ρωτώντας μας το συνθηματικό που ήδη έχουμε.

Δημιουργία κλειδιού & Pin

Είμαστε σχεδόν έτοιμοι. Τώρα πρέπει να προσθέσουμε έναν χρήστη στο barada:

# /usr/local/bin/barada-add ebal 12345
Added ebal with key:
e1ffc261e410e9ce67573ee64f923ae1

Τέλος, το... δύσκολο κομμάτι είναι να αντιγράψουμε το κλειδί στο Gort (δείτε εικόνα 1), το οποίο θα έχουμε εγκαταστήσει στο Android κινητό μας από το Google Play. 

1  Εισαγωγή του κλειδιού του Barada από το Linux μηχάνημα στο Gort στο Android
1  Εισαγωγή του κλειδιού του Barada από το Linux μηχάνημα στο Gort στο Android

Τώρα το μόνο που μένει είναι να το δοκιμάσουμε. Τρέχουμε το Gort, επιλέγουμε το profile μας, και πληκτρολογούμε το pin: 12345 – αυτό που δώσαμε στο barada. Το Gort θα μας επιστρέψει ένα εξαψήφιο κωδικό, π.χ. 405148, με το οποίο μπορούμε να συνδεθούμε, όπως στην εικόνα 2.


2  Κάθε φορά που θέλουμε να συνδεθούμε στο  Linux μηχάνημα, το Gort θα μας δίνει τον OTP κωδικό

Προσοχή, ο κάθες εξαψήφιος κωδικός έχει μικρή διάρκεια ζωής. Οπότε ανοίγουμε γρήγορα το τερματικό μας και συνδεόμαστε στο linux μηχάνημά μας, όπως φαίνεται στην εικόνα 3. Αν όλα πάνε καλά, έχουμε επιβεβαιώσει ότι συνδεόμαστε κανονικά με το συνδυασμό Gort και Barada pam module.


3  Συνδεόμαστε!

 

Apache

Υπάρχουν αρκετές προγραμματιστικές βιβλιοθήκες που μπορούμε να χρησιμοποιήσουμε, συσχετίζοντας τις εφαρμογές μας με τον μηχανισμό PAM. Με αυτόν τον τρόπο, μπορούμε να υλοποιήσουμε το two way factor authentication. Εάν ενεργοποιήσουμε το EPEL repository σε CentOS διανομή, θα δούμε ότι υπάρχει το mod_auth_pam [8] και μπορούμε να αντικαταστήσουμε το Basic Auth με το barada.

 

Επίλογος

Η διαδικασία πιστοποίησης δύο παραγόντων μας προσφέρει ένα ακόμα επίπεδο ασφάλειας. Στηρίζεται στο γεγονός ότι κάτι γνωρίζουμε (pin) και κάτι έχουμε (token). Επίσης η πρόσβαση είναι κάτι που διαρκεί μερικά δευτερόλεπτα. Οπότε εάν δεν προλάβουμε να συνδεθούμε, ήδη το token που έχουμε παράγει είναι άχρηστο (και για τον κακόβουλο χρήστη).

Αυτό όμως δεν συνεπάγεται ότι το σύστημά ή η εφαρμογή μας είναι απόλυτα ασφαλής. Οι λύσεις τύπου two-step authentication είναι αρκετά χρήσιμες εάν δεν χρησιμοποιούμε το μηχάνημά μας ή εάν θέλουμε να αυξήσουμε την ασφάλεια.

Εάν δεν έχουμε προστατεύσει το σύστημά μας από brute force επιθέσεις και το συνθηματικό μας δεν είναι αρκετά ασφαλές, τότε είναι θέμα χρόνου για να συνδεθεί κάποιος με τα στοιχεία μας. Είναι αρκετά τα μέτρα ασφαλείας που μπορούμε να λάβουμε. Για παράδειγμα, η προκαθορισμένη TCP πόρτα που ακούει ο ssh daemon είναι η 22. Εάν θέλουμε να αυξήσουμε την ασφάλειά μας, καλύτερα να αλλάξουμε την πόρτα σε κάποια άλλη. Επίσης δεν πρέπει να επιτρέπουμε στον διαχειριστή να μπορεί να συνδέεται - δηλαδή μην κάνετε αυτό που φαίνεται στην εικόνα μας! :P.

 


Αν σας αρέσουν τα b-movies, τσεκάρετε το http://youtu.be/OfpSXI8_UpY
 

Σύνδεσμοι

[1] SSH: http://goo.gl/bZAI1
[2] OTPW: http://goo.gl/d43jy
[3] HOTP: http://goo.gl/mWNPt
[4] Google-authenticator: http://goo.gl/qSOay
[5] PAM: http://goo.gl/jNuDu
[6] Gort: http://goo.gl/hkjD3
[7] Barada: http://barada.sf.net
[8] Apache: http://goo.gl/VMBLl

 

Who is Who: Ευάγγελος Μπαλάσκας
Ο Βαγγέλης προσπαθεί να βοηθήσει τα νέα μέλη του χώρου. Θα τον βρείτε στο hackerspace.gr

Δώσε αστέρια!

MO: 5 (ψήφοι: 1)