Biuro Ekspertyz Sądowych jakość opinii

  • przygotowywana w zespołach
  • wydawana przez biegłego specjalistę z wieloletnim doświadczeniem
  • przy wykorzystywaniu wysokiej klasy zaplecza technologicznego

Anti-Anti Forensics, czyli jak przechytrzyć TrueCrypt

Artykuł autorstwa: Marcin Kuźma, Tomasz Sidor, Sylwester Sadło, Biuro Ekspertyz Sądowych w Lublinie www.ekspertyzy.net.pl

opublikowany: Przestępczość Teleinformatyczna pod redakcją Jerzego Kosińskiego - Szczytno 2013 - ISBN 978-83-934456-2-2, e-ISBN 978-83-934456-3-9.

Wstęp

Problem deszyfrowania spędza sen z powiek wielu osób na całym świecie - tym zaś, którzy na co dzień zajmują się analizą dowodów w postępowaniach sądowych, policyjnych czy prokuratorskich, najczęściej włosy na głowie jeży natomiast TrueCrypt. Jest to bardzo popularny, a zarazem bardzo skuteczny program/algorytm do szyfrowania.
Z tego też powodu postanowiliśmy wziąć go „na warsztat” i pokazać jedno z możliwych podejść do odszyfrowywania danych zabezpieczonych za jego pomocą, podejście dotyczące budowania personalizowanych słowników i „ataku na hasło” za ich pomocą.

Jak powszechnie wiadomo darmowy program TrueCrypt ma za zadanie chronić prywatne dane oraz utrzymać je w postaci poufnej, niedostępnej dla użytkownika, który nie zna hasła i/lub klucza,  z jednoczesnym zachowaniem prostoty w dostępie do tych danych.

Program ten daje nam możliwość operacji na plikach praktycznie nieróżniących się od tych, jakie wykorzystujemy w swoim systemie operacyjnym (MS Windows, Linux, Mac OS). Sam proces zabezpieczenia danych jest prosty i sprowadza się do uruchomienia kreatora i postępowania zgodnie ze wskazówkami. TrueCrypt oferuje nam trzy podstawowe metody szyfrowania: AES, Serpent, Twofish, daje też możliwość ich łączenia: AES-Twofish, AES-Twofish-Serpent, Serpent-AES, Serpent-Twofish-AES, Twofish-Serpent oraz następujące funkcje mieszające: RIPEMD-160, SHA-512, Whirpool.

Plusy szyfrowania za pomocą TrueCrypt:

  • ogólnie dostępny kod źródłowy,
  • wieloplatformowość,
  • użyte są trzy algorytmy szyfrujące obecnie uważane za bezpieczne,
  • szyfrowanie kaskadowe.

Minusy szyfrowania za pomocą TrueCrypt:

  • utrata hasła i/lub klucza wiąże się z brakiem możliwości odczytu zaszyfrowanych danych,
  • przypadkowe nadpisanie danych wewnątrz pliku kontenera może zniszczyć dane i uniemożliwić nam dalsze z niego korzystanie,

Za pomocą TrueCrypt można zaszyfrować cały dysk twardy, partycję lub też specjalnie utworzony plik – kontener; w niniejszym artykule zajmiemy się tym ostatnim.

Niejednokrotnie w naszej pracy mieliśmy do czynienia z kontenerami, plikami, bądź całymi dyskami zabezpieczonymi za pomocą TrueCrypt - nie zawsze udawało się je odkodować, jednak dzięki opisanym poniżej metodom z niektórych takich potyczek udało się nam wyjść zwycięsko, czyli znaleźć hasło umożliwiające dostęp do zaszyfrowanych plików.
Zaprezentujemy sprawę, jaką na potrzeby warsztatu przygotowaliśmy, jest to sprawa oparta na prawdziwych przypadkach, które dotychczas rozwiązywaliśmy. Nie wszystkie etapy badań będą opisywane jednakowo dokładnie i szczegółowo, skupimy się na kilku etapach, które będą najbardziej interesujące i najwięcej wniosą do opisywanego przypadku. Należy też wspomnieć, że wszystkie przedstawione przez nas badania zostały wykonane za pomocą oprogramowania ogólnodostępnego (open source).

