“It’s the oldest question of all, George. Who can spy on the spies?”
John le Carré, Tinker Tailor Soldier Spy
Dzisiejszy blog był zainspirowany przez Państwa komentarze (osobne podziękowania dla Pana Jakuba!). Bezpośrednim natomiast powodem była dość smutna wiadomość o odejściu Johna le Carré (1931-2020), którego książki (The Spy Who Came in from the Cold, Tinker Tailor Soldier Spy czy też ostatnia i niesamowita Agent Running in the Field) były i pozostaną inspiracją dla wielu pokoleń kryminalistyków.
W czasach Wojny Zimowej jednym z podstawowych problemów, z którym miały do czynienia służby bezpieczeństwa, było przekazywanie informacji (zdobytych) w taki sposób, żeby w sytuacji, kiedy wiadomość/list zostanie przechwycona/y a) nie ujawnić jej źródła, b) uniemożliwić odczyt treści wiadomości oraz c) nie dać podmienić wiadomości na inną. W sztuce szpiegowskiej stosowano w tych celach wiele rozwiązań – od prostych do dość zaawansowanych technicznie. Możemy zobaczyć, jak wyglądała ukryta wiadomość (wariant najprostszy) w filmie braci Coen Bridge of Spies opowiadającym o wymianie Rudolfa Abla na Francisa Gary Powersa – pilota amerykańskiego samolotu szpiegowskiego U-2 zestrzelonego nad terytorium Związku Radzickiego. Do zaawansowanych technicznie metod można zaliczyć tzw. microdot’y – tekst widoczny wyłącznie przy dużym powiększeniu zamaskowany pod kropkę lub zabrudzenie (Rys. 1).
Rys. 1. Microdot – technika przekazywania instrukcji, informacji wywiadowczych kanałami otwartymi (czasopisma o zasięgu międzynarodowym, listy, pocztówki, serwetki itd.) Źródło: newsmax.com
Steganografia klasyczna opiera się o zasadę „matreshki” (rys. 2)
Rys. 2. Matreshka rosyjska ilustruje podstawową zasadę steganografii – ukrywamy jeden obiekt w drugim. Tylko adresat wie o tym, ile jest poziomów/„matrioszek” w matrioszce-mamie😊
Technika cyfrowa zdecydowanie poszerza możliwości steganografii. Dostępne metody można podzielić na dwie grupy 1) te, gdzie trzeba popracować rączkami oraz 2) gotowe programy, które robią wszystko za nas (rys. 3).
Rys. 3. „Interfejs” programu steganograficznego steghide (program pracuje w wierszu poleceń Windows)
Gotowe programy mają jednak kilka istotnych wad:
kryminalistycy cyfrowi wiedzą o ich istnieniu;
każdy może je ściągnąć i wypróbować, a więc będzie wiedział, jak wygląda wynik końcowy oraz (kryminalistyk cyfrowy) jak działa dany program;
gotowe programy zostawiają ślady cyfrowe (szczególnie w środowisku Windows), na podstawie których można domyślić się, jakiego programu steganograficznego używał nasz Kowalski.
W związku z powyższym w dzisiejszym blogu opiszemy metodę nr 1. Potrzebny nam będzie redaktor liczb szesnastkowych, na przykład znany nam już HxD Maëla Hörza z uroczego Saarbrücken😊 oraz program do archiwizowania/kompresji plików, na przykład darmowy 7-Zip. Plus, zwierzątko doświadczalne – plik z rozszerzeniem .jpg lub .gif.
Mamy plik secret.docx. Kompresujemy nasz plik w 7-Zip (klikamy na plik prawy przyciskiem myszki, w menu wybieramy 7-Zip – Add to „Secret.7z” – rys. 4).
Rys. 4. Archiwizujemy plik secret.docx przy pomocy programu 7-Zip
Otwieramy nasz nowy plik secret.7z w HxD Editorze (rys.5), kopiujemy w całości (!) widoczny na ekranie kod szesnastkowy (nie zamykamy programu HxD).
Rys. 5. Plik secret.7z w HxD Editorze, otwieramy i kopiujemy kod
Przeciągamy myszką plik-obrazek na ikonkę HxD. Przewijamy kod szesnastkowy do samego końca i dodajemy kod szesnastkowy pliku secret.7z. Zachowujemy plik (Save) (nie zwracamy uwagi na pojawiające się ostrzeżenie dotyczące zmiany rozmiaru pliku, zmiana ta nie jest na tyle znacząca, żeby tym się przyjmować) – rys. 6.
Rys. 6. Dodajemy kod szesnastkowy pliku secret.7z do kodu szesnastkowego naszego pliku-obrazku (można też po prostu przełączać się pomiędzy okienkami, tylko nie pomylcie „mamę-matrioszkę” z „córką” 😉).
Gotowe! Mamy teraz nasz plik-obrazek, w którym schowaliśmy plik secret.docx. Jeśli zmienimy rozszerzenie pliku-obrazku na .7z będziemy mogli odtworzyć go w programie 7-Zip (Rys. 7- 8).
Rys. 7. Gotowe! Ten obrazek ma w sobie plik secret.7z
Rys. 8. Po zmianie rozszerzenia pliku-obrazku na .7z możemy go otworzyć w 7-Zip (prawym przyciskiem klikamy plik-obrazek ze zmienionym rozszerzeniem, wybieramy Open archive – 7z) i odczytać zawartość pliku secret.docx
Podsumowanie: zaprezentowana metoda jest prosta w użyciu, a jednocześnie nie pozostawia za wiele śladów (programy do tworzenia skompresowanych plików są dość popularne, można je znaleźć na każdym komputerze). Pozostaje tylko poinformować naszego Adresata o zastosowanej metodzie steganograficznej. Jak to zrobić – odsyłam do książek J. Le Carré 😊
Zadanie: ukryć plik (.pdf, .docx, .wav lub inny) na dysku twardym, a jednocześnie uniemożliwić jego otwarcie przez osoby trzecie nie stosując szyfrowania.
Przedstawimy Państwu dwie metody z zakresu tzw. antiforensics, tj. działań podejmowanych w celu ukrycia śladów (kryminalistycznych) przed detekcją – metodę dla „laików” oraz drugą, bardziej zaawansowaną metodę antykryminalistyczną.
Antiforensics – działania kontrwykrywcze, których celem jest zatarcie, ukrycie śladów (w tym tych zaliczanych do kategorii cyfrowych) stanowią przedmiot kryminalistyki.
Materiał udostępniany w danym blogu ma służyć wyłącznie do celów edukacyjnych i informacyjnych.
Rozwiązanie 1: zmienić rozszerzenie pliku
Każdy plik ma określone rozszerzenie (ang. extention) wskazujące na jego format – .doc, .docx, .pdf, .png, .wav, .avi itd. Oficjalną, pełną listę rozszerzeń plików można znaleźć na stronie https://fileinfo.com/ (Rys. 2).
Rys. 1. Oficjalna wyszukiwarka rozszerzeń plików w Internecie. Każdy format jest dokładnie opisany. Po kliknięciu „View more »” zobaczymy programy (darmowe!) służące do odtwarzania tego rodzaju plików.
Rozszerzenie pliku można łatwo zmienić na dowolne (również te, które w naturze nie istnieje). Na przykład, możemy zmienić rozszerzenie .docx na .jpg. Ikonka pliku zmieni się wtedy „automatycznie” (Rys. 2).
Rys. 2. Zmieniamy rozszerzenie pliku – „automatycznie” zmienia się ikonka pliku (pozostanie jednak białą, jeśli nie mamy na naszym komputerze odpowiedniego programu)
Dodatkowo, możemy umieścić plik ze zmienionym rozszerzeniem wśród innych plików tego samego rodzaju (steganografia). Można też zmienić nazwę naszego pliku na inną, bardziej odpowiadającą nowemu rozszerzeniu. Musimy tylko zapamiętać, jak się nazywa plik i gdzie się znajduje. Po zmianie rozszerzenia pojawi się problem z otwarciem pliku, ale po przywróceniu oryginalnego rozszerzenia wszystko będzie działać jak trzeba.
Niestety (na szczęście😊), programy kryminalistyczne do analizy śladów cyfrowych takie, jak słynny Autopsy mają funkcję (moduł) rozpoznawania plików z niepoprawnym rozszerzeniem.
Na poziomie binarnym każdy plik jest kombinacją jedynek i zer (=jeżyk binarny lub kod binarny – Rys. 3). Każda jedynka, każde zero to jest jeden bit. Kombinacja z ośmiu jedynek i zer tworzy jeden bajt.
Rys. 3. Plik tekstowy (.txt) w języku binarnym – literka „t” jest przedstawiana jako 01110111, literka „o” jako 01101111 itd.
W kryminalistyce cyfrowej nie stosuje się jednak kodu binarnego – jest on trudny do zapamiętania i niewygodny dla człowieka. Zamiast tego używa się kodu heksadecymalnego, szesnastkowego, gdzie ta sama informacja binarna jest kodowana przy pomocy kombinacji z liczb (od 0 do 9) i liter (A, B, C, D, E, F). Na rysunku 4 widzimy, że ten sam tekst (plik .txt) w reprezentacji szesnastkowej jest znacznie krótszy i łatwiej odbierany (Rys. 4). W tej uproszczonej formie dane (binarne) mogą być swobodnie odczytane przez człowieka (human-readable).
Rys. 4. Zapis heksadecymalny, szesnastkowy (na rysunku jest to tekst w kolorze czarnym, gdzie liczba 20 oznacza spację) jest krótszy i łatwej odbierany przez człowieka
W zapisie heksadecymalnym każdy znaczek – litera czy liczba – oznacza 4 bity. Kombinacja z literki i liczby/dwóch literek lub dwóch liczb reprezentuje więc jeden bajt (8 bit). Po prawej stronie („Decoded text”) widzimy przedstawienie naszego kodu w ASCII – tabeli, składającej z 256 symboli. Na przykład, kombinacja 74 w ASCII reprezentuje literę „t” małe (z tabelą ASCII można się zapoznać na stronie https://www.ascii-code.com/ ).
Zobaczyć zawartość pliku w języku heksadecymalnym można przy pomocy specjalnego edytora, na przykład HxD – https://mh-nexus.de/en/hxd/
Każdy plik (oprócz plików z rozszerzeniem .txt) ma podpis/sygnaturę cyfrową (w języku angielskim file signature, file header lub magic bytes). Jest on „zakodowany” w pierwszych kilkunastu bitach (Rys. 5). Na stronie https://www.filesignatures.net/ znajdziemy oficjalną bazę podpisów/sygnatur plików.
Rys. 5. Początek pliku „praca magisterska.docx” w reprezentacji heksadecymalnej, szesnastkowej
W naszym przypadku podpis cyfrowy pliku tworzą pierwsze 64 bity – 50 4B 03 04 14 00 06 00 (jak widzimy na Rys. 6, 32-bitowa sygnatura 50 4B 03 04 odpowiada dokumentom MS Office). W ASCII jest to zapis „PK…” – widzimy go po prawej stronie w „Decoded text”.
Rys. 6. Podpis cyfrowy plików w formacie .docx
Jeśli zmieniamy wyłącznie rozszerzenie pliku (rozwiązanie 1), to na poziomie binarnym plik będzie dalej plikiem w formacie .docx. Musimy, więc, zmienić podpis cyfrowy pliku. Na przykład, na ten odpowiadający często spotykanym plikom w formacie .png – pliki-obrazki (Rys. 7).
Rys. 7. Edytor kodu szesnastkowego pozwala nie tylko przeglądać, ale też modyfikować kod binarny.
Jak widać, nasz plik otrzymał nowy podpis cyfrowy i jest teraz plikiem w formacie .png Zostało tylko zmienić rozszerzenie pliku z .docx na .png (rozwiązanie 1), nazwę pliku oraz umieścić go wśród innych plików-obrazków.
Ważne: Opisana metoda działa również w przypadku „chmury” – możemy umieścić zmodyfikowany plik w naszym „schowku” wirtualnym. Provider usługi (Microsoft, Google) nie będzie mógł wtedy „zajrzeć” do środka. Plus, osoba nieupoważniona, która uzyska dostęp do naszego konta, nie będzie mogła odczytać, co jest w tym pliku.
Metoda 2 jest bardziej skomplikowana w porównaniu do rozwiązania pierwszego, ale jest też skuteczniejsza – nie udało nam się znaleźć żadnego programu komercyjnego, który potrafiłby rozpoznać rzeczywisty format pliku, który ma zmienioną sygnaturę binarną. Rozwiązania tego problemu istnieją tylko w teorii. To oznacza, że jeśli dysk zawierający podobny plik trafi do biegłego, temu ostatniemu będzie łatwiej uznać plik za uszkodzony i pominąć go w raporcie niż próbować odczytać jego zawartość.