Cryptographic/Compression Algorithms
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ako završite u kodu koristeći pomeranje udesno i ulevo, xore i nekoliko aritmetičkih operacija veoma je verovatno da je to implementacija kriptografskog algoritma. Ovde će biti prikazani neki načini da se identifikuje algoritam koji se koristi bez potrebe da se obrne svaki korak.
CryptDeriveKey
Ako se ova funkcija koristi, možete pronaći koji se algoritam koristi proverom vrednosti drugog parametra:
Proverite ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Kompresuje i dekompresuje dati bafer podataka.
CryptAcquireContext
Iz dokumentacije: Funkcija CryptAcquireContext se koristi za sticanje rukovanja određenom kontejneru ključeva unutar određenog pružatelja kriptografskih usluga (CSP). Ovo vraćeno rukovanje se koristi u pozivima funkcija CryptoAPI koje koriste odabrani CSP.
CryptCreateHash
Inicira heširanje toka podataka. Ako se ova funkcija koristi, možete pronaći koji se algoritam koristi proverom vrednosti drugog parametra:
Proverite ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Ponekad je veoma lako identifikovati algoritam zahvaljujući činjenici da mora koristiti posebnu i jedinstvenu vrednost.
Ako pretražujete prvu konstantu na Google-u, ovo je ono što dobijate:
Stoga, možete pretpostaviti da je dekompilovana funkcija sha256 kalkulator. Možete pretražiti bilo koju od drugih konstanti i dobićete (verovatno) isti rezultat.
Ako kod nema nijednu značajnu konstantu, može biti da učitava informacije iz .data sekcije. Možete pristupiti tim podacima, grupisati prvi dword i pretražiti ga na Google-u kao što smo uradili u prethodnoj sekciji:
U ovom slučaju, ako tražite 0xA56363C6 možete pronaći da je povezan sa tabelama AES algoritma.
Sastoji se od 3 glavne komponente:
Faza inicijalizacije/: Kreira tabelu vrednosti od 0x00 do 0xFF (ukupno 256 bajtova, 0x100). Ova tabela se obično naziva Substituciona Kutija (ili SBox).
Faza premeštanja: Prolazi kroz tabelu kreiranu pre (petlja od 0x100 iteracija, ponovo) modifikujući svaku vrednost sa polu-nasumičnim bajtovima. Da bi se kreirali ovi polu-nasumični bajtovi, koristi se RC4 ključ. RC4 ključevi mogu biti između 1 i 256 bajtova dužine, međutim obično se preporučuje da budu iznad 5 bajtova. Obično, RC4 ključevi su 16 bajtova dužine.
XOR faza: Na kraju, običan tekst ili šifrovani tekst se XOR-uje sa vrednostima kreiranim pre. Funkcija za enkripciju i dekripciju je ista. Za ovo, proći će se kroz kreiranih 256 bajtova onoliko puta koliko je potrebno. Ovo se obično prepoznaje u dekompilovanom kodu sa %256 (mod 256).
Da biste identifikovali RC4 u disasembleru/dekompilovanom kodu, možete proveriti 2 petlje veličine 0x100 (uz korišćenje ključa) i zatim XOR ulaznih podataka sa 256 vrednosti kreiranih pre u 2 petlje verovatno koristeći %256 (mod 256)
Korišćenje substitucionih kutija i tabela za pretragu
Moguće je razlikovati AES zahvaljujući korišćenju specifičnih vrednosti tabela za pretragu (konstanti). _Napomena da se konstant može čuvati u binarnom ili kreirati dinamički.
Ključ za enkripciju mora biti deljiv sa 16 (obično 32B) i obično se koristi IV od 16B.
Retko se nalazi neki malware koji ga koristi, ali postoje primeri (Ursnif)
Lako je odrediti da li je algoritam Serpent ili ne na osnovu njegove dužine (ekstremno duga funkcija)
Na sledećoj slici obratite pažnju na to kako se konstanta 0x9E3779B9 koristi (napomena da se ova konstanta takođe koristi od strane drugih kripto algoritama kao što je TEA -Tiny Encryption Algorithm). Takođe obratite pažnju na veličinu petlje (132) i broj XOR operacija u disasembleru i u primeru koda:
Kao što je ranije pomenuto, ovaj kod može biti vizualizovan unutar bilo kog dekompilatora kao veoma duga funkcija jer nema skakanja unutar nje. Dekomplovani kod može izgledati ovako:
Stoga, moguće je identifikovati ovaj algoritam proverom magične brojke i početnih XOR-ova, videći veoma dugu funkciju i upoređujući neke instrukcije duge funkcije sa implementacijom (kao što je pomeranje ulevo za 7 i rotacija ulevo za 22).
Složeniji od simetričnih algoritama
Nema konstanti! (prilagođene implementacije su teške za određivanje)
KANAL (analizator kriptografije) ne uspeva da pokaže naznake o RSA jer se oslanja na konstante.
U liniji 11 (levo) postoji +7) >> 3
što je isto kao u liniji 35 (desno): +7) / 8
Linija 12 (levo) proverava da li je modulus_len < 0x040
a u liniji 36 (desno) proverava da li je inputLen+11 > modulusLen
3 funkcije: Init, Update, Final
Slične inicijalizacione funkcije
Init
Možete identifikovati oboje proverom konstanti. Napomena da sha_init ima 1 konstantu koju MD5 nema:
MD5 Transformacija
Obratite pažnju na korišćenje više konstanti
Manji i efikasniji jer je njegova funkcija da pronađe slučajne promene u podacima
Koristi tabele za pretragu (tako da možete identifikovati konstante)
Proverite konstante tabela za pretragu:
CRC heš algoritam izgleda ovako:
Nema prepoznatljivih konstanti
Možete pokušati da napišete algoritam u python-u i pretražujete slične stvari online
Grafik je prilično veliki:
Proverite 3 poređenja da biste ga prepoznali:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)