Na początek kilka założeń, muszą one zostać spełnione ze względu na mnogość opcji, jakie mamy do dyspozycji podczas badań. Stworzona przez nas, syntetyczna sprawa dotyczy posiadania i rozpowszechniania pornografii z udziałem małoletnich do lat 15-tu,  zatrzymane zostały  dowody rzeczowe w postaci notebooka, dysku przenośnego, pamięci typu pen-drive oraz telefonu. Taki zestaw dowodów jest często spotykany wśród materiałów zabezpieczanych w trakcie czynności wykonywanych przez policję lub inne służby.

Badanie materiałów dowodowych – dysk twardy i pen-drive

Jako że nie wiemy, czego możemy się spodziewać podczas badań i z czym się możemy zetknąć podczas analizy zawartości nośników, pierwszym z zadań jest zapoznanie z zawartością wszystkich materiałów dowodowych.

Po wykonaniu kopii binarnych dysku twardego oraz pamięci przenośnej za pomocą linuksowego programu dd, przystąpiono do wstępnej analizy ich zawartości.

Na dysku nie znaleziono zainstalowanego programu TrueCrypt, ani też śladów jego używania, historia przeglądarek internetowych została wyczyszczona – nie znaleziono zatem żadnych zapisanych w nich haseł do stron www.

Znaleziono jedynie pozostałości po programach do wymiany plików (typu peer-to-peer) - eMule i µTorrent. Stwierdzono, że jest zainstalowany program TOR, do anonimowego przeglądania zasobów Internetu oraz, co interesujące, program CCleaner, który posiada funkcję czyszczenia zawartości dysku. Wstępne badanie dysku jako takiego nie dostarczyło więc za wielu informacji przydatnych do sprawy.

W obrazie pamięci przenośnej pen-drive znaleziono za to program TrueCrypt w formie portable (przenośnej, nie wymagającej instalacji). Następnie zaś skrót do katalogu na dysku/partycji V, z tym, że na badanym komputerze nie było takiej partycji.

Ponownie poddano badaniu, tym razem dokładniejszemu, zawartość dysku z komputera przenośnego i rejestr systemu Windows. Znaleziono ślad ostatniego użycia programu TrueCrypt w katalogu \Windows\Prefetch\. Ewidentnie używano zatem programu do szyfrowania, nie zostało jednak jeszcze ustalone, co dokładnie szyfrowano.

Badanie telefonu

W obecnych czasach telefon, a raczej coraz częściej smartfon, jak w opisywanym przypadku, jest nieocenionym i ogromnym źródłem informacji o użytkowniku; jest tak z co najmniej z dwóch powodów: pierwszy - dlatego, że użytkownicy często nie zdają sobie sprawy z ilości informacji, jakie zostają zapamiętane w smartfonach i nie mają kontroli nad tymi informacjami; drugi zaś - dlatego, że stosunkowo łatwo wydobyć informacje z takiego urządzenia, a użytkownik, który chce je skutecznie wymazać nie ma łatwego zadania.

Zatrzymany telefon to smartfon marki Samsung Galaxy Ace. W pierwszej fazie założyliśmy wykonanie kopii danych użytkownika, bez ingerencji w nie, czyli w pełni zgodnie z dobrymi praktykami CF (Computer Forensics – informatyki śledczej). W pierwszej kolejności została skopiowana zawartość karty SIM (za pomocą czytnika takich kart) oraz zainstalowanej w telefonie karty microSD (poprzez czytnik kart flash). Do wykonania kopii danych użytkownika znajdujących się w pamięci wewnętrznej telefonu wykorzystaliśmy program ClockworkMod Recovery (CWM), który został zainstalowany za pomocą aplikacji Odin3.

Program Odin3

Przeprowadzenie takiej operacji modyfikuje jedynie partycję /recovery, nie wpływa natomiast w żaden sposób na dane przechowywane na partycji /data, która zawiera dane użytkownika telefonu. Po ponownym uruchomieniu urządzenia i przejściu w tryb recovery, zamontowano czystą kartę microSD, następnie wybrano opcję backup and restore i wykonano kopię danych użytkownika z partycji użytkownika (/data) na kartę microSD.

Ekran z opcjami programu ClockworkMod Recovery

Dopiero po wykonaniu pełnej kopii danych można było wykonać analizę wszystkich interesujących plików znajdujących się na badanym telefonie. Analiza tych danych była dość czasochłonna, ponieważ nowsze wersje CWM dane zapisują w katalogach i plikach o nieoryginalnych nazwach, trochę utrudnia to badania plików i ich zawartości.

