Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan BinSkim untuk memeriksa berkas biner dan mengidentifikasi praktik pengkodean serta pembangunan yang dapat membuat biner menjadi rentan. Ini dapat digunakan untuk memeriksa biner yang sedang dipersiapkan untuk pengiriman, untuk membantu memvalidasi bahwa tidak ada kesalahan dalam rantai pembuatan.
BinSkim memeriksa:
- Penggunaan set alat kompilator yang kedaluwarsa - Biner harus dikompilasi terhadap kumpulan alat kompilator terbaru sedapat mungkin untuk memaksimalkan penggunaan mitigasi keamanan tingkat kompiler dan yang disediakan OS saat ini.
- Pengaturan kompilasi yang tidak aman - Biner harus dikompilasi dengan pengaturan paling aman yang mungkin untuk mengaktifkan mitigasi keamanan yang disediakan OS, memaksimalkan kesalahan pengkompilasi dan pelaporan peringatan yang dapat ditindaklanjuti, antara lain.
- Masalah penandatanganan - Biner yang ditandatangani harus ditandatangani dengan algoritma yang kuat secara kriptografis.
BinSkim adalah alat sumber terbuka dan menghasilkan file output yang menggunakan format Format Pertukaran Hasil Analisis Statis (SARIF) . BinSkim menggantikan alat BinScope sebelumnya.
Untuk informasi selengkapnya tentang BinSkim, lihat Panduan Pengguna BinSkim.
Menginstal dan menjalankan BinSkim
Ikuti langkah-langkah ini untuk memvalidasi bahwa opsi kompilasi keamanan dikonfigurasi dengan benar dalam kode yang Anda kirim.
Unduh dan instal .NET Core SDK lintas platform.
Konfirmasikan Visual Studio telah terinstal. Untuk informasi tentang mengunduh dan menginstal Visual Studio, lihat Menginstal Visual Studio.
Ada sejumlah opsi untuk mengunduh BinSkim, seperti paket NuGet. Dalam contoh ini kita akan menggunakan opsi klon git untuk mengunduh dari sini: https://github.com/microsoft/binskim dan menginstalnya pada PC Windows 64 bit.
Buka jendela Prompt Perintah Pengembang Visual Studio dan buat direktori, misalnya
C:\binskim-master
.C:\> Md \binskim-master
Pindah ke direktori yang baru saja Anda buat.
C:\> Cd \binskim-master
Gunakan perintah klon git untuk mengunduh semua file yang diperlukan.
C:\binskim-master> git clone --recurse-submodules https://github.com/microsoft/binskim.git
Pindah ke direktori baru
binskim
yang dibuat perintah clone.C:\> Cd \binskim-master\binskim
Jalankan BuildAndTest.cmd untuk memastikan bahwa build rilis berhasil, dan semua pengujian lulus.
C:\binskim-master\binskim> BuildAndTest.cmd Welcome to .NET Core 3.1! --------------------- SDK Version: 3.1.101 ... C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64\BinSkim.Sdk.dll 1 File(s) copied C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\linux-x64\BinSkim.Sdk.dll 1 File(s) copied ...
Proses build membuat sekumpulan direktori dengan BinSkim executables. Pindah ke direktori output build win-x64.
C:\binskim-master\binskim> Cd \binskim-master\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64>
Tampilkan bantuan untuk opsi analisis.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim help analyze
BinSkim PE/MSIL Analysis Driver 1.6.0.0
--sympath Symbols path value, e.g., SRV*http://msdl.microsoft.com/download/symbols or Cache*d:\symbols;Srv*http://symweb. See
https://learn.microsoft.com/windows-hardware/drivers/debugger/advanced-symsrv-use for syntax information. Note that BinSkim will clear the
_NT_SYMBOL_PATH environment variable at runtime. Use this argument for symbol information instead.
--local-symbol-directories A set of semicolon-delimited local directory paths that will be examined when attempting to locate PDBs.
-o, --output File path to which analysis output will be written.
--verbose Emit verbose output. The resulting comprehensive report is designed to provide appropriate evidence for compliance scenarios.
...
Mengatur jalur simbol untuk BinSkim
Jika Anda membangun semua kode yang Anda analisis pada komputer yang sama dengan yang Anda jalankan BinSkim, Anda biasanya tidak perlu mengatur jalur simbol. Ini karena file simbol Anda tersedia di komputer lokal tempat Anda melakukan kompilasi. Jika Anda menggunakan sistem build yang lebih kompleks, atau mengalihkan simbol Anda ke lokasi yang berbeda (tidak bersama biner yang dikompilasi), gunakan --local-symbol-directories
untuk menambahkan lokasi ini ke pencarian file simbol.
Jika kode Anda mereferensikan biner terkompilasi yang bukan bagian dari kode Anda, debugger Windows Sympath dapat digunakan untuk mengambil simbol guna memastikan keamanan dependensi kode ini. Jika Anda menemukan masalah dalam dependensi ini, Anda mungkin tidak dapat memperbaikinya. Tetapi dapat berguna untuk mengetahui kemungkinan risiko keamanan yang Anda terima dengan mengambil dependensi tersebut.
Petunjuk / Saran
Saat menambahkan jalur simbol (yang mereferensikan server simbol berjaringan), tambahkan lokasi cache lokal untuk menentukan jalur lokal untuk menyimpan simbol. Tidak melakukan ini dapat sangat membahayakan performa BinSkim. Contoh berikut, menentukan cache lokal di d:\symbols.
--sympath Cache*d:\symbols;Srv*http://symweb
Untuk informasi selengkapnya tentang simpati, lihat Jalur simbol untuk debugger Windows.
Jalankan perintah berikut untuk menganalisis biner driver yang dikompilasi. Perbarui jalur target untuk menunjuk ke file driver yang telah dikompilasi .sys.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\echo.sys"
Untuk informasi tambahan, tambahkan opsi verbose seperti ini.
C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys" --verbose
Nota
Opsi --verbose akan menghasilkan hasil pass/fail eksplisit untuk setiap pemeriksaan. Jika Anda tidak menyediakan verbose, Anda hanya akan melihat cacat yang terdeteksi oleh BinSkim. Opsi --verbose biasanya tidak disarankan untuk sistem otomatisasi nyata karena ukuran file log yang meningkat dan karena kesulitan dalam mendeteksi kegagalan individu pada saat terjadi, karena kegagalan tersebut disematkan di antara sejumlah besar hasil 'pass'.
Tinjau output perintah untuk mencari kemungkinan masalah. Contoh output ini menunjukkan tiga pengujian yang lulus. Informasi tambahan tentang aturan, seperti BA2002 tersedia di Panduan Pengguna BinSkim.
Analyzing... Analyzing 'osrusbfx2.sys'... ... C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys\Debug\osrusbfx2.sys: pass BA2002: 'osrusbfx2.sys' does not incorporate any known vulnerable dependencies, as configured by current policy. C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: pass BA2005: 'osrusbfx2.sys' is not known to be an obsolete binary that is vulnerable to one or more security problems. C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys: pass BA2006: All linked modules of 'osrusbfx2.sys' generated by the Microsoft front-end satisfy configured policy (compiler minimum version 17.0.65501.17013).
Output ini menunjukkan bahwa pengujian BA3001 tidak dijalankan karena alat menunjukkan bahwa driver bukan biner ELF.
... C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: notapplicable BA3001: 'osrusbfx2.sys' was not evaluated for check 'EnablePositionIndependentExecutable' as the analysis is not relevant based on observed metadata: image is not an ELF binary.
Output ini menunjukkan kesalahan untuk tes BA2007.
... C:\Samples\KMDF_Echo_Driver\Debug\osrusbfx2.sys: error BA2007: 'osrusbfx2.sys' disables compiler warning(s) which are required by policy. A compiler warning is typically required if it has a high likelihood of flagging memory corruption, information disclosure, or double-free vulnerabilities. To resolve this issue, enable the indicated warning(s) by removing /Wxxxx switches (where xxxx is a warning id indicated here) from your command line, and resolve any warnings subsequently raised during compilation.
Untuk mengaktifkan peringatan ini di Visual Studio, di bawah C/C++ di halaman properti untuk proyek, hapus nilai yang tidak ingin Anda kecualikan di Nonaktifkan Peringatan Tertentu.
Opsi kompilasi default di Visual Studio untuk proyek driver dapat menonaktifkan peringatan seperti berikut ini. Peringatan ini akan dilaporkan oleh BinSkim.
C4603 - 'name': makro tidak terdefinisi atau definisinya berbeda setelah penggunaan header prabuat
C4627 - 'deskripsi': dilewati saat mencari penggunaan header pra-kompilasi
C4986 - 'deklarasi': spesifikasi pengecualian tidak cocok dengan deklarasi sebelumnya
Untuk informasi selengkapnya tentang peringatan pengkompilasi, lihat Peringatan Pengkompilasi menurut versi kompilator.