Toolkit Hubungan & Investigasi Kode Berbasis Minhash (MCRIT)
McRit adalah kerangka kerja yang dibuat untuk menyederhanakan aplikasi algoritma MinHash dalam konteks kesamaan kode. Ini dapat digunakan untuk mengimplementasikan "shingler" dengan cepat, yaitu metode yang menyandikan sifat fungsi yang dibongkar, untuk kemudian digunakan untuk estimasi kesamaan melalui algoritma MinHash. Ini dirancang untuk bekerja dengan laporan pembongkaran yang dipancarkan oleh SMDA.
Penggunaan
Penggunaan berlabuh
Kami sangat merekomendasikan untuk menggunakan Docker-MCRIT yang dikemas sepenuhnya untuk penyebaran dan penggunaan sepele.
Pertama dan terutama, ini akan memastikan bahwa Anda memiliki versi yang sepenuhnya kompatibel di semua komponen, termasuk database untuk kegigihan dan frontend web untuk interaksi yang nyaman.
Penggunaan mandiri
Menginstal mcrit sendiri akan membutuhkan beberapa langkah lagi.
Untuk yang berikut ini, kami menganggap Ubuntu sebagai sistem operasi host.
Persyaratan instalasi Python tercantum dalam requirements.txt dan dapat diinstal menggunakan:
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
Secara default, MongoDB 5.0 digunakan sebagai backend, yang juga merupakan mode operasi yang disarankan karena menyediakan penyimpanan data yang persisten. Perintah berikut menguraikan contoh instalasi di Ubuntu:
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
Saat melakukan instalasi mandiri, Anda mungkin ingin menginstal modul mcrit berdasarkan repositori yang dikloning, seperti itu:
Setelah instalasi awal ini dan jika diinginkan, MCRIT dapat digunakan tanpa koneksi internet.
Operasi
Backend McRit umumnya dibagi menjadi dua komponen, server yang menyediakan antarmuka API untuk bekerja dan satu atau lebih pekerja yang memproses pekerjaan antrian. Mereka dapat dimulai dengan cangkang terpisah menggunakan:
Dan
Secara default, server API REST akan mendengarkan di http://127.0.0.1:8000/.
Interaksi
Terlepas dari pilihan Anda untuk instalasi, setelah berjalan, Anda dapat berinteraksi dengan backend mcrit.
Klien mcrit
Kami telah membuat modul klien Python yang mampu bekerja dengan semua titik akhir server yang tersedia.
Dokumentasi untuk modul klien ini sedang dalam pengembangan.
Mcrit cli
Ada juga CLI yang didasarkan pada paket klien ini, contoh:
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions Dokumentasi yang lebih luas dari McRit CLI tersedia di sini
Plugin mcrit Ida
Plugin IDA juga sedang dalam pengembangan. Untuk menggunakannya, pertama -tama buat config.py Anda sendiri dan buat perubahan yang diperlukan tergantung pada penyebaran instance mcrit Anda:
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
Kemudian cukup jalankan skrip yang ditemukan di
./plugins/ida/ida_mcrit.py
di Ida.
Data referensi
Pada bulan Juli 2023, kami mulai mengisi repositori GitHub yang berisi data referensi siap pakai untuk kompiler dan perpustakaan umum.
Sejarah Versi
- 2024-06-20 v1.3.17: Penghapusan pekerjaan dan pembersihan sekarang lebih kuat dan tidak akan secara tidak sengaja membersihkan sampel yang tidak diinginkan - @yankovs - thx !!
- 2024-05-10 v1.3.16: Pembersihan antrian telah diperluas untuk juga membersihkan file yang diunggah selama ketiga jenis kueri (dipetakan, belum dipetakan, SMDA).
- 2024-04-17 V1.3.15: Pekerja tipe
spawningworker sekarang akan menghentikan anak-anak setelah queueconfig.queue_spawningworker_children_timeout detik. - 2024-04-02 v1.3.14: Eksperimental: Pengenalan
spawningworker jenis pekerja baru-varian ini akan mengkonsumsi pekerjaan dari antrian seperti biasa tetapi menunda pelaksanaan pekerjaan yang sebenarnya ke dalam proses (sub) yang terpisah, yang seharusnya mengurangi masalah dengan alokasi memori yang terkunci. - 2024-04-02 v1.3.13: Saat membersihkan antrian, sekarang juga hapus semua pekerjaan yang gagal @yankovs-thx !!
- 2024-03-06 v1.3.12: Memperbaiki bug di mana perlindungan sampel terbaru dari pembersihan antrian akan menyebabkan kesalahan kunci seperti yang dilaporkan oleh @yankovs-thx !!
- 2024-02-21 V1.3.10: Bump SMDA ke 1.13.16, yang mencakup 200 instruksi lain dalam kategori yang lebih baik (mempengaruhi minhash).
- 2024-02-16 v1.3.9: Fitur pembersihan antrian otomatis yang sudah selesai dan terintegrasi (dinonaktifkan secara default) yang diusulkan oleh @yankovs-thx !!
- 2024-02-15 V1.3.8: Bump SMDA untuk mengatasi masalah dengan pengenalan versi dalam SMDAFunction, cetakan pengecualian tetap di McRitInterface plugin IDA (THX ke @MalWareFrank !!).
- 2024-02-12 V1.3.5: Minhash penghalasan sekarang akan menunjukkan persentase yang benar (THX ke @malwarefrank !!).
- 2024-02-02 v1.3.4: Perbaikan mini di plugin IDA untuk menghindari merujuk objek yang berpotensi tidak diinisialisasi (THX ke @R0NY123 !!).
- 2024-02-01 v1.3.2: Perbaiki: pencocokan non-paralelis sekarang mengeluarkan format data yang sama (thx ke @dannyquist !!).
- 2024-01-30 v1.3.1: Koneksi ke MongoDB sekarang sepenuhnya dapat dikonfigurasi (thx ke @dannyquist !!).
- 2024-01-24 v1.3.0: Breaking: Rilis tonggak dengan peningkatan pengindeksan untuk Pichash dan Minhash. Untuk memastikan kompatibilitas mundur penuh, perhitungan ulang semua hash direkomendasikan. Periksa panduan migrasi ini.
- 2024-01-23 v1.2.26: Pinning lief ke 0,13,2 untuk memastikan bahwa SMDA yang disematkan tetap kompatibel.
- 2024-01-09 V1.2.25: Pastikan kita dapat memberikan status sistem terlepas dari apakah ada
db_state dan db_timestamp atau tidak. - 2024-01-05 v1.2.24: Sekarang mendukung argumen "kueri" di CLI, serta pencocokan kompak (tanpa info kecocokan fungsi) untuk mengurangi jejak file.
- 2024-01-03 v1.2.23: Batasi ukuran ekspor maksimum untuk melindungi sistem terhadap kerusakan OOM.
- 2024-01-02 v1.2.22: Kelas data yang diperkenalkan untuk unikblocksResult dengan fungsionalitas kenyamanan.
- 2023-12-28 V1.2.21: McRitClient sekarang melakukan passthrough untuk pencocokan kueri biner.
- 2023-12-28 v1.2.20: Status sekarang menyediakan cap waktu pembaruan DB terakhir.
- 2023-12-13 v1.2.18: Periksa batas versus sampel_ids yang diteruskan ke getuniqueBlocks.
- 2023-12-05 V1.2.15: Menambahkan fungsionalitas kenyamanan ke objek pekerjaan, nomor versi yang disejajarkan dengan McRitWeb.
- 2023-11-24 v1.2.11: SMDA disematkan ke versi 1.12.7 Sebelum kami meningkatkan SMDA dan memperkenalkan migrasi basis data untuk menghitung ulang hash PIC + PICBLOCK dengan generalisasi yang ditingkatkan.
- 2023-11-17 v1.2.10: menambahkan kemampuan untuk mengatur token otorisasi untuk server melalui bidang header:
apitoken ; menambahkan kemampuan untuk memfilter oleh kelompok kerja; menambahkan kemampuan untuk gagal pekerjaan yatim. - 2023-10-17 v1.2.8: Perbaikan kecil dalam kelompok kerja.
- 2023-10-16 v1.2.6: Statistik antrian yang diringkas, klasifikasi pekerjaan yang disempurnakan.
- 2023-10-13 V1.2.4: Penghapusan antrian/pekerjaan yang terpapar untuk mengistirahatkan antarmuka, kecepatan kueri yang lebih baik untuk berbagai pencarian antrian melalui pengindeksan dan kueri MongoDB yang parameter.
- 2023-10-13 v1.2.3: Pekerja sekarang akan menghapus pendaftaran dari pekerjaan dalam proses jika mereka macet (THX ke @Yankovs untuk templat kode).
- 2023-10-03 V1.2.2: Pencocokan RESTRESULT untuk sampel min/max num (termasuk fix).
- 2023-10-02 V1.2.0: Rilis tonggak untuk Virus Bulletin 2023.
- 2023-09-18 V1.1.7: Bugfix: Pencocokan Tugas dengan 0 Band sekarang menonaktifkan pencocokan MinHash seperti yang seharusnya sebelumnya. Juga mencocokkan persentase kemajuan pekerjaan diperbaiki.
- 2023-09-15 v1.1.6: Bugfix dalam blockmatching, fungsionalitas kenyamanan untuk berinteraksi dengan objek pekerjaan.
- 2023-09-14 V1.1.5: Gunicorn yang Dironaktifkan sebagai Default WSGI Handler untuk saat ini karena masalah dengan panggilan yang tidak dikembalikan saat menangani panggilan komputasi-berat.
- 2023-09-14 V1.1.4: Bugfix: Tambahkan
requirements.txt ke data_files di setup.py untuk memastikannya tersedia untuk paket. - 2023-09-13 v1.1.3: Mengekstraksi beberapa konstanta kritis kinerja ke dalam parameter yang dapat dikonfigurasi di MinHashConfig dan StorageConfig, pelaporan kemajuan tetap untuk pencocokan batch, perbaikan bug: penggunaan gunicornconfig ke dataclass yang tepat.
- 2023-09-13 V1.1.1: Persyaratan / Pengaturan yang ramping, tidak termasuk
gunicorn untuk Windows (THX ke @Yankovs !!). - 2023-09-12 v1.1.0: Untuk penyebaran Linux, mcrit sekarang menggunakan
gunicorn alih-alih waitress sebagai server WSGI karena kinerja yang jauh lebih baik. Karena Gunicorn membutuhkan konfigurasi sendiri, ini perlu menabrak versi minor (THX ke @Yankovs !!). - 2023-09-08 V1.0.21: Semua metode McRitClient sekarang maju Apitokens/Nama pengguna ke backend.
- 2023-09-05 V1.0.20: Gunakan dua pelengkap untuk mewakili alamat dalam sampel, fungsi saat disimpan di MongoDB untuk mengatasi batasan BSON (THX ke @Yankovs).
- 2023-09-05 V1.0.19: Statistik sekarang menggunakan penghitung internal yang telah dibuat beberapa waktu yang lalu (THX ke @Yankovs).
- 2023-08-30 V1.0.18: Penilaian Linkhunt yang disempurnakan dan pengelompokan hasil melalui hubungan ICFG.
- 2023-08-24 v1.0.15: Upaya pertama terintegrasi pada kemampuan berburu tautan di MatchingResult.
- 2023-08-24 v1.0.13: Membangun kembali pita Minhash tidak akan lagi meledakkan penggunaan RAM. PERIKSA PATH Redundan yang Dihapus (THX ke @Yankovs).
- 2023-08-23 v1.0.12: Menambahkan kemampuan untuk membangun kembali pita minhash yang digunakan untuk pengindeksan.
- 2023-08-22 V1.0.11: Memperbaiki bug di mana saat mengimpor data curah,
function_name tidak juga ditambahkan sebagai function_label . - 2023-08-11 V1.0.10: Memperbaiki bug di mana ketika mengimpor data curah, fungsi_id tidak akan disesuaikan sebelum menambahkan minhash ke pita, mungkin mengarah ke fungsi_ids yang tidak ada.
- 2023-08-02 V1.0.9: Plugin IDA sekarang dapat memfilter dengan ukuran blok dan skor minhash, tata letak yang dioptimalkan dan pengalaman pengguna (THX untuk umpan balik ke @R0NY123 !!)
- 2023-07-28 V1.0.8: Plugin IDA sekarang dapat menampilkan grafik berwarna untuk fungsi jarak jauh dan melakukan kueri untuk picblockhash (untuk blok dasar) untuk fungsi yang saat ini dilihat.
- 2023-06-06 V1.0.7: Kemampuan penyaringan yang diperluas pada pencocokan REST.
- 2023-06-02 V1.0.6: Plugin IDA sekarang dapat tugas pencocokan pekerjaan, menunjukkan hasilnya dan label impor batch. Harmonisasi Pencocokan Hasil.
- 2023-05-22 v1.0.3: Lebih keanggotaan untuk verifikasi jalur saat menggunakan mcrit cli pada folder repo Malpedia.
- 2023-05-12 v1.0.1: Beberapa kemajuan impor label untuk plugin IDA. Perpanjangan API yang dipantulkan dari McRitWeb di McRitClient.
- 2023-04-10 V1.0.0: Rilis tonggak untuk Botconf 2023.
- 2023-04-10 V0.25.0: Plugin IDA sekarang dapat melakukan kueri fungsi untuk fungsi yang saat ini dilihat.
- 2023-03-24 V0.24.2: McRitClient dapat meneruskan nama pengguna/apitoken, AddJsonReport sekarang dapat maju.
- 2023-03-21 V0.24.0: FunctionEnterries sekarang dapat menyimpan FunctionLabelentries tambahan, bersama dengan mengirimkan pengguna/tanggal.
- 2023-03-17 V0.23.0: Sekarang dimungkinkan untuk meminta kecocokan untuk smdafunctions tunggal (secara sinkron).
- 2023-03-15 V0.22.0: McRitClient sekarang mendukung apitokens dan respons mentah untuk subset fungsionalitas.
- 2023-03-14 V0.21.0: Dukungan backend untuk penyaringan berbutir lebih halus.
- 2023-03-13 V0.20.6: Dukungan backend untuk memfilter keluarga/sampel berdasarkan skor di MatchResult.
- 2023-02-22 V0.20.4: Bugfix untuk menghitung skor unik dan mengakses hasil ini.
- 2023-02-21 V0.20.3: Mendukung kemampuan frontend dengan presentasi hasil.
- 2023-02-17 V0.20.2: Laporan Laporan Pertandingan Diperpanjang untuk mendukung peningkatan frontend.
- 2023-02-14 V0.20.0: Overhauled Console Client untuk menyederhanakan interaksi berbasis shell dengan backend.
- 2023-01-12 V0.19.4: Kemampuan penyaringan tambahan untuk pencocokan Hasil.
- 2022-12-13 V0.19.1: Sekarang dimungkinkan untuk membutuhkan jumlah pencocokan pita spesifik (lebih tinggi) untuk kandidat (yaitu mengurangi ketidakjelasan pencocokan).
- 2022-12-13 v0.18.x: Aktifkan pencocokan ID fungsi sewenang-wenang.
- 2022-11-25 V0.18.9: Pencocokan kueri yang dipercepat.
- 2022-11-18 V0.18.8: Penanganan penghapusan dan modifikasi yang diselaraskan, perbaikan kecil.
- 2022-11-13 V0.18.7: Penghapusan sampel yang dipercepat secara drastis.
- 2022-11-13 V0.18.6: Menambahkan fungsionalitas untuk memodifikasi sampel dan informasi keluarga yang ada.
- 2022-11-11 V0.18.2: Prosedur pencocokan peningkatan, sekarang harus dapat menangani biner yang lebih besar lebih kuat dan efisien.
- 2022-11-03 V0.18.1: Perbaikan minor.
- 2022-11-03 V0.18.0: Isolasi blok unik sekarang juga menghasilkan proposal untuk aturan Yara, output hasil yang direstrukturisasi.
- 2022-10-24 v0.17.4: setup.py yang diselaraskan dengan persyaratan, peningkatan efisiensi memori untuk memproses pekerjaan silang.
- 2022-10-18 V0.17.3: Menambahkan skrip kenyamanan untuk secara rekursif menghasilkan laporan SMDA dari folder semi-terstruktur.
- 2022-10-13 V0.17.2: Memperbaiki masalah OOM potensial selama perhitungan minhash dengan memproses fungsi yang akan di-hash dalam batch yang lebih kecil.
- 2022-10-12 V0.17.1: Menambahkan fungsi untuk menjadwalkan pekerjaan yang akan memastikan minhash telah dihitung untuk semua sampel/fungsi.
- 2022-10-11 V0.17.0: Cari blok unik sekarang menjadi pekerjaan asychronous melalui pekerja.
- 2022-10-11 V0.16.0: Sampel dari JobsQuery Jobs sekarang akan disimpan dengan sampel/functionEntries mereka untuk memungkinkan pemrosesan pos yang lebih baik.
- 2022-10-04 V0.15.4: Server sekarang dapat menampilkan versinya.
- 2022-09-28 V0.15.3: Mengatasi masalah kinerja untuk contoh yang lebih besar, menghasilkan urutan instruksi yang melarikan diri untuk blok unik.
- 2022-09-26 V0.15.0: CrossJobs sekarang di backend, mulai memberikan fungsionalitas untuk mengidentifikasi blok dasar yang unik dalam sampel.
- 2022-08-29 V0.14.2: Perbaikan minor untuk penempatan.
- 2022-08-22 V0.14.0: Pekerjaan sekarang dapat bergantung pada pekerjaan lain (persiapan untuk memindahkan crossjobs ke backend), peningkatan kualitas hidup untuk penanganan pekerjaan.
- 2022-08-17 V0.13.1: Menambahkan opsi Commandline untuk profil (membutuhkan cProfile).
- 2022-08-09 V0.13.0: Sekarang dapat melakukan kueri langsung yang efisien untuk pertandingan Pichash dan Picblockhash.
- 2022-08-09 V0.12.3: Bugfix untuk Familyentry
- 2022-08-08 V0.12.2: Perbaikan bug untuk pengiriman data XCFG, menambahkan ketergantungan yang hilang.
- 2022-08-08 V0.12.0: Sintaks pencarian lanjutan terintegrasi.
- 2022-08-03 V0.11.0: (Breaking) Keluarga sekarang diwakili dengan familyentry.
- 2022-08-03 V0.10.3: Sekarang meninggalkan fungsi XCFG data secara default di DB, akses terbuka ke sana melalui REST API dan McRitClient.
- 2022-07-29 V0.10.2: Menambahkan kemampuan untuk menghapus keluarga-sekarang juga menyimpan info XCFG untuk semua fungsi secara default.
- 2022-07-12 V0.10.1: Peningkatan kinerja.
- 2022-07-12 V0.10.0: (Breaking) Penanganan Pekerjaan Sederhana.
- 2022-05-13 V0.9.4: Perbaikan bug untuk menerima file yang dikirimkan.
- 2022-05-13 V0.9.3: Pembaruan lebih lanjut untuk pencocokan Hasil.
- 2022-05-13 V0.9.2: Menambahkan bidang lain dan lebih banyak fungsi kenyamanan dalam pencocokan REST For Better Access-itu adalah perubahan perubahan untuk pencocokan yang dibuat sebelumnya.
- 2022-05-05 V0.9.1: Pemrosesan pengiriman biner, perbaikan kecil untuk antrian Minhash-rilis awal.
- 2022-02-09 V0.9.0: Menambahkan picblock ke mcrit.
- 2022-01-19 V0.8.0: Migrasi klien dan contoh-contoh ke dalam repositori mcrit primer.
- 2021-12-16 v0.7.0: rilis pribadi awal.
Kredit & Catatan
Terima kasih kepada Steffen Enders dan Paul Hordiienko atas kontribusi mereka pada prototipe penelitian internal dari proyek ini! Terima kasih kepada Manuel Blatt atas kontribusinya yang luas dan refactorings dari proyek ini serta untuk modul klien!
Tarik Permintaan Selamat Datang! :)
Lisensi
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.