hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md

2.9 KiB

Relro

Impara l'hacking AWS da zero a ero con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Relro

RELRO sta per Relocation Read-Only, ed è una funzionalità di sicurezza utilizzata nei binari per mitigare i rischi associati agli sovrascritture della GOT (Global Offset Table). Vediamo i due tipi distinti per chiarezza: Partial RELRO e Full RELRO.

Partial RELRO

Partial RELRO adotta un approccio più semplice per migliorare la sicurezza senza influire significativamente sulle prestazioni del binario. Posizionando la GOT sopra le variabili del programma in memoria, Partial RELRO mira a prevenire che gli overflow di buffer raggiungano e corrompano la GOT.

Questo non impedisce alla GOT di essere abusata da vulnerabilità di scrittura arbitraria.

Full RELRO

Full RELRO aumenta la protezione rendendo la GOT completamente in sola lettura. Una volta che il binario inizia, tutti gli indirizzi delle funzioni vengono risolti e caricati nella GOT, quindi, la GOT viene contrassegnata come sola lettura, impedendo efficacemente qualsiasi modifica ad essa durante l'esecuzione.

Tuttavia, il compromesso con Full RELRO riguarda le prestazioni e il tempo di avvio. Poiché è necessario risolvere tutti i simboli dinamici all'avvio prima di contrassegnare la GOT come sola lettura, i binari con Full RELRO abilitato potrebbero avere tempi di caricamento più lunghi. Questo sovraccarico aggiuntivo all'avvio è il motivo per cui Full RELRO non è abilitato per impostazione predefinita in tutti i binari.

È possibile verificare se Full RELRO è abilitato in un binario con:

readelf -l /proc/ID_PROC/exe | grep BIND_NOW

Bypass

Se Full RELRO è abilitato, l'unico modo per evitarlo è trovare un altro modo che non richieda di scrivere nella tabella GOT per ottenere l'esecuzione arbitraria.