In termini molto generali, il tuo problema è mantenere le informazioni sul contesto. SE ipotizziamo quanto segue:
- Ogni richiesta viene gestita da un codice nel server, con uno dei thread di esecuzione .
- Ogni thread elabora una richiesta alla volta.
- Il codice server registra ogni richiesta in entrata con un timestamp di alta precisione (millisecondi o inferiore) e l'identificatore per il thread di gestione.
- Il motore della politica MAC, quando rileva una violazione, lo registra insieme a un marcatore temporale ad alta precisione e informazioni sul contesto, in particolare l'identificatore per il thread offendente.
Quindi diventa facile mappare le violazioni sulle richieste.
In pratica, a seconda della tecnologia coinvolta (codice del server, progettazione dell'applicazione, motore della politica ...), alcune delle informazioni di cui sopra potrebbero mancare. Ad esempio, il motore della politica può registrare solo l'ID processo e un processo può contenere diversi thread (ci sono "thread di sistema" gestiti dal sistema operativo, ma a livello di applicazione lì possono anche essere i cosiddetti "thread leggeri" di cui il sistema operativo non è a conoscenza). Alcuni motori di server possono eseguire più richieste contemporaneamente (progettazione della macchina di stato con poll()
). I log possono mancare di precisione al secondo. Nel server, gli accessi I / O possono essere centralizzati e condivisi, quindi il thread che ha ricevuto la richiesta non è necessariamente quello che accede al file.
Se non disponi di tutte le informazioni necessarie, dovrai analizzare tutte le richieste ricevute nel relativo intervallo di tempo, fino a trovare quello più funky. Potresti voler ricorrere alla simulazione : mantenere tutte le richieste in entrata in un buffer circolare, in modo che in qualsiasi momento tu abbia una copia del valore dell'ultimo minuto dei dati della richiesta o così; se il motore della politica rileva una violazione, crea uno snapshot (una copia delle richieste e lo stato del server pertinente). Successivamente, durante l'analisi, invia nuovamente tutte queste richieste a una copia del server, una alla volta, finché non trovi quella che attiva il problema.