Kolejnym krokiem jest spojrzenie na zawartość telefonu z punktu widzenia użytkownika – konieczne do tego było uruchomienie telefonu. Tutaj pojawia się jednak przeszkoda w postaci kodu dostępu do telefonu. W badanym urządzeniu było to zabezpieczenie za pomocą wzoru, popularnie zwane „perełkami”. Dlatego też najpierw rozwiązujemy ten problem.

Spośród skopiowanych z telefonu plików wybieramy plik o nazwie gesture.key, znajdujący się oryginalnie w lokalizacji /data/system/, w nim jest zakodowany za pomocą algorytumu SHA-1 w zapisie heksadecymalnym wzór odblokowujący ekran urządzenia. Do jego odkodowania wykorzystujemy program Android Pattern Lock Cracker. W ułamku sekundy otrzymujemy wzór, jakim zabezpieczony jest telefon.

Odkodowywanie zabezpieczenia za pomocą wzoru

W tym momencie możemy już uruchomić telefon, odblokować go i zapoznać się z poziomu użytkownika z aplikacjami na nim zainstalowanymi.

Odblokowanie telefonu – wprowadzenie odczytanego wzoru

Przy tradycyjnej analizie telefonu, dopiero w tym momencie, po uzyskaniu dostępu do uruchomionego telefonu, moglibyśmy użyć programów dedykowanych do odczytu telefonów (są oczywiście wyjątki od tego, np. możliwość wykonania zrzutu pamięci telefonu za pomocą urządzenia UFED).

Jako że potrzebujemy dokładnie sprawdzić zawartość pamięci użytkownika telefonu, zarówno pod kątem występujących haseł, jak również rozmów prowadzonych przez komunikatory, przeczytać pocztę oraz wiadomości SMS a także przejrzeć zapisane oraz usunięte zdjęcia – przydatna do tego będzie kopia binarna partycji danych użytkownika. Po jej wykonaniu będzie można spróbować odzyskać usunięte pliki.

Do wykonania kopii potrzebna jest aplikacja obsługująca polecenie dd, która będzie też posiadała uprawnienia superużytkownika (root). Jeśli w telefonie znajdziemy taką aplikację, to wystarczy wydać polecenie i wykonać zrzut zawartości do pliku, jeśli zaś użytkownik nie zagłębiał się w możliwości telefonu i nie instalował zaawansowanych programów, to musimy sami doinstalować stosowne aplikacje.

Należy w tym miejscu zaznaczyć, że czynność ta (tj. instalacja programu) powoduje modyfikację danych na partycji /data, czyli partycji danych użytkownika. Najpierw wykonujemy odblokowanie - tzw. „rootowanie” telefonu, czyli modyfikację jego oprogramowania wewnętrznego do postaci, która umożliwi modyfikowanie i zapis plików na głównej partycji telefonu, niedostępnej dla zwykłego użytkownika. Ściągamy odpowiedni dla danego telefonu pakiet programów i plików, zapisujemy go na karcie pamięci, uruchamiamy telefon w trybie recovery, instalujemy i otrzymujemy w efekcie odblokowane urządzenie.

„Rootowanie” telefonu

Po odblokowaniu telefonu instalujemy program Terminal Emulator (pobieramy ze strony projektu w formie pliku .apk i instalujemy z karty microSD). Po zainstalowaniu uruchamiamy aplikację i wydajemy polecenie su, dzięki temu uzyskujemy uprawnienia superużytkownika. Następnie komendą dd if=/dev/stl13 of=/mnt/sdcard/kopia_data.img wykonujemy kopię partycji /data z danymi o oznaczeniu stl13 do pliku na karcie pamięci microSD. W przypadku badanego telefonu operacja trwa trochę powyżej jednej minuty.

Kopiowanie partycji z danymi użytkownika

Otrzymaną w ten sposób kopię partycji możemy poddać analizie w dowolnym programie do odzyskiwania danych, w przypadku poszukiwania zdjęć świetnie nadaje się do tego darmowy program PhotoRec. Dodatkowo, z kopii możemy też wydobyć ciągi znaków (np. za pomocą uniksowego polecenia strings), które posłużą nam jako jeden z elementów budowanych słowników.

