Co Niebezpiecznik zrobił źle, czyli jak nie anonimizować zrzutów ekranu

OXYGEN THIEF

Bardzo aktywny
Członek Załogi
Administrator
Dołączył
26 Maj 2010
Posty
35947
Reakcje/Polubienia
25039
Miasto
Trololololo
Wielu pracowników PGS Software z zainteresowaniem śledzi publikacje serwisu Niebezpiecznik.pl, który od dawna propaguje dobre praktyki bezpieczeństwa teleinformatycznego, a niewłaściwe piętnuje. Tym bardziej więc zaskoczył nas obrazek w tekście „
Zaloguj lub Zarejestruj się aby zobaczyć!
” z końca września 2017. Był nim pochodzący z serwisu obywatel.gov.pl zrzut ekranu z dowodem osobistym zawierającym rozmyte dane autora tekstu. Jak się okazało – rozmyte nie dość mocno.

Zrzut ten wyglądał mniej więcej tak:

01.png


Był to link do większego obrazka, którego fragment wyglądał tak:

02.png


Litery, choć mocno rozmyte, tworzą dające się odczytać imię i nazwisko autora tekstu. Czyżby powiększony obrazek mógł zdradzić więcej danych? Postanowiłem przyjrzeć się temu tematowi i podjąć próbę rekonstrukcji pozostałych pól.

Przed dalszą lekturą koniecznie otwórz w osobnej zakładce następujący link:
Zaloguj lub Zarejestruj się aby zobaczyć!


Użyte narzędzia
Na pierwszy ogień wziąłem rozmyte imiona rodziców, w oryginale prawie niemożliwe do odczytania – można było jedynie oszacować długość obu słów. Przyjąłem algorytm działania składający się z następujących kroków:

  • Wygenerowanie słownika najpopularniejszych imion w Polsce
  • Nakładanie kolejnych imion na blankiet dowodu osobistego i aplikowanie filtru rozmycia
  • Porównanie wynikowego obrazu z pierwowzorem
Krok pierwszy udało się pokonać w kilka minut, listy imion z częstotliwością występowania można znaleźć np. w witrynach fanów heraldyki czy na stronach szkół rodzenia.

Krok drugi wymagał użycia blankietu dowodu osobistego i odpowiedniego fontu. Tutaj z pomocą przyszło…
Zaloguj lub Zarejestruj się aby zobaczyć!
, na którego stronach można znaleźć wystarczająco dokładne wzory dokumentów:

03.png


04.png


Odnalazłem też wywiad (
Zaloguj lub Zarejestruj się aby zobaczyć!
) w którym przeczytałem, że w aktualnym wzorze dowodu osobistego użyty został darmowy font Lato autorstwa Łukasza Dziedzica (
Zaloguj lub Zarejestruj się aby zobaczyć!
), pobrałem go i zainstalowałem.

05.png


Font Lato nie przydał się jednak, bo – jak wykazał eksperyment – generator obrazu dowodów osobistych w wersji online używa Ariala lub czegoś wystarczająco do Ariala podobnego.

06.png


Wyznaczenie pozycji, rozmiaru i wariantu czcionki wymagało eksperymentów na kilku rzeczywistych zrzutach ekranu. Na rzuconą w firmie prośbę o pomoc zareagowali Jurek, Bartek, Krzysiek i Paweł – dzięki panowie! Wyposażony w kilka kompletów wzorcowych plików byłem w stanie określić wszystkie parametry i generować napisy niemal idealnie odtwarzające teksty z formularza utraconego dowodu osobistego.

Po przeskalowaniu obrazu z blankietem zyskałem możliwość generowania obrazów dokumentu z dowolną zawartością:

07.png


Kolejnym krokiem przygotowań było programowe odtworzenie efektu rozmycia, który zaaplikowano na zrzucie ekranu opublikowanym w Niebezpieczniku. Konieczna była znajomość którejś z rozmytych sekcji, ze stuprocentową pewnością mogliśmy obstawiać imię, nazwisko i obywatelstwo.

Wypróbowałem
Zaloguj lub Zarejestruj się aby zobaczyć!
z różnymi wartościami parametrów. Funkcją podobieństwa była średnia wartość odchylenia wartości pikseli od wzorca, obliczona przez bibliotekę ImageMagick. Podczas realizacji tej części powstawały robocze ilustracje jak poniżej:

08.png


Oczywiście wszystkie kroki eksperymentów były na bieżąco automatyzowane.

Tego typu prace idą mi najsprawniej w C# i Visual Studio, korzystałem z pakietu
Zaloguj lub Zarejestruj się aby zobaczyć!
będącego wrapperem biblioteki
Zaloguj lub Zarejestruj się aby zobaczyć!
, wypróbowałem też
Zaloguj lub Zarejestruj się aby zobaczyć!
oraz
Zaloguj lub Zarejestruj się aby zobaczyć!
.

Imiona rodziców
Po skompletowaniu narzędzi wystarczyło wziąć listę imion, filtr Gaussa z wyznaczonymi parametrami i funkcję porównującą, by odczytać z oryginału imię ojca a chwilę później i matki. Co więcej – dysponując dwoma długimi słowami byłem w stanie wyliczyć jeszcze dokładniejsze parametry funkcji rozmycia. Pomogło to potem w identyfikacji kolejnych pól, np. daty urodzenia – tu trudniej wykryć różnicę między występującymi obok siebie rozmytymi cyframi “3”, “8” czy “9”.

