이 저장소에는 CCS'19 논문의 대부분의 코드가 포함되어 있습니다.
현재 상태에서 코드는 POC이며 본격적인 생산 준비 API가 아닙니다.
Hidenoseek은 참신하고 일반적인 위장 공격으로 악의적 인 JavaScript 샘플의 구성을 변경하여 기존 양성 구문을 정확하게 재현합니다. 이를 위해 제어 및 데이터 흐름 정보가있는 유효한 JavaScript 입력의 AST (Abstract Syntax Tree)를 정적으로 향상시킵니다. 결과 데이터 구조를 프로그램 종속성 그래프 (PDG)라고합니다. 특히 Hidenoseek은 악의적 인 파일과 양성 파일 사이의 동형 하위 그래프를 찾습니다. 구체적으로, 그것은 양성 하위 항목을 악의적 인 동등 물 (동일한 구문 구조)으로 대체하고 AST를 변경하지 않고 양성 데이터 종속성을 조정하여 악의적 인 의미를 유지합니다.
윤리적 인 이유로, 우리는 복제 선택 모듈의 전체 코드 나 클론 교체 모듈을 게시하지 않기로 결정했습니다. 따라서이 Hidenoseek 버전은 구문 클론을 감지하는 데 사용될 수 있지만 다시 작성 하지는 않습니다.
install python3 # (tested with 3.6.7)
install nodejs # (tested with 8.10.0)
install npm # (tested with 3.5.2)
cd src
npm install escodegen # (tested with 1.9.1)
cd ..
Hidenoseek은 PDG 수준에서 직접 작동합니다. 2 개의 JavaScript 폴더 사이의 클론을 감지하려면 PDGS (참조, PDGS 생성)를 생성하고 src/samples_generation.replace_ast_df_folder 함수에 대한 입력으로 제공해야합니다.
2 개의 JavaScript 샘플 사이의 클론을 감지하려면 파일의 경로를 src/samples_generation.replace_ast function에 입력하는 것으로 직접 파일 경로를 제공해야합니다.
폴더 폴더 _name에서 JS 파일의 PDG를 생성하려면 src 폴더 위치에서 다음 쉘 명령을 시작하십시오.
$ python3 -c "from pdgs_generation import store_pdg_folder; store_pdg_folder('FOLDER_NAME')"
해당 PDG는 folder_name/pdg에 저장됩니다.
주어진 JS 파일 INPUT_FILE의 PDG를 생성하려면 src 폴더 위치에서 다음 Python3 명령을 시작하십시오.
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict())
기본적으로 해당 PDG가 저장되지 않습니다. 기존 PDG_PATH 폴더에 저장하려면 다음과 같습니다.
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), store_pdgs='PDG_PATH')
이 Hidenoseek 버전의 경우 PDG 생성 프로세스에 대해 60 초의 시간 초과를 추가했습니다 ( src/pdgs_generation.py 의 83 행).
Folder_Benign_PDGS 폴더에서 양성 PDGS와 Folder_Malicious_pdgs의 악성 PDG 간의 클론을 찾으려면 src 폴더 위치에서 다음 Python3 명령을 시작하십시오.
$ python3 -c "from samples_generation import replace_ast_df_folder; replace_ast_df_folder('FOLDER_BENIGN_PDGS', 'FOLDER_MALICIOUS_PDGS')"
각각의 악의적 인 PDG에 대해 폴더 PDG_NAME- 분석이 folder_malicious_pdgs에서 생성됩니다. 분석 된 각각의 양성 PDG에 대해 동일한 노드, 동일한 노드의 비율, 다른 토큰, 다른 벤치 마크와 같은 주요 결과를 요약 한 JSON 파일 (이름 형식 : BENING_MALIOICAC.JSON)이 포함됩니다.
또한, 우리는보고 된 클론의 양성 및 악성 코드를 stdout에 표시합니다. src/samples_generation.py 의 print_clones 라인 153에 대한 호출을 댓글을 달아서 멀티 프로세싱을 위해 비활성화 할 수 있습니다.
Benign JS 파일 BENING_JS와 Malicious One Malicious_js 사이의 클론을 찾으려면 src 폴더 위치에서 다음 Python3 명령을 시작하십시오.
>>> from samples_generation import replace_ast
>>> replace_ast('BENIGN_JS', 'MALICIOUS_JS')
JSON 파일 및 stdout의 관점에서 출력은 이전과 같습니다.
src/pdgs_generation.store_pdg_folder 및 src/samples_generation.replace_ast_df_folder 함수는 완전히 병렬화되었습니다. 두 경우 모두 현재 1 CPU를 사용하고 있지만 src/utility_df.py 에서 변수 num_workers를 수정하여이를 변경할 수 있습니다. 1 개 이상의 CPU를 사용하는 경우 src/samples_generation.py 의 print_clones 라인 153에 대한 호출을 주목해야합니다.
폴더 example/Benign-example 에는 example.js 논문의 양성 예제가 포함되어 있고 example/Malicious-seed/seed.js 논문의 악의적 인 종자입니다.
이 두 파일 사이의 클론을 감지하려면 src 폴더에서 다음 Python3 명령을 시작하십시오.
>>> from samples_generation import replace_ast
>>> replace_ast('../example/Benign-example/example.js', '../example/Malicious-seed/seed.js')
stdout에서 다음 출력을 얻을 수 있습니다.
INFO:Successfully selected 2 clones in XXXs
==============
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('type', 'application/x-shockwave-flash');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
[<node.Node object at XXX>, <node.Node object at XXX>]
obj.setAttribute('tabindex', '-1');
obj = document.createElement('object');
[<node.Node object at XXX>, <node.Node object at XXX>]
wscript.run('cmd.exe /c "<malicious powershell>;"', '0');
wscript = WScript.CreateObject('WScript.Shell');
--
==============
INFO:Could find 100.0% of the malicious nodes in the benign AST
우리의 도구는 2 개의 클론을 발견했습니다 (매번 2 개의 문으로 구성). 그것은 양성 예에서 전체 악의적 인 씨앗이 2 가지 다른 방식으로 다시 작성 될 수 있음을 의미합니다.
또한 추가 클론 정보가 포함 된 파일 example/Malicious-seed/seed-analysis/example_seed.json 작성되었습니다.
학업 연구에 Hidenoseek을 사용하는 경우 다음 논문을 인용하는 것이 좋습니다.
@inproceedings{fass2019hidenoseek,
author="Fass, Aurore and Backes, Michael and Stock, Ben",
title="{textsc{HideNoSeek}: Camouflaging Malicious JavaScript in Benign ASTs}",
booktitle="ACM CCS",
year="2019"
}
맬웨어 분야에서 학습 기반 시스템은 새로운 악의적 인 변형을 감지하기 위해 인기가되었습니다. 그럼에도 불구하고, 대상 시스템에 대한 구체적 이고 내부 지식을 가진 공격자는 잘못 분류 된 입력 샘플을 생성 할 수 있습니다. 실제로, 강력한 공격자 의 가정은 내부자 정보에 대한 액세스를 의미하기 때문에 현실적이지 않습니다. 대신 우리는 대신에 피하려는 시스템에 대한 정보가 필요하지 않고 구문 특징을 기반으로 전체 클래스의 검출기를 피하는 새로운 위장 공격 인 Hidenoseek을 제안합니다. 우리의 공격은 양성 구문을 재현하기 위해 악의적 인 JavaScript 샘플의 구성을 변경하는 것으로 구성됩니다.
이를 위해, 우리는 악의적 인 JavaScript 입력의 추상 구문 트리 (AST)를 기존 양성에 자동으로 다시 작성합니다. 특히 Hidenoseek은 악의적 인 씨앗을 사용하고 씨앗과 전통적인 양성 대본 사이의 동형 하위 그래프를 검색합니다. 구체적으로, 양성 하위 항목을 악의적 인 등가물 (동일한 구문 구조)으로 대체하고 AST 변경없이 양성 데이터 종속성을 조정하여 악의적 인 의미를 유지합니다. 실제로, 우리는 23 개의 악의적 인 씨앗을 활용하여 91,020 개의 악성 스크립트를 생성하여 Alexa Top 10,000 웹 페이지의 asts를 완벽하게 재현했습니다. 또한 각 Alexa Top 10과 동일한 AST를 가진 평균 14 개의 다른 악성 샘플을 생산할 수 있습니다.
전반적으로, 표준 훈련 된 분류기는 Hidenoseek 입력을 갖는 99.98%의 오 탐지를 가지고 있으며, 이러한 샘플에 대해 훈련 된 분류기는 88.74% 이상의 오 탐지를 가지고있어 대상 정적 탐지기를 신뢰할 수 없게 만듭니다.
이 프로젝트는 LICENSE 에서 찾을 수있는 AGPL3 라이센스의 조건에 따라 라이센스가 부여됩니다.