Stegoartykuł czyli rzecz o ukrywaniu
- Patryk Królikowski,
- 05.10.2006
Stegoklasyfikacja
JPHS (JPEG Hide and Seek). Mamy więc plik, który nazwaliśmy "nicwaznego.jpg". Uruchamiamy JPHS i ładujemy nasz ładny obrazek, a następnie po podaniu hasła dodajemy do niego kod otwierający sejf w salonie (plik kod.txt).
Istnieją trzy podstawowe grupy metod, za pomocą których ukrywane są informacje. Po pierwsze, jest to ukrywanie poprzez wstawianie partii danych w określonych miejscach plików bądź kodu w taki sposób, żeby nie spowodować uszkodzeń, a przez to ujawnić dokonanie modyfikacji. Bardzo dobrym przykładem takiego właśnie rodzaju ukrywania danych jest wykorzystanie znacznika EOF (End of File). Dotarcie do takiego znacznika przez aplikację powoduje zakończenie dalszego przetwarzania pliku. Nic więc nie stoi na przeszkodzie, żeby interesujące nas informacje umieścić właśnie za takim znacznikiem. Ta technika wydaje się narzędziem doskonałym - pozwala bowiem "zmieścić" nieograniczoną liczbę danych bez wywierania negatywnego wpływu na zachowanie się oryginalnego pliku. Niemniej jednak warto zachować zdrowy rozsądek w rozmiarze ukrywanych informacji. Jeżeli w obrazku kiepskiej jakości ukryjemy 10 MB danych, to na pewno wcześniej czy później zwróci to czyjąś uwagę. Ponadto użycie tego sposobu daje się wykryć dzięki sygnaturom.
Drugą, nieco inną metodą, a w zasadzie zbiorem metod ukrywania danych są wszelkiego rodzaju transformacje. Mogą one polegać na przykład na podmienianiu pewnych nieistotnych lub mało istotnych informacji naszymi tajnymi danymi. Metoda ta nosi nazwę LSB (Least Significant Bit). Dodawanie informacji nie powoduje w takim przypadku zmiany rozmiaru pliku. Cały problem polega na tym, że nie jest banalną sprawą znalezienie takich informacji, których usunięcie nie spowoduje spustoszeń. Konieczna jest tu znajomość budowy danego rodzaju nośnika (np. pliku bmp czy nagłówka pakietu). Nie ma więc uniwersalnych miejsc ukrywania danych, a każdy rodzaj "nosiciela" musi być traktowany osobno. Ponadto istnieje ograniczenie polegające na ilości informacji, jakie można bezkarnie usunąć, a co za tym idzie - ilości kodu możliwego do ukrycia.
Transformacje stosuje się także do ukrywania danych w plikach JPG. Format ten dzięki wykorzystaniu kompresji oraz usunięciu informacji mało istotnych dla ludzkiego oka pozwala na zmniejszenie rozmiaru pliku. Kompresja opiera się na technice zaokrąglania DCT (Discrete Cosine Transform) i pozwala na wykorzystanie steganografii. Do stegocelów najlepiej nadają się 8-bitowe fotografie w odcieniach szarości. Są one znacznie mniej zróżnicowane, niż obrazy kolorowe, i w związku z tym szanse na zauważenie zniekształceń przez ludzkie oko są sporo mniejsze.
No i po trzecie, jeżeli jesteśmy fanami abstrakcji lub grafiki komputerowej możemy sięgnąć po inną jeszcze metodę ukrywania danych - stegogenerację. Metoda ta polega na tym, że nie musimy szukać nosiciela, w którym ukrywamy informację. Dzięki odpowiednim narzędziom możemy go sami wygenerować. Dlaczego musimy być fanami abstrakcji lub grafiki komputerowej? Ano z racji sposobu funkcjonowania dostępnych narzędzi. Ich działanie polega na generowaniu takich właśnie abstrakcyjnych obrazów (najczęściej fraktali). Dużo łatwiej stworzyć algorytm, który narysuje nam jakąś nieziemską formę niż taki, który będzie tworzył np. cuda architektury, a przy tym zawierał ukrytą i możliwą do odtworzenia informację.
Na szczęście także dla zajadłych przeciwników abstrakcji znajdzie się coś interesującego. Istnieją narzędzia pozwalające na generowanie... stegospamu - tak, tak - wiadomości wyglądającej jak typowy spam, a zawierającej ukryty przekaz (np. oprogramowanie Spam Mimic).
Stegoanaliza
Uruchamiamy Xsteg, ładujemy podejrzany plik i już po kilku sekundach widzimy, że "nieważnego.jpg" może w istocie zawierać całkiem ciekawe informacje, bo operował na nim JPHS (JPHide).
Jedną z częściej stosowanych metod jest analiza statystyczna, która polega na badaniu odchyleń od przyjętych norm. Dzięki analizie statystycznej możliwe jest wykrycie niewielkich rozbieżności, których obecność świadczyć może o obecności treści ukrytych. Istnieje kilka rodzajów testów statystycznych, ale ich wytłumaczenie to zadanie dla profesorów kierunków matematycznych.
Poza analizą statystyczną możemy przeprowadzić analizę strukturalną. Chodzi tutaj przede wszystkim o zbadanie budowy pliku. Typowe testy to porównania rozmiaru plików, sprawdzenie sumy kontrolnej, szukanie w samym pliku treści niezgodnych z cechami charakterystycznymi dla jego rodzaju. Wykorzystać możemy także ciągi, które pomogą w razie wątpliwości w rozpoznaniu rodzaju pliku - co nie jest zawsze takie oczywiste (patrz ramka). Sygnatura taka najczęściej znajduje się na początku pliku. Dobrze wówczas skorzystać z oprogramowania pozwalającego na konwersję pliku z postaci ASCII do HEX. Dobrym przykładem jest tutaj np. WinHex.
A skoro mowa o sygnaturach. Analiza sygnaturowa to kolejny sposób na wykrycie steganografii. Polega ona na badaniu plików pod kątem obecności wzorców, które pozostawiają po sobie programy steganograficzne. Metoda jest o tyle dobra, że nie wymaga od nas posiadania materiału porównawczego. Dodatkowo pozwala na zidentyfikowanie oprogramowania użytego do ukrycia informacji. Stąd już tylko krok do wyszukania niedoskonałości takiego właśnie oprogramowania i wydobycie tajnych treści. Nie wpadajmy jednak w zbytni zachwyt. Metoda ta ma również wady. Żeby rozpoznać sygnaturę, aplikacja musi utrzymywać bazę wzorców i w miarę często ją aktualizować. A oprogramowanie do sygnaturowej stegodetekcji nie jest niestety aktualizowane równie często, co antywirusowe. Poza tym wystarczy tylko niewielka modyfikacja "odcisku", a analiza steganograficzna okaże się nieskuteczna.
Załóżmy jednak, że udało nam się stwierdzić, że plik jest "skażony" steganografią i wiemy jakiej aplikacji użyto, aby go wygenerować. Co dalej? Trzeba odnaleźć miejsce w pliku, w którym ukryto informację. Jeżeli i to się powiedzie, to na 90% informacja będzie chroniona hasłem, tak więc musimy wyszukać miejsce składowania hasła, dowiedzieć się jakiego algorytmu użyto, a następnie podjąć próbę złamania hasła. Przykładem programu, który pomoże nam złamać hasło, jest Stegbreak, który korzysta z metody słownikowej. Możemy również złamać hasło w nieco bardziej brutalny sposób, za pomocą technik typu Brute force. Tutaj konieczne będzie sięgniecie do dekompilacji (reverse engineering).
Czas na przykład
Watermarking jako sposób wykorzystania steganografii. Najczęściej w przypadku zdjęć znak wodny jest widoczny dla odbiorcy. Coraz częściej jednak pliki takie posiadają również "odcisk" niewidoczny.
Tutaj od razu należy przytoczyć jedną uwagę. Nie korzystajmy z narzędzi, które reklamowane są jako kombajny do wszystkiego. Jeżeli użyjemy właśnie takiego, to możemy być pewni, że nie zastosuje ono metody najlepszej dla danego rodzaju pliku - wykorzysta tylko jeden algorytm. Za przykład niech posłuży Camouflage, który jest takim właśnie kombajnem do ukrywania wszystkiego we wszystkim. My użyjemy starego dobrego narzędzia JPHS (JPEG Hide and Seek). Mamy więc plik, który nazwaliśmy "nicwaznego.jpg". Uruchamiamy JPHS i ładujemy nasz ładny obrazek, a następnie po podaniu hasła dodajemy do niego kod otwierający sejf w salonie (plik kod.txt).
Następnie zapisujemy obrazek i gotowe. Otwierając zarówno oryginał, jak i wytwór JPHS, nie zauważymy żadnej różnicy w wyglądzie fotografii. Żeby odzyskać ukryty plik, ponownie uruchamiamy JPHS, ładujemy "jotpega" i wyodrębniamy szyfr do sejfu najpierw, rzecz jasna, podając kod.
Teraz pora na wykrywanie. Patrząc z punktu widzenia osoby, która chciałaby się dowiedzieć czy "nicwaznego.jpg" rzeczywiście nie zawiera żadnych ukrytych treści fakt, że skorzystaliśmy z aplikacji JPHS ułatwia sprawę. Mądrzy ludzie, a konkretnie Niels Provos, napisali aplikację, która uwolni nas od żmudnego, ręcznego wyszukiwania śladów działania steganografii i przeglądania pliku bit po bicie. Mowa o programie Stegdetect. Aby ułatwić sobie życie, wykorzystamy graficzny interfejs tego narzędzia - Xsteg. Uruchamiamy Xsteg, ładujemy podejrzany plik i już po kilku sekundach widzimy, że "nieważnego.jpg" może w istocie zawierać całkiem ciekawe informacje, bo operował na nim JPHS (JPHide).
Co prawda nie ujawniliśmy jeszcze treści samego przekazu, ale wiemy, że coś tam musi być.
Wiedząc, że mamy do czynienia z JPHS możemy spróbować znaleźć narzędzie, za pomocą którego złamiemy hasło użyte podczas kodowania wiadomości. Nie musimy szukać daleko. W skład pakietu Stegdetect wchodzi również użyteczny programik do słownikowego łamania haseł Stegbreak. Jeżeli znajdziemy odpowiednio dobry słownik, z którego może skorzystać Stegbreak, są szanse na szybkie wyłuskanie hasła:
# stegbreak - tj. nicwaznego.jpg
Loaded 1 files...
nicwaznego.jpg: jphide(tajne)
Processed 1 files, found 1 embeddings.
Time: 20 seconds: Cracks: 243256
Jak widać, po 20 s odkryliśmy hasło, które było bardzo proste - "tajne".
Ciągi identyfikujące rodzaj pliku
Jako że steganografia w informatyce nie jest jeszcze do końca okrzepłą techniką, trwają prace nad stworzeniem algorytmu doskonałego. Powinien on po pierwsze, uniemożliwić wykrycie samego faktu ukrycia informacji, a po drugie - jeżeli jednak udałoby się to uczynić - nie powinien pozwolić na złamanie zabezpieczeń chroniących samą informację.
Jeżeli prześledzimy rynek zarówno komercyjnego, jak i darmowego oprogramowania steganograficznego zauważymy, że wysiłki te zmierzają we właściwym kierunku, a do ukrywania zaprzęgane są coraz to poważniejsze technologie i umysły. Zważywszy na osiągnięcia naszych rodzimych informatyków na arenie międzynarodowej w ostatnich latach jest duża szansa, że autorem algorytmu (prawie) doskonałego w niedługim czasie zostanie właśnie Polak. Tak więc Rodacy do pracy!