9.1 KiB
Algorytmy kryptograficzne/kompresji
Algorytmy kryptograficzne/kompresji
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź SUBSCRIPTION PLANS!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Identyfikowanie algorytmów
Jeśli natrafisz na kod używający przesunięć w prawo i w lewo, operacji XOR i kilku operacji arytmetycznych, bardzo możliwe, że jest to implementacja algorytmu kryptograficznego. W tym miejscu zostaną przedstawione sposoby identyfikacji używanego algorytmu bez konieczności odwracania każdego kroku.
Funkcje API
CryptDeriveKey
Jeśli używana jest ta funkcja, można znaleźć, który algorytm jest używany, sprawdzając wartość drugiego parametru:
Sprawdź tutaj tabelę możliwych algorytmów i ich przypisanych wartości: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Kompresuje i dekompresuje dany bufor danych.
CryptAcquireContext
Z dokumentacji: Funkcja CryptAcquireContext służy do uzyskania uchwytu do określonego kontenera kluczy w określonym dostawcy usług kryptograficznych (CSP). Ten zwrócony uchwyt jest używany w wywołaniach funkcji CryptoAPI, które używają wybranego CSP.
CryptCreateHash
Inicjuje hashowanie strumienia danych. Jeśli używana jest ta funkcja, można znaleźć, który algorytm jest używany, sprawdzając wartość drugiego parametru:
Sprawdź tutaj tabelę możliwych algorytmów i ich przypisanych wartości: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Stałe kodu
Czasami bardzo łatwo jest zidentyfikować algorytm dzięki temu, że musi używać specjalnej i unikalnej wartości.
Jeśli wyszukasz pierwszą stałą w Google, otrzymasz to:
Dlatego można przypuszczać, że zdekompilowana funkcja to kalkulator sha256.
Możesz wyszukać dowolną inną stałą i prawdopodobnie otrzymasz ten sam wynik.
Informacje o danych
Jeśli kod nie ma żadnej istotnej stałej, może wczytywać informacje z sekcji .data.
Możesz uzyskać dostęp do tych danych, zgrupować pierwsze słowo i wyszukać je w Google, tak jak zrobiliśmy to wcześniej w sekcji:
W tym przypadku, jeśli wyszukasz 0xA56363C6, dowiesz się, że jest to związane z tabelami algorytmu AES.
RC4 (Symetryczne szyfrowanie)
Charakterystyka
Składa się z 3 głównych części:
- Etap inicjalizacji/: Tworzy tabelę wartości od 0x00 do 0xFF (łącznie 256 bajtów, 0x100). Ta tabela jest zwykle nazywana Substitution Box (lub SBox).
- Etap mieszania: Przejdzie pętlą przez tabelę utworzoną wcześniej (pętla 0x100 iteracji, ponownie) modyfikując każdą wartość za pomocą półlosowych bajtów. Aby utworzyć te półlosowe bajty, używany jest klucz RC4. Klucze RC4 mogą mieć długość od 1 do 256 bajtów, ale zwykle zaleca się, aby były powyżej 5 bajtów. Zazwyczaj klucze RC4 mają długość 16 bajtów.
- Etap XOR: Na koniec, tekst jawny lub tekst szyfrowany jest XORowany z wartościami utworzonymi wcześniej. Funkcja szyfrowania i deszyfrowania jest taka sama. W tym celu zostanie wykonana pętla przez utworzone 256 bajtów tak wiele razy, jak to konieczne. Zwykle jest to rozpoznawane w zdekompilowanym kodzie za pomocą %256 (mod 256).
{% hint style="info" %} Aby zidentyfikować RC4 w kodzie disassembly/zdekompilowanym, można sprawdzić, czy istnieją 2 pętle o rozmiarze 0x100 (z użyciem klucza), a następnie XOR danych wejściowych z 256 wartościami utworzonymi wcześniej w tych 2 pętlach, prawdopodobnie używając %256 (mod 256) {% endhint %}
Etap inicjalizacji/Substitution Box: (Zauważ liczbę 256 używaną jako licznik i jak 0 jest zapisywane na każdym miejscu z 256 znaków)
Etap mieszania:
Etap XOR:
AES (Symetryczne szyfrowanie)
Charakterystyka
- Używa skrzynek substytucji i tablic wyszukiwania
- Można rozróżnić AES dzięki użyciu konkretnych wartości tablicy wyszukiwania (stałych). Zauważ, że stała może być przechowywana w postaci binarnej lub tworzona dynamicznie.
- Klucz szyfrowania musi być podzielny przez 16 (zwykle 32B), a zwykle używany jest również wektor inicjalizacyjny (IV) o długości 16B.
Stałe SBox
Serpent (Symetryczne szyfrowanie)
Charakterystyka
- Rzadko spotyka się złośliwe oprogramowanie używające tego algorytmu, ale są przykłady (Ursnif)
- Łatwo jest określić, czy algorytm jest Serpentem, na podstawie jego długości (bardzo długa funkcja)
Identyfikacja
RSA (Szyfrowanie asymetryczne)
Charakterystyka
- Bardziej skomplikowany niż algorytmy symetryczne
- Brak stałych! (trudno określić niestandardowe implementacje)
- KANAL (kryptoanalizator) nie wykazuje wskazówek dotyczących RSA, ponieważ polega on na stałych.
Identyfikacja przez porównania
- W linii 11 (lewa strona) jest
+7) >> 3
, co jest takie samo jak w linii 35 (prawa strona):+7) / 8
- Linia 12 (lewa strona) sprawdza, czy
modulus_len < 0x040
, a w linii 36 (prawa strona) sprawdza, czyinputLen+11 > modulusLen
MD5 & SHA (funkcje skrótu)
Charakterystyka
- 3 funkcje: Init, Update, Final
- Podobne funkcje inicjalizujące
Identyfikacja
Init
Możesz je zidentyfikować, sprawdzając stałe. Zauważ, że sha_init ma 1 stałą, której MD5 nie ma:
Transformacja MD5
Zauważ użycie większej liczby stałych
CRC (funkcja skrótu)
- Mniejsza i bardziej wydajna, ponieważ jej funkcją jest wykrywanie przypadkowych zmian w danych
- Używa tabel przeglądowych (dzięki czemu można zidentyfikować stałe)
Identyfikacja
Sprawdź stałe tabel przeglądowych:
Algorytm skrótu CRC wygląda tak:
APLib (Kompresja)
Charakterystyka
- Brak rozpoznawalnych stałych
- Możesz spróbować napisać algorytm w Pythonie i szukać podobnych rzeczy online
Identyfikacja
Graf jest dość duży:
Sprawdź 3 porównania, aby go rozpoznać:
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.