Repositori ini berisi sebagian besar kode makalah CCS'19 kami: "Hidenoseek: menyamarkan javascript berbahaya di jinak asts", yaitu:
Harap dicatat bahwa dalam kondisi saat ini, kode ini adalah POC dan bukan API siap-produksi yang sepenuhnya.
Hidenoseek adalah serangan kamuflase yang baru dan generik, yang mengubah konstruksi sampel javascript berbahaya untuk secara tepat mereproduksi sintaks jinak yang ada. Untuk tujuan ini, kami secara statis meningkatkan pohon sintaksis abstrak (ASTS) dari input javascript yang valid dengan informasi kontrol dan aliran data. Kami merujuk pada struktur data yang dihasilkan sebagai Grafik Ketergantungan Program (PDG). Secara khusus, Hidenoseek mencari subgraph isomorfik antara file jahat dan jinak. Secara khusus, ini menggantikan sub-ATS jinak dengan kesetaraan jahatnya (struktur sintaksis yang sama) dan menyesuaikan ketergantungan data jinak-tanpa mengubah AST–, sehingga semantik berbahaya disimpan.
Untuk alasan etis, kami memutuskan untuk menerbitkan kode lengkap modul pemilihan klon kami maupun modul pengganti klon kami. Oleh karena itu, versi Hidenoseek ini dapat digunakan untuk mendeteksi klon sintaksis, tetapi tidak menulis ulang .
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 bekerja langsung di level PDG. Untuk mendeteksi klon antara 2 folder JavaScript, Anda harus menghasilkan PDG sebelumnya (lih. Generasi PDGS) dan memberikannya sebagai input ke fungsi src/samples_generation.replace_ast_df_folder .
Untuk mendeteksi klon antara 2 sampel JavaScript, Anda harus memberikan jalur file secara langsung sebagai input ke fungsi src/samples_generation.replace_ast .
Untuk menghasilkan PDG file JS dari folder folder_name, luncurkan perintah shell berikut dari lokasi folder src :
$ python3 -c "from pdgs_generation import store_pdg_folder; store_pdg_folder('FOLDER_NAME')"
PDG yang sesuai akan disimpan dalam folder_name/PDG.
Untuk menghasilkan PDG dari satu file JS input_file yang diberikan, luncurkan perintah python3 berikut dari lokasi folder src :
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict())
Per default, PDG yang sesuai tidak akan disimpan. Untuk menyimpannya di folder PDG_Path yang ada, hubungi:
>>> from pdgs_generation import get_data_flow
>>> pdg = get_data_flow('INPUT_FILE', benchmarks=dict(), store_pdgs='PDG_PATH')
Perhatikan bahwa, untuk versi Hidenoseek ini, kami menambahkan batas waktu 60 detik untuk proses pembuatan PDG (lih. Line 83 dari src/pdgs_generation.py ).
Untuk menemukan klon antara PDG jinak dari folder folder_benign_pdgs dan yang berbahaya dari folder_malicious_pdgs, luncurkan perintah python3 berikut dari lokasi folder src :
$ python3 -c "from samples_generation import replace_ast_df_folder; replace_ast_df_folder('FOLDER_BENIGN_PDGS', 'FOLDER_MALICIOUS_PDGS')"
Untuk setiap PDG jahat, folder PDG_Name-analisis akan dibuat di folder_malicious_pdgs. Untuk setiap PDG jinak yang dianalisis, itu akan berisi file JSON (format nama: benign_malicious.json), yang merangkum temuan utama, seperti node yang identik, proporsi node yang identik, token berbeda, tolok ukur yang berbeda ...
Selain itu, kami menampilkan kode jinak dan jahat dari klon yang dilaporkan. Ini dapat dinonaktifkan, misalnya, untuk multiprosesing, dengan mengomentari panggilan ke print_clones Line 153 dari src/samples_generation.py .
Untuk menemukan klon antara file js jinak benign_js dan salah satu malicious_js, luncurkan perintah python3 berikut dari lokasi folder src :
>>> from samples_generation import replace_ast
>>> replace_ast('BENIGN_JS', 'MALICIOUS_JS')
Output, dalam hal file JSON dan di stdout, adalah seperti sebelumnya.
src/pdgs_generation.store_pdg_folder dan src/samples_generation.replace_ast_df_folder fungsi sepenuhnya diparalelkan. Dalam kedua kasus, kami saat ini menggunakan 1 CPU, tetapi Anda dapat mengubahnya dengan memodifikasi variabel num_workers dari src/utility_df.py . Jika Anda menggunakan lebih dari 1 CPU, Anda harus mengomentari panggilan ke print_clones Line 153 dari src/samples_generation.py .
example/Benign-example berisi example.js example/Malicious-seed/seed.js
Untuk mendeteksi klon antara 2 file ini, luncurkan perintah python3 berikut dari lokasi folder src :
>>> from samples_generation import replace_ast
>>> replace_ast('../example/Benign-example/example.js', '../example/Malicious-seed/seed.js')
Anda akan mendapatkan output berikut di 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
Alat kami menemukan 2 klon (setiap kali terdiri dari 2 pernyataan). Ini berarti bahwa seluruh benih jahat dapat ditulis ulang dalam 2 cara berbeda dalam contoh jinak.
Selain itu, example/Malicious-seed/seed-analysis/example_seed.json , yang berisi informasi klon tambahan, dibuat.
Jika Anda menggunakan Hidenoseek untuk penelitian akademik, Anda sangat dianjurkan untuk mengutip makalah berikut:
@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"
}
Di bidang malware, sistem berbasis pembelajaran telah menjadi populer untuk mendeteksi varian berbahaya baru. Namun demikian, penyerang dengan pengetahuan spesifik dan internal tentang sistem target mungkin dapat menghasilkan sampel input yang salah diklasifikasikan. Dalam praktiknya, asumsi penyerang yang kuat tidak realistis karena menyiratkan akses ke informasi orang dalam. Kami malah mengusulkan Hidenoseek, serangan kamuflase baru dan generik, yang menghindari seluruh kelas detektor berdasarkan fitur sintaksis, tanpa memerlukan informasi tentang sistem yang ingin dihindari. Serangan kami terdiri dari mengubah konstruksi sampel JavaScript berbahaya untuk mereproduksi sintaks jinak.
Untuk tujuan ini, kami secara otomatis menulis ulang pohon sintaksis abstrak (ASTS) dari input javascript berbahaya ke yang jinak yang ada. Secara khusus, Hidenoseek menggunakan biji jahat dan mencari subgraph isomorfik antara biji dan skrip jinak tradisional. Secara khusus, ini menggantikan sub-pass jinak dengan kesetaraan jahatnya (struktur sintaksis yang sama) dan menyesuaikan ketergantungan data jinak-tanpa mengubah AST--, sehingga semantik berbahaya disimpan. Dalam praktiknya, kami memanfaatkan 23 biji berbahaya untuk menghasilkan 91.020 skrip jahat, yang dengan sempurna mereproduksi ast 10.000 halaman web Alexa. Juga, kita dapat memproduksi rata -rata 14 sampel jahat yang berbeda dengan AST yang sama dengan masing -masing Alexa Top 10.
Secara keseluruhan, pengklasifikasi standar yang terlatih memiliki 99,98% negatif palsu dengan input Hidenoseek, sementara classifier yang dilatih pada sampel tersebut memiliki lebih dari 88,74% positif palsu, menjadikan detektor statis yang ditargetkan tidak dapat diandalkan.
Proyek ini dilisensikan berdasarkan ketentuan lisensi AGPL3, yang dapat Anda temukan dalam LICENSE .