Dieses Repository enthält den Code für das ACSAC'19-Papier: "JStap: Ein statisches Vorfilter für die Erkennung von böswilliger JavaScript".
Bitte beachten Sie, dass der Code in seinem aktuellen Zustand ein POC und keine vollwertige Produktions-API ist.
JStap ist ein modulares statisches bösartiges JavaScript -Erkennungssystem. Unser Detektor besteht aus zehn Modulen, darunter fünf verschiedene Arten zur Abstracting Code (nämlich Token, abstrakte Syntaxbaum (AST), Kontrollflussgrafik (CFG), Programmabhängigkeitsgraphen, die nur den Datenfluss in Betracht ziehen (PDG-DFG) und PDG). Basierend auf der Häufigkeit dieser spezifischen Muster schulen wir für jedes Modul einen zufälligen Waldklassifizierer.
install python3 version 3.6.7
install python3-pip # (tested with 9.0.1)
pip3 install -r requirements.txt # (tested versions indicated in requirements.txt)
install nodejs # (tested with 8.10.0)
install npm # (tested with 3.5.2)
cd pdg_generation
npm install escodegen # (tested with 1.9.1)
cd ../classification
npm install esprima # (tested with 4.0.1)
cd ..
Für die ASTG-, CFG-, PDG-DFG- und PDG-Analysen sollten Sie die PDGs der betrachteten Dateien separat und vorher generieren. Geben Sie den Ordner, der die PDGs als Eingabe an den Lernenden oder Klassifizierer enthält (im Fall einer AST-basierten Analyse, nur die in der PDG enthaltenen AST-Informationen an. Im Gegenteil, dass Sie für den tokenbasierten Ansatz den Ordner, der die JS-Dateien als Eingabe für den Lernenden/Klassifizierer enthält, direkt angeben.
So erstellen Sie die PDGs der JS -Dateien (.JS) aus dem Ordner order_name, starten Sie den folgenden Shell -Befehl aus dem Ordner pdg_generation :
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
Die entsprechenden PDGs werden in Ordner_Name/Analyse/PDG gespeichert.
Derzeit verwenden wir 2 CPUs für den PDGS -Erzeugungsprozess. Dies kann geändert werden, indem die variablen num_worker aus pdg_generation/Utility_df.py geändert werden.
Um ein Modell aus den Ordnern gutartig und böswillig zu erstellen, enthält JS-Dateien (für die tokenbasierte Analyse) oder die PDGs (für die anderen Analysen) die Option-d gutartig böswillig und fügen Sie ihre entsprechende Grundwahrheit mit-L gutartiger böswilliger.
Wählen Sie die Funktionen aus, die im Trainingssatz mit CHI2 in 2 unabhängigen Datensätzen angezeigt werden:-VD gutartigen Validaten mit ihrer entsprechenden Grundwahrheit-vl bösartig.
Geben Sie Ihren Analysebestand mit-Level an, gefolgt von "Token", "AST", "CFG", "PDG-DFG" oder "PDG".
Geben Sie die Merkmale an, die die Analyse mit den Merkmalen verwenden sollte, gefolgt von "Ngrams", "Wert". Sie können auswählen, wo die von Chi2 ausgewählten Funktionen mit -analyse_path (Standard JStap/Analyse) gespeichert werden sollen.
Sie können den Namen des Modells mit -MN (Standard sein 'Modell') und sein Verzeichnis mit - -md (Standard JTAP/Analyse) auswählen.
$ python3 learner.py --d BENIGN/ MALICIOUS/ --l benign malicious --vd BENIGN-VALIDATE/ MALICIOUS-VALIDATE/ --vl benign malicious --level LEVEL --features FEATURES --mn FEATURES_LEVEL
Der Prozess ist für den Klassifizierungsprozess ähnlich.
Verwenden Sie die Option -D Benign2 Machicious2. Verwenden Sie die Option -M Features_Level. Halten Sie das gleiche Analyseniveau und die gleichen Merkmale wie für das Training des Klassifikators:
$ python3 classifier.py --d BENIGN2/ MALICIOUS2/ --level LEVEL --features FEATURES --m FEATURES_LEVEL
Wenn Sie die Grundwahrheit der von Ihnen klassifizierten Proben kennen und die Genauigkeit Ihres Klassifikators bewerten möchten, verwenden Sie die Option -L mit der entsprechenden Grundwahrheit:
$ python3 classifier.py --d BENIGN2 MALICIOUS2 --l benign malicious --level LEVEL --features FEATURES --m FEATURES_LEVEL
Derzeit verwenden wir 2 CPUs für die Lern- und Klassifizierungsprozesse. Dies kann geändert werden, indem die variablen num_worker aus classification/Utility.py geändert werden.
Um die grafischen Darstellungen des AST (SAVE_PATH_AST), CFG (SAVE_PATH_CFG) und/oder PDG (SAVE_PATH_PDG) einer angegebenen JS -Datei input_file zu generieren, nutzen wir die GraphViz -Bibliothek.
So installieren Sie Graphviz:
pip3 install graphviz
On MacOS: install brew and then brew install graphviz
On Linux: install graphviz
Starten Sie die folgenden Python3 -Befehle aus dem Ordner pdg_generation und geben Sie den Namen an, unter dem die Diagramme gespeichert werden sollen:
>>> from pdgs_generation import *
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), save_path_ast='ast', save_path_cfg='cfg', save_path_pdg='pdg')
Vorsicht, Graphviz kann einen Fehler werfen, wenn die Grafiken zu groß werden.
Verwenden Sie den Wert "None", um die Grafiken lediglich anzuzeigen, ohne sie zu speichern. Ansonsten und pro Standard ist der Wert falsch.
HINWEIS: Per Standard wird das entsprechende PDG nicht gespeichert. Um es in einem vorhandenen PDG_PATH -Ordner zu speichern, fügen Sie dem vorherigen Befehl die Parameter store_pdgs='PDG_PATH' hinzu.
Wenn Sie JStap für die akademische Forschung verwenden, werden Sie sehr empfohlen, das folgende Papier zu zitieren:
@inproceedings{fass2019jstap,
author="Fass, Aurore and Backes, Michael and Stock, Ben",
title="{textsc{JStap}: A Static Pre-Filter for Malicious JavaScript Detection}",
booktitle="Proceedings of the Annual Computer Security Applications Conference~(ACSAC)",
year="2019"
}
Angesichts des Erfolgs der Webplattform haben Angreifer ihre Hauptprogrammiersprache, JavaScript, missbraucht, um verschiedene Arten von Angriffen auf ihre Opfer zu montieren. Aufgrund des großen Volumens solcher böswilligen Skripte stützen sich Erkennungssysteme auf statische Analysen, um die überwiegende Mehrheit der Proben schnell zu verarbeiten. Diese statischen Ansätze sind jedoch nicht unfehlbar und führen zu Fehlklassifizierungen. Außerdem fehlen ihnen semantische Informationen, um über rein syntaktische Ansätze hinauszugehen. In diesem Artikel schlagen wir JStap vor, ein modulares statisches JavaScript-Erkennungssystem, das die Erkennungsfähigkeit vorhandener lexikalischer und AST-basierter Pipelines erweitert, indem auch die Informationen zur Steuer- und Datenflussinformationen eingesetzt werden. Unser Detektor setzt sich aus zehn Modulen zusammen, einschließlich fünf verschiedenen Arten zur Zusammenfassung von Code, mit unterschiedlichen Kontextniveaus und semantischen Informationen sowie zwei Möglichkeiten zum Extrahieren von Merkmalen. Basierend auf der Häufigkeit dieser spezifischen Muster schulen wir für jedes Modul einen zufälligen Waldklassifizierer.
In der Praxis übertrifft JStap vorhandene Systeme, die wir in unserem Datensatz von insgesamt über 270.000 Proben neu implementiert und getestet haben. Um die Erkennung zu verbessern, kombinieren wir auch die Vorhersagen mehrerer Module. Eine erste Schicht für einstimmige Abstimmungen klassifiziert 93% unseres Datensatzes mit einer Genauigkeit von 99,73%, während eine zweite Schicht auf der Kombination einer alternativen Module basiert-weitere 6,5% unseres anfänglichen Datensatzes mit Genauigkeit über 99%. Auf diese Weise kann JStap als präziser Vorfilter verwendet werden, was bedeutet, dass es nur weniger als 1% der Proben an zusätzliche Analysen weiterleiten müsste. Für die Reproduzierbarkeit und direkte Bereitstellung unserer Module stellen wir unser System öffentlich zur Verfügung.
Dieses Projekt ist gemäß den Bestimmungen der AGPL3 -Lizenz lizenziert, die Sie in LICENSE finden.