该存储库包含ACSAC'19论文的代码:“ JSTAP:恶意JavaScript检测的静态过滤器”。
请注意,在当前状态下,该代码是POC,而不是由成熟的生产就绪的API。
JSTAP是模块化静态恶意JavaScript检测系统。我们的检测器由十个模块组成,包括五种不同的抽象代码方法(即代币,抽象语法树(AST),控制流程图(CFG),程序依赖图图,考虑数据流(PDG-DFG)和PDG)(PDG-DFG)和PDG),以及两个提取n-grams,或提取n-grams,或识别器值的方法。根据这些特定模式的频率,我们为每个模块训练一个随机的森林分类器。
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 ..
对于AST,CFG,PDG-DFG和PDG分析,您应该分别和事先生成所考虑的文件的PDG。之后,将包含PDG的文件夹作为学习者或分类器的输入(例如,在基于AST的分析的情况下,我们仅使用PDG中包含的AST信息)。相反,基于令牌的方法,您应该直接将包含JS文件的文件夹作为学习者/分类器的输入。
要从文件夹文件夹_NAME生成JS文件(.js)的PDG,请从pdg_generation文件夹启动以下shell命令位置:
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
相应的PDG将存储在Folder_name/Analysis/PDG中。
目前,我们正在使用2个CPU进行PDGS生成过程。可以通过从pdg_generation/utilility_df.py修改变量num_worker来更改。
要从良性和恶意的文件夹构建模型,其中包含JS文件(用于基于令牌的分析)或PDG(用于其他分析),请使用该选项 - 良性恶意,并与-l andign Malicial一起添加其相应的地面真相。
选择在2个独立数据集中使用CHI2出现在训练集中的功能:-VD Benign valites恶性效应及其相应的地面真相-VL良性恶意。
指示您的分析水平 - 级别,然后是“令牌”,“ AST”,“ CFG”,“ PDG-DFG”或“ PDG”。
指示分析应与 - 功能和“ ngrams”,“ value”的功能。您可以选择使用-Analsisy_path选择的位置来存储CHI2选择的功能(默认JSTAP/分析)。
您可以使用-MN(默认为'模型')及其目录(默认JSTAP/Analysis)的目录选择模型的名称。
$ python3 learner.py --d BENIGN/ MALICIOUS/ --l benign malicious --vd BENIGN-VALIDATE/ MALICIOUS-VALIDATE/ --vl benign malicious --level LEVEL --features FEATURES --mn FEATURES_LEVEL
分类过程的过程相似。
要对文件夹benign2和Malicial2进行分类,请使用该选项-D benign2 Malicial2。要加载现有的模型功能_level将用于分类过程,请使用选项-M features_level。保持与分类器的培训相同的分析水平和功能:
$ python3 classifier.py --d BENIGN2/ MALICIOUS2/ --level LEVEL --features FEATURES --m FEATURES_LEVEL
如果您知道您分类的样本的基本真理并想评估分类器的准确性,请使用与相应的基础真相的选项-L使用:
$ python3 classifier.py --d BENIGN2 MALICIOUS2 --l benign malicious --level LEVEL --features FEATURES --m FEATURES_LEVEL
目前,我们正在使用2个CPU进行学习和分类过程。可以通过从分类/utility.py修改变量NUM_WORKER来更改这。
要生成AST(save_path_ast),cfg(save_path_cfg)和/或pdg(save_path_pdg)的图形表示,一个给定的JS文件Input_file,我们利用GraphViz库。
安装GraphViz:
pip3 install graphviz
On MacOS: install brew and then brew install graphviz
On Linux: install graphviz
从pdg_generation文件夹位置启动以下Python3命令,并指示存储图形的名称:
>>> from pdgs_generation import *
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), save_path_ast='ast', save_path_cfg='cfg', save_path_pdg='pdg')
当心,当图形变得太大时,GraphViz可能会出现错误。
要仅显示图形而无需存储图形,请使用“无”值“无”。否则,按默认值,该值是错误的。
注意:根据默认值,相应的PDG不会存储。要将其存储在现有的PDG_Path文件夹中,请将参数store_pdgs='PDG_PATH'添加到上一个命令。
如果您使用JSTAP进行学术研究,则强烈建议您引用以下论文:
@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"
}
鉴于Web平台的成功,攻击者滥用了其主要的编程语言,即JavaScript,以对受害者进行不同类型的攻击。由于大量的恶意文字,检测系统依靠静态分析来快速处理绝大多数样本。尽管这些静态方法并不是可靠的,因此导致错误分类。而且,他们缺乏语义信息,无法超越纯粹的句法方法。在本文中,我们提出了一种模块化静态JavaScript检测系统JSTAP,该系统通过利用控制和数据流信息来扩展现有词汇和基于AST的管道的检测能力。我们的探测器由十个模块组成,其中包括五个不同的抽象代码方法,具有不同级别的上下文和语义信息以及提取特征的两种方法。根据这些特定模式的频率,我们为每个模块训练一个随机的森林分类器。
实际上,JSTAP优于现有系统,我们在数据集上重新完成并测试了总数超过270,000个样本。为了改善检测,我们还结合了几个模块的预测。第一层的一致投票将我们的数据集的93%分类为99.73%,而替代模块的组合的第二层基于第二层的组合 - 标签我们初始数据集的6.5%的准确性超过99%。这样,JSTAP可以用作精确的预滤波器,这意味着它只需要将少于1%的样本转发到其他分析中即可。为了使模块的可重复性和直接可部署性,我们可以公开使用系统。
该项目是根据您可以在LICENSE中找到的AGPL3许可条款获得许可的。