Udostępnij przez


Użyj BinSkim do analizowania plików binarnych, aby zidentyfikować luki w zabezpieczeniach.

Użyj BinSkim, aby przeanalizować pliki binarne w celu zidentyfikowania praktyk kodowania i budowania, które mogą potencjalnie uczynić binaria podatnymi na zagrożenia. Może służyć do sprawdzania plików binarnych, które są gotowe do wysłania, aby pomóc w sprawdzeniu, czy nic nie poszło nie tak w łańcuchu kompilacji.

BinSkim sprawdza:

  • Korzystanie z nieaktualnych zestawów narzędzi kompilatora — pliki binarne powinny być kompilowane względem najnowszych zestawów narzędzi kompilatora, gdzie tylko jest to możliwe, aby zmaksymalizować wykorzystanie bieżących środków zaradczych dotyczących zabezpieczeń na poziomie kompilatora i systemu operacyjnego.
  • Niezabezpieczone ustawienia kompilacji — pliki binarne powinny być kompilowane przy użyciu najbezpieczniejszych ustawień umożliwiających ograniczenie zabezpieczeń zapewnianych przez system operacyjny, maksymalizowanie błędów kompilatora i raportowanie ostrzeżeń z możliwością działania.
  • Problemy z podpisywaniem — podpisane pliki binarne powinny być podpisane przy użyciu algorytmów kryptograficznie silnych.

BinSkim to narzędzie typu open source i generuje pliki wyjściowe korzystające z formatu wymiany wyników analizy statycznej (SARIF). BinSkim zastępuje poprzednie narzędzie BinScope.

Aby uzyskać więcej informacji na temat binSkim, zobacz BinSkim User Guide.

Instalowanie i uruchamianie narzędzia BinSkim

Wykonaj następujące kroki, aby sprawdzić, czy opcje kompilowania zabezpieczeń są prawidłowo skonfigurowane w kodzie, który wysyłasz.

  1. Pobierz i zainstaluj międzyplatformowy zestaw SDK platformy .NET Core.

  2. Upewnij się, że program Visual Studio jest zainstalowany. Aby uzyskać informacje na temat pobierania i instalowania programu Visual Studio, zobacz Install Visual Studio.

  3. Istnieje wiele opcji pobierania BinSkim, takich jak pakiet NuGet. W tym przykładzie użyjemy opcji git clone, aby pobrać z tutaj: https://github.com/microsoft/binskim i zainstalować na komputerze z systemem Windows, w wersji 64-bitowej.

  4. Otwórz okno wiersza polecenia dla deweloperów programu Visual Studio i utwórz katalog, na przykład C:\binskim-master.

    C:\> Md \binskim-master
    
  5. Przejdź do właśnie utworzonego katalogu.

    C:\> Cd \binskim-master
    
  6. Użyj polecenia git clone, aby pobrać wszystkie potrzebne pliki.

    C:\binskim-master> git clone --recurse-submodules https://github.com/microsoft/binskim.git
    
  7. Przejdź do nowego katalogu binskim, który polecenie klonowania stworzyło.

    C:\> Cd \binskim-master\binskim
    
  8. Uruchom BuildAndTest.cmd, aby upewnić się, że kompilacja wydania zakończy się pomyślnie i że wszystkie testy przebiegną pomyślnie.

    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. Proces kompilacji tworzy zestaw katalogów z plikami wykonywalnymi BinSkim. Przejdź do katalogu wyjściowego kompilacji win-x64.

    C:\binskim-master\binskim> Cd \binskim-master\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64>
    
  10. Wyświetl pomoc dotyczącą opcji analizy.

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.

...

Ustawianie ścieżki symboli dla BinSkim

