La memoria CMOS (Complementary Metal Oxide Semiconductor) è un tipo di memoria a 128 byte utilizzata per effettuare lo store dei dati inerenti le impostazioni del BIOS. Ogni qualvolta si effettua una modifica a quest’ultimo, infatti, si sovrascrive il contenuto della memoria, tenuta sempre aggiornata dalla ormai classica batteria a bottone, che è presente su ogni scheda madre.
La memoria CMOS è facilmente cancellabile via hardware, ed i modi per farlo sono tra i più svariati, ad esempio: si può togliere la batteria per qualche secondo e poi rimetterla, oppure si può agire sull’apposito jumper presente sulla main board, oppure cortocircuitare i morsetti presenti nell’alloggiamento dell’alimentazione.
Tutto questo, però, lo si può fare anche via software avendo così maggiore possibilità di manipolare le informazioni in essa contenute. Per effettuare operazioni sulla memoria CMOS, come, ad esempio, leggere e scrivere dei dati, bisogna inviare gli indirizzi dei valori che si vogliono leggere sulla porta 70H e poi leggere i valori a questi riferiti, sulla porta 71H. Ad esempio, volendo effettuare il dumping delle informazioni contenute nella memoria e successivamente eseguire un’operazione di lettura, basterebbe creare un ciclo for con 127 iterazioni e per ognuna di esse inviare e leggere le informazioni dagli indirizzi citati.
Si faccia riferimento a questa bozza di codice in C come punto di partenza:
int main(void)
{
for(int i=0; i < 128; i++)
{
outp(0x70, i);
if(i % 8 == 0)
{
printf("n");
}
printf( " (%d -> %d) ", i, inp(0x71) );
}
}
dove la funzione outp(port, value) prende come primo argomento l’indirizzo della porta hardware su cui andare a scrivere il valore del singolo byte, passatole come secondo argomento; la funzione inp(address) va a leggere, sempre un singolo byte per volta, all’indirizzo passatole come unico parametro.
Fate attenzione ad essere loggati come utente root sulla macchina su cui eseguite questo codice, altrimenti vi restituirà un errore di segmentation fault. Questo accade perché con un account limitato da utente normale non si hanno i privilegi necessari a far commutare lo stato della CPU e farle così eseguire istruzioni in kernel mode, uno stato protetto, necessario per poter aver accesso a determinate aree di memoria protette.
PUNTATE PRECEDENTI:
27 Novembre: Hacking del BIOS (Parte I)
di Rocco Galati - Programmazione.it