domenica 18 ottobre 2009

Ammazza quanto tempo è passato dall'ultimo post!! Non mi sono reso conto di essere stato assorbito così totalmente dagli impegni lavorativi e di real life!

Beh nelle scorse settimane ho preso una decisione importante. Per non gettare nel gabinetto tuttò ciò che di "stabile" avevo scritto (circa 200 pagine), ho deciso di suddivere la pubblicazione del libro in diversi Moduli. Il Modulo 1 di Linux Buffer Overflow lo trovate qui http://ilmiolibro.kataweb.it/libro.asp?id=337493 (per l'acquisto dovete essere registrati ed è necessaria una carta di credito o semplicemente la postepay).

Questo sono i capitoli che tratta:

1 Concetti Base
2 Lo Stack
3 Stack Overflow: Vanilla
4 Off by One & Buffer Adiacenti
5 GOT & PLT
6 Format String Overflow
7 Address Space Layout Randomization

Il modulo 2 è in preparazione ma meglio che non dica quando ho intenzione di pubblicarlo perchè se no rischio di fare un'altra brutta figura (si lo so con il Modulo 1 sono in ritardo di quasi 10 mesi :)

giovedì 5 marzo 2009

Punto della situazione

Eccomi qui a riscrivere dopo un mese di assenza. In realtà in questo periodo ho potuto lavorare poco al libro. Attualmente infatti ho scritto appena il 15% dei contenuti del capitolo No-Execute. Mi ero prefisso di terminarlo a fine Marzo ma credo che in questo momento nemmeno l'ipotesi fine Aprile sia auspicabile. Lo so è la terza volta che toppo (vi ricordate quando dicevo che volevo ultimarlo per natale???), però per noi consulenti è così: ieri ti grattavi le balls, oggi ti entrano delle grosse commesse tutte di un colpo che ti tolgono un sacco di tempo ma a cui non puoi certo dire di no.

A questo punto (e vorrei anche un vostro parare personale) sto seriamente pensando di pubblicare i capitoli già terminati. Nello specifico in questo periodo ho ricevuto molte e-mail o richieste di aiuto da parte di chi voleva avere qualche ragguaglio in più su come aggirare l'Address Space Layout Randomization. Leggendo i commenti del post precedente noterete che mi è stato chiesto anche in questo blog. Si tratta tuttavia solamente della punta dell'iceberg rispetto a quanti mi hanno fatto la stessa domanda. L'idea che mi bazzica in testa è quindi quella di prendere il capitolo 2 (generico sullo stack), capitolo 3 (pratico sugli stack overflow nei kernel 2.4) e capitolo 11 (pratico su ASLR nei kernel 2.6), unirli e cominciare già a pubblicarli (si tratta di circa 120 pagine). Che ne pensate?

A voi la parola...(sempre che ci sia ancora qualcuno a leggermi ;)

lunedì 26 gennaio 2009

Capitolo su FORTIFY_SOURCE terminato: Enter No-Execute

Ho appena terminato il capitolo su FORTIFY_SOURCE, una patch per GCC implementata oramai su diverse distribuzioni linux, ma utilizzata ancora da poche (Fedora e Red Hat in primis) per proteggere i pacchetti precompilati ed aggiungere un ulteriore livello di protezione contro Stack, Heap e Format String Overflow. La patch non è comunque infallibile, nel senso che vi sono dei casi (soprattutto in presenza di buffer allocati dinamicamente) che non riesce efficacemente a controllare.

Facciamo invece il punto della situazione del lavoro fin qui svolto:

- Ho scritto in tutto al momento 7 capitoli per un totale di 188 pagine nette

Nella prima parte del libro all'appello mancano ancora i seguenti argomenti:

- Come il processore gestisce i calcoli matemici (in particolare sugli interi)
- Integer Overflow
- Descrizione dell'Heap
- Heap Overflow

Nella seconda parte devo invece ancora parlare di:

- Protezione No-Execute
- Propolice
- Sfruttamento avanzato degli Heap Overflow

Penso di procedere in questo modo. Il prossimo capitolo che tratterò sarà No-Execute. Poi toglierò di mezzo gli Integer Overflow, quindi parlerò di Propolice ed alla fine farò tutta una tirata con le tematiche Heap.

Tempo stimato alla conclusione del testo: francamento non lo so. Spero per fine Febbraio ma è più probabile Marzo. Dipenderà molto dai carichi di lavoro che dovrò sopportare in queste settimane.

Un saluto.

domenica 11 gennaio 2009

Capitolo 13: primi passi

Sono rientrato dalle festività oramai da qualche giorno e mi sono subito messo al lavoro per portare a termine il capitolo sui Format String Overflow rimasto in sospeso. Completato questo sto adesso balzando direttamente al capitolo 13 sempre collegato con la stessa tematica ma vista nell'ottica dei kernel 2.6. Nella loro metodica di sfruttamento, in alcune distro non cambia nulla a parte la necessità di indovinare il punto in cui lo shellcode verrà collocato (ostacolo che abbiamo già visto come superare nel capitolo 11 sull'ASLR). Le cose si complicano un pò invece su quelle distribuzioni o quelle architetture che supportano l'NX e diventano ancor più complesse in caso di applicazioni vulnerabile compilate con FORTIFY_SOURCE=2. Questi sono i 3 scenari che analizzerò nel capitolo. Il tutto verrà completato (spero) con un caso di vulnerabilità reale.