NOP (informatica)

Da Wikipedia, l'enciclopedia libera.

NOP (No OPeration) è un'istruzione Assembly, il suo scopo è quello di permettere all'unità di esecuzione della pipeline di oziare per N cicli di Clock (dove N cambia a seconda del processore utilizzato), come deducibile dal nome dunque, non esegue alcuna operazione.

Analisi dell'istruzione NOP[modifica | modifica sorgente]

La maggior parte degli instruction set adottati dalle maggiori CPU, includono un'istruzione che non fa sostanzialmente nulla per N cicli di clock senza comportare alcun cambiamento nei registri del data path.

Caratteristiche di tale istruzione nelle architetture x86:

  • sintassi: NOP
  • cicli di clock:
  • lunghezza: 1 byte
  • Opcode: 0x90
  • tempo di esecuzione: 1 μs (con clock di 4 mHz)

Caratteristiche nell'architettura ARM:

  • sintassi: NOP
  • Cicli di clock: 1
  • Lunghezza: 4 bytes
  • Opcode: 0x00000000

Programmazione[modifica | modifica sorgente]

L'istruzione NOP occupa dunque tempo e memoria, ma ha una sua utilità nel mondo della programmazione (oltre che alla creazione di ritardi convenzionali e di riserve di spazio in memoria), che la vede "risolutrice" di alcuni problemi chiamati Hazard, ovvero quei tipi di conflitti ed incongruenze che possono succedere all'interno di una pipeline durante l'esecuzione del programma. L'istruzione può essere utilizzata per risolvere i problemi della branch delay slot in modo poco efficiente.

Nella modifica di codice eseguibile l'istruzione NOP può essere utilizzata per eliminare istruzioni non gradite sostituendole/ricoprendole di NOP.

Hacking/Cracking[modifica | modifica sorgente]

Overflows (NOD)[modifica | modifica sorgente]

Nell'exploiting dei maggiori casi di stack e heap overflow, ci troviamo davanti ad uno standard di shellcode che vede il buffer organizzato in questo modo:

 Opcode della Funzione [ex. execve()]  Indirizzo di ritorno (ripetuto)
[---------------40bytes-------------][------------60bytes-------------]

Nello scenario sovrastante chi effettua l'attacco è obbligato a conoscere l'esatta posizione in memoria dello shellcode che si vuol fare eseguire al programma.

Riempiendo di NOP uno spazio X prima del nostro shellcode, e facendo ritornare la funzione in un punto a caso della memoria dove risiede uno dei nostri NOP, il processore eseguirà ogni istruzione da quel punto, sino ad arrivare al nostro shellcode, ci sarà dunque dato in aiuto un margine di errore, cosa che prima non potevamo permetterci. Questa operazione viene chiamata NOD (o NOP Sled).

 Nop Sled (NOD)  Opcode della Funzione [ex. execve()]  Indirizzo di ritorno (ripetuto)
[---100bytes---][---------------40bytes-------------][------------60bytes-------------]

In contrasto alla comodità tratta dall'impiego di questo metodo, vi è da considerare che il nostro shellcode sarà riconoscibile da qualsiasi sistema IDS che prevede la protezione da attacchi di tipo analogo.

il NOD inserito in uno shellcode appare così:

/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90[...]
informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica