ที่เก็บนี้มีรหัสสำหรับกระดาษ ACSAC'19: "JSTAP: ตัวกรองล่วงหน้าแบบคงที่สำหรับการตรวจจับ JavaScript ที่เป็นอันตราย"
โปรดทราบว่าในสถานะปัจจุบันรหัสเป็น POC และไม่ใช่ API ที่พร้อมผลิตเต็มรูปแบบ
JSTAP เป็นระบบตรวจจับจาวาสคริปต์ที่เป็นอันตรายแบบโมดูลาร์ เครื่องตรวจจับของเราประกอบด้วยสิบโมดูลรวมถึงห้าวิธีที่แตกต่างกันของรหัสนามธรรม (คือโทเค็น, ทรีไวยากรณ์นามธรรม (AST), กราฟการควบคุมการไหล (CFG), กราฟการพึ่งพาโปรแกรมโดยพิจารณาจากการไหลของข้อมูลเท่านั้น (PDG-DFG) และ PDG) ขึ้นอยู่กับความถี่ของรูปแบบเฉพาะเหล่านี้เราฝึกอบรมตัวแยกประเภทป่าแบบสุ่มสำหรับแต่ละโมดูล
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 คุณควรสร้าง PDGs ของไฟล์ที่พิจารณาแยกจากกันและล่วงหน้า หลังจากนั้นให้โฟลเดอร์ที่มี PDGs เป็นอินพุตไปยังผู้เรียนหรือตัวจําแนก (ในกรณีของการวิเคราะห์ที่ใช้ AST เช่นเราใช้ข้อมูล AST ที่มีอยู่ใน PDG เท่านั้น) ในทางตรงกันข้ามสำหรับวิธีการที่ใช้โทเค็นคุณควรให้โฟลเดอร์ที่มีไฟล์ JS เป็นอินพุตไปยังผู้เรียน/ตัวจําแนกโดยตรง
ในการสร้าง PDGs ของไฟล์ JS (.js) จากโฟลเดอร์โฟลเดอร์ cholder_name ให้เรียกใช้คำสั่งเชลล์ต่อไปนี้จากตำแหน่งโฟลเดอร์ pdg_generation :
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
PDGs ที่เกี่ยวข้องจะจัดเก็บใน folder_name/การวิเคราะห์/PDG
ขณะนี้เรากำลังใช้ซีพียู 2 ตัวสำหรับกระบวนการสร้าง PDGS สิ่งนี้สามารถเปลี่ยนแปลงได้โดยการแก้ไขตัวแปร num_workers จาก pdg_generation/utility_df.py
ในการสร้างแบบจำลองจากโฟลเดอร์ที่เป็นพิษเป็นภัยและเป็นอันตรายมีไฟล์ JS (สำหรับการวิเคราะห์ตามโทเค็น) หรือ PDGs (สำหรับการวิเคราะห์อื่น ๆ ) ให้ใช้ตัวเลือก-d เป็นอันตรายและเพิ่มความจริงภาคพื้นดินที่สอดคล้องกัน
เลือกคุณสมบัติที่ปรากฏในชุดการฝึกอบรมกับ Chi2 ในชุดข้อมูลอิสระ 2 ชุด:-VD การตรวจสอบความเป็นอันตรายที่เป็นอันตรายต่อความจริงที่สอดคล้องกัน-VL เป็นอันตราย
ระบุระดับการวิเคราะห์ของคุณด้วย-ระดับตามด้วย 'โทเค็น', 'AST', 'CFG', 'PDG-DFG' หรือ 'PDG'
ระบุคุณสมบัติที่การวิเคราะห์ควรใช้กับ -คุณสมบัติตามด้วย 'ngrams', 'ค่า' คุณสามารถเลือกสถานที่จัดเก็บคุณสมบัติที่เลือกโดย 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
กระบวนการนี้คล้ายกันสำหรับกระบวนการจำแนกประเภท
ในการจำแนกตัวอย่าง JS จากโฟลเดอร์ Benign2 และ Malicious2 ให้ใช้ตัวเลือก -d Benign2 Malicious2 ในการโหลดคุณสมบัติของโมเดลที่มีอยู่ _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 ตัวสำหรับกระบวนการเรียนรู้และการจำแนกประเภท สิ่งนี้สามารถเปลี่ยนแปลงได้โดยการแก้ไขตัวแปร num_workers จากการจำแนก/utility.py
ในการสร้างการแสดงกราฟิกของ AST (save_path_ast), cfg (save_path_cfg) และ/หรือ pdg (save_path_pdg) ของไฟล์ js ที่ได้รับหนึ่งรายการอินพุต js เราใช้ประโยชน์จากไลบรารี graphviz
ในการติดตั้ง graphviz:
pip3 install graphviz
On MacOS: install brew and then brew install graphviz
On Linux: install graphviz
เรียกใช้คำสั่ง python3 ต่อไปนี้จากตำแหน่งโฟลเดอร์ pdg_generation และระบุชื่อที่จะเก็บกราฟ:
>>> 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"
}
ด้วยความสำเร็จของแพลตฟอร์มเว็บผู้โจมตีได้ใช้ภาษาการเขียนโปรแกรมหลักคือ JavaScript เพื่อติดตั้งการโจมตีประเภทต่าง ๆ ในเหยื่อของพวกเขา เนื่องจากสคริปต์ที่เป็นอันตรายจำนวนมากระบบตรวจจับต้องใช้การวิเคราะห์แบบคงที่เพื่อประมวลผลตัวอย่างส่วนใหญ่อย่างรวดเร็ว วิธีการคงที่เหล่านี้ไม่ผิดพลาดและนำไปสู่การจำแนกประเภท นอกจากนี้พวกเขายังขาดข้อมูลความหมายที่จะก้าวข้ามแนวทางวากยสัมพันธ์อย่างหมดจด ในบทความนี้เราเสนอ JSTAP ซึ่งเป็นระบบตรวจจับ JavaScript แบบคงที่แบบแยกส่วนซึ่งขยายความสามารถในการตรวจจับของท่อ Lexical และ AST ที่มีอยู่เดิมโดยใช้ประโยชน์จากการควบคุมและข้อมูลการไหลของข้อมูล เครื่องตรวจจับของเราประกอบด้วยสิบโมดูลรวมถึงห้าวิธีที่แตกต่างกันของรหัสนามธรรมที่มีระดับบริบทที่แตกต่างกันและข้อมูลความหมายและสองวิธีในการแยกคุณสมบัติ ขึ้นอยู่กับความถี่ของรูปแบบเฉพาะเหล่านี้เราฝึกอบรมตัวแยกประเภทป่าแบบสุ่มสำหรับแต่ละโมดูล
ในทางปฏิบัติ JSTAP มีประสิทธิภาพสูงกว่าระบบที่มีอยู่ซึ่งเราจะทำการปรับแต่งใหม่และทดสอบในชุดข้อมูลของเรารวมมากกว่า 270,000 ตัวอย่าง เพื่อปรับปรุงการตรวจจับเรายังรวมการทำนายของหลายโมดูล ชั้นแรกของการลงคะแนนเป็นเอกฉันท์จำแนก 93% ของชุดข้อมูลของเราที่มีความแม่นยำ 99.73% ในขณะที่ชั้นที่สอง-อิงตามการรวมกันของโมดูลทางเลือก-ป้ายกำกับอีก 6.5% ของชุดข้อมูลเริ่มต้นของเราที่มีความแม่นยำสูงกว่า 99% ด้วยวิธีนี้ JSTAP สามารถใช้เป็นตัวกรองล่วงหน้าที่แม่นยำซึ่งหมายความว่ามันจะต้องส่งต่อน้อยกว่า 1% ของตัวอย่างไปยังการวิเคราะห์เพิ่มเติม สำหรับการทำซ้ำและการปรับใช้โดยตรงของโมดูลของเราเราทำให้ระบบของเราเปิดเผยต่อสาธารณะ
โครงการนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาต AGPL3 ซึ่งคุณสามารถค้นหาได้ใน LICENSE