09.png

(ilustracja poglądowa)

PESEL, numer dowodu i inne
Dalej było z górki. Odtworzona data urodzenia zdradza sześć pierwszych cyfr numeru PESEL, ostatnia cyfra jest wartością kontrolną, przedostatnia musi być nieparzysta (mamy do czynienia z mężczyzną). Do przepuszczenia przez algorytm pozostaje raptem 5000 możliwych kombinacji, więc PESEL poddaje się po kilku chwilach.

Numer dowodu jest teoretycznie trudniejszy, bo trzy litery i sześć cyfr to kilkanaście miliardów kombinacji. W praktyce udaje się łamanie go w sekcjach po kilka znaków, tym bardziej, że dwie pierwsze litery można wytypować z daty wystawienia dokumentu a
Zaloguj lub Zarejestruj się aby zobaczyć!
eliminuje 90% błędnych odczytów.

Prawdopodobne miejsce zamieszkania można określić na bazie pola z organem wydającym dokument – tu mamy jeszcze prościej, bo na zrzucie opublikowanym w Niebezpieczniku pozostawiono początek nazwy organu: “Prezydent [……]”, przy czym zamazane pole z nazwą miejscowości jest dość długie. Okazuje się, że prezydentów miast mamy
Zaloguj lub Zarejestruj się aby zobaczyć!
, a właściwą pozycję można wytypować gołym okiem.

10.png


Na ilustracji powyżej widzimy przykład problemu, który wystąpił w analizowanym zrzucie ekranu w polu z miejscem urodzenia – ogonek diakrytyczny wystawał poza obszar rozmycia. Tym samym z kilkudziesięciu tysięcy możliwych wartości tego pola do weryfikacji pozostaje raptem kilka – wystarczy wytypować nazwy oczekiwanej długości, w których tzw. „polskie znaki” pojawią się na oczekiwanej pozycji.

Data ważności i wystawienia dokumentu są już tylko formalnością. Dzieli je równo dziesięć lat, więc odczyty wzajemnie się korygują.

Podsumowanie
Jak pokazałem wyżej, jeden nie dość dobrze zanonimizowany zrzut ekranu może posłużyć do odtworzenia wszystkich danych zapisanych w dowodzie osobistym autora, zaś publikacja taka może zdarzyć się nawet firmie zajmującej się profesjonalnie bezpieczeństwem IT.

Przed publikacją niniejszego tekstu planowałem skontaktować się z autorem, jednak nie zdążyłem – redakcja Niebezpiecznika wcześniej poprawiła już rozmycie pól na ilustracji i
Zaloguj lub Zarejestruj się aby zobaczyć!
opisujący przyczyny przeoczenia.

Dziś opisany atak może zostać przeprowadzony jedynie przez te osoby, które znajdą poprzednią wersję ilustracji w cache przeglądarki. Jeśli na początku lektury zrealizowałeś/aś polecenie otworzenia obrazka w osobnej zakładce, raczej nie znajdziesz już na swoim dysku owej poprzedniej wersji. Dziękuję za współpracę.

Uwaga: w niniejszym tekście można znaleźć imię i nazwisko autora cytowanego artykułu. Wszystkie pozostałe dane widoczne w tekście lub na ilustracjach zostały spreparowane i nie mają związku z danymi rzeczywistymi.

Dodatek: jak poprawnie anonimizować zrzuty ekranu
Obrazek wzorcowy:
i01.png


Źle: zbyt słabo rozmyty numer można zrekonstruować w sposób opisany w tekście
i02.png


Źle: także tu wyjściowa sekwencja cyfr może dać się odtworzyć
i03.png


Bardzo źle: filtr “zawirowanie” można odwrócić – cyferki będą jedynie nieznacznie postrzępione
i04.png


Nadal źle: kilka cyfr pozostaje widocznych, ilość rozmazanego “tuszu” niesie informację o pozostałych
i05.png


Źle: jeden rząd pikseli nie został rozmazany, duża szansa na pełne odtworzenie treści
i06.png


Dość dobrze: mocne rozmycie sprawia, że informacje o poszczególnych cyfrach zostały utracone, jednak pola zmiennej długości nadal zdradzają pewne dane o oryginale
i07.png


Bardzo dobrze: kompletny brak informacji o pierwotnej zawartości
i08.png


Opisane techniki dotyczą edycji zwykłych bitmap, czyli plików takich, jak JPG, GIF czy PNG. Jeśli anonimizujesz PDF-y czy pliki Worda, zwróć uwagę, czy wstawiane jednokolorowe prostokąty nie są przypadkiem wektorowymi obiektami osadzanymi na tle oryginalnych obrazów. Jeśli tak się stanie, pierwotne bitmapy będzie można wydobyć z pliku przy znikomym nakładzie pracy. Niektóre formaty danych zawierają też osadzone w metadanych miniaturki, warto usunąć je przed publikacją plików.
info: pgs-soft.com
Zaloguj lub Zarejestruj się aby zobaczyć!
 
Do góry