이 저장소에는 ACSAC'19 논문의 코드가 포함되어 있습니다. "JSTAP : 악의적 인 JavaScript 감지를위한 정적 프리 필터".
현재 상태에서 코드는 POC이며 본격적인 생산 준비 API가 아닙니다.
JSTAP는 모듈 식 정적 악성 JavaScript 감지 시스템입니다. 우리의 검출기는 코드의 5 가지 추상화 방법 (즉, 토큰, 초록 구문 트리 (AST), CFG (Control Flow Graph), 데이터 흐름 만 고려한 프로그램 종속성 그래프 (PDG-DFG) 및 PDG (N-GRAMS 또는 식별자 값을 활용하는 두 가지 방법)를 포함하여 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 파일을 포함하는 폴더를 학습자/분류기에 대한 입력으로 직접 제공해야합니다.
폴더 폴더 _name에서 JS 파일 (.js)의 PDG를 생성하려면 pdg_generation 폴더에서 다음 쉘 명령을 시작하십시오.
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
해당 PDG는 Folder_Name/Analysis/PDG에 저장됩니다.
현재 우리는 PDGS 생성 프로세스에 2 개의 CPU를 사용하고 있습니다. PDG_GENERATION/UTIMITION_DF.PY에서 변수 NUM_WORKERS를 수정하여 변경할 수 있습니다.
JS 파일 (토큰 기반 분석 용) 또는 PDG (다른 분석의 경우)를 포함하는 폴더 양성 및 악성 폴더에서 모델을 구축하려면 옵션-d 양성 악성 악성 옵션을 사용하고 해당 근거 진실을 -1 양성 악성으로 추가하십시오.
2 개의 독립적 인 데이터 세트에서 Chi2와 함께 훈련 세트에 나타나는 기능을 선택하십시오. --vd는 해당 근거 진실 -VL 양성 악의와 함께 Validate 악성 검사.
'토큰', 'ast', 'cfg', 'pdg-dfg'또는 'pdg'로 분석 수준을 표시하십시오.
분석이 -기능에 사용하고 'ngrams', 'value'를 사용하여 사용해야하는 기능을 나타냅니다. chi2에서 선택한 기능을 -analysis_path (기본 JSTAP/Analysis)로 저장할 위치를 선택할 수 있습니다.
-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
프로세스는 분류 프로세스에서 유사합니다.
폴더 Benign2 및 Malicious2에서 JS 샘플을 분류하려면 옵션 -D BENING2 MALIICION2를 사용하십시오. 분류 프로세스에 사용될 기존 모델 기능을로드하려면 옵션 -m feations_level 옵션을 사용하십시오. 분류기의 교육과 동일한 분석 수준과 기능을 유지하십시오.
$ python3 classifier.py --d BENIGN2/ MALICIOUS2/ --level LEVEL --features FEATURES --m FEATURES_LEVEL
분류하는 샘플의 근거 진실을 알고 있으며 분류기의 정확도를 평가하려는 경우 해당 근거 진실과 함께 옵션을 사용하십시오.
$ python3 classifier.py --d BENIGN2 MALICIOUS2 --l benign malicious --level LEVEL --features FEATURES --m FEATURES_LEVEL
현재 학습 및 분류 프로세스에 2 개의 CPU를 사용하고 있습니다. Classification/Utility.py에서 변수 num_workers를 수정하여 변경할 수 있습니다.
주어진 JS 파일 input_file의 ast (save_path_ast), cfg (save_path_cfg) 및/또는 pdg (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가 오류를 던질 수 있습니다.
저장하지 않고 그래프를 표시하려면 '없음'값을 사용하십시오. 그렇지 않으면 기본적으로 값은 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"
}
웹 플랫폼의 성공을 감안할 때, 공격자들은 주요 프로그래밍 언어, 즉 JavaScript를 남용하여 희생자에 대한 다양한 유형의 공격을 촉구했습니다. 이러한 악의적 인 스크립트의 대량으로 인해 탐지 시스템은 정적 분석에 의존하여 대다수의 샘플을 신속하게 처리합니다. 이러한 정적 접근 방식은 불가능하지 않으며 잘못 분류로 이어집니다. 또한 순전히 구문 적 접근을 넘어서는 의미 정보가 부족합니다. 이 논문에서는 제어 및 데이터 흐름 정보를 활용하여 기존 어휘 및 AST 기반 파이프 라인의 탐지 기능을 확장하는 모듈 식 정적 JavaScript 감지 시스템 인 JSTAP를 제안합니다. 우리의 검출기는 코드의 5 가지 추상화 방법, 컨텍스트와 의미 정보 수준이 다르고 기능을 추출하는 두 가지 방법을 포함하여 10 개의 모듈로 구성됩니다. 이러한 특정 패턴의 빈도에 따라 각 모듈에 대한 임의의 산림 분류기를 훈련시킵니다.
실제로 JSTAP는 기존 시스템을 능가하여 총 270,000 개가 넘는 샘플을 다시 구현하고 테스트했습니다. 탐지를 개선하기 위해 여러 모듈의 예측도 결합합니다. 만장일치 투표의 첫 번째 계층은 데이터 세트의 93%를 99.73%의 정확도로 분류하는 반면, 대체 모듈 조합에서 두 번째 레이어 기반은 99% 이상의 정확도를 가진 초기 데이터 세트의 또 다른 6.5%를 표시합니다. 이러한 방식으로 JSTAP는 정확한 프리 필터로 사용될 수 있습니다. 즉, 샘플의 1% 미만을 추가 분석으로 전달하면됩니다. 모듈의 재현성과 직접 배포 가능성을 위해 시스템을 공개적으로 이용할 수 있도록합니다.
이 프로젝트는 LICENSE 에서 찾을 수있는 AGPL3 라이센스의 조건에 따라 라이센스가 부여됩니다.