Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica# Crittografia e sicurezza

Migliorare le tecniche di rilevamento della somiglianza binaria

Un nuovo metodo si concentra sui comportamenti del codice binario per una migliore rilevazione delle somiglianze.

― 5 leggere min


Rilevamento diRilevamento disomiglianza binariapotenziatorilevazione migliore.comportamenti chiave per unaUn nuovo approccio cattura
Indice

La rilevazione della similarità binaria è un metodo usato per trovare pezzi simili di codice binario. Questa tecnica è importante in situazioni dove il codice sorgente originale non è disponibile, come nel caso di ricerca di bug, analisi di malware e controllo di plagio nel codice. Ci sono vari modi per rilevare somiglianze tra i binari, ma i metodi esistenti spesso faticano quando si usano compilatori o livelli di ottimizzazione diversi.

Importanza della Rilevazione della Similarità Binaria

La rilevazione di binari simili aiuta in varie applicazioni reali. Ad esempio, può aiutare a cercare bug o vulnerabilità nel software. Quando il software viene aggiornato o modificato, è fondamentale controllare se la nuova versione ha vulnerabilità simili a quella precedente. Inoltre, nel caso del malware, trovare binari simili può aiutare a capire e combattere il software malevolo.

La Sfida dei Metodi Esistenti

I metodi attuali per la rilevazione della similarità binaria possono essere inefficienti in certi scenari. Ad esempio, se i binari sono compilati con opzioni diverse, o se passano attraverso versioni diverse del codice, i metodi esistenti potrebbero non rilevare accuratamente la loro similarità. Questo perché molti di questi metodi si concentrano troppo sulla struttura del codice (come appare) piuttosto che sul suo comportamento (cosa fa).

Osservazioni Chiave

Nonostante le differenze create dall'ottimizzazione o dai compilatori, i comportamenti essenziali del codice non cambiano necessariamente. Questo significa che le azioni chiave che un binario compie (come chiamare funzioni o memorizzare valori) possono spesso rimanere le stesse, anche se il codice appare diverso. Concentrandosi su queste azioni chiave, possiamo costruire un modo migliore per rilevare binari simili.

Approccio Proposto

Per migliorare la rilevazione della similarità binaria, è stato proposto un nuovo metodo che si concentra sulla cattura dei comportamenti chiave del codice binario. Questo comporta due passi principali: Generazione di grafi e confronto di grafi.

Generazione del Grafo

  1. Identificazione delle Istruzioni Chiave: La prima cosa da fare è trovare le istruzioni principali che svolgono compiti importanti nel binario. Queste istruzioni chiave aiuteranno a rappresentare il comportamento del binario.

  2. Creazione di Espressioni Chiave: Ognuna di queste istruzioni chiave può essere espressa in modo semplificato, il che aiuta a evitare confusione con istruzioni meno importanti.

  3. Costruzione di un Grafo di Semantica Chiave: Una volta ottenute le istruzioni chiave e le loro espressioni semplificate, possiamo creare un grafo. In questo grafo, i nodi rappresentano le istruzioni chiave e le connessioni tra di esse rappresentano come fluiscono nel programma.

Confronto di Grafi

  1. Serializzazione del Grafo: Per confrontare due grafi (di due binari diversi), prima li trasformiamo in una sequenza usando una tecnica chiamata ordinamento topologico. Questo ordinamento aiuta a mantenere l'ordine delle azioni.

  2. Tokenizzazione: Il passo successivo è suddividere queste sequenze in parti più piccole chiamate token, che sono più facili da gestire.

  3. Calcolo della Similarità: Infine, possiamo usare un metodo chiamato Hashing sensibile alla località per comprimere e confrontare le sequenze di token, aiutandoci a determinare quanto siano simili i due binari.

Valutazione del Metodo Proposto

Le prestazioni di questo nuovo metodo sono state valutate rispetto a diversi strumenti esistenti. Gli esperimenti hanno coinvolto vari progetti open-source, e i risultati hanno mostrato che il nuovo metodo ha superato gli strumenti esistenti nel rilevamento di somiglianze tra diverse opzioni di compilazione e livelli di ottimizzazione.

Impostazione degli Esperimenti

