Στεγανογραφία συστήματος αρχείων

Γεια σου Χαμπρ.

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

Έκανα ένα έργο για την κρυφή αποθήκευση πληροφοριών στο σύστημα αρχείων (περαιτέρω ФС).
Αυτό μπορεί να χρησιμοποιηθεί για την κλοπή εμπιστευτικών πληροφοριών για εκπαιδευτικούς σκοπούς.

Στεγανογραφία συστήματος αρχείων

Ένα πολύ παλιό Linux FS επιλέχθηκε ως πρωτότυπο ext2.

Реализация

Θέματα εφαρμογής

Εάν είναι καλό να "ξεδιπλώσετε" το πρότυπο ext2, τότε μπορείτε να αντικαταστήσετε ότι στο FS υπάρχει ένα λεγόμενο Superblocks, το οποίο παρέχει βασικές πληροφορίες για το σύστημα. Αφού με βρήκαν Αποκλεισμός Bitmap и Πίνακας Inode. Σχεδόν αμέσως, γεννήθηκε η ιδέα της καταγραφής πληροφοριών σε κενά μπλοκ FS. Τώρα άξιζε να σκεφτούμε την προστασία από έναν οπλισμένο προγραμματιστή hex editor.

Εάν αποθηκεύετε κρυφές πληροφορίες χωρίς κρυπτογράφηση, τότε, ακόμη και παρά τη θολότητά τους στο FS, θα εξακολουθούν να είναι πολύ εμφανείς, ειδικά εάν ο προγραμματιστής ξέρει τι να αναζητήσει. Ως εκ τούτου, αποφασίστηκε να κρυπτογραφηθούν όλα τα μπλοκ του αρχείου προέλευσης. Διάλεξα το block cipher AES, αλλά όπως καταλαβαίνετε, αυτό δεν είναι σημαντικό.

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

Γενική αρχή λειτουργίας του συστήματος.

Στεγανογραφία συστήματος αρχείων

Αλγόριθμος εγγραφής

Στα σημεία:

  • Πρώτα γράψτε μερικές πληροφορίες στο σύστημα αρχείων προέλευσης.
  • Διαγράψτε αυτές τις πληροφορίες (όχι απαραίτητα όλες).
  • Το αρχείο που θα κρυφτεί χωρίζεται σε μπλοκ ίσου μήκους, προσθέτοντας έναν δείκτη.
  • Κρυπτογραφήστε αυτά τα μπλοκ.
  • Τοποθετήστε κρυπτογραφημένα μπλοκ σε άδεια μπλοκ FS.

Για τους λάτρεις των μπλοκ διαγραμμάτων

Ακολουθεί ένα μπλοκ διάγραμμα του αλγόριθμου εγγραφής. Ο αλγόριθμος λαμβάνει τέσσερα αρχεία ως είσοδο:
-Εικόνα ενός τροποποιήσιμου συστήματος αρχείων.
-Αρχείο που υπόκειται σε στεγανογραφία.
-Αρχείο με κλειδί κρυπτογράφησης για AES.
-Αρχείο με δείκτη.
Στεγανογραφία συστήματος αρχείων

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

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

Ως αποτέλεσμα, θα γίνουν οι ακόλουθες αλλαγές στο FS: έτσι φαίνεται το FS πριν από τη στεγανογραφία (ένα αρχείο ήχου είχε εγγραφεί προηγουμένως).
Στεγανογραφία συστήματος αρχείων
Και έτσι φαίνεται το FS με τις πληροφορίες που είναι ήδη κλειστές.
Στεγανογραφία συστήματος αρχείων

Αλγόριθμος ανάγνωσης

Στα σημεία:

  • Με γνώση του κλειδιού και της μεθόδου κατασκευής δεικτών, συνθέστε τους πρώτους N δείκτες, με την εγγύηση ότι το N πολλαπλασιασμένο με το μήκος του μπλοκ συστήματος αρχείων είναι μεγαλύτερο από το μήκος του συμπιεσμένου αρχείου.
  • Αναζήτηση για μπλοκ στο FS που ξεκινούν με δείκτες.
  • Αποκρυπτογραφήστε τα ληφθέντα μπλοκ και διαχωρίστε τους δείκτες.
  • Συλλέξτε τα μπλοκ που προκύπτουν με τη σωστή σειρά και λάβετε το αρχείο προέλευσης.