Po przeprowadzeniu szczegółowych badań uzyskanej kopii binarnej danych użytkownika, a głównie po analizie plików *.db udało się uzyskać hasła z następujących aplikacji: Dropbox, Facebook, Gadu-Gadu, Gmail. Odzyskano również dane zapisane w tych aplikacjach (w tym usunięte) - rozmowy przez komunikatory, wiadomości e-mail, przesyłane i odbierane wiadomości SMS.

Znaleziono m. in. takie hasła:

54tomek@wol
#54tomek_gg
54tomek_pocztawp
!54tomek_gmail
Anulka#1997!
15Marta_fejs!
Dominacja54!
Aniunia1111#

Poszukiwanie kontenera TrueCrypt i ataki słownikowe

W tym momencie, po zebraniu z dowodowych nośników danych wyżej wymienionych informacji, zajmiemy się zbieraniem informacji o śladach występowania pliku, ewentualnie plików, kontenera na badanym dysku twardym.

Będą nam potrzebne:

- system operacyjny Linux z zainstalowanym językiem skryptowym Python,

- oraz następujące programy: printex lub inny edytor heksadecymalny, np. xxd, mmls (umożliwiają one podgląd układu partycji na badanym dysku twardym lub jego kopi RAW), mount, find, ent.

Montowanie kopii dysku twardego

W pierwszej fazie sprawdzimy układ partycji, jakie znajdują się na badanym dysku twardym, w celu późniejszego zamontowania oraz przeszukania pod kątem występowania kontenera programu TrueCrypt. W tym celu wykorzystamy program mmls z pakietu The Sleuth Kit.

Układ partycji badanego dysku

Na powyższym zrzucie ekranu widać, iż wielkość jednego sektora wynosi 512 bajtów oraz że na badanym dysku istnieją dwie partycje z systemem plików NTFS (02, 03). Wiemy, że przy instalacji systemu operacyjnego Windows 7 instalator tworzy zwykle jedną partycję rozruchową o wielkości 100 MB, zatem partycja 02 o wielkości 204800 jest partycją rozruchową (boot), można potwierdzić to prostym przeliczeniem wg. algorytmu:

(długość partycji * wielkość jednego sektora) / (1024 * 1024) zatem:

(204800*512)/1048576 = 100 MB

Skoro pierwsza partycja to partycja rozruchowa, zajmiemy się drugą, oznaczoną numerem 03 o wielkości 31898 MB (65327104 sektorów).

Przed przystąpieniem do analizy, należy utworzyć katalog, w którym zamontujemy badaną partycję 03: mkdir /mnt/dysk_dowodowy.

Gdy mamy już wszystko przygotowane, możemy przystąpić do zamontowania partycji, wykonamy to za pomocą polecenia mount:

mount -o loop,ro,offset=$((512*206848)) win7_tapt.img /mnt/dysk_dowodowy/, gdzie:

  • -o loop,ro – ustawienie urządzenia, do którego zamontujemy nasz obraz dysku w tym przypadku loop, oraz uprawnienia „ro” – czyli tylko do odczytu, aby uniknąć modyfikacji danych,
  • offset=$((wiekość_sektora*początek_partycji)) – montowanie konkretnej partycji, w naszym przypadku 03, z parametrami wielkość_sektora = 512 i początek_partycji = 206848,
  • img – plik badanego dysku twardego w formacie RAW,
  • /mnt/dysk_dowodowy/ - miejsce docelowego zamontowania.
Montowanie kopii dysku

Powyższy zrzut ekranu ukazuje zamontowaną w katalogu /mnt/dysk_dowodowy/ partycję 03 badanego dysku.

Poszukiwanie kontenera programu TrueCrypt

Odnalezienie pliku-kontenera programu TrueCrypt jest niejednokrotnie bardzo trudne, ponieważ zazwyczaj nie ma bezpośrednich o nim informacji, np. o jego nazwie, położeniu oraz wielkości. Istnieje jednak szereg metod, dzięki którym można określić, czy dany plik, z większym, bądź z mniejszym stopniem prawdopodobieństwa, jest plikiem kontenera, którego szukamy; poniżej przedstawiamy jedną z nich.

Użytkownicy bardzo często tworzą pliki kontenerów o wielkościach przekraczających minimum 0,5GB, zapewniają sobie dzięki temu wolną przestrzeń na dane, które w przyszłości mogą zostać przeniesione do zaszyfrowanej partycji i tym samym oszczędzają czas na tworzenie kolejnego kontenera.

