EFI Password

Security.png
Στα συστήματα Macintosh υπάρχει ένα low level security feature, παρόμοιο με τον κωδικό που βάζουμε στο BIOS των υπόλοιπων PC. Το σύστημα αυτό υπάρχει από την έκδοση 4.1.7 του Open Firmware και από default είναι απενεργοποιημένο. Από το Mac OS 10.1 υπάρχει ένα utility από την Apple για να θέσουμε ένα κωδικό, έτσι ώστε να είναι δύσκολο για κάποιον να κάνει boot από άλλο drive ή σε single user mode. Το utility Open Firmware Password application για τα 10.1 εως 10.3 μπορούμε να το κατεβάσουμε από εδώ, ενώ για το 10.4 θα το βρούμε στο Installation DVD 1, στο φάκελο /Applications/Utilities/. Στα νεότερα intel μηχανήματα, θα πρέπει να κάνουμε boot από το install DVD 1 και από το menu Utilities να επιλέξουμε Firmware Password Utility. Τι γίνεται όμως όταν ξεχάσουμε τον κωδικό? Υπάρχει μία εύκολη λύση, και αυτή είναι να βγάλουμε τη μία μνήμη από το μηχάνημα, μόλις bootάρει και έχει γίνει αλλαγή στη μνήμη, το Firmware γίνεται reset και μαζί με αυτό και ο κωδικός. Σε μερικά μηχανήματα όμως είναι λίγο δύσκολο να βγάλουμε τη ram, η γενικά να ανοίξουμε το μηχάνημα... Εδώ λοιπόν θα εκμεταλλευτούμε μία αδυναμία στη κρυπτογράφηση του κωδικού στο Firmware, έτσι ώστε να βρούμε τον κωδικό και να μη χρειαστεί καν να καταφύγουμε στις παραπάνω διαδικασίες ώστε να τον κάνουμε reset.
Για τη διαδικασία θα πρέπει να έχω πρόσβαση admin στο λειτουργικό, και λίγη υπομονή.
Ανοίγουμε το Terminal.app και δίνουμε την εντολή:
sudo nvram -p
Η συγκεκριμένη εντολή, θα κάνει print στην οθόνη τα περιεχόμενα του Firmware. Αν προσέξουμε, μία σειρά θα ξεκινάει με "security=password" και δίπλα θα ακολουθεί ένα hash, που στην ουσία είναι ο κρυπτογραφημένος κωδικός του EFI. Μπορούμε να χρησιμοποιήσουμε και το grep ώστε να μας βγάλει μόνο αυτή τη σειρά...

Παράδειγμα:
sudo nvram -p | grep passwordterminalefipassword.png
Στη συνέχεια θα προχωρήσουμε στην αποκρυπτογράφηση του κωδικού. Πρώτα αφαιρούμε τα % έτσι ώστε να έχουμε καθαρά bytes, στη προκειμένη περίπτωση :
cc c5 c5 c8 cb d8.
Στη συνέχεια τα μετατρέπουμε σε binary, αφού τώρα είναι σε hex, μπορούμε να χρησιμοποιήσουμε έναν converter για ευκολία. Για το παράδειγμα μας θα πάρουμε το αποτέλεσμα:
11001100 11000101 11000101 11001000 11001011 11011000
Η κρυπτογράφηση που χρησιμοποιεί η Apple είναι μία απλή εφαρμογή της NOT ανά 2 bit. Ξεκινώντας από το πρώτο λοιπόν θα αρχίσουμε να μετατρέπουμε τα bit αναλόγως ( στη NOT το 1 γίνεται 0 και το 0 γίνεται 1), με βάση αυτά θα έχουμε:
Το αρχικό με τα bit που θα υποστούν μετατροπή:
11001100 11000101 11000101 11001000 11001011 11011000
Το οποίο θα μετατραπεί σε:
01100110 01101111 01101111 01100010 01100001 01110010
Αν κάνουμε μετατροπή του παραπάνω αποτελέσματος σε ASCII θα πάρουμε το string "foobar" το οποίο είναι ο κωδικός του Firmware.
Μπορούμε να πάμε και παραπέρα κάνοντας την αντίστροφη διαδικασία, μετατρέποντας ένα κωδικό απο ASCII σε δυαδικό και τέλος σε hex με τη μορφή που θα μπορεί να το χρησιμοποιήσει το Firmware, και με την εντολή:
sudo nvram security-password= κρυπτογραφημένος κωδικός
Όπου "κρυπτογραφημένος κωδικός " ο νέος κωδικός με μορφή %ab%cd%ef να θέσουμε το νέο firmware password.

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