Kulisty złamania programu Beniamin

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:

Podstawy kryptografii Sekrety kryptografii

Realizacja: SIPLEX Studio