Remote debugging using qemu + gdb for dummies…

28 08 2007

Debuggare un kernel fatto in casa e` un’operazione molto piu` semplice di quello che si possa immaginare.
Ovviamente e` impossibile effettuare un debug preciso – che non sia una serie di routine di verbosity o debug usando le #ifdef – senza l’ausilio di un emulatore, questo perche` non vi e` la presenza di un sistema operativo che permetta l’esecuzione del debugger stesso, quindi avremmo grosse difficolta` a vedere lo stato dei registri in un dato momento.
Un emulatore abbastanza usato per lo sviluppo di OS artigianali e` proprio Qemu, che ha il vantaggio di essere molto intuitivo con delle funzionalita` relativamente avanzate.
Fra le varie features ce n’e` una fondamentale per il nostro scopo, ovvero il listening su una determinata porta – che di default e` la 1234 – attivabile tramite lo switch -s.
Oltre l’attivazione dello switch -s in qemu, abbiamo la necessita` di compilare il nostro kernel con l’opzione -g
da man page di gcc:

-g  Produce debugging information ...

In questo caso non facciamo altro che attivare l’opzione con cui gcc produrra` le informazioni di debug all’interno della kernel image stessa (rendendola un tantino piu` grande).
Occhio quindi nel Makefile ad includere l’opzione -g
Qemu verra` quindi avviato cosi:

[init@underground]:~$ qemu -s -S <harddrive.img>

Dalla man page di qemu:

-s  Wait gdb connection to port 1234.

In questo modo non ci resta che lanciare gdb da remoto o da locale

[init@underground]:~$ gdb

(gdb) target remote localhost:1234

Come ultima operazione bisogna importare le informazioni di debug in questo modo dalla console di gdb:

(gdb) symbol-file kernel.elf

adesso sono disponibili anche i simboli di debug.
Dopo di che avete a disposizione tutta la potenza di gdb per effettuare i vostri debug.
That’s all folks…





United nations…what a mess!

13 08 2007

In questi giorni abbiamo tanto sentito parlare del piccolo problema fatto emergere da tre ragazzi, i quali hanno sfruttato, con un semplice sql injection, una vulnerabilita` francamente evitabile.
Come slashdot ci suggerisce, su questo sito troverete qualche screenshot e qualche cenno di ricostruzione del banale quanto efficace injection utilizzato.

http://hackademix.net/2007/08/12/united-nations-vs-sql-injections/





Sara` un difetto quello?

6 07 2007

Ecco qui un sito essenziale ma molto utile con esempi di programmazione non proprio sicura, utile per esercitarsi a sploittare in modi differenti, differenti tipi di vulnerabilita`:

Insecure programming





Ma bootta quel kernel

1 07 2007

Segnalo una interessantissima e molto dettagliata raccolta di informazioni (probabilmente nota ai piu`) e di specifiche del multiboot header di GRUB, con tanto di esempio di dummy kernel:

Multiboot Specification

utile per chi volesse approfondire l’argomento “boot loader” ma senza farsi male.





Hello world!

1 07 2007
.data

msg:
    .string "Hello World\\n"

len:
    .long . - msg

.text
.globl _start

_start:
    push $len        
    push $msg       
    push $1          
    movl $0x4, %eax 
    call _syscall
    addl $12, %esp   

    push $0
    movl $0x1, %eax  
    call _syscall

_syscall:
    int  $0x80
    ret

Un saluto in tutte le lingue del mondo








Follow

Get every new post delivered to your Inbox.