Come funziona la vulnerabilità legata all'esecuzione di codice binario su un sistema operativo moderno?

3

In un sistema operativo moderno, penso che:

  • la sezione .text in cui sono memorizzate le istruzioni della CPU assemblate binarie non può essere modificata
  • la sezione .data / .bss è contrassegnata come no-execute in modo che le informazioni ivi contenute siano trattate come dati, non saranno mai eseguite dalla CPU

Quindi, come è possibile che un exploit contenente un carico utile di istruzioni assemblate binarie ottenga l'esecuzione?

    
posta emberfang 13.05.2014 - 10:41
fonte

2 risposte

1

L'esecuzione delle istruzioni Binary Assembled funziona sfruttando la vulnerabilità nel Programma Applicativo. Ad esempio inserendo un codice dannoso in un PDF, se c'è un difetto nel Software PDF, il Codice dalla Sezione Dati può essere eseguito.

Ora veniamo alla tua domanda. Per quanto ne so dopo 8086 , Intel ha iniziato a utilizzare 4 livelli di protezione. Il livello interno è per Processi di livello kernel e il livello più esterno è per Processi a livello di utente . Ci sono pile separate per entrambi i processi ma lo spazio di memoria è condiviso. Un processo a livello utente (chiamante) non può eseguire direttamente un'attività con privilegi, deve chiamare un codice fidato che faccia il lavoro per il chiamante.Ma per il processo a livello utente per chiamare il codice di fiducia dire di scrivere un elemento dati X, dovrebbe avere il permesso di farlo (indirettamente).

Esistono alcuni exploit comunemente chiamati Cavalli di Troia che consentono al processo Livello utente di utilizzare un codice attendibile per eseguire attività che in realtà non è autorizzato a fare.

Quindi, se lo stesso programma applicativo presenta delle vulnerabilità, combinando ciò con tali exploit può ottenere il codice desiderato in esecuzione.

    
risposta data 14.05.2014 - 05:42
fonte
0

Hai sostanzialmente ragione sulle tue conoscenze sui binari. Ma sono troppo astratti per essere di qualche utilità. Suppongo che tu stia parlando dei binari tutti , non solo del kernel o delle app a livello di sistema operativo ...

In breve, la sezione .bss (dove l'input fornito dall'utente risiede in memoria), memorizza le variabili che vengono caricate nei registri di processo critici (variabili del processore locale) durante il runtime. Manipolare una di queste variabili memorizzate, preferibilmente attraverso un overflow basato sullo stack (dove l'input dell'utente supera la memoria e scrive su una delle variabili critiche ...) potrebbe portare all'esecuzione di byte forniti dall'utente ( destinato a essere inserito) come istruzioni del processore.

Quindi, se fai attenzione ai tuoi input, puoi fare in modo che il computer faccia tutto ciò che vuoi (non faceva parte del lavoro del programma). Se fai attenzione all'input fornito dall'utente, devi frenare il tentativo di un utente malintenzionato di sfruttare il tuo computer.

    
risposta data 21.06.2016 - 16:40
fonte

Leggi altre domande sui tag