Sfondo
Un Egghunter è fondamentalmente uno stub di dimensioni ridotte che funge da primo stadio in un tentativo di sfruttamento a 2 stadi (mentre il secondo stadio è solitamente il codice shell malevolo del carico utile). Nella prima fase, lo stub cercherà attraverso il processo VAS (Virtual Address Space) per il payload del secondo stadio che viene immesso / iniettato altrove nella stessa memoria di processo. Una volta trovato, trasferisci il controllo nella seconda fase dello sfruttamento.
In un sistema x86, il VAS ha una dimensione di 4294967296 byte o circa 4 GB. È relativamente più facile effettuare la scansione dell'intero processo VAS di dimensione 4Gb.
Ora in un sistema x86_64 la dimensione VAS è fino a 16,8 milioni di Tb (Terabyte). Trovare un uovo in tale memoria sta davvero cercando di trovare un ago in un pagliaio.
Domanda:
Ciò rende irrilevante la tecnica di sfruttamento di egghunter in un sistema x86_64? Perché può essere molto difficile trovare l'etichetta dell'uovo ed eseguire il carico utile senza conoscere l'esatta posizione in tempo reale dell'uovo iniettato + carico utile
Difficoltà come:
- cercare in quella quantità di memoria potrebbe richiedere giorni / settimane
- UB quando le chiamate di sistema vengono ripetute per iterazioni [milioni x (Tb)]
- Segfault quando si verifica # 2
Quindi un attacco egghunter ha ancora senso in un attacco reale su un sistema a 64 bit, almeno senza conoscere la posizione esatta in memoria del payload del secondo stadio iniettato?