このリポジトリには、ACSAC'19ペーパーのコードが含まれています。「JSTAP:悪意のあるJavaScript検出のための静的なプリフィルター」が含まれています。
現在の状態では、コードはPOCであり、本格的な生産対応APIではないことに注意してください。
JSTAPは、モジュラー静的な悪意のあるJavaScript検出システムです。私たちの検出器は、コードを抽象化する5つの異なる方法(つまり、トークン、抽象的構文ツリー(AST)、コントロールフローグラフ(CFG)、データフローのみ(PDG-DFG)、およびPDGを考慮したプログラム依存性グラフ、および機能を抽出する2つの方法を含む、10のモジュールで構成されています。これらの特定のパターンの頻度に基づいて、各モジュールのランダムフォレスト分類器をトレーニングします。
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ファイルを含むフォルダーを学習者/分類器への入力として直接指定する必要があります。
Folder folder_nameからJSファイル(.js)のpdgsを生成するには、 pdg_generationフォルダーの場所から次のシェルコマンドを起動します。
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
対応するPDGは、Folder_Name/Analysis/PDGに保存されます。
現在、PDGS生成プロセスに2つのCPUを使用しています。これは、pdg_generation/utility_df.pyから変数num_workersを変更することで変更できます。
JSファイル(トークンベースの分析用)またはPDGS(他の分析用)を含む、良性で悪意のあるフォルダーからモデルを構築するには、オプションを使用して、-D venign悪意を使用して、対応するグラウンドトゥルースを-lの良性悪意とともに追加します。
2つの独立したデータセットにCHI2を使用してトレーニングセットに表示される機能を選択します。
分析レベルを、次に「トークン」、「AST」、「CFG」、「PDG-DFG」、または「PDG」のいずれかを次に示します。
分析が-featuresで使用する必要がある機能を示します。 Chi2が選択した機能を-analysis_Path(デフォルトJSTAP/分析)で保存する場所を選択できます。
-MN(デフォルトである「モデル」)を備えたモデルの名前と、-MD(デフォルトのjstap/分析)のディレクトリを選択できます。
$ python3 learner.py --d BENIGN/ MALICIOUS/ --l benign malicious --vd BENIGN-VALIDATE/ MALICIOUS-VALIDATE/ --vl benign malicious --level LEVEL --features FEATURES --mn FEATURES_LEVEL
このプロセスは、分類プロセスで類似しています。
Folders Benign2およびMalious2からJSサンプルを分類するには、オプション-D benign2 Malious2を使用します。既存のモデル機能をロードするには、分類プロセスに使用される_Levelを使用するには、オプション-M feature_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を使用しています。これは、変数num_workersを分類/utility.pyから変更することで変更できます。
AST(save_path_ast)、cfg(save_path_cfg)、および/またはpdg(save_path_pdg)のast(save_path_ast)、cfg(save_path_pdg)のグラフィカルな表現を生成するには、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が大きくなりすぎているときにGraphVizがエラーを投げることに注意してください。
グラフを保存せずに単に表示するだけで、値「なし」を使用します。それ以外の場合、デフォルトごとに、値はfalseです。
注:デフォルトごとに、対応する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を乱用して、被害者にさまざまな種類の攻撃を実施しました。このような悪意のあるスクリプトの大量により、検出システムは静的分析に依存して、大部分のサンプルを迅速に処理します。これらの静的アプローチは間違いなく、誤分類につながります。また、純粋に構文的なアプローチを超える意味情報がありません。この論文では、コントロールとデータフロー情報を活用することにより、既存の語彙およびASTベースのパイプラインの検出能力を拡張するモジュラー静的JavaScript検出システムであるJSTAPを提案します。検出器は、コンテキストとセマンティック情報のレベルが異なる5つの異なる方法、および機能を抽出する2つの方法を含む、10のモジュールで構成されています。これらの特定のパターンの頻度に基づいて、各モジュールのランダムフォレスト分類器をトレーニングします。
実際には、JSTAPは既存のシステムよりも優れています。これは、合計270,000を超えるサンプルを使用するデータセットで再実装およびテストしました。検出を改善するために、いくつかのモジュールの予測も組み合わせます。全会一致の投票の最初のレイヤーは、99.73%の精度でデータセットの93%を分類しますが、代替モジュールの組み合わせに基づいた2番目のレイヤーは、99%を超える最初のデータセットのさらに6.5%を標識しています。このようにして、JSTAPは正確なプリフィルターとして使用できます。つまり、サンプルの1%未満を追加の分析に転送するだけです。モジュールの再現性と直接展開のために、システムを公開しています。
このプロジェクトは、 LICENSEで見つけることができるAGPL3ライセンスの条件に基づいてライセンスされています。