NOP slide

De la Viquipèdia, l'enciclopèdia lliure

En seguretat informàtica, una NOP slide, un trineu NOP o una rampa NOP és una seqüència d'instruccions NOP (sense operació) destinades a "lliscar" el flux d'execució d'instruccions de la CPU fins a la seva destinació final desitjada sempre que el programa es ramifica a una adreça de memòria en qualsevol lloc del la diapositiva.[1]

La tècnica veu un ús comú en exploits de programari, on s'utilitza per dirigir l'execució del programa quan no es coneix amb precisió un objectiu d'instrucció de branca. Altres aplicacions notables inclouen estratègies de programació defensives com la programació conscient d'EMC.

Tot i que una diapositiva NOP funcionarà si consta d'una llista d'instruccions NOP canòniques, la presència d'aquest codi és sospitosa i fàcil de detectar automàticament. Per aquesta raó, les diapositives pràctiques de NOP sovint es componen d'instruccions NOP no canòniques (com ara moure un registre a si mateix o afegir zero ), o d'instruccions que afecten l'estat del programa només de manera inconseqüent, cosa que les fa molt més difícils d'identificar.[2]

Un trineu NOP és la tècnica més antiga i coneguda per explotar desbordaments de memòria intermèdia de pila. Soluciona el problema de trobar l'adreça exacta de la memòria intermèdia augmentant efectivament la mida de l'àrea objectiu. Per fer-ho, es corrompeixen seccions molt més grans de la pila amb la instrucció de màquina sense operació. Al final de les dades subministrades per l'atacant, després de les instruccions sense operació, l'atacant col·loca una instrucció per realitzar un salt relatiu a la part superior de la memòria intermèdia on es troba el codi shell. Aquesta col·lecció de no-ops es coneix com a "NOP-sled" perquè si l'adreça de retorn se sobreescriu amb qualsevol adreça dins de la regió sense operacions de la memòria intermèdia, l'execució "lliscarà" cap avall per les no-ops fins que sigui. redirigit al codi maliciós real pel salt al final. Aquesta tècnica requereix que l'atacant endevini on de la pila es troba el trineu NOP en comptes del shellcode relativament petit.[3]

A causa de la popularitat d'aquesta tècnica, molts venedors de sistemes de prevenció d'intrusions buscaran aquest patró d'instruccions de màquina sense operacions per intentar detectar el codi de shell en ús. És important tenir en compte que un trineu NOP no conté necessàriament només instruccions tradicionals de màquina sense operació; qualsevol instrucció que no corrompi l'estat de la màquina fins a un punt en què el codi d'intèrpret d'ordres no s'executi es pot utilitzar en lloc del no-op assistit per maquinari. Com a resultat, s'ha convertit en una pràctica habitual que els escriptors d'exploits componguin el trineu sense operacions amb instruccions escollides a l'atzar que no tindran cap efecte real en l'execució del codi shell.

Tot i que aquest mètode millora molt les possibilitats que un atac tingui èxit, no està exempt de problemes. Els exploits que utilitzen aquesta tècnica encara han de confiar en una certa quantitat de sort que endevinaran les compensacions de la pila que es troben dins de la regió del trineu NOP. Una conjectura incorrecta sol provocar que el programa objectiu es col·loqui i podria alertar l' administrador del sistema de les activitats de l'atacant. Un altre problema és que el trineu NOP requereix una quantitat molt més gran de memòria per contenir un trineu NOP prou gran com per ser útil. Això pot ser un problema quan la mida assignada del buffer afectat és massa petita i la profunditat actual de la pila és poca (és a dir, no hi ha gaire espai des del final del marc de la pila actual fins a l'inici de la pila). Malgrat els seus problemes, el trineu NOP és sovint l'únic mètode que funcionarà per a una plataforma, entorn o situació determinada i, per tant, segueix sent una tècnica important.[4]

L'entropia d'una diapositiva NOP depèn de les restriccions que s'hi posen. Si es pot determinar que determinats registres no estan en ús (és a dir, s'establiran a un valor conegut abans del seu proper ús), les instruccions que els manipulin arbitràriament es poden utilitzar a la diapositiva NOP. A més, si l'alineació tant de la diapositiva NOP com del punter d'instrucció són deterministes, es poden utilitzar instruccions de diversos bytes en una diapositiva NOP sense tenir en compte els resultats de l'execució no alineada. Si es filtra l'entrada que proporciona el vector d'atac en què s'han d'introduir la diapositiva NOP i la càrrega útil (com ara acceptar només caràcters imprimibles), el camp de possibles instruccions per a la inclusió és limitat. Tot i que les instruccions que formen part d'una extensió d'arquitectura (com ara SSE) sovint poden ser irrellevants per a l'estat del programa, no es poden utilitzar en una diapositiva NOP dirigida a un ordinador on l'extensió no és compatible.

Referències[modifica]

  1. «NOP Sleds - Practical Malware Analysis [Book]» (en anglès). [Consulta: 24 novembre 2023].
  2. «How does a NOP sled work?» (en anglès). [Consulta: 24 novembre 2023].
  3. «Stack buffer overflow confusion» (en anglès). [Consulta: 24 novembre 2023].
  4. «[https://ir0nstone.gitbook.io/notes/types/stack/nops NOPs More reliable shellcode exploits]» (en anglès). [Consulta: 24 novembre 2023].