30 października 2010
Kilka [zagadkowych] słów o steganografii
sobota, października 30, 2010 | Autor:
\m/ojtek
Zapraszam do zapoznania się z kolejnym opracowaniem biorącym udział w Urodzinowym Konkursie HCSL, zorganizowanym przez serwis HARD CORE SECURITY LAB oraz firmę Securitum. Autorem poniższego artykułu, w którym omówione zostały bardzo interesujące zagadnienia z dziedziny steganografii, jest Paweł Hałdrzyński (użytkownik Gmaila: p.haldrzynski). Zapraszam do lektury oraz zmierzenia się z małą zagadką! W poniższym tekście znajduje się pewien tajemny, ukryty przekaz. Czy potraficie odczytać jego treść?
Zacznijmy od krótkiego wyjaśnienia tego, czym tak naprawdę jest steganografia. Dawno, dawno temu, grupa mądrych osób, w trosce o swoją prywatność postanowiła szyfrować przesyłane do siebie informacje. Tak powstała kryptografia, której zadanie opierało się na przekazywaniu pewnych wiadomości w sposób zabezpieczony przed niepowołanym dostępem. Oczywiście takie rozwiązanie miało swoje wady. Przechwycenie poddanej działaniom kryptografii wiadomości przez nieuprawnione osoby, pozwalało na podjęcie próby rozszyfrowania tajemniczego komunikatu. Na szczęście steganografia wypełniła tę lukę. Dostarczyła nam wiedzy oraz metod na ukrycie samego faktu przesyłania poufnej informacji. O ile kryptografia mówi wyraźnie: przesyłam wiadomość, w której zaszyfrowany jest tajny komunikat, tak steganografia używa sposobów, które na pozór nie wyglądają na nośniki sekretnego tekstu. Jeśli połączymy steganografię z kryptografią (czyli prześlemy ukrytą drogą zaszyfrowana wiadomość) to jeszcze bardziej podniesiemy poprzeczkę dla niepowołanych osób, chcących poznać nasze tajne dane.
O czym nie będziemy rozprawiać...
Książkowym wręcz przykładem steganografii jest ukrywanie danych w bitmapach czy też innych plikach graficznych. Standardem jest zamienianie ostatniego bitu w każdej barwie piksela. Oczywiście można utworzyć wiele innych algorytmów działających na podobnej zasadzie – oko ludzkie jest niedoskonałe i nie rozróżni bardzo podobnych (lecz dla komputera innych) kolorów. Przypadki takiej typowej steganografii w dalszym artykule pominiemy (zainteresowani znajdą je z łatwością w zasobach Internetu, a wyjątkowo dociekliwi z jeszcze większą łatwością przeanalizują krok po kroku na czym dokładnie polega działanie właśnie takiej metody). Pominiemy również przypadki edycji pliku w edytorze heksadecymalnym polegające na dopisywaniu do niego pewnych informacji (które jednak nie naruszają działania pliku, czyli chociażby umieszczenie ich za znacznikiem EOF [End Of File], co spowoduje, że zostaną zignorowane przez program czytający dany plik).
Artykuł z założenia miał być tekstem bazującym na nowoczesnych metodach informatycznych, stąd też nie będziemy poruszać kwestii historycznych metod (jak atrament sympatyczny, czy też mikrokropki), które z komputerami nie mają praktycznie nic wspólnego.
Artykuł z założenia miał być tekstem bazującym na nowoczesnych metodach informatycznych, stąd też nie będziemy poruszać kwestii historycznych metod (jak atrament sympatyczny, czy też mikrokropki), które z komputerami nie mają praktycznie nic wspólnego.
O czym będziemy rozprawiać...
Na usta ciśnie się więc pytanie o to, czym w takim razie będzie się w ramach tego opracowania zajmować? Zajmiemy się bardziej finezyjnymi metodami steganografii. Mają uświadomić one czytelnikom, że steganografia to nie tylko sztampowe ukrywanie danych w obrazkach. Bo im bardziej nieszablonowy pomysł, tym większe zazwyczaj jest jego powodzenie. Pokażemy, że istnieją bardzo różne formy steganografii i krótko je omówimy. Krótko, bo dokładna analiza każdego poruszonego tutaj zagadnienia wymagałaby odrębnego obszernego opracowania.
Zapraszam na seans
Wspomnieliśmy już, że ludzkie oko jest niedoskonałe. Czy aby na pewno tylko oko? Ile różnych częstotliwości potrafi zarejestrować ucho człowieka? Ile jest w stanie wygenerować komputer? Szczegółowe obliczenia nie są tutaj najistotniejsze. Liczy się sam fakt, że będą to wartości inne dla komputera, a inne dla ludzkiego ucha. Z tego wniosek, że tajne dane można więc ukryć również w plikach dźwiękowych. Dane możemy przykładowo ukryć modyfikując częstotliwość dźwięku, minimalnie zwiększając jego głośność, czy też wprowadzając dodatkową ścieżkę dźwiękową (wyciszoną tak, aby ucho ludzkie jej nie wyłapało). Mamy już dźwięk, a co z obrazem? Nie, nie takim zwykłym bitmapowym obrazem. Pamiętajmy, że mamy jeszcze filmy. Tutaj sytuacja przedstawia się jeszcze bardziej interesująco. Każdą klatkę filmu można traktować jako pojedynczy plik graficzny – i to właśnie w danej klatce ukryć tajną wiadomość. Sprawdzanie każdej klatki filmu pod względem steganografii byłoby bardzo pracochłonne. Właśnie dlatego używanie własnego algorytmu do wybierania poszczególnych klatek filmu, a następnie ukrywanie w nich wiadomości może dać całkiem interesujące rezultaty z punktu widzenia bezpieczeństwa takiego ukrytego przekazu.
Kompresja czy steganografia?
Wydaje się, że kompresja to narzędzie do zmniejszania objętości danych. W jaki więc sposób użyć jej do steganografii, która chcąc nie chcąc dorzuca nam dodatkowe informacje? Sposób jest wyjątkowo prosty. Wystarczy przypomnieć sobie, że istnieje naprawdę wiele algorytmów kompresji danych. Możemy podzielić dany długi (nie zawierający tajnych danych) tekst na bloki i kompresować je za pomocą różnych algorytmów. Sposób kompresji danego bloku oznaczać będzie dla nas bit tajnej wiadomości. Przykładowo, jeśli tekst skompresujemy używając kolejno algorytmów A-B-A-C, to możemy umówić się, że taka kompresja będzie kodować nam informację w kodzie trójkowym: 2120. Sposób należałoby jeszcze intensywnie dopracować. Jego podstawową wadą będzie wystąpienie błędów podczas dekompresji. Program, który odpakowywałby takie dane, musiałby wiedzieć, dokładnie w którym miejscu ma użyć którego algorytmu dekompresji. Dużo lepsze byłoby użycie stopnia kompresji na poszczególnych blokach tekstu. Wtedy dekompresja przebiegłaby mniej awaryjnie.
Zapiszmy to inaczej
Nie ma takiego kodu, którego nie dałoby się przepisać inaczej, nie zmieniając jego działania. Największą zabawę dostarczą nam assemblerowe opcode. Opcode’ami nazywamy pewne liczby, oznaczające fragment rozkazu. W języku asemblera do zapisywania instrukcji używa się mnemoników – kilkuznakowych kodów (takich jak mov, add, div), które wskazują na konkretną czynność procesora. Każdy mnemonik posiada swój własny opcode, który reprezentuje. Opcode dostarcza nam pewnej nadmiarowości, która posłuży do zabawy ze steganografią.
Otóż większość instrukcji x86 posiada kilka różnych opcode’ów. Przykładowo spójrzmy na instrukcję dodawania jedynki do rejestru eax (add eax, 1). Opcode takiej operacji wynosi 81. Istnieje jednak specjalny opcode dla rejestru EAX, który wynosi 05 i realizuje identyczną operację. Sytuacja wygląda bardzo podobnie przy odejmowaniu SUB (i również z EAX). Będzie to opcode 2D lub 81. Stosując konsekwentnie dany "typ" opcode’ów możemy przekazać tajną informację. O tym, jakiego opcode użyto powie nam nasz debugger i disassembler.
Uproszczoną wersją takiego działania jest zabawa z samymi instrukcjami. Przykładowo, chcąc wyzerować dany rejestr możemy zrobić to za pomocą instrukcji mov albo xor. Ostateczny rezultat takiego działania będzie identyczny (nasz rejestr zostanie wyzerowany), a my będziemy mogli przekazać binarną, ukrytą wiadomość (taką, że dany typ mnemoników reprezentować będzie 0, a drugi 1). Warto dodać, że podobnym działaniem charakteryzują się generatory malware. Najpierw twórca tworzy kod złośliwego oprogramowania, następnie za pomocą generatora tworzy jego różne mutacje. Podmieniając opcode i konkretne instrukcję zmieniamy sygnaturę danego wirusa, co utrudnia ich wykrycie przez programy antywirusowe.
Nie będziemy zagłębiać się w dalsze szczegóły (na temat opcode i różnego kodowania instrukcji. Warto jednak wspomnieć o istnieniu programów steganograficznych, które wykorzystują opcode (a właściwie redundancję) i ukrywają tajne wiadomości w plikach wykonywalnych. Przykładem takiego programu jest Hydan. Wiele interesujących informacji znajdziemy w dokumentacji tego programu, zachęcam więc zainteresowanych do zgłębienia tego tematu.
A pakiety płyną...
Steganografia sieciowa to potężna gałąź informatyki. Żeby omówić dokładnie to zagadnienie, musielibyśmy pokusić się o napisanie osobnej książki. Wspomnimy więc jedynie o kilku elementach TCP/IP, które można wykorzystać do steganografii.
Zacznijmy od nagłówka pakietu TCP/IP i jego 8-bitowego pola flag. Mamy wiec 8 flag (ACK, URG, PSH, RST, SYN, CWR, FIN, ECE) i możemy ustawić je na 256 możliwości. Część ustawień jest jednak nadmiarowa. A skoro mamy czegoś za dużo, to możemy wykorzystać to do ukrycia tajnej wiadomości! Mówiąc ogólniej, wykorzystujemy nadmiarowe pola nagłówka, aby wstawić tam własną informację.
Niestety, takie rozwiązanie ma pewną wadę. Pola nadmiarowe są bardzo często filtrowane przez urządzenia sieciowe. Oznacza to, że dużo bezpieczniejszym rozwiązaniem byłoby zastanowienie się, czy do przesyłania tajnych danych nie można wykorzystać pola obowiązkowe nagłówka. Okazuje się, że możliwe jest odpowiednie spreparowanie wartości tychże pól. Zainteresowanych tym tematem zachęcam z kolei do zapoznanie się z programem covert_tcp autorstwa Craig H. Rowland’a.
Mini-hardware
Omówione powyżej metody mają jedną wadę. Majstrując w plikach (filmy, obrazy, muzyka) zmieniamy ich entropię. Dość łatwo wykryć, że z danym plikiem jest coś nie tak. Analizując pakiety sieciowe również bez problemów wykryjemy, że z pakietami dzieje się coś dziwnego, bo zawierają za dużo informacji. Spójrzmy więc na alternatywne sprzętowe metody, które należy traktować przede wszystkim jako ciekawostki. Pierwszą z nich jest dysk twardy. Powszechnie wiadomo, że bardzo często dane na dysku (np. zawartość określonego pliku) nie są zapisywane w sposób ciągły. Pliki porozrzucane są zwykle po całej partycji, a za ich ponowne scalenie i poukładanie odpowiada defragmentacja. Co stanie się jednak, gdy celowo pozostawimy luki pomiędzy danymi plikami, aby chwilę później wstawić tam tajne dane? A może wielkość takiej luki (czyli mówiąc prościej ilość bajtów, które oddziela dwa bloki) reprezentowałaby konkretną liczbę (a ta z kolei konkretną wiadomość)? Wszystko to można określić mianem steganografii, a pomysłów tego typu może być naprawdę multum. Wyobraźmy sobie przykładowo diodę LED która będzie wysyłać za pomocą alfabetu Morse'a jakieś tajne komunikaty. Jeśli przykładowo miganie będzie na tyle szybkie, że obserwator odniesie wrażenie stałego świecenia, może nam się skutecznie udać ukrycie samego faktu nadawania informacji. Metod steganograficznych możemy więc opracować naprawdę niemal dowolną ilość, a od ich wymyślności i unikalności zależeć będzie ich skuteczność.
Podsumowanie
Najlepszym podsumowaniem powyższego wprowadzenia do praktycznej steganografii oraz rozmaitych metod ukrywania sekretów będzie... małe zadanie praktyczne. W powyższym tekście znajduje się pewien tajemny, ukryty przekaz. Czy potraficie odczytać jego treść? (Uwaga: w komentarzach pojawiła się już prawidłowa odpowiedź. Osoby chcące osobiście rozwiązać tę zagadkę nie powinny więc tam przed znalezieniem własnej odpowiedzi zaglądać).
Prawa autorskie
Powyższe opracowanie zostało opublikowane na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne 2.5 Polska. Możesz je więc wykorzystać w dowolnym serwisie (wyłącznie niekomercyjnym), jednak wymagamy, aby na początku bądź na końcu publikacji znalazł się następujący zapis:
"Źródło: Tytuł materiału linkujący do oryginalnego wpisu w HCSL (HARD CORE SECURITY LAB) Artykuł powstał w związku z konkursem zorganizowanym przez serwis HARD CORE SECURITY LAB oraz firmę Securitum."
Etykiety:
Bezpieczeństwo danych,
Obrona - Atak
Kilka [zagadkowych] słów o steganografii
2010-10-30T14:52:00+02:00
\m/ojtek
Bezpieczeństwo danych|Obrona - Atak|
Subskrybuj:
Komentarze do posta (Atom)
Wyszukaj w HCSL:
Subskrybuj:
Najpopularniejsze artykuły wszech czasów:
- Urządzenia do kopiowania kart płatniczych
- Co tak naprawdę ujawniasz w Internecie?
- Dlaczego należy zasłaniać klawiaturę bankomatu?
- Publiczna wiadomość z ukrytym przekazem
- Przyszłość antywirusów jest jasna
- Sposób na obejście internetowych blokad
- Superbezpieczne hasła na... żółtej karteczce
- Funkcje sprzętowego kasowania danych w HDD!
- 12-latek odkrył krytyczną lukę w Firefoksie
- Przestępstwo nie popłaca
- Czy jesteśmy inwigilowani przez chiński sprzęt?
- Gotowy zestaw do podsłuchiwania GSM
- Jak działa internetowa mafia?
- Uwaga na nowy rodzaj ataków phishingowych!
- Microsoftowy poradnik dla organów ścigania!
- Polski super-bezpieczny system Qubes OS
- Dane wieczyście dostępne
- Pierwszy atak samochodowych crackerów
- Pliki PDF zdolne do wykonania dowolnego kodu
- Polskie służby współpracują z firmą Google?
- Więzienie za odmowę ujawnienia hasła
- Podrzucanie dziecięcej pornografii
- Zapomniany film o hakerach
- Łamanie haseł w Windows Vista i 7