Jedną z najszybszych metod znalezienia kontenera jest wykorzystanie polecenia find w celu przeszukania całej partycji pod kątem występowania plików o największym rozmiarze. Nie jest to, co prawda, sposób, który da nam stuprocentową pewność, może jednak w dużym stopniu zawęzić pole poszukiwań:

find /mnt/dysk_dowodowy -type f –ls | sort -r -n -k 7 | head -n 10

Polecenie to wyświetla listę 10 największych plików znajdujących się na badanej partycji, wynik znajduje się poniżej.

Lista największych plików

Listing 1.

73007 2096748 -rwxrwxrwx   1 root     root     2147069952 May 28 09:19 /mnt/dysk_dowodowy/pagefile.sys
73000 1572560 -rwxrwxrwx   1 root     root     1610301440 May 28 09:19 /mnt/dysk_dowodowy/hiberfil.sys
75613 1546076 -rwxrwxrwx   2 root     root     1583177930 May 21 13:32 /mnt/dysk_dowodowy/Users/Tomek/Downloads/Triple.Mania.XXX.DVDRip.x264-CHiKANi/chi-tripmania.mp4
75041 1228800 -rwxrwxrwx   1 root     root     1258291200 May 27 13:04 /mnt/dysk_dowodowy/Users/Tomek/Downloads/Need\ for\ Speed\ Underground\ 2\ V1.2\ {Full-Game}\ {Requested\ ISO}\ {blaze69}/Need\ for\ Speed\ Underground\ 2.iso
75589 1207224 -rwxrwxrwx   2 root     root     1236194094 May 21 12:46 /mnt/dysk_dowodowy/Users/Tomek/Downloads/You.Love.Me.In.Lingerie.XXX.DVDRip.x264-CHiKANi/chi-ylmil.mp4
75585 1012172 -rwxrwxrwx   2 root     root     1036461112 May 21 13:36 /mnt/dysk_dowodowy/Users/Tomek/Downloads/Kamikaze\ Street\ 13.avi
81274 327680 -rwxrwxrwx   2 root     root     335544320 May 22 08:37 /mnt/dysk_dowodowy/System\ Volume\ Information/{4c7d250a-c214-11e2-9cf3-52540084f70b}{3808876b-c176-4e48-b7ae-04046e6cc752}
49304 165864 -rwxrwxrwx   1 root     root     169840948 Jul 14 2009 /mnt/dysk_dowodowy/Recovery/3fe656c2-c140-11e2-bbe7-932dc0b21c99/Winre.wim
80488 122608 -rwxrwxrwx   1 root     root     125550036 May 17 23:35 /mnt/dysk_dowodowy/Program\ Files\ (x86)/Google/Chrome/Application/27.0.1453.93/Installer/chrome.7z
78707 103948 -rwxrwxrwx   2 root     root     106439870 May 9 11:04 /mnt/dysk_dowodowy/Program\ Files/AVAST\ Software/Avast/Setup/vps_32-ac0.vpx

 

Jak widać, w zakresie od ~2 GB do ~0,1 GB, zawierają się następujące pliki:

  • sys 1,99 GB
  • sys 1,49 GB
  • chi-tripmania.mp4 1,47 GB
  • Need for Speed Underground 2.iso 1,17 GB
  • chi-ylmil.mp4 1,15 GB
  • Kamikaze Street 13.avi 0,96 GB
  • {4c7d250a-c214-11e2-9cf3-52540084f70b}{3808876b-c176-4e48-b7ae-04046e6cc752} 0,31 GB
  • wim 0,15 GB
  • 7z 0,11 GB
  • vps_32-ac0.vpx 0,09 GB

 

Gdy przyjrzymy się wymienionym plikom, możemy od razu wyeliminować pliki poniżej 0,96 GB (działające wersje instalacyjne programów, etc.) oraz pliki, które zazwyczaj pojawiają się w badanym systemie operacyjnym MS Windows, czyli pagefile.sys oraz hiberfil.sys. Do analizy pozostają zatem 4 pliki (chi-tripmania.mp4, Need for Speed Underground 2.iso, chi-ylmil.mp4 i Kamikaze Street 13.avi).

