Najlepsze praktyki w zakresie zabezpieczeń dla C++
Ten artykuł zawiera informacje na temat narzędzi i praktyk, dotyczących zabezpieczeń.Używanie ich nie czyni aplikacji odpornej na ataki, jednak zmniejsza prawdopodobieństwo udanego ataku.
Funkcje zabezpieczeń w Visual C++
Następujące funkcja zabezpieczeń są wbudowane w kompilator i konsolidator Visual C++:
/GS (Sprawdzanie zabezpieczeń bufora)
Instruuje kompilator aby wstawiał kod, wykrywający przepełnienie do funkcji, które są obarczone ryzykiem bycia wykorzystanym.Kiedy przepełnienie jest wykryte, wykonywanie jest zatrzymywane.Domyślnie ta opcja jest włączona./SAFESEH (Obraz ma bezpieczną obsługę wyjątków)
Instruuje konsolidator aby załączał do obrazu wyjściowego tabelę, która zawiera adres każdej obsługi wyjątków.W czasie wykonywania, system operacyjny używa tej tabeli aby upewnić się, że tylko legalna obsługa wyjątków jest wykonywana.To pozwala zapobiec wykonywaniu obsługi wyjątków, która jest wprowadzona podczas złośliwego ataku w czasie wykonywania.Domyślnie ta opcja jest wyłączona./NXCOMPAT , /NXCOMPAT (Zgodny z zapobieganiem wykonywaniu danych)
Te opcje kompilatora i konsolidatora włączają zgodność z Zapobieganiem wykonywaniu danych (DEP).DEP ochrania CPU przed wykonywaniem stron nie będących kodem./analyze (analiza kodu)
Ta opcja kompilatora aktywuje analizę kodu, która zgłasza potencjalne problemy zabezpieczeń, takie jak przepełnienie buforu, niezainicjowana pamięć, dereferencja pustego wskaźnika i wycieki pamięci.Domyślnie ta opcja jest wyłączona.Aby uzyskać więcej informacji, zobacz Analiza kodu dla C/C++ — Omówienie./DYNAMICBASE (Korzystaj z randomizacji układu przestrzeni adresowej)
Ta opcja konsolidatora włącza kompilację obrazu wykonywalnego, który może być załadowany do różnych lokalizacji w pamięci na początku wykonywania.Opcja ta sprawia również, że lokalizacja stosu w pamięci jest znacznie mniej przewidywalna.
CRT z rozszerzonymi zabezpieczeniami
Biblioteka środowiska uruchomieniowego języka C (CRT) została rozszerzona żeby zawierała bezpieczne wersje funkcji stanowiących ryzyko dla bezpieczeństwa - na przykład, niesprawdzonej funkcji kopiującej ciągi znaków strcpy.Ponieważ starsze, niebezpieczne wersje tych funkcji są przestarzałe, powodują ostrzeżenia w trakcie kompilacji.Zalecane jest, żeby używać bezpiecznych wersji tych funkcji CRT zamiast pomijania ostrzeżeń w trakcie kompilacji.Aby uzyskać więcej informacji, zobacz Funkcje zabezpieczeń w CRT.
Biblioteka SafeInt
Biblioteka SafeInt pomaga zapobiegać przekroczeniu zakresu liczb całkowitych oraz innym błędom, możliwym do wykorzystania, które mogą wystąpić podczas wykonywania przez aplikację operacji matematycznych.Biblioteka SafeInt zawiera SafeInt — Klasa, SafeIntException — Klasa oraz niektóre SafeInt — Funkcje.
Klasa SafeInt ochrania przed programami wykorzystującymi luki przepełnienia liczb całkowitych i dzielenia przez zero.Można jej użyć do obsługi porównań pomiędzy wartościami różnych typów.Dostarcza również dwie polityki obsługi błędów.Domyślną zasadą dla klasy SafeInt jest zgłaszanie wyjątku klasy SafeIntException aby raportował, dlaczego operacja matematyczna nie może zostać zakończona.Drugą zasadą dla klasy SafeInt jest zatrzymanie wykonywania programu.Można również zdefiniować zasadę niestandardową.
Każda funkcja SafeInt ochrania jedną operację matematyczną przed błędem możliwym do wykorzystania.Można używać dwóch różnych typów parametrów bez konwersji do tego samego typu.Aby ochraniać wiele operacji matematycznych, należy użyć klasy SafeInt.
Iteratory sprawdzane
Iteratory sprawdzane wymuszają granice kontenera.Domyślnie, kiedy iterator sprawdzany jest poza granicami, generuje wyjątek i kończy wykonywanie programu.Iterator sprawdzany dostarcza inne poziomy odpowiedzi, które zależą od wartości, które są przypisane do definicji preprocesora, takich jak _SECURE_SCL_THROWS i _ITERATOR_DEBUG_LEVEL.Na przykład dla _ITERATOR_DEBUG_LEVEL=2, iterator sprawdzany dostarcza wszechstronne sprawdzanie poprawności w trybie debug, które stają się dostępne poprzez używanie asercji.Aby uzyskać więcej informacji, zobacz Zaznaczone iteratory.
Analiza kodu dla Kodu zarządzanego
Analiza kodu dla Kodu zarządzanego, znana również jako FxCop, sprawdza zestawy pod kątem zgodności ze wskazówkami, dotyczącymi projektowania w .NET Framework.FxCop analizuje kod i metadane w każdym zestawie, żeby sprawdzić pod kątem defektów w następujących obszarach:
Projektowanie bibliotek
Lokalizacja
Konwencje nazewnictwa
Wydajność
Zabezpieczenia
Weryfikator aplikacji systemu Windows
Weryfikator aplikacji (AppVerifier) może pomóc w identyfikacji potencjalnych problemów z kompatybilnością, stabilnością i bezpieczeństwem aplikacji.
Weryfikator aplikacji monitoruje, jak aplikacja używa systemy operacyjnego.Obserwuje system plików, rejestry, pamięć i interfejsy API podczas działania aplikacji i zaleca poprawki kodu źródłowego dla odkrytych problemów.
Można użyć weryfikatora aplikacji aby:
Testować pod kątem potencjalnych błędów kompatybilności aplikacji, które są spowodowane pospolite błędy programistyczne.
Badać aplikację pod kątem problemów związanych z pamięcią.
Identyfikować potencjalne problemy zabezpieczeń w aplikacji.
AppVerifier jest częścią Zestawu narzędzi do sprawdzania zgodności aplikacji, który jest dostępny na stronie Zgodność aplikacji w witrynie TechNet w sieci Web.
Funkcje zabezpieczeń w .NET Framework
Configuring Security Policy opisuje wskazówki i narzędzie używane do dostosowywania zasad zabezpieczeń .NET Framework.
Konta użytkowników systemu Windows
Używanie kont użytkowników systemu Windows, które należą do grupy Administratorów wystawia deweloperów i w rezultacie klientów na ryzyko związane z zabezpieczeniami.Aby uzyskać więcej informacji, zobacz Uruchamianie jako członek grupy użytkowników i Jak kontrola konta użytkownika (UAC) wpływa na aplikację?.
Zobacz też
Informacje
Koncepcje
Jak kontrola konta użytkownika (UAC) wpływa na aplikację?