____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete (PM) mengatur ninja biner dan grakn.ai untuk membantu analisis biner statis untuk tujuan menemukan bug dalam perangkat lunak. PM memanfaatkan Binary Ninja MLIL SSA untuk mengekstraksi makna semantik tentang instruksi individu, operasi, status register/variabel, dan aliran kontrol keseluruhan.
PM memigrasikan data ini ke Grakn - grafik pengetahuan yang memberi kita kemampuan untuk mendefinisikan ontologi khusus domain untuk data dan menulis aturan inferensi yang kuat untuk membentuk hubungan antara data yang tidak ingin kita (atau tidak bisa) disimpan secara eksplisit. Heeh, seberapa rapi itu?
Proyek ini dirilis bersama dengan pembicaraan Derbycon 2017 berjudul "Membantu Analisis Statis: Menemukan Kerentanan dalam Target Biner Melalui Kesimpulan Grafik Pengetahuan." Anda dapat menonton pembicaraan itu di sini.
Prototipe awal Paper Machete dan basis kode publik dikembangkan oleh peneliti keamanan di Battelle Memorial Institute. Saat proyek ini matang, kami berharap Anda akan merasa berguna dalam penelitian Anda sendiri dan mempertimbangkan berkontribusi pada proyek.
Rangkaian ILS BNIL mudah dikerjakan, dengan menyenangkan, dan dapat dibaca manusia. Di titik mana pun kita dapat memutuskan untuk memanfaatkan tingkat dan bentuk IL lainnya dengan sedikit upaya pengembangan di pihak kita. Ketika Anda menambahkan bahwa kemampuan untuk mengangkat beberapa arsitektur dan menulis pengangkat khusus, kami memiliki sedikit alasan untuk tidak menggunakan BNIL.
Grakn's Query Language (GRAQL) mudah dipelajari dan intuitif, yang sangat penting pada tahap awal penelitian ini sementara kami masih menulis kueri untuk memodelkan pola kerentanan yang dicari peneliti saat melakukan analisis statis.
Kemampuan untuk menulis ontologi spesifik domain kita sendiri memungkinkan kita bereksperimen dengan cepat dengan ide-ide kueri baru dan cara-cara membuat kueri kita kurang kompleks. Ketika kita mengalami kasus di mana kita berpikir "gee, jika aku hanya memiliki akses ke hubungan antara ..." kita dapat memodifikasi aturan ontologi dan inferensi kita untuk mendapatkan informasi itu.
Sementara permainan akhir untuk PM adalah untuk menghilangkan kebutuhan untuk pertanyaan yang ditulis manusia, faktanya adalah kita mulai dari persegi. Yang berarti banyak pertanyaan untuk memodelkan pola yang dicari oleh para peneliti kerentanan manusia saat berburu bug.
Kertas parang membutuhkan Binaryninja v1.1, Grakn v1.4.2, pengemudi python grakn, dan java jre
Kami telah menyertakan beberapa pertanyaan dasar untuk memulai jika Anda ingin bermain -main dengan PM. Seperti yang dapat Anda bayangkan, tidak ada permintaan "peluru perak" yang akan menemukan semua manifestasi dari kelas kerentanan tertentu. Karena itu, kami telah memasukkan versi untuk setiap kueri CWE. Saat kami menambahkan metode baru untuk menemukan CWE yang sama, kami akan menambahkan skrip dengan bertambahnya nomor versi untuk membedakan.
cwe_120_v1.py - Tes untuk penggunaan fungsi yang tidak aman 'gets ()' (CWE -120)
cwe_121_v1.py - Tes untuk buffer overflows (CWE -121)
cwe_129_v1.py - Tes untuk Periksa Batas yang Hilang (CWE -129)
cwe_134_v1.py - Tes untuk kerentanan string format (CWE -134)
cwe_788_v1.py - Tes untuk Batas Hilang Periksa indeks array (CWE -788)
Untuk penggunaan dasar, jalankan skrip paper_machete.py dan ikuti petunjuknya. Untuk penggunaan yang lebih lanjut, silakan baca wiki.
Biasanya Anda akan mulai dengan opsi [1] dan teruskan jalan ke opsi [3] . Jika Anda mengalami masalah apa pun dengan opsi penggunaan Grakn [4] untuk mengatur ulang Grakn ke keadaan bersih dan coba lagi.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
Opsi [1] mencantumkan semua file yang dapat dieksekusi di direktori /analysis . Jadi tempatkan setiap executable yang ingin Anda analisis di /analysis . Opsi ini akan menjalankan pmanalyze.py dan menghasilkan file JSON di direktori /analysis .
Setelah Anda menganalisis file dengan [1] dan menghasilkan file JSON yang dihasilkan, mereka akan muncul sebagai pilihan dalam opsi [2] . Memilih file JSON di Opsi [2] akan memigrasi data ke Grakn.
Sekarang Anda memiliki data di Grakn, Anda dapat menggunakan opsi [3] . Ini akan memulai semua skrip di /queries terhadap ruang kunci pilihan Anda. Jika Anda menulis pola kueri Anda sendiri, cukup lemparkan ke dalam /queries dan opsi [3] akan menjalankannya juga.