


CWE_CHECKER adalah serangkaian cek untuk mendeteksi kelas bug umum seperti dereferensi pointer null dan luapan buffer. Kelas -kelas bug ini secara resmi dikenal sebagai enumerasi kelemahan umum (CWE). Cek didasarkan pada berbagai teknik anaylsis mulai dari heuristik sederhana hingga analisis aliran data berbasis interpretasi abstrak. Tujuan utamanya adalah membantu analis untuk dengan cepat menemukan jalur kode yang berpotensi rentan.
Fokus utamanya adalah binari ELF yang biasanya ditemukan pada sistem operasi Linux dan UNIX. CWE_Checker menggunakan Ghidra untuk membongkar binari menjadi satu representasi perantara umum dan mengimplementasikan analisisnya sendiri pada IR ini. Oleh karena itu, analisis dapat dijalankan pada sebagian besar arsitektur CPU yang dapat dibongkar Ghidra, yang menjadikan CWE_Checker alat yang berharga untuk analisis firmware.
Argumen berikut harus meyakinkan Anda untuk mencoba CWE_CHECKER :

Cara paling sederhana adalah dengan menarik gambar Docker terbaru dari Registry Container GitHub:
docker pull ghcr.io/fkie-cad/cwe_checker:latest menghasilkan gambar berdasarkan cabang master saat ini.docker pull ghcr.io/fkie-cad/cwe_checker:stable menghasilkan gambar berdasarkan versi rilis stabil terbaru.docker pull ghcr.io/fkie-cad/cwe_checker:v0.9 menghasilkan gambar berdasarkan versi rilis stabil v0.9. Namun, disarankan untuk beralih ke rilis stabil yang lebih baru segera setelah mereka diterbitkan, karena perbaikan antara versi stabil bisa sangat signifikan.Jika Anda ingin membangun gambar Docker sendiri, jalankan saja
docker build -t cwe_checker .
Dengan cara ini Anda juga dapat membangun gambar Docker asli untuk PC berbasis ARM (misalnya Mac Apple yang lebih baru). Gambar Docker Prebuilt saat ini hanya berbasis x86.
Ketergantungan berikut harus diinstal untuk membangun dan menginstal CWE_CHECKER secara lokal:
Jalankan make all GHIDRA_PATH=/path/to/ghidra_folder (dengan jalur yang benar ke instalasi GHIDRA lokal dimasukkan) untuk mengkompilasi dan menginstal CWE_Checker. Jika Anda menghilangkan argumen GHIDRA_PATH penginstal akan mencari sistem file Anda untuk instalasi lokal Ghidra.
CWE_Checker mengambil biner sebagai input, menjalankan beberapa cek berdasarkan analisis statis pada biner dan kemudian menghasilkan daftar peringatan CWE yang telah ditemukan selama analisis.
Jika Anda menggunakan gambar Docker resmi, jalankan saja
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputJika Anda menginstal CWE_CHECKER secara lokal, jalankan
cwe_checker BINARYJika Anda menggunakan serpihan nix, jalankan
nix run github:fkie-cad/cwe_checker -- BINARY Anda dapat menyesuaikan perilaku sebagian besar cek melalui file konfigurasi yang terletak di src/config.json . Jika Anda memodifikasinya, tambahkan bendera baris perintah --config=src/config.json untuk memberi tahu CWE_Checker untuk menggunakan file yang dimodifikasi. Untuk informasi tentang bendera baris perintah lain yang tersedia, Anda dapat meneruskan bendera --help ke CWE_CHECKER .
Ada dukungan eksperimental untuk analisis Linux Loadable Kernel Modules (LKMS). CWE_CHECKER akan mengenali jika Anda melewati LKM dan akan menjalankan subset dari pemeriksaan CWE yang tersedia untuk program ruang pengguna. Analisis dapat dikonfigurasi melalui file konfigurasi terpisah.
Jika Anda menggunakan versi stabil, Anda juga dapat melihat dokumentasi online untuk informasi lebih lanjut.
CWE_CHECKER menawarkan dukungan eksperimental untuk menganalisis biner-logam telanjang. Untuk itu seseorang perlu menyediakan file konfigurasi logam telanjang melalui opsi baris perintah --bare-metal-config . Contoh untuk file konfigurasi seperti itu dapat ditemukan di bare_metal/stm32f407vg.json (yang dibuat dan diuji untuk MCU STM32F407VG).
Untuk informasi lebih lanjut, lihat dokumentasi online.
Binari uji untuk suite uji kami dapat dibangun dengan make compile_test_files (perlu Docker untuk diinstal!). Test suite kemudian dapat dijalankan dengan make test .
Dokumentasi kode sumber dapat dibangun dengan make documentation . Untuk versi stabil, dokumentasi dapat ditemukan di sini.
Sejauh ini analisis berikut diimplementasikan:
Harap dicatat bahwa baik positif palsu dan negatif palsu diharapkan karena jalan pintas dan sifat analisis statis serta pensketil berlebihan. Anda dapat menemukan informasi tentang cara kerja dalam setiap cek serta alasan yang diketahui untuk positif palsu dan negatif palsu pada halaman dokumentasi khusus.
CWE_CHECKER dilengkapi dengan skrip untuk Ghidra, yang menguraikan output dari CWE_Checker dan memberi anotasi CWE yang ditemukan di Disassembler untuk analisis manual yang lebih mudah. Skrip ini terletak di ghidra_plugin/cwe_checker_ghidra_plugin.py , instruksi penggunaan terkandung dalam file.

CWE_CHECKER juga terintegrasi sebagai plugin sebenarnya. Jika Anda ingin mengintegrasikan CWE_Checker ke dalam alat analisis Anda sendiri, Anda dapat menggunakan bendera baris perintah --json (dalam kombinasi dengan -opsi baris perintah --quiet --out=... untuk menghasilkan peringatan CWE dalam format output JSON JSON yang mudah diisi.
Membangun dokumentasi menggunakan cargo doc --open --document-private-items --no-deps akan memberi Anda lebih banyak informasi tentang struktur internal CWE_Checker. Namun, dokumentasi terbaik masih merupakan kode sumber itu sendiri. Jika Anda memiliki pertanyaan, pastikan untuk bertanya di halaman diskusi kami! Kami terus berusaha untuk meningkatkan ekstensibilitas dan dokumentasi dan pertanyaan Anda akan membantu kami mencapainya!
Untuk mendapatkan gambaran cepat/awal dari internalnya, Anda juga dapat melihat slide presentasi konferensi di CWE_Checker di folder DOC . Kami mempresentasikan CWE_CHECKER di konferensi berikut sejauh ini:
Kontribusi selalu diterima. Just Fork It dan buka permintaan tarik!
Proyek ini sebagian dibiayai oleh Kantor Federal Jerman untuk Keamanan Informasi (BSI).
Terima kasih khusus kepada komunitas BAP (terutama gitter resmi) untuk menjawab pertanyaan dan mendiskusikan solusi.
Copyright (C) 2018 - 2024 Fraunhofer FKIE ([email protected])
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library 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
Library 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/>.