Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Rozpoznawanie hasha po jego strukturze. Narzędzie: houndsniff.

05 lutego 2022, 10:17 | W biegu | komentarze 22

Co to za hash? fb31243e63d68c1f546e6eeed50c4600 MD5? Na pewno? ;-)

No właśnie, po samej strukturze czasem nie da się w 100% określić z jakim hashem mamy do czynienia. Czasem jednak jest to proste, albo hash jest na tyle popularn,y że można z dużym prawdopodobieństwem określić, że jednak będzie to hash X.

Koniec gadania, zobaczcie narzędzie houndsniff:

Jeśli houndsniff nie rozpoznaje hasha z jakiegoś powodu, można spróbować czegoś starszego lub jeszcze innego.

~Michał Sajdak

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Ktoś dał się wpuścić w maliny! :D

    Obydwa programy to tablica gotowych wyników, z której wybierane są elementy pasujące długością. Kolumna procentów nie jest zależna od danych wejściowych: jest wklepana na twardo w program i nie wyraża absolutnie nic.

    Fajny program wprawkowy dla początkującego programisty i super, że autor publikuje takie prace, ale /głośne chrząknięcie/. Mam nadzieję, że następny post nie będzie zachwalał urządzeń „oszczędzających energię” po włożeniu do kontaktu albo „zmniejszających zużycie paliwa i poprawiających osiągi” po wpięciu w szynę CAN? ;)

    Odpowiedz
    • Szczerze, to nie rozumiem trochę komentarza.

      Post dokładnie wskazuje do czego jest to narzędzie: do rozpoznawania z jakim hashem mamy do czynienia, a nie do łamania hasha.

      Plus: „No właśnie, po samej strukturze czasem nie da się w 100% określić z jakim hashem mamy do czynienia.”

      Lepiej gdybyś napisał co to za hash na początku wpisu :-) To podyskutujemy dalej ;-)

      Odpowiedz
      • Jedyna prawidłowa odpowiedź: hash z początku artykułu to dowolnej 128-bitowej funkcji skrótu.⁽¹⁾ Albo w ogóle nie hash.

        Ani ja, ani houndsniff, ani nikt inny nie jest w stanie powiedzieć nic więcej. I to narzędzie nic innego nie robi. Podaje listę znanych mu 128-bitowych hashy. Obok drukuje procenty, które sugerują głębszą logikę lub ocenę wyniku, ale tak nie jest. To są na twardo wpisane tabelki dla każdej długości wpisanego ciągu i nie ma żadnego znaczenia, co wpiszesz — to nawet nie musi być wynik funkcji skrótu. Teoretycznie sprawdzany jest zestaw znaków, ale wynik jest w 100% zależny od długości hasha, więc informacja ta faktycznie nie jest nigdy brana pod uwagę.

        Kod źródłowy jest publicznie dostępny. Niemniej lampkę alarmową powinna zapalić już sama obietnica rozpoznawania funkcji skrótu na podstawie jej wyniku. Jednym z założeń hashy kryptograficznych jest jednostajność rozkładu wyników, więc rozpoznania funkcji na jego podstawie z założenia nie powinno być możliwe. W przypadku pozostałych hashy można spekulować o takiej możliwości, ale rozpoznanie procesu na podstawie jego wyników wymaga próbki o rozmiarze większym niż 1.⁽²⁾

        Oczywiście, powtórzę, nie krytykuję tutaj autora houndsniffa. Pierwsze moje programy wcale nie były lepsze. I bardzo fajnie, że dzieli się swoimi pracami. Ale ten program nie robi żadnego rozpoznawania, a jedynie mapuje długość zapisu na gotową listę wyników, trochę udekorowaną.

        Chociaż może to ja miałem zbyt duże oczekiwania, czytając nagłówek artykułu.
        ____
        ⁽¹⁾ Przy założeniu, że to zapis szesnastkowy.
        ⁽²⁾ Pomijając takie, które dołączają informację o sobie do wyniku.

        Odpowiedz
        • „Jedyna prawidłowa odpowiedź: hash z początku artykułu to dowolnej 128-bitowej funkcji skrótu”

          E no. Można rozpoznać z b. dużym prawdopodobieństwem co to za hash. Tylko trzeba trochę się wysilić ;-)
          To jedno z prostszych zadań w starszych rozgrzewkach CTF ;-)

          Odpowiedz
          • matek

            Halo, to nie jest MD2 przypadkiem? :D

          • nie :) ale w miarę blisko

          • Można rozpoznać? Na podstawie pojedynczego hasha? To trochę nie zgadza się z matematyką, której mnie uczyli. Aż złośliwie zasugeruję artykuł wyjaśniający mechanizm rozpoznawania. ;)

            Tylko bez oszukiwania z używaniem informacji innych niż sam hash. Wszak houndsniff nie prosi np. o wskazanie, z jakiego zbioru danych wejściowych hash był wyliczany. Bo oczywiście rozpoznanie funkcji skrótu na tej podstawie jest możliwe trywialnym (acz czasami kosztownym) bruteforcem. Np. ffffffffd6b97da08692dfd4e1c5072a prawie na pewno zostało wyliczone MD5.

            Poważnie: niedopatrzenie trafia się każdemu. Nic wielkiego. Ale brnąć w to i próbować udowodnić, że program robi coś niemożliwego? :D

          • Powtórzę jeszcze raz – kto używa hashcata, jtr, czy innych podobnych narzędzi, wie o co chodzi w tym wpisie i czuje po co takie narzędzie istnieje. Co więcej, wpis odpowiada na jedno z częściej zadawanych pytań w temacie („no ale jak rozpoznać z jakim hashem mam do czynienia?”). Jedna odpowiedź jest np. tutaj: https://hashcat.net/wiki/doku.php?id=example_hashes Inna – w narzędziach, które pojawiają się w tym poście.

            Niedopatrzenia – pewnie że się zdarzają (nam jak najbardziej też). Ale akurat nie w tym wpisie :-)

          • matek

            W takim razie ciekaw jestem, jak precyzyjnie rozpoznać ten konkretny hash. Ja użyłem kilku dostępnych narzędzi:
            houndsniff, name-that-hash, haiti, hashid, hash-identifier i wszystkie na pierwszy strzal rzucaja MD5. Wiemy już że to nie jest MD5. Moj typ to był MD2, bo tylko jako MD2 JtR chcial łamać ten hash. Skoro żadne z w/w narzędzi nie jest w stanie okreslić jaki to hash, to ciekaw jestem jakie wy macie na to metody ;>

          • trzeba jeszcze chwilę pogłówkować :-)

        • MichaelDim02

          There’s been a lot of discussion regarding the percentages. I thought it was pretty clear how they worked, but I updated the readme, either way:

          https://github.com/MichaelDim02/houndsniff/blob/master/README.md
          (scroll to the bottom)

          I don’t think I ever made the promise that the percentages are anything more than likelihood based on popularity. If it was possible to determine a hashing algorithm mathematically, the program would only print one single definite hash.

          Odpowiedz
      • Krzysiek

        A ja rozumiem bardzo dobrze. Piszecie newsa w tonie „nowe narzędzie do rozpoznawania hashy, md5? Na pewno? To narzedzie powie Ci prawde”. A z code-review wynika, że to tool jak setka innych z predefiniowanymi wartościami.

        Odpowiedz
        • Coż, jeśli ktoś potrzebuje „bawić” się w łamanie hashy, to wie o co chodzi i wrzuci to do swojego arsenału (lub inne toole z komentów).
          Jeśli ktoś chce tu szukać jakiejś taniej sensacji, to nie dla niego jest ten wpis.

          Odpowiedz
      • matek

        Koledze chodzilo chyba o to, ze faktyczie w kodzie aplikacji sa na sztywno wpisane wartosci procentowego prawdopodobienstwa dla danego typu hasha. Intuicyjnie, te wartosci powinny wskazywac z jakim prawdopodobienstwem program okreslil dany typ hasha. Kiedy jest to na sztywno wpisane to wypisywaine tego nie ma najmniejszego sensu.

        Odpowiedz
        • No tak, to jest robione na podstawie badań autora [można z nimi dyskutować]. Podobnie jak w nmapie 1000 najpopularniejszych portów jest „zahardcowanych” [też na bazie badań autora, zmienia się to czasem z wersji na wersję]

          Odpowiedz
  2. Mi
    Odpowiedz
  3. Niuch, niuch

    Ladny ten ascii-art z pieskiem :-).

    Odpowiedz
  4. Dark

    Jest narzedzie którego używam już jakiś czas i wydaje się być dużo wygodniejsze niż to. Haiti (https://github.com/noraj/haiti) radzi sobie najlepiej z rozpoznawaniem hashy wśród wszystkich które próbowałem, a i od razu referencję do hashcata i Johna pokazuje.

    Odpowiedz
  5. Adam
    Odpowiedz
    • Adam

      tak – MD4 a i nawet wynik wyszedł => „sekurak” po zdekodowaniu

      Odpowiedz
  6. Adam
    Odpowiedz

Odpowiedz