TLSH – Trend Micro Locality Sensitive Hash dla malware i phishingu

nfsec.pl 10 miesięcy temu

S

króty kryptograficzne, takie jak MD5 i SHA[1/2] są wykorzystywane w wielu zastosowaniach związanych z eksploracją danych i bezpieczeństwem – służąc jako identyfikatory plików wykonywalnych i dokumentów tekstowych. Jednak ich rolą jest oznaczanie unikalności, nie podobieństw – jeżeli zostanie zmieniony pojedynczy bajt pliku, wówczas skróty kryptograficzne dają zupełnie inne wartości. Ich działanie jest bardzo przydatne przy wyodrębnianiu, znakowaniu i dzieleniu się wskaźnikami skompromitowania (ang. IoCsindicators of compromise) dla konkretnych próbek szkodliwego oprogramowania (ang. malware). Jednak w celu identyfikacji zagrożeń pochodzących z tych samych “rodzin” i aktorów (o podobnej binarnej strukturze plików, identyfikacja wariantów wiadomości spamowych / phishingowych) pojawiła się przestrzeń dla skrótów kryptograficznych, które identyfikują podobieństwo plików na podstawie ich wartości skrótu. Społeczność zajmująca się bezpieczeństwem zaproponowała dla tego problemu skróty podobieństwa (ang. similarity digests) takie jak np. sdhash oraz ssdeep.

Nauka o eksploracji danych (ang. data mining) wiąże się również z wieloma problemami, w których przydatna jest identyfikacja duplikatów i podobnych plików. W tym celu pojawiły się algorytmy typu LSH – skróty wrażliwe na lokalizację (ang. locality sensitive hashes). Jednym z nich jest algorytm przeznaczony do szeregu zastosowań związanych z bezpieczeństwem i kryminalistyką cyfrową. TLSH to biblioteka dopasowywania rozmytego (ang. fuzzy matching) stworzona przez firmę Trend Micro. Biblioteka ta pozwala na porównanie dwóch ciągów znaków (ang. string) i określenie na ile są podobne dzięki przyjętych miar podobieństwa. Biorąc pod uwagę strumień bajtów o minimalnej długości 50 bajtów TLSH może wygenerować nam wartość skrótu, którą można wykorzystać do porównań podobieństwa. Podobne obiekty będą miały podobne wartości skrótu, co pozwala na wykrycie podobnych obiektów poprzez porównanie ich wartości skrótu. Należy pamiętać, iż strumień bajtów powinien mieć wystarczającą złożoność. Na przykład strumień identycznych bajtów nie wygeneruje wartości skrótu. Najlepszymi warunkami stosowania algorytmu dopasowania rozmytego jest sytuacja, gdy wszystkie ciągi tekstowe podlegające porównaniu nie zawierają żadnych dodatkowych składników. Na przykład porównanie pojedynczego słowa elemelek do słowa 3l3m3l3k da wyższe podobieństwo niż porównanie słowa elemelek z całym zdaniem: O wróbelku elemelku, o ziemniaku i bąbelku. Ponieważ wyraz elemelek w drugim ciągu jest tylko niewielką częścią całego ciągu tekstowego, porównanie daje niższy wynik podobieństwa. Przeprowadźmy teraz próbę dzięki programu z linii poleceń:

root@darkstar:~# apt-get -y install tlsh-tools agresor@darkstar:~$ for i in {1..100}; do echo "elemelek$i" >> plik_1.txt; done agresor@darkstar:~$ tlsh -f plik_1.txt 9311C4F3022E83A87E8A714FB6CB960343B5BD54F6B193B5EC1B4790C182512F93C440 plik_1.txt agresor@darkstar:~$ for i in {1..100}; do echo "3l3m3l3k$i" >> plik_2.txt; done agresor@darkstar:~$ tlsh -f plik_2.txt AC1196DD15890EEB1FA7CE44CA8E5F7446E7EED05850E00DC852C143C14156F82F0877 plik_2.txt agresor@darkstar:~$ tlsh -c plik_1.txt -f plik_2.txt 240 plik_2.txt agresor@darkstar:~$ rm plik_2.txt agresor@darkstar:~$ for i in {1..100}; do echo "elemel3k$i" >> plik_2.txt; done agresor@darkstar:~$ tlsh -c plik_1.txt -f plik_2.txt 171 plik_2.txt

Jak możemy zobaczyć im bardziej upodobniamy do siebie ciągi tekstowe tym współczynnik wykrywalności podobieństwa maleje (im mniejszy tym większe podobieństwo):

import tlsh s1="O wrobelku elemelku, o ziemniaku i babelku, co podjadali kaszke w rondelku." s2="O wrobelku 3l3m3lku, o ziemniaku i babelku, co podjadali kaszke w rondelku." data1 = bytes(s1, 'utf-8') data2 = bytes(s2, 'utf-8') hash1 = tlsh.hash(data1) hash2 = tlsh.hash(data2) print(tlsh.diff(hash1, hash2))

Wynik powyższego skryptu Python z pakietem py-tlsh jest równy 34. Dla kolejnego przykładu porównajmy teraz dwa pliki z kodem języka Python, gdzie w jednym z nich podmieniliśmy pustą linię na szkodliwy kod:

agresor@darkstar:~$ wc -l python2/bin/activate 69 agresor@darkstar:~$ wc -l python3/bin/activate 69 agresor@darkstar:~$ sdiff -s python2/bin/activate python3/bin/activate | exec(base64.b64decode(data[malware]).decode('utf-8')) agresor@darkstar:~$ tlsh -c python2/bin/activate -f python3/bin/activate 10 python3/bin/activate

Według publikacji Trend Micro wynik 10 i mniejszy oznacza odsetek wyników fałszywie pozytywnych (ang. false positive) na poziomie 0,00181%. TLSH ma bardzo niskie poziomy fałszywych alarmów przy progach <= 30 i bardzo wysokie współczynniki wykrywalności podobieństw dla progów bliskich wartości 100, co może go wyróżniać na tle takich algorytmów jak: Nilsimsa, sdhash, czy ssdeep. W 2020 roku TLSH został zaadoptowany do serwisów VirusTotal oraz Malware Bazaar. Oprócz określania podobieństw w szkodliwym oprogramowaniu TLSH może pomóc okreslić, czy plik można bezpiecznie uruchomić w systemie, na podstawie jego podobieństwa do znanych, legalnych plików. W dodatku możemy wykorzystać go do analizy wiadomości SPAM lub poszczególnych części zestawów do phishingu (ang. phishing kit) w postaci obiektów DOM (ang. Document Object Model), aby stwierdzić prawdopodobieństwo pochodzenia z tego samego źródła.

Więcej informacji: TLSH – A Locality Sensitive Hash, Detecting AiTM Phishing Sites with Fuzzy Hashing, Malware/Spear Phishing Detection: Meet TLSH — A Locality Sensitive Hash, Smart Whitelisting Using Locality Sensitive Hashing, Locality Sensitive Hash

Idź do oryginalnego materiału