Repositori ini berisi kode untuk kertas ACSAC'19: "JSTAP: Pre-filter statis untuk deteksi JavaScript berbahaya".
Harap dicatat bahwa dalam kondisi saat ini, kode ini adalah POC dan bukan API siap-produksi yang sepenuhnya.
JSTAP adalah sistem deteksi javascript statis statis. Detektor kami terdiri dari sepuluh modul, termasuk lima cara berbeda dari kode abstrak (yaitu token, pohon sintaks abstrak (AST), grafik aliran kontrol (CFG), grafik ketergantungan program hanya mempertimbangkan aliran data (PDG-DFG), dan PDG), dan dua cara mengekstraksi fitur (leveraging nen-grams, atau nilai identitas). Berdasarkan frekuensi pola spesifik ini, kami melatih pengklasifikasi hutan acak untuk setiap modul.
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 ..
Untuk analisis AST, CFG, PDG-DFG, dan PDG, Anda harus menghasilkan PDG dari file yang dipertimbangkan secara terpisah dan sebelumnya. Setelah itu, berikan folder yang berisi PDG sebagai input kepada pelajar atau classifier (dalam kasus analisis berbasis AST, misalnya, kami hanya menggunakan informasi AST yang terkandung dalam PDG). Sebaliknya untuk pendekatan berbasis token, Anda harus memberikan langsung folder yang berisi file JS sebagai input ke pelajar/classifier.
Untuk menghasilkan PDG dari file JS (.js) dari folder folder_name, luncurkan perintah shell berikut dari lokasi folder pdg_generation :
$ python3 -c "from pdgs_generation import *; store_pdg_folder('FOLDER_NAME')"
PDG yang sesuai akan disimpan di folder_name/analisis/PDG.
Saat ini, kami menggunakan 2 CPU untuk proses pembuatan PDGS; Ini dapat diubah dengan memodifikasi variabel num_workers dari PDG_Generation/utility_df.py.
Untuk membangun model dari folder jinak dan jahat, berisi file JS (untuk analisis berbasis token) atau PDG (untuk analisis lain), gunakan opsi--D jinical jahat dan tambahkan kebenaran dasar yang sesuai dengan--L jinical jahat.
Pilih fitur yang muncul dalam set pelatihan dengan CHI2 pada 2 kumpulan data independen: --VD jinak-validasi jahat-validasi dengan kebenaran tanah yang sesuai-VL jinak berbahaya.
Tunjukkan tingkat analisis Anda dengan-level diikuti oleh 'token', 'ast', 'cfg', 'PDG-DFG' atau 'PDG'.
Tunjukkan fitur yang harus digunakan analisis dengan - -fitur diikuti oleh 'Ngrams', 'nilai'. Anda dapat memilih tempat untuk menyimpan fitur yang dipilih oleh CHI2 dengan --Analysis_path (JSTAP/analisis default).
Anda dapat memilih nama model dengan - -MN (default menjadi 'model') dan direktori dengan -md (default jstap/analisis).
$ python3 learner.py --d BENIGN/ MALICIOUS/ --l benign malicious --vd BENIGN-VALIDATE/ MALICIOUS-VALIDATE/ --vl benign malicious --level LEVEL --features FEATURES --mn FEATURES_LEVEL
Prosesnya serupa untuk proses klasifikasi.
Untuk mengklasifikasikan sampel JS dari folder Benign2 dan Malicious2, gunakan opsi - -dan -benign2 malicious2. Untuk memuat model fitur_level yang ada untuk digunakan untuk proses klasifikasi, gunakan opsi -m fitur_level. Simpan level analisis dan fitur yang sama seperti untuk pelatihan classifier:
$ python3 classifier.py --d BENIGN2/ MALICIOUS2/ --level LEVEL --features FEATURES --m FEATURES_LEVEL
Jika Anda mengetahui kebenaran dasar dari sampel yang Anda klasifikasi dan ingin mengevaluasi keakuratan classifier Anda, gunakan opsi -l dengan kebenaran dasar yang sesuai:
$ python3 classifier.py --d BENIGN2 MALICIOUS2 --l benign malicious --level LEVEL --features FEATURES --m FEATURES_LEVEL
Saat ini, kami menggunakan 2 CPU untuk proses pembelajaran dan klasifikasi; Ini dapat diubah dengan memodifikasi variabel num_workers dari classification/utility.py.
Untuk menghasilkan representasi grafis dari AST (save_path_ast), cfg (save_path_cfg), dan/atau pdg (save_path_pdg) dari satu file js input_file yang diberikan, kami memanfaatkan pustaka graphviz.
Untuk menginstal GraphViz:
pip3 install graphviz
On MacOS: install brew and then brew install graphviz
On Linux: install graphviz
Luncurkan perintah python3 berikut dari lokasi folder pdg_generation dan tunjukkan nama yang digunakan untuk menyimpan grafik:
>>> from pdgs_generation import *
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), save_path_ast='ast', save_path_cfg='cfg', save_path_pdg='pdg')
Waspadalah, GraphViz dapat melakukan kesalahan saat grafik menjadi terlalu besar.
Untuk hanya menampilkan grafik tanpa menyimpannya, gunakan nilai 'tidak ada'. Jika tidak dan per default, nilainya salah.
Catatan: Per default, PDG yang sesuai tidak akan disimpan. Untuk menyimpannya di folder PDG_Path yang ada, tambahkan parameter store_pdgs='PDG_PATH' ke perintah sebelumnya.
Jika Anda menggunakan JSTAP untuk penelitian akademik, Anda sangat dianjurkan untuk mengutip makalah berikut:
@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"
}
Mengingat keberhasilan platform Web, penyerang telah menyalahgunakan bahasa pemrograman utamanya, yaitu JavaScript, untuk memasang berbagai jenis serangan terhadap korban mereka. Karena volume besar skrip jahat seperti itu, sistem deteksi bergantung pada analisis statis untuk dengan cepat memproses sebagian besar sampel. Pendekatan statis ini tidak sempurna dan menyebabkan kesalahan klasifikasi. Juga, mereka tidak memiliki informasi semantik untuk melampaui pendekatan murni sintaksis. Dalam makalah ini, kami mengusulkan JSTAP, sistem deteksi JavaScript statis modular, yang memperluas kemampuan deteksi pipa leksikal dan AST yang ada dengan juga memanfaatkan informasi kontrol dan aliran data. Detektor kami terdiri dari sepuluh modul, termasuk lima cara berbeda untuk mengabstraksikan kode, dengan tingkat konteks dan informasi semantik yang berbeda, dan dua cara mengekstraksi fitur. Berdasarkan frekuensi pola spesifik ini, kami melatih pengklasifikasi hutan acak untuk setiap modul.
Dalam praktiknya, JSTAP mengungguli sistem yang ada, yang kami implementasikan dan uji pada dataset kami dengan total lebih dari 270.000 sampel. Untuk meningkatkan deteksi, kami juga menggabungkan prediksi beberapa modul. Lapisan pertama pemungutan suara dengan suara bulat mengklasifikasikan 93% dari dataset kami dengan akurasi 99,73%, sementara lapisan kedua berdasarkan kombinasi modul alternatif-label 6,5% lagi dari dataset awal kami dengan akurasi lebih dari 99%. Dengan cara ini, JSTAP dapat digunakan sebagai pre-filter yang tepat, yang berarti bahwa ia hanya perlu meneruskan kurang dari 1% sampel ke analisis tambahan. Untuk reproduktifitas dan penyebaran langsung modul kami, kami membuat sistem kami tersedia untuk umum.
Proyek ini dilisensikan berdasarkan ketentuan lisensi AGPL3 yang dapat Anda temukan dalam LICENSE .