Funkcje skrótu (ang. hash)

· Dawid Farbaniec

ethical.blue Magazine NaN. Anomalie i zniekształcenia

Funkcje skrótu (ang. hash)

Podstawowe zastosowanie funkcji skrótu (ang. hash) to weryfikacja integralności danych, ponieważ algorytmy te tworzą z wejściowej wiadomości skrót o stałej długości, ze znikomą szansą na wygenerowanie takich samych wyników dla różnych od siebie plików lub napisów. Nawet najmniejsza modyfikacja danych wejściowych, z bardzo dużym prawdopodobieństwem, spowoduje, że funkcja zwróci całkowicie inny skrót. [2]

Funkcja skrótu SHA3-512 z przykładowego ciągu tekstowego ethical.blue Magazine to 1271fa5b055f3515dddb9437df0a81251c13aeb2858051b2da2e1073514c1ce5fa738568554cd28e9eb8a8eb839f057226da30b65d760295937ec9f240de2830.

Można ją obliczyć za pomocą poniższego kodu w PowerShell, który korzysta z metod platformy .NET, a dokładnie klasy System.Security.Cryptography.SHA3_512.

Przykładowe wywołanie metody HashData może być następujące:

[System.Convert]::ToHexString(
[System.Security.Cryptography.SHA3_512]::HashData(
[System.Text.Encoding]::UTF8.GetBytes(
'ethical.blue Magazine'
))).ToLower();

Poniżej przedstawiono rezultat wykonania przykładowego kodu.

Rysunek 1. Funkcja skrótu SHA3-512 z przykładowego ciągu tekstowego (PowerShell)

Poza weryfikacją integralności danych funkcje skrótu (ang. hash) doskonale nadają się do identyfikacji znalezionych anomalii. Identyczne wartości zwrócone przez funkcję skrótu oznaczają z bardzo wysokim prawdopodobieństwem, że pliki mają taką samą zawartość. Teoretycznie mogą wystąpić takie same wartości hash dla różnych danych wejściowych, co nazywane jest kolizją. Jednak bezpieczeństwo kryptograficzne zastosowanych algorytmów ma zagwarantować, że szansa na wystąpienie takiej sytuacji jest bardzo mała.

Poniżej przedstawiono polecenie obliczające funkcję skrótu SHA3-512 dla dziwa (ang. weird) o nazwie Weird.Win64.Blau!E.exe.

Rysunek 2. Funkcja skrótu SHA3-512 z przykładowego pliku wykonywalnego (PowerShell)

Rozmyte funkcje skrótu (ang. fuzzy hash)

Rozmyte funkcje skrótu (ang. fuzzy hash), w przeciwieństwie do tradycyjnych funkcji takich jak SHA, umożliwiają obliczenie wartości, która pozwala znaleźć podobne fragmenty w porównywanych danych. Rozwiązanie to jest proste, mało kosztowne i może być stosowane do różnego rodzaju plików. [4]

Niestety, anomalie zmieniające swój kształt, czyli polimorficzne i metamorficzne, mogą w tym procesie zostać uznane za różne do siebie. Mimo, że ich wpływ na system operacyjny będzie taki sam lub podobny.

W celu obliczenia rozmytej funkcji skrótu ssdeep, należy podać jako argument ścieżkę do pliku anomalii lub samą nazwę, jeśli znajduje się w tym samym folderze.

.\ssdeep.exe Weird.Win64.Blau!E.exe

Poniżej przedstawiono rezultat wykonania przykładowego kodu. Za pomocą parametru -s (ang. silent) wyłączono zbędne powiadomienie, że pliki są bardzo małego rozmiaru (4 KB).

Rysunek 3. Rozmyta funkcja skrótu ssdeep z przykładowych plików wykonywalnych (PowerShell)

Dalej zaprezentowano badanie podobieństwa plików wykonywalnych.

W celu porównania dwóch konkretnych anomalii można zastosować polecenie:

.\ssdeep.exe -d -s .\Weird.Win64.Blau!E.exe .\Weird.Win64.Blau!Z.exe

Stopień podobieństwa pliku wykonywalnego Weird.Win64.Blau!Z.exe do odmiany Weird.Win64.Blau!E.exe wynosi 82 na 100. Należy pamiętać, że te informacje to etap wstępnego rozeznania. Ze znalezionego dziwa (ang. weird) mógł zostać usunięty fragment kodu, jak również do jego odmiany mogła zostać dodana przestrzeń wypełniona śmieciowymi bajtami. O ile nie zmieniają one drastycznie rozmiaru pliku, narzędzie ssdeep wykaże wysoki stopień podobieństwa.

Rysunek 4. Badanie podobieństwa plików wykonywalnych za pomocą ssdeep (PowerShell)

Innym przydatnym poleceniem jest wywołanie ssdeep z parametrem -d i nazwą folderu. Poniżej przedstawiono badanie stopnia podobieństwa plików z dowolnym rozszerzeniem (*.*) w katalogu bieżącym (.\).

Rysunek 5. Badanie podobieństwa plików wykonywalnych w określonym folderze za pomocą ssdeep (PowerShell)

Funkcja skrótu (ang. hash) SHA3-512 w systemie Kali Linux

W systemie Kali Linux funkcję skrótu SHA3-512 z ciągu tekstowego można obliczyć następującym poleceniem.

printf "ethical.blue Magazine" | sha3sum -a 512 | tr -d " -"

Poniżej przedstawiono rezultat wykonania przykładowego kodu.

Rysunek 6. Funkcja skrótu SHA3-512 z przykładowego ciągu tekstowego w systemie Kali Linux

W celu obliczenia funkcji skrótu SHA3-512 ze wskazanego pliku można zastosować następujące polecenie.

sha3sum -a 512 'Weird.Win64.Blau!E.exe'

Należy zauważyć, że cudzysłowy (") otaczające nazwę pliku zostały zastąpione apostrofami ('), aby zablokować interpretację wykrzyknika, który jest tutaj traktowany jako znak specjalny.

Poniżej przedstawiono rezultat wykonania przykładowego kodu.

Rysunek 7. Funkcja skrótu SHA3-512 z przykładowego pliku wykonywalnego w systemie Kali Linux

Jeśli potrzebna jest tylko wartość funkcji skrótu, można przyciąć nazwę pliku występującą po spacjach i wybrać pole numer jeden następującym poleceniem.

sha3sum -a 512 'Weird.Win64.Blau!E.exe' | cut -d ' ' -f 1

Poniżej przedstawiono rezultat wykonania przykładowego kodu.

Rysunek 8. Funkcja skrótu SHA3-512 z przykładowego pliku wykonywalnego w systemie Kali Linux

Wykaz literatury

[1] Microsoft Corporation, SHA3_512 Class (System.Security.Cryptography), 2026.
[2] National Institute of Standards and Technology (NIST), Secure Hash Standard (SHS), 2015.
[3] National Institute of Standards and Technology (NIST), SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, 2015.
[4] F. Pagani, M. Dell’Amico, and D. Balzarotti, Beyond Precision and Recall: Understanding Uses (and Misuses) of Similarity Hashes in Binary Analysis, 2018.