Instrumentation vs virtual machine introspection

3

Non riesco a distinguere tra la strumentazione e l'introspezione della macchina virtuale. Poiché l'obiettivo dell'introspezione della Macchina Virtuale è esaminare le proprietà di una destinazione attraverso il monitoraggio della macchina virtuale, qual è lo scopo e l'uso della tecnica di strumentazione.

    
posta Ali Ahmad 27.07.2013 - 14:17
fonte

2 risposte

6

La terminologia è scivolosa e non completamente stabilizzata; tuttavia, possiamo dire che di solito , "strumentazione di codice" si riferisce alle modifiche di alcuni codici di destinazione in modo che gli strumenti di monitoraggio (o altri tipi di strumenti di gestione automatica) possano essere applicati su di esso; questo non implica necessariamente una macchina virtuale. Con una macchina virtuale, d'altra parte, il codice da ispezionare e monitorare non è modificato e ignaro del fatto che è monitorato.

Ad esempio, se si compila il codice C con GCC , è possibile "profilarlo" (monitoraggio delle prestazioni alla granularità delle singole funzioni ) con il flag di riga di comando -pg : questo flag indica a GCC di aggiungere ulteriori istruzioni nel binario che immettono la voce di registrazione e di uscita, per ogni funzione. Questa è strumentazione. Non ha bisogno di alcun tipo di macchina virtuale.

Per fare una metafora, l'introspezione della macchina virtuale è come uno zoologo accucciato su una collina rocciosa, con un potente binocolo, osservando da lontano un leone che insegue una mandria di zebre. La strumentazione è più simile al leone che viene sedato, legato su un lettino da visita e lo zoologo che forcing un endoscopio nella sua gola. Non la stessa attività, non gli stessi obiettivi, non lo stesso tipo di dati raccolti; e la strumentazione è un po 'più "invasiva".

    
risposta data 27.07.2013 - 14:32
fonte
3

La similitudine del leone è fantastica. Un punto interessante che dovrebbe essere incluso è che l'introspezione su una VM è molto più difficile / specifica rispetto alla strumentazione. Come dice Tom-leek sopra, la strumentazione aggiunge al codice sotto controllo dove l'introspezione non lo fa. Questo è un grosso problema per l'introspezione.

Le API di introspezione per un hypervisor come Xen non fanno molto di più che consentire ad una VM di ispezionare / mappare la memoria che appartiene ad un'altra VM. Senza alcuna strumentazione per assistere il programma di introspezione, deve essere in grado di dedurre da sé che è nella memoria che sta osservando. Questo sarebbe come lo zoologo nell'esempio di tom-leeks che deve determinare cosa sono un leone e una zebra, forse non l'ha mai visto prima (non è uno zoologo allora?). Questo problema è stato definito il "gap semantico".

Quindi il valore di un motore di introspezione è la sua capacità di determinare ciò che sta guardando. In genere dovrà sapere qualcosa sulla struttura del programma binario che sta guardando. La maggior parte dei sistemi utilizza un file system.map per ottenere dati sul kernel Linux e quindi selezionare strutture dati specifiche (elenco processi, ecc.) Da monitorare. Per Windows è una storia completamente diversa e le aziende che fanno un'introspezione su Windows in genere considerano i loro metodi una proprietà intellettuale estremamente preziosa.

C'era una grande compagnia chiamata Virtuata che ha fatto introspezione sul kernel di Windows usando Xen. Sfortunatamente sono stati acquisiti da Cisco lo scorso anno e da allora sono scomparsi: link

Buona lettura su questo argomento:

  • Linux Kernel Integrity Monitor (LKIM) - link
  • Bromium ha un blog di marketing che gioca i limiti dell'introspezione (ovvero il gap semantico). È una buona lettura, ma tieni a mente i loro obiettivi e il prodotto che vendono - link
  • Ci sono anche una serie di articoli in cui gli accademici cercano di "colmare" il divario semantico con metodi automatici. Non ne conosco molti ma Virtuoso è una buona lettura - link
risposta data 27.07.2013 - 20:33
fonte

Leggi altre domande sui tag