Domanda:
Qual è lo stato dell'arte attuale per la modellazione di piattaforme?
Andrew
2013-03-20 00:05:55 UTC
view on stackexchange narkive permalink

Quando eseguiamo il reverse engineering, abbiamo alcuni livelli di modelli. Uno di questi è il modello della semantica dell'istruzione, che ci dice cosa fa ogni istruzione nativa per modificare lo stato dell'istruzione. Stiamo facendo progressi lì. Tuttavia, un altro problema è quello della semantica della piattaforma, che è a un livello superiore.

Ad esempio, un modello di alto livello di un programma Linux in spazio utente dovrebbe includere informazioni su mprotect e che può alterare la visibilità di certe regioni di codice. La semantica di threading e callback è anche un problema di modellazione della piattaforma, possiamo scoprire un punto di ingresso del programma dalla sua intestazione (che è un altro tipo di semantica! Ma probabilmente non scenderemo a compromessi), ma altri punti di ingresso sono pubblicati nel programma in la forma degli argomenti per atexit, pthread_create, ecc.

Qual è il nostro miglior sforzo / stato dell'arte per catturare queste informazioni di piattaforma di alto livello in un modo che sia compreso dai professionisti? E i sistemi di comprensione meccanici / automatizzati? So che IDA ha (o deve avere) informazioni su diverse API della piattaforma, sembra sapere che quando un immediato è un parametro di pthread_create, allora quell'immediato è un puntatore al codice e dovrebbe essere trattato come tale. Cosa abbiamo oltre a questo?

Stai chiedendo qualcosa come REIL o BUP, ma a livello di "programma" / codice invece che a livello di istruzione?
Si riferisce a un modello dell'ambiente in cui viene eseguita l'applicazione, come un "IL" per il sistema. Ad esempio, qual è il modo migliore per modellare la chiamata connect () seguita da una successiva chiamata recv ().
Due risposte:
cb88
2013-04-11 20:38:08 UTC
view on stackexchange narkive permalink

Rilevamento diretto

Al livello più basso puoi semplicemente avere copie delle librerie e controllare se sono quelle utilizzate.

Rilevamento basato sulla firma

A un livello più alto di quello c'è IDA FLIRT che memorizza appena le informazioni su una libreria per identificarne l'uso. Ma il suo principale vantaggio è la riduzione dell'utilizzo del disco ... vale la pena notare che è possibile aggiungere più definizioni a quelle predefinite.

Hex-Rays parla della tecnologia in modo approfondito qui.

Riconoscimento generico

Strumenti come Coverity o l ' Analizzatore statico di Clang o KLEE sono più generali e hanno maggiori probabilità di includere modelli di idiomi di programmazione.

L'unica cosa che so di avvicinarmi a IDA che è open source è radare che potrebbe avere qualche riconoscimento da libreria. Anche la pagina principale di radare . E ho cercato da quando sto cercando qualcosa come IDA che supporta SPARC gratuitamente e sembra che radare lo faccia anche se non ho ancora avuto il tempo di provarlo.

Da quello che posso dire, REC e Boomerang non riconoscono le librerie come fa IDA, ma tentano invece di decompilare tutto. BAP esegue l'analisi dei binari ed è derivato dal componente Vine del progetto BitBlaze di cui fanno parte anche i due progetti seguenti.

Analisi del flusso

TEMU e Rudder qui sembrano abbastanza avanzati. E gestisci il codice mentre viene eseguito. TEMU aiuta a mettere in relazione gli input e gli output con il flusso.

Vale anche la pena notare che gli strumenti di Bitblaze sono progettati per fornire tracce da utilizzare in IDA anche se potrebbero essere adattati per un uso diverso.

Escludendo le specifiche fornite TEMU suona il più vicino a ciò che desideri ... ti consente di contrassegnare gli input contaminati (posizioni di memoria, input fisici ecc ...) e rilevare il effetti di quelle macchie sull'esecuzione. Se vuoi provare TEMU e sei su una distribuzione Linux più recente (qualsiasi cosa con GCC 4+ che è praticamente qualsiasi cosa negli ultimi anni) segui le istruzioni qui.

user1636717
2013-03-28 18:56:09 UTC
view on stackexchange narkive permalink

Non sono sicuro di aver capito la domanda, ma varie soluzioni sandbox (Norman, Androguard) tendono a produrre un registro degli eventi sul sistema che ti dà un'idea della piattaforma e del suo stato. inconsapevole di qualsiasi strumento che possa aiutare a determinare lo stato del sistema tramite analisi statica. Uso un debugger per rispondere a tali domande quando possibile e un'analisi statica manuale quando non lo sono.

Penso che questo sia più correlato alla modellazione effettiva delle funzioni del sistema. L'unica cosa che riesco a pensare a chi fa questo genere di cose sono prodotti di analisi statica del codice come [Coverity] (http://www.coverity.com/), [Fortify] (http://www8.hp.com/ us / en / software-solutions / software.html? compURI = 1338812 # .UVRkdBy4WcE) e [Klocwork] (http://www.klocwork.com/).


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...