Stegoartykuł czyli rzecz o ukrywaniu

Stegoklasyfikacja

Stegoartykuł czyli rzecz o ukrywaniu

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).

Jeżeli chcielibyśmy dokonywać podziałów steganografii, to nie byłoby to zadanie proste, ponieważ w zależności od punktu odniesienia moglibyśmy wyróżnić kilkanaście różnych jej typów. Można dzielić np. wg medium, w którym informacja jest ukrywana, wg skomplikowania algorytmów, wg trudności w wykryciu faktu posłużenia się steganografią itd. Nas najbardziej interesuje odpowiedź na pytanie: jak?

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

Stegoartykuł czyli rzecz o ukrywaniu

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).

Wszystko pięknie, ale czy steganografia jest taka genialna i gwarantuje 100-proc. powodzenie? Oczywiście, że nie. Wraz z pojawieniem się narzędzi do ukrywania informacji zaczęto pracować nad metodami wykrywczymi. Najprostsze z nich zaprzęgają do pracy oko i ucho. Jeżeli informacje ukryte są w pliku graficznym lub muzycznym i zastosowano metodę LSB, to uważne oko dostrzeże, a ucho wysłyszy zniekształcenia. Z tym, że brak materiału porównawczego czyni tę metodę mało użyteczną, a też i nie każdy ma zmysły wyostrzone do granic możliwości. Dlatego też stosuje się metody nieco bardziej zaawansowane.

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

Stegoartykuł czyli rzecz o ukrywaniu

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.

Spróbujmy skorzystać z narzędzi steganograficznych i ukryć jakąś niewinną informację. Powiedzmy, że jesteśmy wielkimi fanami spływów kajakowych. Najprościej w naszym przypadku będzie ukryć informację w zdjęciu, które dotyczy właśnie takiego spływu Zdjęcie samo w sobie wygląda dość niewinnie i na pewno nie wzbudzi niczyich podejrzeń - zwłaszcza jeżeli ukryjemy je pośród wielu innych. Skoro robimy zdjęcia, to najczęściej będą one zapisywane w formacie JPG. Decydujemy się zatem na użycie oprogramowania, które pozwala na ukrycie informacji w takich właśnie plikach.

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".

Stegoartykuł czyli rzecz o ukrywaniu

Ciągi identyfikujące rodzaj pliku

Na pierwszy rzut oka wygląda, że ta cała steganografia nie jest wcale taka dobra, skoro w kilka minut można odcyfrować ukrytą wiadomość. Ale jest to tylko pierwszy rzut oka. Nasz przykład dotyczył popularnych narzędzi i prostych technik. Jeżeli wykorzystalibyśmy bardziej skomplikowane i niezbyt znane oprogramowanie, a do tego zadbali o odpowiednią siłę użytego hasła, sprawa nie wyglądałaby już tak różowo.

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!


TOP 200