Mając do zbadania tylko 4 pliki, jesteśmy w stanie w szybki i dość dokładny sposób przebadać ich strukturę oraz upewnić się, czy są naprawdę plikami „za które się podają”. W tym celu użyjemy programu printex (można użyć dowolnego programu, który ma możliwość podglądu plików binarnych), dzięki któremu podejrzymy ich nagłówki; polecenie jakie wykorzystamy ma następującą składnię:

  • printex [sciezka_do_pliku] –a | head –n 20 – wyświetlanie w trybie ASCII.
Plik 1 - chi-tripmania.mp4
Plik 2 - Need for Speed Underground 2.iso
Plik 3 - chi-ylmil.mp4
Plik 4 - Kamikaze Street 13.avi

Dzięki analizie struktury plików można dojść do wniosku, że plik Need for Speed Underground 2.iso nie posiada nagłówka i najprawdopodobniej nie jest plikiem typu *.ISO, dlatego przyjrzymy się mu dokładniej i sprawdzimy jego entropię.

Badanie entropii

Entropia, jak wynika z teorii informacji, jest to średnia ilość informacji, która przypada na pojedynczą wiadomość; bardziej obrazowo - jest to miara stopnia nieuporządkowania.

Entropia pliku Need for Speed Underground 2.iso wynosi 8,0 (Rys. 14), czyli osiągnęła maksymalną możliwą wartość, dla porównania reszta badanych plików posiada entropię w granicach od 0,13 - 0,63. Zbadano to za pomocą polecenia ent:

Entropia pliku 2 - Need for Speed Underground 2.iso
Entropia pliku 4 - Kamikaze Street 13.avi

Podsumowując powyższe kroki, możemy przyjąć, że odnaleziony plik o nazwie Need for Speed Underground 2.iso, o wielkości 1,17 GB, nie posiadający prawidłowego nagłówka, wewnątrz którego dane wskazują na bardzo wysoki wskaźnik losowości, równy 8,0 w skali od 0,0 – 8,0, jest z dużym prawdopodobieństwem plikiem kontenera programu TrueCrypt.

Budowanie słowników

Skoro wiemy już, który plik jest, według nas, zaszyfrowanym kontenerem, możemy przystąpić do próby zamontowania go poprzez program TrueCrypt. Jednak, aby to uczynić, musimy posiadać hasło i/lub klucz, którym zabezpieczono kontener.

Najszybszym sposobem na znalezienie hasła do kontenera wydaje się przejrzenie zawartości wszystkich przeglądarek internetowych, w których użytkownik mógł zapisywać hasła do serwisów www. Dodatkowym źródłem informacji mogą być też komunikatory lub sam system operacyjny (poszukiwanie haseł w plikach pagefile.sys i hiberfil.sys). W naszym przypadku wewnątrz systemu operacyjnego znajdującego się na badanym dysku twardym nie odnaleziono żadnego zapisanego hasła.

Strzałem w dziesiątkę okazało się za to badanie telefonu (smartfon Samsung) z systemem Android, który był skarbnicą informacji zarówno o samym użytkowniku (imię, nazwisko, imię partnerki, rok urodzenia), jak również o używanych przez niego loginach i hasłach. Znalezione hasła wpisywano oczywiście do programu TrueCrypt w celu sprawdzenia – niestety żadne z nich nie pasowało.

Dzięki pozyskaniu istotnych informacji z telefonu można podjąć próbę budowy słownika, który powinien pomóc przełamać zabezpieczenie kontenera.

W niniejszej publikacji nie opisujemy całego procesu tworzenia słownika (ze względu na obszerność tematu), lecz tylko jego zarys oraz niektóre koncepcje z nim związane.

Do tworzenia słownika potrzebne będą następujące programy lub skrypty: Cupp, crunch oraz, opcjonalnie, CeWL.

Na początek bardzo istotne założenie: Wykonujemy atak słownikowy, a nie brute-force!

Proces powinien zostać przeprowadzony wg algorytmu przedstawionego na poniższym schemacie:

Uproszczony schemat procesu tworzenia słowników

Opis schematu:

  1. Tworzenie słownika podstawowego.
  2. Test hasła.
  3. Jeżeli znajduje się w słowniku podstawowym wyświetlamy hasło a następnie kończymy operację.
  4. Jeżeli słownik podstawowy nie zawierał, hasła to przechodzimy do tworzenia słownika rozszerzonego,
  5. Sprawdzamy, czy nasze zasoby są wystarczające.
  6. Jeżeli tak, to testujemy wygenerowane hasła.
  7. Jeżeli nie. to przerywamy operację generowania słownika i przechodzimy do innych metod ataku.

