Aracılığıyla paylaş


Güvenlik açıklarını belirlemek üzere ikili dosyaları incelemek için BinSkim kullanma

BinSkim'i kullanarak ikili dosyaları inceleyerek ikili dosyaları savunmasız hale getirebilecek kodlama ve oluşturma uygulamalarını belirleyin. Gönderilmeye hazırlanan ikili dosyaları kontrol etmek ve derleme zincirinde herhangi bir sorun olmadığını doğrulamak için kullanılabilir.

BinSkim şu değerleri denetler:

  • Eski derleyici araç kümelerinin kullanımı - İkili dosyaların en güncel derleyici araç kümeleri ile derlenmesi, mümkün olan her durumda, geçerli derleyici seviyesi ve işletim sistemi tarafından sağlanan güvenlik azaltmalarının kullanımını en üst düzeye çıkarmak için önemlidir.
  • Güvenli olmayan derleme ayarları - İkili dosyalar, işletim sistemi tarafından sağlanan güvenlik azaltmalarını etkinleştirmek, derleyici hatalarını ve eyleme dönüştürülebilir uyarıları raporlamayı en üst düzeye çıkarmak için mümkün olan en güvenli ayarlarla derlenmelidir.
  • İmzalama sorunları - İmzalı ikili dosyalar şifreleme açısından güçlü algoritmalarla imzalanmalıdır.

BinSkim açık kaynak bir araçtır ve Statik Çözümleme Sonuçları Değişim Biçimi (SARIF) biçimini kullanan çıkış dosyaları oluşturur. BinSkim, eski BinScope aracının yerini alır.

BinSkim hakkında daha fazla bilgi için bkz. BinSkim Kullanıcı Kılavuzu.

BinSkim'i yükleme ve çalıştırma

Güvenlik derleme seçeneklerinin, göndermekte olduğunuz kodda düzgün yapılandırıldığını doğrulamak için bu adımları izleyin.

  1. Platformlar arası .NET Core SDK'i indirip yükleyin.

  2. Visual Studio'nın yüklü olduğunu onaylayın. Visual Studio'yu indirme ve yükleme hakkında bilgi için bkz. Visual Studio Yükleme.

  3. BinSkim'i indirmek için NuGet paketi gibi çeşitli seçenekler vardır. Bu örnekte, buradan indirmek için git clone seçeneğini kullanacağız: https://github.com/microsoft/binskim ve 64 bit Windows bilgisayara yükleyeceğiz.

  4. Visual Studio Geliştirici Komut İstemi penceresini açın ve C:\binskim-mastergibi bir dizin oluşturun.

    C:\> Md \binskim-master
    
  5. Yeni oluşturduğunuz dizine gidin.

    C:\> Cd \binskim-master
    
  6. Gerekli tüm dosyaları indirmek için git clone komutunu kullanın.

    C:\binskim-master> git clone --recurse-submodules https://github.com/microsoft/binskim.git
    
  7. Clone komutunun oluşturduğu yeni binskim dirctory'ye gidin.

    C:\> Cd \binskim-master\binskim
    
  8. Yayın derlemesinin başarılı olması ve tüm testlerin geçmesi için BuildAndTest.cmd çalıştırın.

    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
    
    ...
    
    
  9. Derleme işlemi, BinSkim yürütülebilir dosyalarıyla bir dizin kümesi oluşturur. win-x64 derleme çıktı dizinine gitme.

    C:\binskim-master\binskim> Cd \binskim-master\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64>
    
  10. Analiz seçeneği için yardım görüntüleyin.

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.

...

BinSkim için sembol yolunu ayarlama

