Notice icon attention yellow.png Τα περιεχόμενα του ιστότοπου δεν ανανεώνονται από το καλοκαίρι του 2015. Τα άρθρα πιθανόν να έχουν ελλείψεις ή ανακρίβειες. Συμβουλευτείτε και μια δεύτερη πηγή γνώσης πριν εφαρμόσετε πρακτικές οδηγίες.

Κρυπτογράφηση δίσκου με cryptsetup

Από Skytales
Αναθεώρηση ως προς 12:30, 11 Απριλίου 2015 από τον Luigi (Συζήτηση | συνεισφορές) (Με dd)

(διαφορά) ←Παλαιότερη αναθεώρηση | Τελευταία αναθεώρηση (διαφορά) | Νεώτερη αναθεώρηση → (διαφορά)
Μετάβαση σε: πλοήγηση, αναζήτηση
Notice icon rfc purple.png Ζητούνται σχόλια και παρατηρήσεις.

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

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

Αφήστε τα σχόλια σας στη σελίδα συζήτησης αυτού του άρθρου.

Κρυπτογράφηση δίσκου με cryptsetup

Dmcrypt icon 1.png

Εφαρμογή

cryptsetup, dm-crypt

Στόχος

Κρυπτογράφηση συστημάτων αρχείων

Πλατφόρμες

Linux

Επίπεδο δυσκολίας

Αυξημένο

Χρόνος ολοκλήρωσης

Θα χρειαστεί να πληκτρολογούμε εντολές για 10-20 λεπτά. Ο χρόνος ολοκλήρωσης των εντολών εξαρτάται από το μέγεθος του filesystem και μπορεί να απαιτούν από μερικά λεπτά, έως αρκετές ώρες για πολύ μεγάλα filesystems.

Το dm-crypt [1], μέρος της υποδομής device-mapper [2] προσφέρει κρυπτογράφηση συσκευών/δίσκων χρησιμοποιώντας εφαρμογή του πυρήνα του Linux. Δε θα χρησιμοποιήσουμε άμεσα το dm-crypt λόγω της πολυπλοκότητάς του, αντίθετα θα χρησιμοποιήσουμε μια έκδοση του προγράμματος cryptsetup, που έχει ενεργοποιημένο το LUKS (Linux Unified Key Setup).

Το LUKS είναι το standard του Linux για κρυπτογράφηση δίσκων. Έχοντας μια κοινή πολιτική στη διαμόρφωση δίσκων, διευκολύνεται η συμβατότητα ανάμεσα σε Linux διανομές, και προσφέρεται ασφαλής διαχείριση με πολλαπλούς χρήστες. Το LUKS αποθηκεύει όλες τις απαραίτητες πληροφορίες εγκατάστασης στην αρχή του partition (header), δίνοντας στον χρήστη τη δυνατότητα να μετακινεί τα δεδομένα του απρόσκοπτα.

Το Cryptsetup χρησιμοποείται ως frontend για να διαμορφώσουμε κατάλληλα και ευκολότερα τις επιλογές του dm-crypt για τους δίσκους μας.

H δημιουργία κρυπτογραφημένων filesystems με βάση το πρότυπο LUKS είναι, προς το παρόν, εφικτή μόνο μέσω Linux. Ωστόσο, ένα partition ή αρχείο κρυπτογραφημένο με αυτό τον τρόπο, μπορεί να γίνει προσβάσιμο και από περιβάλλον windows με χρήση του FreeOTFE. Για περισσότερες πληροφορίες σχετικά με το FreeOTFE μπορείτε να ανατρέξετε στον οδηγό για εγκατάσταση και χρήση του FreeOTFE. Για να δημιουργήσετε τέτοια κρυπτογραφημένα filesystems αν το κύριο λειτουργικό που χρησιμοποιείτε είναι τα Windows, μπορείτε να ανατρέξετε στον οδηγό χρήσης live linux διανομών.

Εισαγωγικές σημειώσεις[επεξεργασία]

Όλες οι οδηγίες που περιγράφονται παρακάτω, αναφέρονται σε debian based distros (debian, ubuntu, linux mint κα). Ωστόσο ενδέχεται να διαφέρουν από ελάχιστο έως καθόλου και για τις υπόλοιπες διανομές.

Όλες οι εντολές που περιγράφονται παρακάτω απαιτούν δικαιώματα root. Για να πάρουμε δικαιώματα root, στην κονσόλα γράφουμε:

su

ή

sudo su -

Αν δεν μπορούμε να κάνουμε login ως root με τις παραπάνω εντολές, αλλά μπορούμε να εκτελέσουμε τις παρακάτω εντολές με χρήση του sudo, προσθέτουμε το "sudo " πριν από κάθε εντολή που αναφέρεται.

Για κάθε εντολή που αναφέρουμε, μπορούμε να βρούμε περισσότερες πληροφορίες πληκτρολογώντας:

man όνομα_εντολής

Εγκατάσταση του cryptsetup[επεξεργασία]

