Pucher, M. (2021). Identification of obfuscated function clones in binaries using machine learning [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2022.87962
Mit steigender Beliebtheit von höheren Sprachen für Malware-Entwicklung, wie C# unter Windows, oder Go für Plattform-übergreifende Malware, steigt auch deren Komplexität und Funktionsumfang. Zusätzlich wird Obfuscation eingesetzt, um die bösartigen Absichten vor Virus-Scannern zu verbergen und den nötigen Reverse Engineering Aufwand für menschliche Analysten zu erhöhen. Eine Möglichkeit, diesen Aufwand gering zu halten, ist Function Clone Detection. Wie bei jedem anderen Software Projekt wird auch von Malware Code wiederverwendet und bestehender Code leicht abgeändert. Kann eine Binärfunktion als bereits bekannt, oder ähnlich zu bereits bekannten Funktionen betrachtet werden, verringert das die Zeit, die für die Analyse benötigt wird. Abseits von Malware kann derselbe Function Clone Detection Mechanismus dazu verwendet werden, Varianten von Funktionen zu finden, die bereits bekannte Sicherheitslücken aufweisen, wodurch sich diese Technik als besonders nützlich erweist. In dieser Arbeit wird ein Ansatz für das auffinden von Obfuscated Function Clones unter dem Namen Ofci vorgestellt. Dieser baut auf jüngsten Erkenntnissen im Bereich von Function Clone Detection, mithilfe von Machine Learning, auf. Mit Hilfe des Albert Transformers, einer auf Sparsamkeit optimierten Variante des Bert Sprachverarbeitungs-Modells, kann die Assembler-Sprache wie natürliche Sprache behandelt werden. Das führt dazu, dass Ofci trotz einer Reduktion der Modell-Parameter um 83% nur einen durchschnittlichen Abfall von 7% in Bezug auf ROC-AUC Scores hinnehmen muss. Um sich speziell dem Problem von Obfuscation anzunehmen, analysiert Ofci die Effekte von Funktionsaufrufen auf die Funktions-Suche und wagt sich an Code, der mittels Virtualisierung verschleiert wurde, heran. Dazu verfolgt Ofci einen dynamischen Ansatz, der mittels Instruction Traces versucht Funktionen in virtuellem Code zu erkennen. Allerdings muss Ofci auch Rückschläge im Hinblick auf die Präzision der Funktions-Suche hinnehmen und erörtert systematisch die Gründe dafür. Unabhängig vom Machine Learning Ansatz stellt Ofci auch ein eigenes Framework zur Extraktion und Verarbeitung von Binärfunktionen dar. Durch die Implementierung dieser Funktionen als Plug-In für Ghidra, einer frei verfügbaren Reverse Engineering Umgebung, kann Ofci einen durchgehenden Ansatz für die Analyse von Binärfunktionen anbieten, der an jeder Stelle nur Open-Source Software benützt. Durch den Headless Analyse-Modus kann dieses Framework Massen an Binärdateien parallel verarbeiten.
de
With widespread use of higher-level languages for malware, such as C# on Windows or Go for cross-platform malware, the complexity and functionality of malware is ever-increasing. Additionally, obfuscation is used to hide the malicious intent from virus scanners and increase the time it takes for a human analyst to reverse engineer the binary file. One way to minimize this effort is function clone detection. Like any other software engineering project, malware reuses code and modifies already existing code. Detecting whether a binary function is already known, or similar to an existing function, can reduce the time needed to analyze it. Outside of malware, the same function clone detection mechanism can be used to find vulnerable versions of functions in binaries, making it a powerful technique. This thesis introduces an approach for the detection of obfuscated function clones, called Ofci, building on recent advances in machine learning based function clone detection. Using the Albert transformer, a size-optimized version of the Bert natural language processing model, on textual disassembly instead of language, Ofci can achieve an 83% model size reduction in comparison to state-of-the-art approaches, while only causing an average 7% decrease in the ROC-AUC scores of function pair similarity classification. To additionally tackle the issue of obfuscation, Ofci analyzes the effect of known function calls on function similarity and applies function similarity classification on code obfuscated through virtualization. Instead of trying to match virtualized function pairs statically, Ofci tries to perform function clone detection based on traces of the virtualized function, as a cheap form of dynamic analysis. However, the reduced model size comes at the cost of precision for function clone search and the evaluation of Ofci discusses the reasons for this and other pitfalls of building function similarity detection tooling. Besides evaluating the machine learning approach, Ofci also establishes a new framework for the extraction and processing of binary functions. By implementing this functionality as a Ghidra plugin, Ofci offers an end-to-end approach for binary function analysis where every part of the pipeline is open-source. Through headless analysis, this framework can scale to analyzing large quantities of binary executables in parallel.