Analiz ettiğiniz tüm kodu BinSkim'i çalıştırdığınız makinede oluşturuyorsanız, genellikle sembol yolunu ayarlamanız gerekmez. Bunun nedeni, simge dosyalarınızın derlediğiniz yerel kutuda kullanılabilir olmasıdır. Daha karmaşık bir derleme sistemi kullanıyorsanız veya sembollerinizi farklı bir konuma yönlendiriyorsanız (derlenmiş ikili dosyayla birlikte değil), bu konumları simge dosyası aramasına eklemek için --local-symbol-directories kullanın. Kodunuzun bir parçası olmayan derlenmiş bir ikili dosyaya başvurursa, bu kod bağımlılıklarının güvenliğini doğrulamak amacıyla sembolleri almak için Windows hata ayıklayıcısı Sympath kullanılabilir. Bu bağımlılıklarda bir sorun bulursanız bunları düzeltemeyebilirsiniz. Ancak, bu bağımlılıkları alarak kabul ettiğiniz olası güvenlik risklerinin farkında olmak yararlı olabilir.

Bahşiş

Bir simge yolu eklerken (ağa bağlı bir sembol sunucusuna başvuran), simgeleri önbelleğe almak için yerel bir yol belirtmek için yerel bir önbellek konumu ekleyin. Bunu yapmamak BinSkim'in performansını büyük ölçüde tehlikeye atabilir. Aşağıdaki örnek, d:\symbols konumunda yerel bir önbellek belirtir. Sempati hakkında daha fazla bilgi için bkz.Windows hata ayıklayıcıları için sembol yolu .

  1. Derlenmiş sürücü ikili dosyasını analiz etmek için aşağıdaki komutu yürütür. Hedef yolu, derlenmiş sürücü .sys dosyanıza işaret edecek şekilde güncelleyin.

    C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\echo.sys"
    
  2. Ek bilgi için aşağıdaki gibi ayrıntılı seçeneği ekleyin.

    C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\osrusbfx2.sys" --verbose
    

    Not

    --verbose seçeneği her kontrol için detaylı başarı/başarısızlık sonuçları üretir. Ayrıntılı bilgi sağlamazsanız, yalnızca BinSkim'in algıdığı hataları görürsünüz. --verbose seçeneği, günlük dosyalarının boyutunun artmasının yanı sıra meydana gelen hataların tek tek tespit edilmesini zorlaştırdığı için, gerçek otomasyon sistemleri için genellikle önerilmez, çünkü bu hatalar çok sayıda 'başarılı' sonucunun arasında yer alacaktır.

  3. Olası sorunları aramak için komut çıktısını gözden geçirin. Bu örnek çıktı, başarıyla geçen üç testi gösteriyor. BA2002 gibi kurallarla ilgili ek bilgileri BinSkim Kullanıcı Kılavuzubulabilirsiniz.

    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).
    
  4. Bu çıktı, araç sürücünün bir ELF ikili dosyası olmadığını gösterdiği için test BA3001'in çalıştırılmadığını gösterir.

    ...
    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.
    
  5. Bu çıktı, BA2007 testi için bir hata gösterir.

    ...
    
    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.
    

Visual Studio'da bu uyarıları etkinleştirmek için, projenin özellik sayfalarında C/C++ altında, Belirli Uyarıları Devre Dışı Bırak altında dışlamak istemediğiniz değerleri kaldırın.

Visual Studio 2019'da belirli uyarıları devre dışı bırakmaya yönelik iletişim kutusunun ekran görüntüsü.

Sürücü projeleri için Visual Studio'daki varsayılan derleme seçenekleri aşağıdaki gibi uyarıları devre dışı bırakabilir. Bu uyarılar BinSkim tarafından bildirilir.

C4603 - 'name': makro tanımlı değil veya önceden derlenmiş başlık kullanıldıktan sonra tanımı farklı

C4627 - 'description': önceden derlenmiş üst bilgi kullanımı aranırken atlandı

C4986 - 'bildirim': özel durum belirtimi önceki bildirimle eşleşmiyor

Derleyici uyarıları hakkında daha fazla bilgi için bkz. Derleyici sürümüne göre Derleyici Uyarıları.

Ayrıca Bkz.

sürücü güvenlik denetim listesi