Για τους λάτρεις των μπλοκ διαγραμμάτων

Ακολουθεί ένα μπλοκ διάγραμμα του αλγόριθμου εγγραφής. Ο αλγόριθμος λαμβάνει τρία αρχεία ως είσοδο:
-Εικόνα συστήματος αρχείων.
-Αρχείο με κλειδί κρυπτογράφησης για AES.
-Αρχείο με δείκτη.
Στεγανογραφία συστήματος αρχείων

Μετά την εκτέλεση του προγράμματος, εμφανίζεται το αρχείο Read, το οποίο θα είναι το αρχείο που εξάγεται από το στεγανογραφημένο σύστημα αρχείων· εάν το κλειδί ή ο δείκτης καθορίστηκε λανθασμένα, τότε το αρχείο Read θα είναι κενό.
(για τους λάτρεις της ομορφιάς, μπορείτε να εισαγάγετε όχι μόνο το αρχείο, αλλά μια "κεφαλίδα" που περιέχει μετα-πληροφορίες: όνομα αρχείου, δικαιώματα, χρόνος τελευταίας τροποποίησης κ.λπ.)

Αυτοματοποίηση εκκίνησης

Για ευκολία, γράφτηκαν σενάρια bash για την αυτοματοποίηση της εκκίνησης στο Linux (δοκιμάστηκε στο Ubuntu 16.04.3 LTS).
Ας δούμε την εκτόξευση βήμα προς βήμα.
Εγγραφή:

  1. sudo Copy_Flash.sh "DEVICE" - λάβετε την εικόνα FS από τη DEVICE (flash).
  2. ./Write.sh “FILE” “KEY” “MARKER” – δημιουργήστε ένα εικονικό περιβάλλον, κατεβάστε τις απαραίτητες βιβλιοθήκες και εκτελέστε το σενάριο εγγραφής.
  3. sudo ./Write_Flash.sh “DEVICE” – γράψτε το αλλαγμένο FS ξανά σε DEVICE.

ΑΝΑΓΝΩΣΗ:

  1. sudo Copy_Flash.sh "DEVICE" - λάβετε την εικόνα FS από τη DEVICE (flash).
  2. ./Read.sh «ΚΛΕΙΔΙ» «MARKER» - δημιουργήστε ένα εικονικό περιβάλλον, κατεβάστε τις απαραίτητες βιβλιοθήκες και εκτελέστε το skipt για ανάγνωση.
  3. Στον τρέχοντα κατάλογο, ανοίξτε το αρχείο Read - αυτές είναι οι συμπιεσμένες πληροφορίες.

Συμπέρασμα

Αυτή η μέθοδος στεγανογραφίας μάλλον χρειάζεται βελτίωση, πρόσθετες δοκιμές και επέκταση σε πιο δημοφιλή συστήματα αρχείων, όπως π.χ Fat32, NTFS и ext4.
Αλλά ο σκοπός αυτής της εργασίας ήταν να δείξει την αρχή με την οποία είναι δυνατή η πραγματοποίηση κρυφής αποθήκευσης πληροφοριών στο σύστημα αρχείων.
Με τη βοήθεια τέτοιων αλγορίθμων, μπορείτε άφοβα να αποθηκεύσετε πληροφορίες και εάν, εάν γνωρίζετε το κλειδί, είναι δυνατό να χακάρετε ένα τέτοιο σύστημα όχι με ωμή βία (αλλά με πολύ μεγάλο αλγόριθμο), τότε χωρίς να γνωρίζετε το κλειδί, αυτό Το σύστημα μου φαίνεται απολύτως σταθερό, ωστόσο, αυτό μπορεί να χρησιμεύσει ως λόγος για ένα ξεχωριστό άρθρο.

Όλος ο κώδικας υλοποιείται στην Python έκδοση 3.5.2. Παράδειγμα εργασίας παρουσιάζεται στο κανάλι μου στο youtube. Ο πλήρης κωδικός του έργου είναι αναρτημένος στο GitHub.
(Ναι, ναι, ξέρω ότι για την έκδοση παραγωγής πρέπει να γράψετε κάτι "γρήγορο", για παράδειγμα C 😉)
Σε αυτήν την υλοποίηση, το μέγεθος του αρχείου εισόδου για στεγανογραφία δεν πρέπει να υπερβαίνει τα 1000 kB.

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο