Trovare la penombra di un problema di soddisfazione dei vincoli


12

La seguente domanda è emersa diverse volte durante il test della sicurezza di un sistema o modello.

Motivazione: Spesso i difetti di sicurezza del software non provengono da bug dovuti a input validi, ma da errori derivanti da input non validi che sono sufficientemente vicini agli input validi per superare molti dei semplici controlli di validità. L'esempio classico è ovviamente l'overflow del buffer, dove l'input è ragionevole, tranne per il fatto che è troppo grande. I compilatori e altri strumenti possono aiutare a risolvere questi problemi modificando il layout dello stack e dell'heap e con altre tecniche di offuscamento. Un'alternativa è rimuovere i problemi dal codice sorgente stesso. Una tecnica chiamata fuzzing bombarda il programma con input vicini agli input previsti, ma in alcuni punti è irragionevole (valori elevati per campi interi o stringa). Vorrei capire il fuzzing (come un esempio) da una prospettiva più formale.

Supponiamo che lo spazio degli input validi sia descritto da vincoli . Sia M l'insieme di soluzioni di tali vincoli, vale a dire M = { m M | m Φ } , dove M è lo spazio dei possibili ingressi.ΦMM={mM | mΦ}M

Sto cercando un lavoro che descriva le seguenti nozioni:

  • MMMmM mΦ MM

  • Modi per allentare i vincoli da a tali che in primo luogo e è, in un certo senso, la penombra sintattica di .Φ Φ Φ Φ ¬ Φ ΦΦΦΦΦΦ¬ΦΦ

"Penumbra" è una parola che ho selezionato per descrivere il concetto. Potrebbe ben essere chiamato qualcos'altro.

Ho trovato ispirazione nella morfologia matematica , quindi nella mia metafora visiva, ma i due mondi sono separati. C'è qualche lavoro utile lì? O forse nel mondo dei set difficili ?

Qualcuno può fare luce?


Il problema è di per sé davvero interessante, tuttavia la maggior parte delle volte l'interesse a non costruire la penombra (non sono a conoscenza di un nome più "ufficiale") ma piuttosto a tecniche offuscate che evitano gli attacchi di manomissione del software (come gli attacchi attraverso la modifica dell'input). Queste tecniche nascondono il nucleo del comportamento del programma inondandolo di qualcos'altro. Ad esempio, è possibile creare un programma intercalando quello originale insieme a un programma che codifica la risoluzione di un problema hardware NP su un'istanza specifica.
Sylvain Peyronnet,

Questo è davvero vero. Sto alludendo all'approccio noto come fuzzing.
Dave Clarke,

A proposito, CSP = Problema di soddisfazione del vincolo.
MS Dousti,

Risposte:


6

Gran parte dell'attenzione prestata alle varianti di ottimizzazione del problema della soddisfazione dei vincoli (CSP) si è concentrata sulla soddisfazione di un certo numero di vincoli (MAX-CSP) o nel caso booleano sulla scelta della soluzione che assegna il maggior numero possibile di variabili al valore 1 ( MAX-ONES, ci sono anche MIN-ONES).

Invece, stai chiedendo una variante che potrebbe essere chiamata MAXIMUM PARTIAL CSP. Questo è stato studiato almeno fino alla fine degli anni '60, ma non sono a conoscenza del fatto che abbia un nome consolidato. È un problema naturale e sarebbe bello vedere più lavoro investigarlo. Grazie per aver fornito un'altra potenziale applicazione per questo problema!

  • Ambler, AP e Barrow, HG e Brown, CM e Burstall, RM e Popplestone, RJ, Un sistema versatile per assemblaggio controllato da computer , Intelligenza artificiale 6 129–156, 1975. doi: 10.1016 / 0004-3702 (75) 90006- 5

Una serie di assegnazioni di valore variabile è denominata assegnazione parziale . Si può scrivere un'assegnazione a valore variabile come tupla (variabile, valore). Le assegnazioni parziali sono quindi semplicemente funzioni da variabili a valori. I puntelli sono incarichi parziali che non violano alcun vincolo. Equivalentemente, un oggetto di scena non contiene alcuna assegnazione parziale vietata da alcuni vincoli (come sottoinsieme).

Un modo per esprimere il problema di ottimizzazione è il seguente.

CSP PARZIALE MASSIMO:
Input: istanza CSP
Output: prop Criterio: maxim| f |f
|f|

In un'istanza con variabili, chiaramente una proposta di cardinalità sarà una soluzione. Possono esistere oggetti di scena di grandi dimensioni, con cardinalità fino a , che non sono contenuti in nessuna soluzione.n n - 1nnn1

Nella terminologia che proponi, l'insieme di oggetti di scena con la massima cardinalità forma la penombra, forse anche con qualche margine aggiuntivo (quindi la cardinalità almeno ).d k - dkdkd

Anche la seconda parte della tua domanda appare molto interessante, ma non sono a conoscenza di alcun lavoro ad esso correlato.


Nota in calce: il termine prop è tratto dalla mia tesi; intende trasmettere l'idea che tali incarichi parziali siano corretti e che supportino l'insieme di soluzioni. Ciò è in contrasto con un nogood , che è il termine accettato per descrivere un incarico parziale che non può essere esteso a una soluzione. La parola "nogood" è stata introdotta da Richard Stallman e Gerald Sussman nel 1976, quando RMS era ancora un ricercatore di intelligenza artificiale anziché attivista per la libertà del software.

  • Stallman, Richard M. e Sussman, Gerald Jay, ragionamento in avanti e backtracking orientato alle dipendenze in un sistema per l'analisi dei circuiti assistita da calcolatore , Memo del laboratorio di intelligenza artificiale del MIT n. 380, 1976. ( PDF )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.