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.
Sto cercando un lavoro che descriva le seguenti nozioni:
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?