Un modello integrato control-flow e data-flow per il rilevamento ...
Un modello integrato control-flow e data-flow per il rilevamento ...
Un modello integrato control-flow e data-flow per il rilevamento ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
30 3. <strong>Un</strong> <strong>modello</strong> che integra <strong>control</strong> <strong>flow</strong> e <strong>data</strong> <strong>flow</strong><br />
eseguire:<br />
jmp put msg<br />
A questo punto avviene la write con l’esatto stack che l’IDS si aspetta e dunque<br />
non viene segnalata come non valida. Terminata la put msg() viene distrutto <strong>il</strong> suo<br />
stack frame e viene passato <strong>il</strong> <strong>control</strong>lo al codice dell’ep<strong>il</strong>ogo di g(), che distrugge<br />
<strong>il</strong> relativo frame. Il <strong>control</strong>lo infine torna al main(), dove verrà eseguita la seconda<br />
chiamata di put msg().<br />
Per poter ricostruire lo stack <strong>per</strong>ò è necessario ottenere alcune informazioni, in<br />
particolare i return address delle procedure coinvolte. Nel nostro esempio vogliamo<br />
simulare la prima write , quindi lo stack da ricostruire è:<br />
[main.22|g.10|put_msg.5|write]<br />
La prima informazione che ci serve è <strong>il</strong> punto in cui ritorna g quando è chiamata<br />
dalla riga 22 di main:<br />
(gdb) disas main<br />
Dump of assembler code for function main:<br />
0x00001fc7 : push %ebp<br />
0x00001fc8 : mov %esp,%ebp<br />
0x00001fca : push %ebx<br />
0x00001fcb : sub $0x14,%esp<br />
0x00001fce : call 0x1fd3 <br />
0x00001fd3 : pop %ebx<br />
0x00001fd4 : call 0x1fae <br />
0x00001fd9 : call 0x1f8d <br />
0x00001fde : lea 0x26(%ebx),%eax ;