Το cryptsetup βρίσκεται στα repositories των περισσότερων διανομών. Για διανομές Debian, Ubuntu ή Mint σε ένα terminal δίνουμε :

 sudo apt-get update && sudo apt-get install cryptsetup

Εναλλακτικά μπορούμε να το εγκαταστήσουμε από το Package Manager ή το Synaptic.

Πριν την κρυπτογράφηση[επεξεργασία]

Χρησιμοποιώντας το dm-crypt/LUKS, μπορούμε να κρυπτογραφήσουμε το περιεχόμενο οποιασδήποτε συσκευής(εσωτερικής ή εξωτερικής, ολόκληρης ή μερικής, φυσικής ή εικονικής). Πριν προχωρήσουμε όμως στην κρυπτογράφηση θα κάνουμε κάποιες προπαρασκευαστικές ενέργειες, στην συσκευή μας. Θέλουμε να διασφαλίσουμε την ακεραιότητα της κρυπτογράφησης, σε περίπτωση που κάποιος τρίτος προσπαθήσει να την σπάσει. Θα ελέγξουμε για κατεστραμμένους τομείς στον δίσκο και θα γράψουμε μια φορά τυχαία δεδομένα πάνω στη συσκευή για να υπάρχει ομοιομορφία στην κρυπτογράφηση.

Έλεγχος για bad sectors[επεξεργασία]

Θα χρησιμοποιήσουμε την εντολή badblocks [3], έτσι ώστε τυχόν κατεστραμμένοι τομείς του δίσκου, να αγνοηθούν από την κρυπτογράφηση. Η διαδικασία αυτή θα πάρει κάποιο χρόνο, ανάλογα και με το μέγεθος της συσκευής.

sudo badblocks -c 10240 -s -w -t random -v /dev/sdx 
  • -c ο αριθμός των block της συσκευής που ελέγχονται μαζί, προεπιλογή 64.
  • -w ελέγχος με εγγραφή. Η εντολή badblocks γράφει κάποιες ακολουθίες στον δίσκο, στη συνέχεια τις διαβάζει και συγκρίνει για τυχόν λάθη.
  • -t επιλογή της ακουλουθίας που θα γράφει και θα διαβάζει
  • -s δείχνει την πρόοδο της διαδικασίας
  • x από το /dev/sdx το γράμμα που ανταποκρίνεται στην συσκευή μας

Εγγραφή τυχαίων δεδομένων[επεξεργασία]

Πριν δημιουργήσουμε το κρυπτογραφημένο filesystem, συνίσταται να γεμίσουμε το δίσκο/partition με τυχαία δεδομένα. Έτσι, κάποιος αντίπαλος θα είναι αδύνατο να διακρίνει τα κρυπτογραφημένα από τα τυχαία δεδομένα. Με τον τρόπο αυτό κάνουμε πολύ πιο δύσκολη την κρυπτανάλυση του filesystem και κατά συνέπεια την απόπειρα κάποιου να αποκτήσει πρόσβαση σε αυτό.

Το γέμισμα του filesystem με τυχαία δεδομένα μπορούμε να το καταφέρουμε με δύο διαφορετικούς τρόπους. Θα χρησιμοποιήσουμε είτε το dd και τη γεννήτρια ψευδοτυχαίων αριθμών urandom, είτε την εντολή shred. Δεν χρειάζεται να κάνουμε και τα δύο, οποιοδήποτε αρκεί.

Notice icon info blue.png Έαν στο παρελθόν έχουμε γράψει τυχαία δεδομένα στον δίσκο και μετά τον έχουμε κρυπτογραφήσει, και στο παρόν χρειαζόμαστε να κάνουμε εκ νέου κρυπτογράφηση -για παράδειγμα διότι χάσαμε το κλειδί μας- δεν χρειάζεται να επαναλάβουμε την διαδικασία εγγραφής τυχαίων δεδομένων.

Με dd[επεξεργασία]

Η εντολή dd μας επιτρέπει χειρισμό αρχείων και δίσκων σε χαμηλό επίπεδο. Η παράμετρος if (Input File) υποδηλώνει από που θα αναγνώσει το dd, ενώ η of (Output File) το που θα γράψει. Σαν είσοδο επιλέγουμε την (εικονική) συσκευή /dev/urandom. Η συσκευή αυτή μας τροφοδοτεί με ψευδοτυχαίους αριθμούς. Στο of πρέπει να ορίσουμε το αρχείο, partition ή δίσκο όπου σκοπεύουμε να δημιουργήσουμε το κρυπτογραφημένο filesystem. Συνίσταται ιδιαίτερη προσοχή κατά την πληκτρολόγηση της εντολής αυτής, καθώς ένα λάθος μπορεί να θέσει ώς προορισμό εγγραφής το λάθος partition, καταλήγοντας έτσι να γράφουμε τυχαία δεδομένα πάνω στα αρχεία μας ή αυτά του συστήματός μας. Τα αποτελέσματα της εντολής αυτής είναι μη αναστρέψιμα.

dd if=/dev/urandom of=/dev/sdx & watch -n 60 "kill -USR1 $!" > /dev/null 2&>1 &

