Dieses Repository enthält den größten Teil des Codes unseres CCS'19 -Papiers: "Hidenoseek: Tarning Bösartige JavaScript in gutartigen Asts", nämlich:
Bitte beachten Sie, dass der Code in seinem aktuellen Zustand ein POC und keine vollwertige Produktions-API ist.
Hidenoseek ist ein neuer und generischer Tarnangriff, der die Konstrukte böswilliger JavaScript -Stichproben verändert, um eine vorhandene benigne Syntax genau zu reproduzieren. Zu diesem Zweck verbessern wir die abstrakten Syntaxbäume (ASTs) gültiger JavaScript -Eingaben mit Steuer- und Datenflussinformationen statisch. Wir bezeichnen die resultierende Datenstruktur als Programmabhängigkeitsgraphen (PDG). Insbesondere sucht Hidenoseek nach isomorphen Untergraphen zwischen böswilligen und gutartigen Dateien. Insbesondere ersetzt es gutartige Subaste durch ihre böswilligen Äquivalente (gleiche syntaktische Struktur) und passt die gutartigen Datenabhängigkeiten an-ohne die AST-orte-so dass die böswillige Semantik aufbewahrt wird.
Aus ethischen Gründen haben wir beschlossen, weder den vollständigen Code unseres Klonauswahlmoduls noch unser Klonersatzmodul zu veröffentlichen. Daher kann diese Hidenoseek -Version verwendet werden, um syntaktische Klone zu erkennen , sie jedoch nicht umzuschreiben .
install python3 # (tested with 3.6.7)
install nodejs # (tested with 8.10.0)
install npm # (tested with 3.5.2)
cd src
npm install escodegen # (tested with 1.9.1)
cd ..
Hidenoseek arbeitet direkt auf PDG -Ebene. Um Klone zwischen 2 JavaScript -Ordnern zu erfassen, sollten Sie die PDGs im Voraus erzeugen (vgl. PDGS -Erzeugung) und sie als Eingabe für die Funktion src/samples_generation.replace_ast_df_folder angeben.
Um Klone zwischen 2 JavaScript -Samples zu erfassen, sollten Sie die Pfade der Dateien direkt als Eingabe für die Funktion src/samples_generation.replace_ast geben.
Starten Sie den folgenden Shell -Befehl aus dem src -Ordner -Speicherort:
$ python3 -c "from pdgs_generation import store_pdg_folder; store_pdg_folder('FOLDER_NAME')"
Die entsprechenden PDGs werden in order_name/pdg gespeichert.
Starten Sie die folgenden Python3 -Befehle aus dem src -Ordner, um die PDG eines angegebenen JS -Dateieingabe -Input_file zu erstellen:
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict())
Pro Standard wird die entsprechende PDG nicht gespeichert. Um es in einem vorhandenen PDG_Path -Ordner zu speichern, rufen Sie an:
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), store_pdgs='PDG_PATH')
Beachten Sie, dass wir für diese Hidenoseek -Version für den PDG -Erzeugungsprozess eine Zeitüberschreitung von 60 Sekunden hinzugefügt haben (vgl. Zeile 83 von src/pdgs_generation.py ).
Starten Sie den folgenden Python3 -Befehl vom src -Ordner, um Klone zwischen den gutartigen PDGs aus dem Ordner order_benign_pdgs und den böswilligen von Ordner_Malicious_PDGs zu finden:
$ python3 -c "from samples_generation import replace_ast_df_folder; replace_ast_df_folder('FOLDER_BENIGN_PDGS', 'FOLDER_MALICIOUS_PDGS')"
Für jede böswillige PDG wird ein Ordner pdg_name-Analyse in order_malicious_pdgs erstellt. Für jeden analysierten gutartigen PDG enthält es eine JSON -Datei (Namensformat: Benign_malicious.json), die die Hauptbefunde wie identische Knoten, den Anteil identischer Knoten, unterschiedlichen Token, unterschiedlichen Benchmarks zusammenfasst, fasst zusammen.
Darüber hinaus zeigen wir den gutartigen und böswilligen Code der gemeldeten Klone an. Dies kann z. B. für die Multiprozessierung deaktiviert werden, indem der Anruf bei print_clones Zeile 153 von src/samples_generation.py kommentiert werden.
Starten Sie die folgenden Python3 -Befehle aus dem src -Ordner, um Klone zwischen einer gutartigen JS -Datei benign_js und einer böswilligen Masticious_JS zu finden:
>>> from samples_generation import replace_ast
>>> replace_ast('BENIGN_JS', 'MALICIOUS_JS')
Die Ausgänge in Bezug auf die JSON -Datei und auf STDOut sind wie zuvor.
Die Funktionen src/pdgs_generation.store_pdg_folder und src/samples_generation.replace_ast_df_folder sind vollständig parallelisiert. In beiden Fällen verwenden wir derzeit 1 CPU. Sie können dies jedoch ändern, indem Sie die variablen num_worker von src/utility_df.py ändern. Wenn Sie mehr als 1 CPU verwenden, sollten Sie den Anruf bei print_clones Zeile 153 von src/samples_generation.py ausgeben.
Das Ordner example/Benign-example enthält example.js das gutartige Beispiel aus unserem Papier, während example/Malicious-seed/seed.js der bösartige Samen aus unserem Papier ist.
Starten Sie die folgenden Python3 -Befehle aus dem src -Ordner, um Klone zwischen diesen beiden Dateien zu erkennen:
>>> from samples_generation import replace_ast
>>> replace_ast('../example/Benign-example/example.js', '../example/Malicious-seed/seed.js')
Sie erhalten die folgende Ausgabe auf STDOut:
INFO:Successfully selected 2 clones in XXXs
==============
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('type', 'application/x-shockwave-flash');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('tabindex', '-1');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
==============
INFO:Could find 100.0% of the malicious nodes in the benign AST
Unser Tool fand 2 Klone (jedes Mal aus 2 Aussagen). Dies bedeutet, dass der gesamte bösartige Saatgut in 2 verschiedenen Arten im gutartigen Beispiel umgeschrieben werden kann.
Darüber hinaus wurde das Beispiel für Datei example/Malicious-seed/seed-analysis/example_seed.json erstellt, das zusätzliche Kloninformationen enthielt.
Wenn Sie Hidenoseek für die akademische Forschung verwenden, werden Sie sehr ermutigt, das folgende Papier zu zitieren:
@inproceedings{fass2019hidenoseek,
author="Fass, Aurore and Backes, Michael and Stock, Ben",
title="{textsc{HideNoSeek}: Camouflaging Malicious JavaScript in Benign ASTs}",
booktitle="ACM CCS",
year="2019"
}
Im Malware-Bereich sind lernbasierte Systeme beliebt geworden, um neue böswillige Varianten zu erkennen. Angreifer mit spezifischem und internen Kenntnis eines Zielsystems können jedoch möglicherweise Eingabemodplätze erstellen, die falsch klassifiziert werden. In der Praxis ist die Annahme starker Angreifer nicht realistisch, da sie den Zugang zu Insiderinformationen impliziert. Wir schlagen stattdessen Hidenoseek vor, einen neuartigen und generischen Tarnangriff, der die gesamte Klasse von Detektoren basierend auf syntaktischen Merkmalen ausweist, ohne Informationen über das System zu benötigen, das es zu entziehen versucht. Unser Angriff besteht darin, die Konstrukte von böswilligen JavaScript -Proben zu ändern, um eine gutartige Syntax zu reproduzieren.
Zu diesem Zweck schreiben wir automatisch die abstrakten Syntaxbäume (ASTs) böswilliger JavaScript -Eingaben in vorhandene gutartige. Insbesondere verwendet Hidenoseek bösartige Samen und sucht nach isomorphen Untergraphen zwischen den Samen und traditionellen gutartigen Skripten. Insbesondere ersetzt es gutartige Subaste durch ihre böswilligen Äquivalente (gleiche syntaktische Struktur) und passt die gutartigen Datenabhängigkeiten an-ohne die AST-Änderung-, so dass die böswillige Semantik aufbewahrt wird. In der Praxis haben wir 23 bösartige Samen genutzt, um 91.020 bösartige Skripte zu erzeugen, die ATS von Alexa Top 10.000 Webseiten perfekt reproduzieren. Außerdem können wir durchschnittlich 14 verschiedene bösartige Proben mit dem gleichen AST wie jeder Alexa Top 10 produzieren.
Insgesamt hat ein Standard -geschulter Klassifizierer 99,98% falsch negative mit Hidenoseek -Eingaben, während ein auf solcher Proben geschultes Klassifikator über 88,74% falsch positive positive positive positive Aspekte hat, wodurch die gezielten statischen Detektoren unzuverlässig sind.
Dieses Projekt ist gemäß den Bestimmungen der AGPL3 -Lizenz lizenziert, die Sie in LICENSE finden können.