Steganografia systemu plików

Hej Habr.

Chciałbym przedstawić Państwu mały projekt dot steganografia, wykonane w wolnym czasie od studiów.

Zrobiłem projekt dotyczący ukrytego przechowywania informacji w systemie plików (dalej FS).
Można to wykorzystać do kradzieży poufnych informacji do celów edukacyjnych.

Steganografia systemu plików

Jako prototyp wybrano bardzo stary system Linux FS ext2.

realizacja

Rozważania dotyczące wdrożenia

Jeżeli dobrze jest „rozwikłać” standard ext2 to można zastąpić tym, że w FS jest tzw. Superbloki, który dostarcza podstawowych informacji o systemie. Po tym jak mnie znaleziono Blokuj mapę bitową и Tabela i-węzłów. Niemal natychmiast narodził się pomysł zapisywania informacji w aktualnie pustych blokach FS. Teraz warto było pomyśleć o zabezpieczeniu przed uzbrojonym programistą edytor szesnastkowy.

Jeśli przechowujesz ukryte informacje bez szyfrowania, to nawet pomimo ich rozmycia w FS, nadal będą one zbyt widoczne, zwłaszcza jeśli programista wie, czego szukać. Dlatego zdecydowano się zaszyfrować wszystkie bloki pliku źródłowego. Wybrałem szyfr blokowy AES, ale jak rozumiesz, to nie jest ważne.

Aby podczas czytania oddzielić niezbędne bloki od wszystkich pozostałych, zdecydowano się dodać specjalny znacznik do każdego bloku na początku bloku. Token ten został zaszyfrowany w zależności od numeru bloku w pliku źródłowym. Ta sztuczka natychmiast umożliwiła nie tylko znalezienie niezbędnych bloków, ale także rozpoznanie ich właściwej kolejności.

Ogólna zasada działania systemu.

Steganografia systemu plików

Algorytm nagrywania

Punkty:

  • Najpierw zapisz trochę informacji w źródłowym systemie plików;
  • Usuń te informacje (niekoniecznie wszystkie);
  • Plik do ukrycia dzieli się na bloki o równej długości, dodając znacznik;
  • Zaszyfruj te bloki;
  • Umieść zaszyfrowane bloki w pustych blokach FS.

Dla miłośników schematów blokowych

Poniżej znajduje się schemat blokowy algorytmu rejestracji. Algorytm otrzymuje na wejściu cztery pliki:
-Obraz modyfikowalnego systemu plików;
-Plik podlega steganografii;
-Plik z kluczem szyfrującym dla AES;
-Plik ze znacznikiem.
Steganografia systemu plików

Warto od razu zaznaczyć, że algorytm ten ma jedną wadę: po zapisaniu pliku do FS, nie wolno napisz coś nowego do FS, ponieważ wszelkie nowe informacje mogą wylądować w blokach, które przydzieliliśmy do naszego spakowanego pliku, chociaż otwiera to również możliwość „szybkiego zatarcia śladów”.

Ale jest całkiem oczywiste, jak można to naprawić: konieczne jest przepisanie algorytmu zapisywania bloków w FS. Jest to zadanie zrozumiałe, ale niezwykle czasochłonne.
W przypadku dowodu koncepcji nie zaimplementowałem tego.

W efekcie w FS zostaną wprowadzone następujące zmiany: tak wygląda FS przed steganografią (wcześniej nagrano plik audio).
Steganografia systemu plików
A tak wygląda FS z już spakowanymi informacjami.
Steganografia systemu plików

Algorytm odczytu

Punkty:

  • Znając klucz i metodę konstruowania znaczników, skomponuj pierwsze N ​​znaczników, mając pewność, że N pomnożone przez długość bloku systemu plików będzie większe niż długość spakowanego pliku;
  • Szukaj bloków w FS zaczynając od znaczników;
  • Odszyfruj otrzymane bloki i oddziel znaczniki;
  • Zbierz powstałe bloki w odpowiedniej kolejności i uzyskaj plik źródłowy.

Dla miłośników schematów blokowych

Poniżej znajduje się schemat blokowy algorytmu rejestracji. Algorytm otrzymuje jako dane wejściowe trzy pliki:
-Obraz systemu plików;
-Plik z kluczem szyfrującym dla AES;
-Plik ze znacznikiem.
Steganografia systemu plików

Po uruchomieniu programu pojawi się plik Read, który będzie plikiem wyodrębnionym ze steganograficznego systemu plików; jeżeli klucz lub znacznik został podany błędnie, plik Read będzie pusty.
(dla miłośników piękna możesz wstawić nie tylko plik, ale „nagłówek” zawierający metainformacje: nazwę pliku, uprawnienia, czas ostatniej modyfikacji itp.)

Automatyzacja uruchamiania

Dla wygody napisano skrypty bash, które automatyzują uruchamianie w systemie Linux (testowane na Ubuntu 16.04.3 LTS).
Przyjrzyjmy się uruchomieniu krok po kroku.
Nagrywanie:

  1. sudo Copy_Flash.sh „URZĄDZENIE” - pobierz obraz FS z URZĄDZENIA (flash);
  2. ./Write.sh „FILE” „KEY” „MARKER” – utwórz środowisko wirtualne, pobierz niezbędne biblioteki i uruchom skrypt zapisu;
  3. sudo ./Write_Flash.sh „URZĄDZENIE” – ponownie zapisz zmieniony plik FS w URZĄDZENIU.

Czytanie:

  1. sudo Copy_Flash.sh „URZĄDZENIE” - pobierz obraz FS z URZĄDZENIA (flash);
  2. ./Read.sh „KEY” „MARKER” - utwórz środowisko wirtualne, pobierz niezbędne biblioteki i uruchom pomijanie do odczytu;
  3. W bieżącym katalogu otwórz plik Read - są to informacje spakowane.

wniosek

Ta metoda steganografii prawdopodobnie wymaga ulepszenia, dodatkowych testów i rozszerzenia na bardziej popularne systemy plików, takie jak Fat32, NTFS и ext4.
Celem tej pracy było jednak pokazanie zasady, dzięki której możliwe jest ukryte przechowywanie informacji w systemie plików.
Za pomocą takich algorytmów możesz bez obaw przechowywać informacje, a jeśli znasz klucz, możesz zhakować taki system nie brutalną siłą (ale bardzo długim algorytmem), to bez znajomości klucza to system wydaje mi się całkowicie stabilny, jednak może to być powód do osobnego artykułu.

Cały kod jest zaimplementowany w Pythonie w wersji 3.5.2. Przykład pracy prezentowane na moim kanale YouTube. Pełny kod projektu jest opublikowany na GitHub.
(Tak, tak, wiem, że do wersji produkcyjnej trzeba pisać w czymś „szybkim”, np. C 😉)
W tej implementacji rozmiar pliku wejściowego do steganografii nie powinien przekraczać 1000 kB.

Chcę wyrazić swoją wdzięczność użytkownikowi PawełMSTU za cenne rady w planowaniu badań i zalecenia dotyczące konstrukcji artykułu.

Źródło: www.habr.com

Dodaj komentarz