Jeśli tworzysz cały kod, który analizujesz na tej samej maszynie, na której jest uruchomiony plik BinSkim, zazwyczaj nie musisz ustawiać ścieżki symboli. Jest to spowodowane tym, że pliki symboli są dostępne w polu lokalnym, w którym zostały skompilowane. Jeśli używasz bardziej złożonego systemu kompilacji lub przekierowujesz symbole do innej lokalizacji (nie obok skompilowanego pliku binarnego), użyj --local-symbol-directories, aby dodać te lokalizacje do wyszukiwania w pliku symboli. Jeśli twój kod odwołuje się do skompilowanego pliku binarnego, który nie jest częścią twojego kodu, narzędzie Sympath w Debuggerze Windows może służyć do uzyskiwania symboli w celu zweryfikowania bezpieczeństwa tych zależności kodu. Jeśli znajdziesz problem w tych zależnościach, być może nie będzie można ich rozwiązać. Warto jednak pamiętać o ewentualnym ryzyku bezpieczeństwa, które akceptujesz, biorąc pod uwagę te zależności.

Napiwek

Podczas dodawania ścieżki symboli (odwołującej się do serwera symboli sieciowych) dodaj lokalną lokalizację pamięci podręcznej, aby określić ścieżkę lokalną do buforowania symboli. Niezastosowanie się do tego może znacznie osłabić wydajność BinSkim. W poniższym przykładzie określono lokalną pamięć podręczną o adresie d:\symbole. --sympath Cache*d:\symbols;Srv*http://symweb Aby uzyskać więcej informacji na temat wyrazów współczucia, zobacz ścieżka symboli dla debugerów systemu Windows.

  1. Wykonaj następujące polecenie, aby przeanalizować skompilowany plik binarny sterownika. Zaktualizuj ścieżkę docelową, aby wskazywała skompilowany plik sterownika .sys.

    C:\binskim-master\binskim\bld\bin\AnyCPU_Release\Publish\netcoreapp2.0\win-x64> BinSkim analyze "C:\Samples\KMDF_Echo_Driver\echo.sys"
    
  2. Aby uzyskać dodatkowe informacje, dodaj opcję 'verbose' w taki sposób.

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

    Notatka

    Opcja --verbose spowoduje wygenerowanie jawnych wyników pass/fail dla każdego sprawdzenia. Chyba że podasz szczegółowy opis, zobaczysz tylko wady wykryte przez BinSkim. Opcja --verbose jest zazwyczaj odradzana w rzeczywistych systemach automatyzacji, ze względu na zwiększony rozmiar plików dziennika. Ponadto trudniej jest wykryć pojedyncze błędy, ponieważ są one osadzone wśród licznych rezultatów "pass".

  3. Przejrzyj dane wyjściowe polecenia, aby wyszukać możliwe problemy. W tych przykładowych danych wyjściowych przedstawiono trzy testy, które przeszły. Dodatkowe informacje na temat reguł, takich jak BA2002, są dostępne w podręczniku użytkownika 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).
    
  4. Te dane wyjściowe pokazują, że test BA3001 nie jest uruchamiany, ponieważ narzędzie wskazuje, że sterownik nie jest plikiem binarnym 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.
    
  5. Te dane wyjściowe zawierają błąd testu 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.
    

Aby włączyć te ostrzeżenia w programie Visual Studio, w obszarze C/C++ na stronach właściwości projektu usuń wartości, które nie chcesz wykluczać w Wyłącz określone ostrzeżenia.

Zrzut ekranu przedstawiający okno dialogowe wyłączania określonych ostrzeżeń w programie Visual Studio 2019.

Domyślne opcje kompilowania w programie Visual Studio dla projektów sterowników mogą wyłączać ostrzeżenia, takie jak poniższe. BinSkim będzie zgłaszał te ostrzeżenia.

C4603 — "name": makro nie jest zdefiniowane lub definicja różni się po użyciu prekompilowanego nagłówka

C4627 — "description": pominięty podczas wyszukiwania wstępnie skompilowanego nagłówka użyj

C4986 — "deklaracja": specyfikacja wyjątku nie jest zgodna z poprzednią deklaracją

Aby uzyskać więcej informacji na temat ostrzeżeń kompilatora, zobacz Ostrzeżenia kompilatora według wersji kompilatora.

Zobacz też

lista kontrolna dotycząca zabezpieczeń sterownika