Gli esperimenti sono stati condotti su progetti open-source ben noti per valutare le prestazioni del metodo. Le metriche di valutazione includevano:

  • Precisione: Misura quanti dei coppie rilevate erano realmente simili.
  • Richiamo: Controlla quanti dei veri coppie simili sono state rilevate dallo strumento.

Risultati

Il nuovo metodo ha costantemente raggiunto una precisione media più alta rispetto agli strumenti esistenti. Ha rilevato con successo somiglianze anche in binari compilati con impostazioni diverse o con ottimizzazioni diverse. Questo indica un miglioramento significativo rispetto ai metodi tradizionali.

Applicazioni della Rilevazione della Similarità Binaria

La rilevazione della similarità binaria può essere applicata in molte aree, tra cui:

  • Rilevazione di Vulnerabilità: Identificando funzioni simili tra diverse versioni di software, le vulnerabilità possono essere tracciate e mitigate.
  • Analisi di Malware: Le somiglianze nel codice binario possono aiutare a capire il codice malevolo e creare meccanismi di difesa.
  • Rilevazione di Plagio: In ambito accademico e nello sviluppo software, rilevare codice copiato è cruciale per mantenere l'originalità.

Direzioni Future

Sebbene il metodo attuale mostri potenzialità, ci sono aree da migliorare. Lavori futuri potrebbero esplorare:

  • Supporto per Compilatori più Ampi: Migliorare il metodo per funzionare con più compilatori e architetture diverse, come ARM.
  • Gestione dell'Offuscamento: Con l'aumento delle tecniche di offuscamento, migliorare i metodi di rilevamento per gestire questi cambiamenti sarà vitale.
  • Integrazione del Machine Learning: Usare tecniche di machine learning per comprendere e pesare l'importanza di vari token nel processo di rilevamento.

Conclusione

La capacità di rilevare accuratamente somiglianze tra codici binari è importante in molte aree della tecnologia e della sicurezza. Il metodo proposto si concentra sui comportamenti chiave all'interno del binario, il che aiuta a superare le sfide affrontate dagli strumenti esistenti. Con ulteriori sviluppi e applicazioni, questo metodo può migliorare significativamente l'efficacia della rilevazione della similarità binaria in vari ambiti.

Fonte originale

Titolo: SemDiff: Binary Similarity Detection by Diffing Key-Semantics Graphs

Estratto: Binary similarity detection is a critical technique that has been applied in many real-world scenarios where source code is not available, e.g., bug search, malware analysis, and code plagiarism detection. Existing works are ineffective in detecting similar binaries in cases where different compiling optimizations, compilers, source code versions, or obfuscation are deployed. We observe that all the cases do not change a binary's key code behaviors although they significantly modify its syntax and structure. With this key observation, we extract a set of key instructions from a binary to capture its key code behaviors. By detecting the similarity between two binaries' key instructions, we can address well the ineffectiveness limitation of existing works. Specifically, we translate each extracted key instruction into a self-defined key expression, generating a key-semantics graph based on the binary's control flow. Each node in the key-semantics graph denotes a key instruction, and the node attribute is the key expression. To quantify the similarity between two given key-semantics graphs, we first serialize each graph into a sequence of key expressions by topological sort. Then, we tokenize and concatenate key expressions to generate token lists. We calculate the locality-sensitive hash value for all token lists and quantify their similarity. %We implement a prototype, called SemDiff, consisting of two modules: graph generation and graph diffing. The first module generates a pair of key-semantics graphs and the second module diffs the graphs. Our evaluation results show that overall, SemDiff outperforms state-of-the-art tools when detecting the similarity of binaries generated from different optimization levels, compilers, and obfuscations. SemDiff is also effective for library version search and finding similar vulnerabilities in firmware.

Autori: Zian Liu, Zhi Zhang, Siqi Ma, Dongxi Liu, Jun Zhang, Chao Chen, Shigang Liu, Muhammad Ejaz Ahmed, Yang Xiang

Ultimo aggiornamento: 2023-08-02 00:00:00

Lingua: English

URL di origine: https://arxiv.org/abs/2308.01463

Fonte PDF: https://arxiv.org/pdf/2308.01463

Licenza: https://creativecommons.org/licenses/by/4.0/

Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.

Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.

Altro dagli autori

Articoli simili