Compilare l'exploit su un kernel diverso rispetto al target (ma sullo stesso arco): è poco intelligente o rischioso?

2

Sono in una situazione in cui ho compilato circa 15 o più exploit per una macchina e ognuno ha fallito. Gli errori avevano a che fare con il kernel compilato con impostazioni altamente sicure, vale a dire la funzione mmap disabilitata, o la funzione ptrace. Solo uno degli errori era un segfault inspiegabile. Entrambe le macchine sono x86 quindi non è come se fossi una compilazione incrociata per un altro arch.

Vale veramente la pena di ricompilare tutti questi exploit falliti su una VM che corrisponde al kernel della macchina di destinazione se nessuno degli errori (salvo il segfault nebuloso) sembra correlato a problemi di compilazione / compatibilità?

    
posta Info5ek 04.01.2017 - 08:38
fonte

1 risposta

2

Non importa quale kernel compilerai un exploit sotto.

Gli errori erano dovuti al fatto che il kernel forniva protezioni dai metodi di exploit che hai usato. Queste protezioni vengono eseguite in fase di runtime. Il kernel non inserisce in qualche modo il codice per gli exploit cripple compilati sotto di esso. La soluzione sarebbe quella di eseguire l'exploit su un kernel con queste funzionalità di sicurezza rimosse o disabilitate, non per compilarlo su tale kernel. Ad esempio, non è necessario che ASLR sia in esecuzione (o addirittura supportato dal kernel) per compilare un eseguibile indipendente dalla posizione, ad esempio.

Il kernel in esecuzione non modifica l'output del compilatore in modo da rompere un exploit. Tutto ciò che conta è che lo si compili con le stesse funzioni del compilatore (o almeno compatibili), le librerie (se collegate staticamente) e le ottimizzazioni. Se questo è il caso, può essere compilato ovunque. Potresti anche compilare un exploit per un'applicazione Linux su Windows o OpenBSD e viceversa.

Alcune cose che potresti voler ricordare riguardo all'ambiente del tuo toolchain:

  • La compilazione su un sistema con -march=native può comportare un eseguibile che non funziona correttamente o non funziona su un altro sistema. Evita le ottimizzazioni specifiche dell'hardware.
  • L'uso di funzionalità da, ad esempio, GCC 7.2.0 può causare la rottura se compilato su una macchina con solo 6.4.0. Lo stesso vale per le regressioni che possono rompere un exploit su un compilatore più recente.
  • Se il tuo target ha file header che sono incompatibili con un exploit funzionante per qualsiasi motivo, dovrai includere i file header corretti o compilarli sotto un sistema che li ha.
  • I sistemi di compilazione di alcune librerie controllano l'esecuzione della versione del kernel e la usano per decidere quali funzionalità includere. Tieni presente questo se stai compilando anche le librerie su questo sistema.
risposta data 14.12.2017 - 08:38
fonte

Leggi altre domande sui tag