Un exploit che fornisce un ambiente di esecuzione completo di turing consente all'aggressore di eseguire qualsiasi algoritmo che desiderano. Non saranno limitati dal numero di istruzioni disponibili.
Un sistema di regole di manipolazione dei dati (script, programma, set di istruzioni, ecc.) è considerato completo da turing se può essere usato per simulare un Turing machine . L'equivalenza di Turing afferma che due costrutti completi di turing sono identici nelle loro capacità. In altre parole, se qualcuno può eseguire il codice completo di turing su un computer vulnerabile, può calcolare qualsiasi , limitando i limiti delle risorse. La tesi di Church-Turing congettura che una macchina di Turing può calcolare qualsiasi valore che può essere calcolato anche da un algoritmo. Dall'articolo di Wikipedia:
To show that something is Turing complete, it is enough to show that it can be used to simulate some Turing complete system. For example, an imperative language is Turing complete if it has conditional branching (e.g., "if" and "goto" statements, or a "branch if zero" instruction; see one instruction set computer) and the ability to change an arbitrary amount of memory (e.g., the ability to maintain an arbitrary number of variables). Since this is almost always the case, most if not all imperative languages are Turing complete if the limitations of finite memory are ignored.
Questo è particolarmente rilevante nel caso di ROP , una tecnica di sfruttamento in cui il codice esistente viene eseguito fuori -ordine. Un programma vulnerabile sufficientemente complesso può creare un ROP completo di turing, il che significa che l'attaccante non è limitato solo a determinati tipi di calcolo.
Quindi, perché importa qualcosa di astratto come la computazione , piuttosto che le funzionalità del programma sfruttato? Immagina se tu avessi accesso a una shell, eseguendo come root. Ovviamente root può fare praticamente tutto, ma cosa succede se l'unica cosa che si può fare sulla shell è eseguire echo
, id
e cd
? Nessuna dichiarazione if
, nessuna mv
, nessuna sed
... Sarai piuttosto limitato in quello che puoi fare. Questo scenario non sarebbe completo perché non hai abbastanza comandi per renderlo completo. Una catena ROP completa di turing è un concetto simile, ma anziché utilizzare i comandi di shell, utilizza il codice macchina. Se puoi solo eseguire alcune istruzioni, non puoi fare molto.