Perché le pagine di memoria del codice dovrebbero essere leggibili?

3

Capisco che ogni istruzione dovrebbe essere letta nella CPU per l'esecuzione, il che probabilmente è il motivo per cui le code page dovrebbero essere "r-x".

Ma la mia osservazione è che il comportamento di leggere il codice nella CPU per l'esecuzione è normale, mentre leggere il codice in un altro spazio di memoria (ad esempio, copiare il codice in un registro generico) è piuttosto sospetto. Un esempio è il vantaggio "Riutilizzo del codice just-in-time per bypassare ASLR" ( link ), e credo che possa essere usato dagli aggressori in molti altri modi.

Quindi la mia domanda è: perché non rimuovere il permesso "r" dalle code page, cioè perché non progettare la CPU in modo che il codice possa essere letto nella CPU solo per l'esecuzione?

    
posta Infinite 30.11.2016 - 21:36
fonte

1 risposta

3

Abbiamo a che fare con le conseguenze dell'architettura Von Neumann - lo spazio di memoria condiviso per dati e codice. Ha dei vantaggi, ma come hai sottolineato, ha anche problemi di sicurezza, inclusa quella metodologia di attacco.

Se stessimo ricominciando da zero, penso che non ci sia alcun motivo per cui una CPU non possa essere costruita - ma molti programmi, dall'antivirus ai DRM ai videogiochi, facendo strane ottimizzazioni ai debugger su who-knows-what-else non funzionerebbe con tali restrizioni. Sarebbe difficile portare quella CPU nel mercato di oggi che si aspetta la compatibilità all'indietro - alcune persone vogliono ancora che i programmi DOS vengano eseguiti sui computer di oggi. Questo tipo di cose rende difficili i principali cambiamenti architettonici.

    
risposta data 30.11.2016 - 21:43
fonte

Leggi altre domande sui tag