Przedstaw się, kila słów o sobie, swoich zainteresowaniach.
Nazywam się Andrzej Licznierski-Godziuk, w kręgach związanych z komputerami jestem bardziej znany jako GDR!, jestem programistą-freelancerem oraz – w wolnym czasie – studentem. Interesuję się każdym aspektem działania komputerów, od poziomu sprzętu do oprogramowania użytkowego, a obecnie pod lupą mam języki skryptowe oraz reverse engineering.
Dlaczego zainteresował Cie program Beniamin, co spowodowało że za cel obrałeś sobie rozkodowanie zaszyfrowanego pliku z listą blokowanych stron?
Po wypuszczeniu programu za darmo i jego rekomendacji przez MEN, w polskiej blogosferze zawrzało. Blogowicze testując program zaczynali oczywiście od sprawdzenia własnych blogów i z zaskoczeniem stwierdzali, że są one blokowane. Rozpoczynali więc testowanie innych stron i dochodzili do dziwnych wyników. Z drugiej strony, porneL zaproponował złamanie listy słów kluczowych -pomysł rozwiania tajemnicy słów kluczowych Beniamina był interesujący.
Czy doświadczyłeś nacisków ze strony tworców programu Beniamin lub środowisk zwiazanych z MEN aby nie rozpowszechniac tych informacji?
Nie, nie doświadczyłem z ich strony ani reakcji pozytywnych, ani negatywnych. Jest to zapewne związane z faktem, że sprawę nagłośniła Gazeta Wyborcza twierdząc, że opierają się na badaniach swoich redaktorów na redakcyjnym komputerze. Redaktorzy ci mieli dojść metodą prób i błędów do tego, że blokowana jest domena blox.pl oraz
cafe.gazeta.pl.
Przedstaw kwestie techniczne – jak zaszyfrowany był plik z listą blokowanych stron, jakich metod/algorytmów użyto do szyfrowania – jak oceniasz poziom zastosowanego rozwiązania?
Szyfrowanie zastosowane w plikach konfiguracyjnych programu to szyfr podobny do algorytmu Vigenere’a. Oryginalny algorytm został złamany 152 lata temu.
Wersję szyfru zastosowaną przez autorów Beniamina można przedstawić
następująco: (dla jednego pliku)
1. Załaduj do pamięci 272-znakowy słownik
2. Wyzeruj licznik zdekodowanych znaków
3. Pobierz bajt z zaszyfrowanego pliku jako C
4. Ze słownika pobierz bajt o indeksie C + (licznik_zdekodowanych_znakow mod 16)
5. Pobrany ze słownika bajt zapamiętaj jako zdekodowany
6. Inkrementuj licznik zdekodowanych znaków
7. Wróć do punktu 3 chyba, że koniec tekstu
W rzeczywistości, słownik był nieco większy i dla różnych plików za początek słownika był dobierany z innym offsetem względem tego “większego” słownika.
W podobny sposób zaszyfrowany był wpis w rejestrze, przechowujący hasło w sposób jawny.
Użyte szyfrowanie jest bardzo słabe, zdecydowanie lepszym rozwiązaniem byłoby użycie hasła administratora jako klucza szyfrującego. Nadal istniałaby oczywiście możliwość ataku known-plaintext, ponieważ plik konfiguracyjny jest w formacie XML, ale uzyskanie hasła nie byłoby już trywialne.
Ile czasu wymagało złamanie zabezpieczenia, jakich narzędzi użyłeś?
Złamanie zabezpieczenia zajęło mi około doby z przerwami na sen i inne czynności podtrzymujące cykl życiowy. Użyłem debuggera IDA Pro oraz edytora WinHex. Lista słów kluczowych mogła być opublikowana wcześniej (jako zrzut z pamięci), ale nie byłaby wtedy łatwo weryfikowalna, postanowiłem więc napisać program deszyfrujący i udostępnić jego kod źródłowy.
Polecane książki: