Archivi tag: linux

How linux distros protect you: parte 2

Ultimo aggiornamento: 22-02-2016

Dopo aver parlato di elf hardening nella prima parte, introduciamo questa seconda parte con un esempio di buffer overflow: lo stack overflow, per parlare dei meccanismi di protezione degli eseguibili che il mondo linux ci offre.
Questo articolo è l’ultimo della serie: volevo farne un terzo in cui si parlasse di Macchine Virtuali (partendo dal comando chroot, passando per i container di linux o le jails di BSD), però basta girare per il web per trovare roba interessante.

Introduzione

Nell’articolo precedente viene spiegato il formato degli eseguibili di linux: l’ELF. Ora per continuare con la spiegazione aggiungo solo che i segmenti degli ELF caricati in memoria (data, codice o text, stack, heap), come molti di voi sapranno già, hanno degli indirizzi prestabiliti in cui vanno allocati.

linux_mem_manag
Esempio di processo su architettuta a 32 bit

Questa caratteristica era utile nei primi anni della storia dell’informatica, in cui il programmatore doveva sapere dove il loader del sistema operativo caricasse il proprio programma; ora non è più certo utile: nella maggior parte dei casi, al programmatore non serve sapere dove i segmenti del codice vengono allocati, inoltre l’allocamento in posizioni pre-fissate viene anche sfruttata per scopi non certo buoni, come si vedrà ora.

Continue reading How linux distros protect you: parte 2

How linux distros protect you (parte 1)

Ultimo aggiornamento: 22-02-2016

Questo è il primo di una serie d’ articoli, dove voglio fare un resoconto delle difese ai buffer overflow, format string e pericoli vari presenti su linux.
Su linux (come su altri s.o.) ci sono protezioni sia a livello di compilazione che d’ esecuzione, potrei finire l’articolo postando il link al Hardening sul sito di Debian, però voglio approfondire con altri articoli trovati in giro per la rete e facendo esempi.
In questo primo articolo faccio una breve introduzione al formato ELF e al caricamento in memoria da parte del kernel dell’eseguibile, mostrando anche una prima protezione.
Per comprendere l’articolo ed i suoi link, si dovrebbero avere perlomeno le basi di programmazione C, della compilazione e linking con GCC, assembly INTEL ed anche una base di Sistemi Operativi non farebbe male :P. Continue reading How linux distros protect you (parte 1)