Słowniki (wordlists) powinny być budowane etapowo, po każdym etapie należy sprawdzić skuteczność otrzymanego słownika. Proces powinien wyglądać tak, iż na początku tworzymy słownik podstawowy (mały), zaś na końcu rozszerzony (duży). Często bywa tak, że pomiędzy pierwszym, a ostatnim etapem budowy słownika konieczne jest wykorzystanie słownika pośredniego. Dzięki zastosowaniu takiej techniki jesteśmy w stanie zaoszczędzić wiele czasu i wysiłków, co niewątpliwie może rzutować na wyniki całego procesu łamania hasła.

Budowanie słownika podstawowego

Słownik podstawowy najczęściej budowany jest na podstawie zebranych informacji na temat użytkownika (Information Gathering), m.in.: hasła zapisane w przeglądarkach, bazach danych SQLite (np. bazy danych aplikacji systemu Android), komunikatory, informacje personalne, można też użyć słowników, które przygotowywane były w przeszłości, do innych spraw.

Kiedy zbierzemy już wszystkie niezbędne informacje, możemy wykorzystać skrypt CUPP (Common User Passwords Profiler), jednak przed użyciem skryptu warto dokonać edycji pliku konfiguracyjnego cupp.cfg, w którym można ustawić potrzebne parametry. Skrypt uruchamia się poleceniem python cupp.py –w <istniejacy_slownik>, dalsza procedura sprowadza się do wpisania danych personalnych użytkownika oraz innych danych. Istniejący słownik, który importujemy do skryptu, jest plikiem, w którym zapisaliśmy inne informacje o użytkowniku (jest to wygodniejszy sposób na przetwarzanie ujawnionych danych).

Budowanie słownika rozszerzonego

Słownik rozszerzony jest to tak naprawdę słownik podstawowy, rozbudowany o pewne elementy takie jak zbiory liczb (np. 0 - 99999), dodawane na początku, jak i na końcu haseł, łączenie haseł miedzy sobą, dodawanie popularnych znaków specjalnych np. „!@#_-” zamiana haseł na „1337 5p34K (elite speak)”, czyli konwersja liter na znaki lub cyfry. Poniżej kilka przykładów:

