Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Dostałem PIT-a w PDFie. Zahasłowanego. Pokazuję jak za 4 złote udało się odzyskać hasło.
Jak pewnie wielu z Was, dostałem niedawno od księgowej PIT-a za 2021 rok. PDF z hasłem + dodatkowa informacja: hasłem jest PESEL. Tu część z Was może pomyśleć, dobra, słabe hasło, nie ma co czytać dalej.
Ale w całej historii czeka nas jeszcze parę drobnych zwrotów akcji…
OK, bierzemy się do pracy:
- Maszyna uruchomiona na AWS (g3s.xlarge z jednym GPU), w cenie $0.75 na godzinę.
- Wyciągnięcie materiału kryptograficznego z PDFa za pomocą narzędzia pdf2john.pl (dostępne jest w john the ripperze)
$ ./john-1.9.0-jumbo-1/run/pdf2john.pl pit.pdf > pit.pdf.hash - Odpalenie hashcata w trybie bruteforce:
To minutka i będzie po sprawie?
Okazało się że nic z tego, hashcat zakończył działanie bez żadnego efektu. Małe ćwiczenie dla czytelnika: dlaczego tak się stało?
4. Chwila zadumy, ach, no tak – wprawdzie wersja z nagłówka PDFa to 1.7
co zgadza się z linijką Hash.Name na listingu wcześniej. Jednak zerknięcie w strukturę ~hasha (Hash.Target) daje odpowiedź. Mamy tutaj $pdf$5*6*…
Szybkie spojrzenie na przykładowe hashe, które może łamać hashcat daje odpowiedź:
Użyłem nieprawidłowego trybu łamania (10600 zamiast 10700), czy inaczej – PDF został zahasłowany / zaszyfrowany nieco nowszą metodą, niż założona przeze mnie. No więc zmiana trybu na 10700:
I… du*pa – nie będziemy czekać przecież 58 dni (pesymistycznie).
5. Potrzebna lepsza maszyna oraz jakaś optymalizacja.
Biorę g4dn.12xlarge z czterema GPU w cenie $3.912 / 1h. Jeśli komuś nie chce się googlować, jakie tam dają GPU, proszę:
Jak się ktoś uprze, to może być znacznie taniej (przy okazji RTX 3090 jest kilka razy szybszy w łamaniu niż amazonowa Tesla T4):
Co z optymalizacją? Nie każda 11 cyfrowa liczba jest numerem PESEL (bo cyfra kontrolna). Ale skąd wziąć wszystkie prawidłowe PESELe z jakiegoś przedziału? Można wygenerować programikiem od Tomka.
O nie, C# + pewnie konieczność kompilacji pod Windowsem ;-( Ale od czego jest mono? :-) apt-get install mono-complete i po chwili możemy już się cieszyć plikiem pesele.txt (alternatywa do mono – ale jakoś mnie serce boli żeby instalować coś bezpośrednio od Microsoftu na Linuksie ;-)
$ mono pesele.exe
6. Hashcat start:
7. Hashcat stop. Całość zajęła – jak widać ~14 minut.
8. Wnioski:
- Oczywiście PESEL to nigdy nie jest dobre hasło (bonus: jeśli ktoś posiada zabezpieczony dokument i złamie hasło = w gratisie zna nasz numer PESEL)
- Szybkość łamania jednego hasła zależy od wykorzystanego algorytmu (to niby oczywiste, ale pamiętajcie, że w ramach jednego formatu plików – np. PDF – potrafią być zaimplementowane różne algorytmy „hasłowania”).
- Odpowiednio złożone hasło (wystarczy kilka nieoczywistych, połączonych ze sobą słów – tak aby hasło miało > 15 znaków) wystarczyłoby w tym przypadku
- Jeszcze lepiej – poufne informacje przekazywać za pomocą zahasłowanego archiwum 7zip (algorytm AES, odpowiednio silne hasło). Takie archiwum też da się łamać :-) ale idzie to koszmarnie wolno.
PS
PDF został wygenerowany w programie ERP Optima:
przesłałem więc do firmy Comarch pytanie o możliwość zmiany tego domyślnego hasła, otrzymując odpowiedź:
Klient ma do wyboru mocne zabezpieczenie za pomocą losowego hasła ustawianego przez portal pracowniczy – element systemu Comarch ERP Optima lub uproszczone zabezpieczenie pdf’a numerem PESEL. Decyzja o wyborze sposobu zabezpieczenia zależy od Klienta.
W skrócie – wygląda na to, że aby dało się zmienić domyślne hasło (PESEL), należy uruchomić osobny moduł Comarch HRM i dać tam dostęp osobom, które mają otrzymać PITa:
(…) na który pracownicy logują się używając własnych danych dostępowych i gdzie dodatkowo takie pliki mogą być zabezpieczane losowym hasłem generowanym każdorazowo przez portal w momencie pobierania pliku.
PS
Jeśli ktoś czuje niedosyt wiedzy, polecam też zerknąć na ~3h nagranie, dotyczące kwestii łamania haseł (pamiętajcie jednak żeby wszystko robić w pełni legalnie, najlepiej na swoich danych):
~Michał Sajdak
.net Core i .net 5,6 działają normalnie pod linuxem już ;)
Ahm, OK, tak czy siak, z mono poszło szybko/od strzała i z pakietów systemowych :)
Dajcie znać mBankowi.
mBank używa z nr-u PESEL tylko jeżeli użytkownik odmówi ustawienia własnego hasła, za co zresztą będzie nagrodzony przypomnieniem o zmianie hasła do PDF-a przy każdej okazji.
A jaki został użyty algorytm szyfrowania tego pdf? AES128 czy AES256?
Obadaj: https://helpx.adobe.com/ca/acrobat/using/securing-pdfs-passwords.html
AES256
Oczywiscie zakladajac ze łamiacy bedzie wiedzial, ze haslo na pliku to 11 cyfr i zastosuje odpowiedni filtr.
tak, ale może próbować różne warianty: atak słownikowy, hybrydowy, full brute force. Raczej hasła stosowane w PL do dokumentów są absurdalnie proste :/
Wystarczy, że jesteś jednym z miliona klientów podmiotu stosującego taką praktykę. Wiesz, jaki jest schemat tworzenia hasła, bo sam dostałeś takiego PDF-a. Nawet i bez tego nr PESEL to pierwsza rzecz do przetestowania, bo w Polsce jest to plaga.
A co w sytuacji gdy hash docelowy nie jest znany? Skąd wiadomo kiedy dokument jest odszyfrowany prawidłowo? Jeżeli będzie jakiś plik binarny (przypuśćmy że wiemy że zawiera stringi w j. polskim) to hashcat będzie danym hasłem deszyfrował cały dokument danym algo sprawdzając entropię czy robiąc kryptoanalizę statystyczną za każdym razem? Ile by takie coś trwało?
Ciężko tak w skrócie odpowiedzieć, zobacz najlepiej na nasz ~3h filmik o hashcacie – jest wklejony na końcu wpisu (większość z niego to hashcat na żywo i omawianie różnych przypadków).
Widziałem cały materiał (bardzo ciekawy) i dlatego napisałem powyższy komentarz ponieważ całe szkolenie dotyczyło szukania hasła od którego derywowany jest hash będący kluczem, a ja pisałem o deszyfrowaniu cybertextu do cleartexu bez posiadania jakiegokolwiek hasha i wiedzy o formcie pliku lub po prostu deszyfrowaniu pliku raw. Cleartext szyfrowany rundami znanego algo o znanej długości klucza i wiedzy że cleartext to polski elaborat ze znanym kodowaniem. Chodzi o metodę odwracalną gdzie deszyfrujemy plik do skutku szukając polskiego tekstu w base64 bez kontenerów i jakiejkolwiek obfuskacji.
Bardzo fajny artykuł, tak właśnie powinno się pisać poradniki. Prosto, bez niepotrzebnych rzeczy, sama praktyka. Dodałbym jeszcze tylko 3 rzeczy:
1. Polecenia hashcat w postaci tekstowej, a nie tylko na obrazkach – aby można było sobie przekopiować przez schowek, oraz aby Google je zindeksowało.
2. Część dotyczącą instalacji – czyli jakie pakiety i po co. Głównie wyjaśnić kwestię CUDA SDK.
3. Gotowe skrypty realizujące całość – można jako Github Gist, można do pobrania bezpośrednio ze strony, do woli.
4. Instrukcja kompilacji – skoro już tak szczegółowo to jest opisane, to jeszcze polecenia, które program generujący pesele budują i uruchamiają też by były spoko :-)
Parę drobnych punktów jest trochę celowo ominiętych (jako ćwiczenie dla czytelników). Np. przejście między punktem 2. i 3. – coś tutaj niewielkiego jeszcze trzeba zrobić.
No i właśnie takie podejście jest słabe – powstrzymuje ono wielu praktyków, którzy mają jakieś konkretne dane i jakiś fajny pomysł, ale nie mają umiejętności.
Ja widzę misję prowadzenia tego typu serwisu jako pomaganie czytelnikom – m.in. właśnie w sytuacji, gdy ich umiejętności nie nadążają za ambicjami, pomysłami na coś, czy bieżącymi potrzebami.
Czegoś się extra nauczą :-) Włożysz odrobinę wysiłku, wiedza jest bardziej utrwalona.
Lepiej dac wędke niz rybe – absolutnie jestem za podejsciem Michala.
To oczywiście metoda na poznanie hasła, samo jego zdjęcie jest możliwe przez jedną z wielu stron które to robią (bez opłat). Zabezpieczenie hasłem plików pdf jest nic nie warte, podobnie zresztą jak arkuszy excela.
Jest coś warte:
1) Dobry algorytm (jak w pkcie 5.)
2) Złożone hasło
3) Chociaż i tak lepiej 7zip
Nest Bank wysyła do mnie dokumenty gdzie hasłem jest nip.
Tak na marginesie – pakiety od Microsoftu to najgorzej zbudowane pakiety, jakie widziałem. RPM z założenia powinien być nieinteraktywny podczas instalacji. U MS rpm -i wywołuje dialog z koniecznością potwierdzenia licencji (przyznam, że nie pamiętam już który dokładnie pakiet tak robi). Życzę szczęścia przy automatycznej aktualizacji.
Tutaj kolega zrobił to prościej i taniej:
https://informatykzakladowy.pl/szyfrowanie-dokumentow-numerem-pesel-nie-chroni-ich-zawartosci/#more-1286
0) gdzie prościej? ;-)
1) Jego nawet linkujemy we wpisie :-) [dobra, pożyteczna wiedza]
2) Drobny niuans: Tomek łamał o wiele starsze zabezpieczenia w PDFie niż my tutaj
(%PDF-1.4 %PDF-1.7 -> 10500 i 10600. U nas musiał być 10700 – czyli bodaj najnowsze zabezpieczenia dostępne w PDF).
3) Te starsze zabezpieczenia na szybkim GPU są łamane szybko (przynajmniej jeśli chodzi o PESEL), więc nawet nie ma co się bawić w generowanie pliku pesele.txt, tylko full bruteforce
Jest jeszcze kwestia trudności archiwizacji takich dokumentów, którą rozwiązuje standard ISO 19005 („PDF/A”).
W obecnej sytuacji zostaje:
1. znając hasło „odhasłować” taki PDF, np. ghostscriptem, jednak powoduje to usunięcie podpisu PAdES (w PDFie), lub nieważność innego podpisu pod dokumentem.
2. trzymać hasło razem z tak „zabezpieczonym” plikiem.
14 minut na maszynie za 3900usd/h?
To będzie więcej niż 4zl.
Jeżeli wygeneruję pesele programem pesel.exe i wybiorę 11234240 pozycję czy to będzie PESEL autora😁? Czy to nie takie proste?
Pomysł dobry, chociaż hashcat nie musi lecieć całkiem po kolei (i nie leci w tym przypadku). Więc odpowiadając wprost – to nie będzie PESEL, o który pytasz.
Użycie pesel jaki hasło to ukłon w kierunku adresata pliku bo on zna hasło. Jak miło by wyglądać wysłanie zahasłowanego pliku PDF tak aby adresat mógł otworzyć plik PDF? Hasło wysłać w treści maila? No nie sądzę.
No wysyłka innym kanałem niż e-mail (np. SMS).
PitA to jest w kebabie, mówi/piszę się pit. Bez odmieniania czy udziwniania. Jak chcecie się bawić w odmiany to można wg nowomowy napisać pitU.
Nie, nie mówi się „pit” bo to oznacza po prostu podatek dochodowy osoby fizycznej (PIT = Personal Income Tax).
Powinno być Deklaracja/Druk PIT jeśli chcesz aby ludzie się domyślali o czym piszesz. Jak chcesz być dokładny, to Deklaracja/Druk PIT-11 bo to o nim mowa w tekście.
Jak już taki czepliwy jesteś, powinno się pisać PIT-u.
Ja zwróciłem Redakcji uwagę na ten rodzaj błędu wiele razy, ale jak grochem o ścianę.
A ostatnio nawet nie przepuściła mojego komentarza w tej sprawie.
Prawda w oczy kole?
Dodajcie proszę przykładowy PDF z takim samym szyfrowaniem jak w artykule. Dziękuję.
Dodamy w jakimś ~bliskim konkursie. A później (jak pamięć nie zawiedzie) dodatkowo podlinkujemy tutaj.
Trochę zmiana reguł w trakcie gry, jednka. Program, o ile był uruchomiony dokładnie w wersji z GH, nie zadziała ani dla PESELi ludzi młodych, ani dla tych bardziej wiekowych. Przy czym obsługa dla młodych wymaga nieco większej zmiany, niż zmiana zakresu.
„Program, o ile był uruchomiony dokładnie w wersji z GH, nie zadziała ani dla PESELi ludzi młodych, ani dla tych bardziej wiekowych.” -> ano, pewnie w wolnej chwili przygotujemy osobny programik do generowania ~wszystkich peseli.
https://gist.github.com/rozie/0e244dade9a8e333df77f51b5875c51d
Use pypy3.
Wygląda spoko. Tak na szybko – obsługuje PESELE dla urodzonych >= 2000 r. ?
Tak.
A oto standard zabezpieczania dokumentów przez Bank Citi Handlowy:
Dokumenty są zabezpieczone hasłem. Poniżej prezentujemy sposób jego utworzenia.
Hasło jest kombinacją
daty urodzin w formacie dzień/miesiąc/rok oraz
4 ostatnich cyfr numeru telefonu komórkowego posiadanego przez Bank.
Ważne: Hasło nie może zawierać liter ze znakami diakrytycznymi. W przypadku takiej litery, prosimy o jej zastąpienie literą bez znaku diakrytycznego np. zamiast „ź” prosimy w haśle użyć „z”.
Przykład:
Data urodzin: 01Paź1972
Numer telefonu: 123 456 789
Hasło: 01Paz19726789
RRMMDDPPPPK
R-Rok
M-miesiąc
D-dzień
PPPP – to liczba porządkowa. U kobiety ostatnia cyfra tej liczby jest parzysta, a u mężczyzny – nieparzysta
K-cyfra kontrolna generowana za pomocą znanego algorytmu (odsyłam np. do wikipedii).
Zatem gdy znamy płeć oraz przybliżony wiek, sprawa upraszcza się tak bardzo, że zajmuje niecałą godzinę na przeciętnym domowym sprzęcie.