該存儲庫包含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許可條款獲得許可的。