Aa – ( 4, /\, @, ^ )
Bb – ( 8, 13, !3, /3,/ )
Ff – ( |=, |#/ )
Gg – ( 6, &, 9 )
Ss – ( 5, z, $ )

Rozszerzone słowniki możemy przygotować za pomocą programu crunch, przykładowa komenda może wyglądać następująco: ./crunch 4 4 – polecenie takie wygeneruje wszystkie kombinacje fraz o długości 4 znaków, zbudowane tylko z małych liter, zaczynając od „aaaa” i kończąc na „zzzz” lub też ./crunch 9 9 abcd -t Tomek@@@@ -o w_extend.temp1 – polecenie to wygeneruje wszystkie kombinacje fraz zaczynających się od słowa „Tomek”, a w miejsce @ wstawi frazy zaczynające się od „aaaa” a kończąc na „dddd” a następnie zapisze do pliku w_extend.temp1.

Truecrack

W czasie generowania słowników należy po każdym zakończonym etapie dokonać sprawdzenia, czy słownik nie zawiera w sobie hasła - dzięki temu zbiegowi oszczędzamy cenny czas oraz zasoby obliczeniowe komputera, przykładowy algorytm sprawdzania został przedstawiony na rysunku nr 16.

Sprawdzenia tego dokonujemy przy pomocy programu Truecrack. Program ten jest „łamaczem” haseł do zaszyfrowanych kontenerów utworzonych za pomocą oprogramowania TrueCrypt; działa pod kontrolą systemu operacyjnego Linux i jest zoptymalizowany pod urządzenia NVIDIA Cuda. Program ma możliwość łamania haseł metodą siłową (brute-force) oraz słownikową (wordlist – jak w opisywanym przypadku). Sposób użycia Truecrack przedstawiony jest poniżej.

Dla metody słownikowej:
truecrack -t <plik_kontenera> -k <ripemd160|sha512|whirlpool> -w <plik_słownika>

Dla metody siłowej:
truecrack -t <plik_kontenera> -k <ripemd160|sha512|whirlpool> -c <zakres_znaków> [-s <min_dł_hasła>] -m <max_dł_hasła>

W naszym przypadku wyrażenie sprawdzające hasło miało postać:
truecrack –t /mnt/dysk_dowodowy/Users/Tomek/Downloads/Need\ for\ Speed\ Underground\ 2\ V1.2\ {Full-Game}\ {Requested\ ISO}\ {blaze69}/Need\ for\ Speed\ Underground\ 2.iso -w w_extend.temp1

W wyniku powyższego polecenia otrzymamy taki oto wynik:

Wynik działania programu Truecrack

Tabela 1 przedstawia wydajność programu Truecrack podczas ataku słownikowego - porównanie obejmuje CPU, oraz dwa modele kart graficznych NVIDIA z architekturą CUDA.

Tabela 1 Wydajność programu Truecrack wykorzystującego metodę słownikową

Ilość haseł CPU 3.00GHz NVIDIA GTX650 NVIDIA GTX680
1000 0m 12.031s 0m 3.771s 0m 2.693s
10000 2m 0.421s 0m 15.893s 0m 5.628s
100000 20 m3.811s 2m 20.379s 0m 37.610s

Wynik ataku

Hasło otrzymane po przeprowadzeniu wyżej opisanych procedur ma postać: 54Tomeczek!.

Wpisano je do programu TrueCrypt i uzyskano dostęp do zawartości kontenera ukrytego w pliku Need for Speed Underground 2.iso, tam zaś znaleziono nielegalne treści, o których posiadanie podejrzewany był właściciel zatrzymanych do badania urządzeń.

Ciekawostki dotyczące programu TrueCrypt

Pewien niemiecki inżynier oprogramowania Martin Fiedler stworzył skrypt w języku Python, o nazwie tcsteg2.py, który potrafi połączyć ze sobą plik kontenera programu TrueCrypt i plik wideo, w taki sposób, że otrzymujemy jeden plik multimedialny gotowy do uruchomienia w odtwarzaczu, a jednocześnie możemy go zamontować jako szyfrowaną partycję programu TrueCrypt. Z uwagi na to, iż możliwa do wykorzystania jest tylko przestrzeń kontenera ukrytego (hidden) należy pamiętać, że podczas tworzenia pliku kontenera część standardowego nagłówka zostanie nadpisana a wraz z tym utracona możliwość dostępu do jej zawartości.

Przykładowe użycie skryptu:

python tcsteg2.py <plik_wideo.mp4> <kontener_truecrypt_z_ukyta_partycja>

Innym, bardzo interesującym sposobem na zabezpieczenie kontenera TrueCrypt (w naszej ocenie - nie do przełamania), jest zmiana jakiegokolwiek bajtu znajdującego się w nagłówku kontenera i zapamiętanie, który to bajt.

Dzięki takiej operacji, osoba, która będzie starała się złamać hasło, nigdy nie uzyska pozytywnego rezultatu. Natomiast użytkownik, który wcześniej zmodyfikował ów bajt na swój wymyślony, np. dokonał modyfikacji bajtu 31 -> A3 (jak w poniższym przykładzie), jest w stanie powrócić do oryginalnej formy A3 -> 31, a co za tym idzie, usunąć zniekształcenie struktury pliku kontenera i otworzyć go.

Oryginalna część nagłówka kontenera TrueCrypt
Zmodyfikowany bajt nagłówka kontenera TrueCrypt

Jeśli użytkownik wykorzysta wszystkie techniki utrudniające przełamanie zabezpieczeń kontenera programu TrueCrypt czyli:

  • wszycie pliku multimedialnego,
  • zmiana bajtu/ów np. ukrytego (hidden) nagłówka,
  • mocne, nielogiczne hasło (np. 28 znakowe),
  • plik keyfile,

to dopiero wówczas może czuć się bezpiecznie! (stan na maj 2013r.)

Podsumowanie

W niniejszym artykule omówione zostały jedynie podstawowe aspekty budowy słowników i ataków za ich pomocą, przedstawione metody są uproszczone i nie zawierają bardziej zaawansowanych i czasochłonnych technik. Każda taka sprawa jest unikatowa – budowanie słowników do konkretnej sprawy będzie wymagało indywidualnego podejścia. Należy zatem to podejście traktować jedynie jako ramowe i wymagające dostosowania do przypadku, z jakim mamy do czynienia. Zainteresowanych tematem prosimy o bezpośredni kontakt z autorami tekstu.