Hej Habr.
Chciałbym przedstawić Państwu mały projekt dot
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.
Jako prototyp wybrano bardzo stary system Linux FS
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.
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
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.
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.
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).
A tak wygląda FS z już spakowanymi informacjami.
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.
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:
- sudo Copy_Flash.sh „URZĄDZENIE” - pobierz obraz FS z URZĄDZENIA (flash);
- ./Write.sh „FILE” „KEY” „MARKER” – utwórz środowisko wirtualne, pobierz niezbędne biblioteki i uruchom skrypt zapisu;
- sudo ./Write_Flash.sh „URZĄDZENIE” – ponownie zapisz zmieniony plik FS w URZĄDZENIU.
Czytanie:
- sudo Copy_Flash.sh „URZĄDZENIE” - pobierz obraz FS z URZĄDZENIA (flash);
- ./Read.sh „KEY” „MARKER” - utwórz środowisko wirtualne, pobierz niezbędne biblioteki i uruchom pomijanie do odczytu;
- 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
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.
(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
Źródło: www.habr.com