Η παραπάνω εντολή θα προκαλεί την εκτύπωση της προόδου του dd κάθε 60 δευτερόλεπτα. Για να τερματίσουμε την παραπάνω εντολή, όταν πχ τελειώσει το dd, την σκοτώνουμε πατώντας Ctrl-C.

Με shred[επεξεργασία]

Εναλλακτικά χρησιμοποιούμε την εντολή shred για να γράψουμε πάνω στη συσκευή τυχαία δεδομένα.

sudo shred -v -n 1 /dev/sdx 
  • -n αριθμός επαναλήψεων. Προεπιλογή 3.

Αν είμαστε πραγματικά παρανοϊκοί για την ασφάλεια των δεδομένων μας, ίσως χρειάζεται να αυξήσουμε τον αριθμό επαναλήψεων της διαδικασίας. Αυτό όμως μπορεί να είναι αρκετά χρονοβόρο και γενικά θεωρείται περιττό.

Προετοιμασία του Filesystem[επεξεργασία]

Πριν εκτέλέσουμε το cryptsetup χρειάζεται να διαμορφώσουμε τον δίσκο και πιθανόν να φτιάξουμε και διαμερίσματα (partitions). Στο παράδειγμα που ακολουθεί θα φτιάξουμε ένα partition που θα εκτείνεται σε όλο τον δίσκο.

Για τη διαμόρφωση του δίσκου μπορούμε να χρησιμοποίησουμε κάποιο πρόγραμμα με GUI (πχ το Gparted) ή κάποια command-line εφαρμογή. Θα γίνει αναφορά χρήσης και των δύο τρόπων.

Mε χρήση του fdisk (command-line)[επεξεργασία]

Για τη διαμόρφωση του δίσκου θα χρησιμοποιήσουμε το πρόγραμμα fdisk, από γραμμή εντολών.

Ως super-users ή root δίνουμε :

sudo fdisk /dev/sdx 

(όπου sdx η συσκευή μας, πχ sda, sdb... )

Στο τερματικό παίρνουμε :

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x9f9bbbd7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): 

Τώρα το fdisk, περιμένει συγκεκριμένες εντολές για την διαμόρφωση του δίσκου. Δίνουμε κατά σειρά τις εντολές/παραμέτρους :

  • n, new partition
  • p, primare partition ή e, extended partition
  • 1, ο αριθμός των partition
  • Enter, διατηρούμε την προεπιλογή
  • Enter, διατηρούμε την προεπιλογή
  • w, εγγραφή στον δίσκο

Και βλέπουμε κάτι τέτοιο :

Command (m for help): n
Command action
    e   extended
    p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1020, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1020, default 1020):
Using default value 1020

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Swap[επεξεργασία]

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

Κρυπτογράφηση του Filesystem[επεξεργασία]

Φτιάχνουμε λοιπόν ένα LUKS partition, κρυπτογραφημένο διαμέρισμα. Εισάγουμε τον κωδικό για την κρυπτογράφηση, αυτός θα είναι ο κωδικός με τον οποίο θα χρησιμοποιούμε την συσκευή μας.e passphrase.

Notice icon attention red.png Είναι πολύ σημαντικό να μην χρησιμοποιηθεί ο default αλγόριθμος του luksFormat που είναι ο aes-cbc. Ο συγκεκριμένος αλγόριθμος έχει συγκεκριμένες ευπάθειες και κάποιος μπορεί να τις εκμεταλλευτεί για να μπορέσει να αλλάξει συγκεκριμένα δεδομένα πάνω στο δίσκο! Περισσότερα μπορεί κανείς να διαβάσει στο http://www.jakoblell.com/blog/2013/12/22/practical-malleability-attack-against-cbc-encrypted-luks-partitions/. Ο προτεινόμενος αλγόριθμος αυτή τη στιγμή είναι ο aes-xts-plain64.
sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdx1 
WARNING!
========
This will overwrite data on /dev/sdx1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.


Τώρα χρησιμοποιώντας την ακόλουθη εντολή, ανοίγουμε το LUKS partition και κάνουμε mapping(αντιστοίχιση). Θα πρέπει να εισάγουμε τον κωδικό μας πριν προχωρήσουμε.


sudo cryptsetup luksOpen /dev/sdx1 sdx1 
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Βλέπουμε το mapping των δίσκων μας με :

ls -l /dev/mapper/  
total 0
crw-rw---- 1 root root  10, 60 2010-03-25 20:04 control
brw-rw---- 1 root disk 252,  0 2010-03-25 23:36 sdx1


Διαμορφώνουμε την συσκευή σε ext4 format ή κάποιο άλλο της αρεσκείας μας

sudo mkfs.ext4 /dev/mapper/sdx1 

Εναλλακτικά μπορούμε να την διαμορφώσουμε ως ext3, ntfs κλπ.

Τέλος, αφαιρούμε το mapping, "κλείνοντας" το partition.

sudo cryptsetup luksClose sdx1 

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

Διαβάστε ακόμα στο wiki[επεξεργασία]

Πηγές[επεξεργασία]

  • Πηγή : segfault.in [4]