Alat analisis statis untuk mendeteksi kebocoran data uji di buku catatan Python
Ini adalah alat kertas ASE'22: kebocoran data dalam buku catatan: deteksi statis dan proses yang lebih baik. Demo online juga tersedia. Untuk skrip dan materi evaluasi kami, silakan merujuk ke repo ini.
git submodule update --init --recursive (silakan merujuk ke submodule untuk membangun proyek).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h . git submodule update --init --recursive .requirements.txt , yang akan diinstal dalam wadah dan digunakan oleh Pyright.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . Semua buku catatan yang dianalisis harus dikonversi menjadi file python dan disimpan di /path/to/dir . Untuk test.py file input yang diberikan, output html file test.html akan dihasilkan jika -o flag ditentukan.
Dalam test.html , kami menunjukkan hasil analisis di samping kode input. Tabel ringkasan tentang masalah kebocoran yang terdeteksi ditampilkan di atas. Pengguna juga dapat menggunakan tombol interaktif untuk menyoroti kode yang relevan dan menavigasi melalui segmen kode yang berbeda.
Diberikan file python, src/main.py pertama -tama parsing input ke ast. Kemudian memberi makan AST ke instance GlobalCollector (dari global_collector.py ) yang mengumpulkan variabel global yang tidak dapat kami ganti nama dalam transformasi selanjutnya, yang akan kami abaikan nanti.
Selanjutnya, ini memberi makan AST ke instance codetransformer (dari irgen.py ) yang menerjemahkan kode python asli ke versi yang lebih sederhana yang 1) memecah pernyataan kompleks ke beberapa yang lebih sederhana, dan 2) menerjemahkan kode ke formulir penugasan tunggal statis (SSA).
Kemudian memanggil mesin Inference Type pada file kode yang ditransformasikan. Dengan informasi inferensi tipe, itu mengonversi file kode menjadi fakta datalog yang dapat dibaca oleh analisis akhir, menggunakan FactGenerator dari factgen.py .
Akhirnya, ia melakukan analisis datalog ( main.dl ) pada fakta yang dihasilkan dan hasil output dalam direktori yang sama.
src
├── factgen.py: convert transformed code to datalog facts
├── global_collector.py: collect global variables
├── __init__.py
├── irgen.py: transform code to simpler SSA form
├── main.dl: main datalog analysis that analyzes leakage
├── main.py: run analysis on a single file
├── render.py: output a html file based on analysis results and original code
├── run.py: run analysis on multiple files
└── scope.py: manage variable scopes for renaming purposes