Raz na miesiąc przychodzi taki dzień, gdy trzeba zmienić hasło do systemu. Procedura zmiany hasła jest prosta. Zagłębiam się w mroczne czeluście swojego umysłu i wybieram jakąś podstępną frazę, którą następnie przekształcam według pewnego algorytmu i na wyjściu mam nowe hasło, które towarzyszyć będzie mi przez najbliższe 30 dni. Gdyby to było tak proste...
Jak strzelić sobie z łuku w kolano
Przez kilka pierwszych dni uporczywie najpierw wpisuję poprzednie hasło, dopiero potem przestawiam się na automatyczne wpisywanie nowej frazy. W tym czasie wiele rzeczy może pójść nie tak. Na przykład fraza może (nie)świadomie zmutować w mej zawodnej pamięci (luźne skojarzenie: Random bit flips in hardware and security). Mogę też poplątać przekształcenie, które do niej stosuję. Choć sam schemat jest w miarę spójny, to za wprowadzam do niego kilka spontanicznych modyfikacji, o których później mogę zapomnieć. Do tego wszystkiego trzeba jeszcze dodać... zwykłe literówki.
Raz na jakiś czas nadchodzi godzina gadziny. Na przykład wracam z kuchni z kubeczkiem herbaty (a to jest angażujące zadanie), siadam przed swoim zablokowanym komputerem i... Nic, pustka, cisza.
Właśnie dziś zdarzyła mi się (prawie) taka sytuacja - im bardziej wpisywałem hasło, tym bardziej było ono nieprawidłowe. Oczywiście mogłem zresetować sobie hasło z poziomu administratora, ale twardym trzeba być, nie miękkim (ewentualne problemy z sekretami przechowywanymi przez DPAPI tutaj pominę). Ja nie złamię swojego hasła?!
Procedura była prosta. Frazę mniej więcej pamiętałem. Mniej więcej, bo w międzyczasie zmutowała mi do czterech możliwych postaci. Następnie dla każdej z tych postaci zastosowałem przekształcenia, które zwykle stosuję, oraz modyfikacje, które mogły radośnie wpaść mi do głowy. Kolejnym krokiem było poradzenie sobie z ewentualnymi literówkami. Ten problem rozwiązałem w sposób brutalny - po prostu na podstawie każdego "bazowego" hasła generowałem (to już skryptem oczywiście) zestaw kolejnych możliwych haseł według prostej zasady - kolejne znaki (pozycje) w haśle bazowym zastępowałem wszystkimi możliwymi znakami (pythonowo: string.letters + string.digits + string.puntctuation). Ostatni krok mógłbym powtarzać w celu uzyskania słownika zawierającego potencjalne hasła uzyskane w wyniku więcej niż jednej literówki. W każdym razie na wyjściu otrzymałem słownik złożony z prawie 7 000 pozycji. Pozostało tylko skorzystać z Caina i spokojnie zalogować się do systemu :)
P.S. Literówka wynikała z tego, że prawa ręka pracowała szybciej niż lewa. Po prostu prawą ręką zdążyłem wprowadzić dwa znaki zanim lewą zdążyłem zwolnić SHIFT. I udało mi się to DWA razy pod rząd podczas zmiany hasła (nowe hasło i jego potwierdzenie).
Ale sprawdzenie tych 7000 haseł to błysk ciupagi był. Hashe NTLM mój nie pierwszej nowości laptop łamie z szybkością ponad 4 000 000 na sekundę, czymże jest przy tym te 7000?