Każdy z] [zespół ma własne preferencje dotyczące oprogramowania i narzędzi dla
najgłębszy. Po konsultacji dowiedzieliśmy się: wybór jest bardzo różny, że możemy dokonać
Zestaw prawdziwych dżentelmena sprawdzonych programów. To właśnie zdecydowaliśmy się. Do
Nie rób zamieszania, cała lista jest podzielona na tematy. Dzisiaj będziemy szukać
Analizatory statycznych kodu
Aby wyszukać luki w aplikacjach, gdy
ręce - ich źródła.

Dostępność kodów źródłowych programów znacznie upraszcza wyszukiwanie luk.
Zamiast ślepo manipulować różnymi parametrami
są przenoszone do aplikacji, co znacznie ułatwia dostrzeżenie w źródłach
procesy. Na przykład, jeśli dane od użytkownika są przesyłane bez kontroli i
Transformacje osiągają zapytanie SQL - mamy podatność typu iniekcji SQL.
Jeśli dojdą do wyjścia w kodzie HTML, otrzymujemy klasyczny XSS. Z
skaner statyczny musi wyraźnie wykrywać takie sytuacje, ale
Niestety, nie zawsze jest to tak łatwe, jak się wydaje.

Nowoczesne kompilatory

Może wydawać się zabawne, ale jeden z najbardziej skutecznych analizatory
kod
są samymi kompilatorami. Oczywiście są one całkowicie przeznaczone
inny, ale jako bonus każdy z nich oferuje dobry weryfikator
Kody źródłowe, zdolne do wykrycia dużej liczby błędów. Dlaczego tego nie robi?
Oszczędza? Początkowo ustawienia takiej weryfikacji kodu są wystarczające
lojalny: w rezultacie, aby nie mylić programisty, kompilator zaczyna się
Przysięgnij tylko w przypadku najpoważniejszych błędów. Ale na próżno - jeśli umieścisz
poziom ostrzeżeń jest wyższy, całkiem możliwe jest wykopanie wielu wątpliwych miejsc
w kodzie. Wygląda mniej więcej tak. Powiedzmy, że w kodzie jest brakuje
Sprawdzanie długości łańcucha przed skopiowaniem go do bufora. Skaner znajdzie funkcję,
kopiowanie sznurka (lub fragmentu) do bufora o stałej wielkości bez
wstępna kontrola jego długości. Śledzi trajektorię transmisji
argumenty: od danych wejściowych do podatnej funkcji i wyglądu: czy to możliwe
Wybierz długość ciągu, która spowodowałaby przepełnienie w bezbronnym
funkcji i nie zostanie odcięty w wyniku poprzedzających ją kontroli. W przypadku takiego
проверки нет, находим практически 100% переполнение буфера. Главная сложность в
использовании для проверки компилятора - заставить его "проглотить" чужой код.
Если ты хоть раз пытался скомпилировать приложение из исходников, то знаешь,
насколько сложно удовлетворить все зависимости, особенно в больших проектах. Ale
результат стоит того! Тем более, помимо компилятора в мощные IDE встроены и
некоторые другие средства для analiza kodu. Na przykład poniższe
W sekcji kodu w programie Visual Studio zostanie wyświetlone ostrzeżenie dotyczące użycia
cykl funkcji _alloca, który może szybko przepełnić stos:

Char *b;
Do (
b = (znak*) _ przydział (9)
) Podczas gdy (1)

Taka jest zaleta analizatora statycznego Prefast. Podobnie jak fxcop,
przeznaczony do analizy kontrolowanego kodu, początkowo Prefast
Rozprzestrzenił się w formie osobnego narzędzia i dopiero później stał się częścią Visual Studio.

Rats — narzędzie do ciągłego audytu bezpieczeństwa

Witryna: www.secureSoftware.com
Licencja: GNU GPL
Platforma: Unix, Windows
Języki: C++, PHP, Python, Ruby

Błąd błędu to niezgoda. Część tych wad, na które pozwalają programiści,
Bezkrytyczny i zagraża jedynie niestabilności programu. Inni wręcz przeciwnie
pozwalają na wstrzyknięcie kodu powłoki i wykonanie dowolnych poleceń na zdalnym urządzeniu
serwer. Polecenia, które pozwalają Bufferowi wykonać specjalne ryzyko w kodzie.
Przepełnienie i inne podobne typy ataków. Takich poleceń jest mnóstwo, w przypadku C/C++
Są to funkcje do pracy z liniami (xstrcpy (), strcat (), gets (), sprintf (),
Printf (), SNPRINTF (), syslog ()), polecenia systemowe (Access (), Chown (), ChGRP (),
Chmod (), tmpfile (), tmpnam (), TEMPNAM (), MKTEMP ()), a także polecenia systemowe
Wywołania (Exec (), System (), Popen ()). Ręcznie przejrzyj cały kod (szczególnie
Jeśli składa się z kilku tysięcy linii) jest dość męczące. Więc możesz
łatwo przeoczyć transmisję jakiejś funkcji o niezweryfikowanych parametrach.
Specjalne narzędzia do audytu mogą znacznie ułatwić zadanie, m.in
Słynne narzędzie Szczury (Narzędzie Routh do audytu bezpieczeństwa) z
znana firma Fortify. Nie tylko skutecznie poradzi sobie z przetwarzaniem kodu,
napisany w C/C++, ale potrafi także przetwarzać skrypty w Perlu, PHP i Pythonie.
Baza narzędzi zawiera inspirujący wybór ze szczegółowym opisem problemu
miejsca w kodzie. Za pomocą analizatora przetworzy to, co ma dość i
Spróbuje zidentyfikować błędy, po czym przekaże informację o wykrytych niedociągnięciach.
Szczury
Działa poprzez wiersz poleceń, zarówno w systemach Windows, jak i *NIX.

YASCA

Strona: www.yasca.org
Licencja: Open Source
Platforma: Unix, Windows
Języki: C ++, Java, .net, ASP, Perl, PHP, Python i inne.

Yasca Podobnie jak szczury nie potrzebują instalacji i nie ma
Tylko interfejs konsoli, ale także prosty GUI. Deweloperzy zalecają
Uruchom narzędzie przez konsolę - mówią, że w ten sposób istnieje więcej możliwości. To zabawne co
Silnik Yasca jest napisany w PHP 5.2.5, a interpreter (w jego najbardziej uproszczonej wersji)
Opcja) leży w jednym z podfolderów archiwum z programem. Cały program jest logicznie
składa się z front-endu, zestawu wtyczek skanujących, generatora raportów oraz
Sam silnik, który sprawia, że ​​wszystkie koła zębate obracają się razem. Wtyczki
wrzucone do katalogu wtyczek - dodatkowe muszą być tam również zainstalowane
dodatki. Ważny punkt! Trzy standardowe wtyczki zawierały
Yasca
, mają nieprzyjemne zależności. Jlint, który skanuje Javę
. Drugi
wtyczka - antyc, używana do analizy źródeł Java i C/C ++, wymaga antyc.exe
W tym samym katalogu. A dla PMD, który przetwarza kod Java, aby działać, potrzebujesz
zainstalowany w systemie Java JRE 1.4 lub nowszym. Sprawdź instalację jest poprawna
Możesz wpisywać polecenie „yasca ./resources/test/”. Jak wygląda skan?
Po przetworzeniu odmian objętych programem, Yasca daje wynik jako
specjalny raport. Na przykład jedna ze standardowych wtyczek GREP pozwala na to
Korzystając z wzorów opisanych w plikach. GREP, wskazuj wrażliwe struktury i
Łatwo zidentyfikować zakres luk. Zestaw takich wzorów jest już zawarty
Program: Aby wyszukać słabe szyfrowanie, autoryzacja za pomocą „Hasło równa się logowanie”,
Możliwe zastrzyki SQL i wiele więcej. Kiedy będziesz chciał zobaczyć w raporcie
Aby uzyskać bardziej szczegółowe informacje, nie wahaj się zainstalować dodatkowych wtyczek. Co
Warto wspomnieć, że z ich pomocą możesz dodatkowo zeskanować kod
.NET (VB.NET, C#, ASP.NET), PHP, Coldfusion, Cobol, HTML, JavaScript, CSS,
Visual Basic, ASP, Python, Perl.

Cppcheck

Strona internetowa:
Licencja: Open Source
Platforma: Unix, Windows
Języki: C ++

Deweloperzy Cppcheck postanowił nie marnować czasu na drobiazgi, a zatem
Wyłapują tylko ściśle określone kategorie błędów i tylko w kodzie C++.
Nie oczekuj, że program powielnie ostrzeżenia kompilatora - to się stanie bez
sufler. Dlatego nie bądź leniwy, aby ustawić kompilator na maksymalny poziom
ostrzeżenia i użyj cppcheck, aby sprawdzić wycieki pamięci i naruszenia
operacje alokacji-delokacji, różne przepełnienia bufora, wykorzystanie
przestarzałe funkcje i wiele więcej. Ważne szczegóły: programiści CPPCheck
Staraliśmy się ograniczyć liczbę fałszywych alarmów do minimum. Dlatego jeśli
program zarejestruje błąd, najprawdopodobniej możesz powiedzieć: „Ona naprawdę
tak!” Możesz przeprowadzić analizę z konsoli lub używając pliku nice
Interfejs GUI napisany w Qt i działający na dowolnej platformie.

grad

Strona internetowa:
www.justanotherhacker.com/projects/graudit.html
Licencja: Open Source
Platforma: Unix, Windows
Języki: C++, PHP, Python, Perl

Ten prosty skrypt w połączeniu z zestawem podpisów pozwala znaleźć szereg
krytyczne luki w kodzie, a wyszukiwanie odbywa się przy użyciu wszystkich
dobrze znane narzędzie grep. Niewłaściwe jest nawet wspominanie tutaj o interfejsie GUI: to wszystko
odbywa się za pośrednictwem konsoli. Na początek jest kilka kluczy, ale najwięcej
W prostym przypadku wystarczy podać ścieżkę do źródeł jako parametr:

gradit /ścieżka/do/skanowania

Nagrodą za Twoje wysiłki będzie kolorowy raport na temat potencjalnie wykorzystanych zasobów
miejsca w kodzie. Muszę powiedzieć, że oprócz samego skryptu (a to tylko 100 linii
kod w Bash), wartość pochodzi z baz sygnatur, w których
wyrażenia regularne i nazwy potencjalnie wrażliwych funkcji w różnych językach. Domyślny
dołączone są bazy dla Pythona, Perla, PHP, C++ - możesz pobrać pliki z folderu sygnatur
i wykorzystaj go we własnych projektach.

POT

Strona internetowa: www.owasp.org
Licencja: Open Source
Platforma: Unix, Windows
Języki: Java, JSP, ASP .Net, PHP

Jeśli graudit używa plików tekstowych do ustawienia sygnatury podatności,
potem w POT– bardziej progresywne podejście wykorzystujące pliki XML. Lubię to
Typowy podpis wygląda następująco:

vuln match - wyrażenie regularne do wyszukiwania;
typ - wskazuje typ podatności:
dotkliwość – wskazuje poziom ryzyka (wysoki, średni lub niski)
alt - alternatywny kod rozwiązujący problem

POT czyta bazę sygnatur i wykorzystuje ją w celu znalezienia problematycznych
sekcje kodu w kodach źródłowych w Java, JSP, ASP .Net i PHP. Baza jest stale
rośnie i oprócz listy „niebezpiecznych” funkcji zawiera typowe błędy w
przy użyciu formatowania ciągów i pisania zapytań SQL. Warto zauważyć, że
że program jest napisany w C#, ale działa dobrze pod niks, dzięki
do projektu Mono – otwartej implementacji platformy .Net.

Skaner błędów PHP

Strona internetowa:
raz0r.name/releases/php-bug-scanner
Licencja: bezpłatna
Platforma: Windows
Języki: PHP

Jeśli potrzebujesz przeprowadzić analizę statyczną aplikacji PHP, polecam
próbować Skaner błędów PHP, który został napisany przez naszego autora - raz0r. Stanowisko
Program opiera się na skanowaniu różnych funkcji i zmiennych w skryptach PHP,
które można wykorzystać w atakach internetowych. Opis taki
Sytuacje są sformalizowane w postaci tak zwanych ustawień, a program już jest
Zawiera 7 specjalnych ustawień wstępnych, pogrupowanych według kategorii:

  • Wykonanie kodu;
  • Wykonanie polecenia;
  • Transocja katalogu;
  • Globals zastępuje;
  • włączać;
  • Wstrzyknięcie SQL;
  • różnorodny.

To zabawne, że program jest napisany
PHP/WinBinder i skompilowany
bamcompile , więc wygląda jak zwykła aplikacja Windows. Poprzez
wygodny interfejs, Pentester może włączyć lub wyłączyć analizę kodu w celu obecności
pewne luki.

Chochlik

Strona internetowa:
pixybox.seclab.tuwien.ac.at
Licencja: bezpłatna
Platforma: Unix, Windows
Języki: PHP

Narzędzie opiera się na skanowaniu kodu źródłowego i konstruowaniu wykresów
Strumienie danych. Ten wykres śledzi ścieżkę nadchodzących danych
spoza programu - od użytkownika, z bazy danych, z niektórych zewnętrznych
wtyczka itp. W ten sposób lista wrażliwych punktów (lub wejść) do
Aplikacje. Korzystając z wzorów opisujących luki, kontrole Pixy dla takich
Punkty i pozwala zidentyfikować luki XSS i SQL. Ponadto same wykresy, które
zbudowane podczas analizy, można przeglądać w folderze wykresów (na przykład
xss_file.php_1_dep.dot) - Jest to bardzo przydatne, aby zrozumieć, dlaczego
Ta lub ta sekcja kodu jest uważana za pixy-wulnerową. Ogólnie sam rozwój
niezwykle edukacyjne i pokazuje, jak działają zaawansowane narzędzia
statyczna analiza kodu. Na stronie

dokumentacji deweloper wyraźnie mówi o poszczególnych etapach pracy
Program, wyjaśnia logikę i algorytm tego, w jaki sposób należy analizować program
ten czy ten kawałek kodu. Sam program jest napisany w Javie i rozpowszechniany w
Open source, a na stronie głównej jest nawet prosta usługa online
Aby sprawdzić kod pod kątem luk XSS.

Uncja 6

Strona internetowa: www.ouncelabs.com/products
Licencja: Shareware
Platforma: Windows

Niestety, istniejące bezpłatne rozwiązania są nadal głową, a ramiona poniżej komercyjnych
analogi. Wystarczy przestudiować jakość i szczegółowość raportu, który jest
Uncja 6
- i zrozum, dlaczego. Program jest oparty na specjalnym
Uncja Core Analysis Engine, który sprawdza kod zgodności z regułami
oraz zasady opracowane przez zespół profesjonalnych pentesterów,
zgromadził doświadczenie znanych firm ochroniarskich, społeczności hakerów, a także
standardy bezpieczeństwa. Program wykrywa szereg luk w kodzie: from
Przepełnienie bufora przed zastrzykami SQL. W razie potrzeby Uncję można łatwo zintegrować
Popularne IDE w celu wdrożenia automatycznego sprawdzania kodów podczas kompilacji
Każda nowa kompilacja opracowywanej aplikacji. Przy okazji,
Firma deweloperska – OUNCE Labs – tego lata przejęła sama IBM w tym roku. Więc
że produkt najprawdopodobniej będzie nadal rozwijany w ramach jednego z nich
Aplikacje komercyjne IBM.

Wgląd w Klockwork

Strona: www.klocwork.com
Licencja: Shareware
Platforma: Windows
Języki: C++, Java, C#

Przez długi czas ten ponownie produkt komercyjny posiadał funkcję statyczną
Skanowanie kodu tylko dla C, C+ i Java. Ale gdy tylko pojawiło się Visual Studio
2008 I.Net Framework 3.5, programiści ogłosili wsparcie dla C#. Odjechałem
program do dwóch swoich projektów pomocniczych, które pisał w zwyczaju
W programie Sharpe i programie ujawniono 7 krytycznych luk. Dobrze, że oni
pisane wyłącznie do użytku wewnętrznego :). Wgląd w Klockwork
Początkowo przede wszystkim do współpracy z mediami zintegrowanymi
Rozwój. Integracja z tym samym Visual Studio lub Eclipse jest niezwykle wykonana
pomyślnie - zaczynasz poważnie myśleć, że taka funkcjonalność powinna być
domyślnie w nich zaimplementowane :). Jeśli nie weźmiesz pod uwagę problemów z logiką
Zatem problemy z aplikacją i wydajnością Wgląd w Klockwork
Radzi sobie z poszukiwaniem przepełnienia bufora, brakiem filtrowania
kod użytkownika, możliwości wstrzykiwania SQL/Path/Cross-Site, słabe
szyfrowanie itp. Inną ciekawą opcją jest zbudowanie drzewa egzekucji
aplikacje, które pozwalają szybko zagłębić się w ogólną zasadę działania aplikacji i
oddzielnie śledzić, na przykład w celu przetwarzania dowolnego użytkownika
Wejście. A nawet za szybkie zaprojektowanie zasad sprawdzania kodu
Specjalne narzędzie - Studio sprawdzania Klockwork.

Pokrycie Zapobiega analizie statycznej

Strona: www.coverity.com/products
Licencja: Shareware
Platforma: Windows
Języki: C++, Java, C#

Jeden z najsłynniejszych analizatorów kodu statycznego w językach C/C++, Java i C#.
Jeśli wierzyć twórcom, z rozwiązania korzysta ponad 100 tys
deweloperów na całym świecie. Przemyślane mechanizmy pozwalają na automatyzację
szukaj wycieków pamięci, pilnych wyjątków, problemów z szybkością i,,
Oczywiście luki w zabezpieczeniach są bezpieczne. Produkt obsługuje różne platformy,
kompilatory (GCC, Microsoft Visual C++ i wiele innych), a także integruje się z
Różne media programistyczne, głównie Eclipse i Visual Studio. U źródła
Obejścia kodu nie są używane do głupich algorytmów obejścia od początku do końca, ale do czegoś
jak debugger analizujący, jak program będzie się zachowywał w różnych sytuacjach
sytuacji po spotkaniu rozgałęzień. W ten sposób osiągane jest 100% pokrycie kodu.
Wymagane było tak kompleksowe podejście, w tym pełna analiza
aplikacje wielowociarskie specjalnie zoptymalizowane do działania na wielu rdzeniach
procesory. Centrum integralności osłony pozwala znaleźć takie błędy
jako warunek wyścigu (błąd projektowy w systemie wielozadaniowym, w którym
Działanie systemu zależy od kolejności wykonywania części kodu), zakleszcze
i wiele więcej. Dlaczego odwracające tego potrzebują? Zapytaj o to programiści o tym
exploity dla Firefoksa i IE :).

OWASP Code Crawler

Strona internetowa: www.owasp.org
Licencja: GNU GPL
Platforma: Windows
Języki: Java, C#, VB

Twórca tego narzędzia, Alessio Marziali, jest autorem dwóch książek na ASP.NET,
renomowany koder aplikacji o wysokim obciążeniu dla sektora finansowego, a także
Pentester. W 2007 r. Opublikował informacje o krytycznych lukach w 27
Włoskie strony internetowe. Jego pomysła - OWASP Code Crawler
Zaprojektowany do statycznej analizy kodu .NET i J2EE/Java, otwarcie dostępny
w Internecie, a pod koniec roku autor obiecuje wydać nową wersję programu z
znacznie więcej funkcjonalności. Ale najważniejsza rzecz została już wdrożona -
Analiza kodów źródłowych w C#, Visual Basic i Java. Pliki do zeskanowania są wybierane
Za pośrednictwem interfejsu GUI, a skanowanie zaczyna się automatycznie. Dla każdego
problematycznej części kodu, opis luki jest wyświetlany w sekcji Zagrożenie
Opis. To prawda, pole Wytyczne OWASP prawdopodobnie wskazanie ścieżki
Niestety, rozwiązanie problemu nie jest jeszcze dostępne. Ale możesz użyć
Eksperymentalna funkcja kodu skanowania na zdalnym komputerze, dostępna
Na karcie zdalnego skanowania. Autor obiecuje poważne ulepszenie tej funkcji i, w
w tym agregowanie źródeł aplikacji do analizy bezpośrednio z systemu
kontrola wersji.

OSTRZEŻENIE

Informacje są prezentowane do celów informacyjnych, a przede wszystkim pokazuje
Jak programiści mogą uniknąć krytycznych błędów podczas rozwoju
Aplikacje. Za korzystanie z nabytej wiedzy do celów nielegalnych, ani autor, ani
Redaktorzy nie ponoszą odpowiedzialności.

Ludzie popełniają błędy podczas pisania kodu w C i C ++. Wiele z tych błędów można znaleźć dzięki -wall, twierdzenia, testy, skrupulatny przegląd kodu, ostrzeżenia z IDE, budując projekt z różnymi kompilatorami dla różnych systemów operacyjnych działających na różnych sprzętach i tak dalej. Ale nawet przy wszystkich tych pomiarach błędy często stają się niewykryte. Analiza statycznego kodu może nieco poprawić sytuację. W tej notatce zapoznamy się z niektórymi narzędziami do przeprowadzania tej bardzo statycznej analizy.

Cppcheck

CppCheck to darmowy, wieloplatformowy analizator statyczny typu open source (GPLv3). Jest dostępny od razu po wyjęciu z pudełka w pakietach dla wielu systemów *nix. CppCheck można również zintegrować z wieloma IDE. W chwili pisania tego tekstu CppCheck jest żywym i rozwijającym się projektem.

Przykład użycia:

cppcheck ./src/

Przykładowe wyjście:

: (błąd) Typowy błąd realloc: „numarr” ma wartość zerową, ale nie
uwolniony w przypadku niepowodzenia

: (błąd) Niebezpieczne użycie „n” (strncpy nie zawsze
null-zakończ to)

CppCheck jest dobry, ponieważ działa dość szybko. Nie ma powodu, aby nie dodać jego uruchomienia do systemu ciągłej integracji, aby skorygować wszystkie, wszystkie, wszystkie wyświetlane ostrzeżenia. Choć wiele z nich w praktyce okazuje się fałszywie dodatnich.

Analizator statyczny Clang

Kolejny darmowy, wieloplatformowy analizator statyczny typu open source. Jest częścią tzw. stosu LLVM. W przeciwieństwie do CppCheck działa znacznie wolniej, ale znajduje też znacznie poważniejsze błędy.

Przykład budowania raportu dla PostgreSQL:

CC =/ usr/ local/ bin/ clang38 CFLAGS ="-O0 -g" \
./configure --enable-cassert --enable-debug
wyczyść
mkdir../report-201604/
/ usr/ local/ bin/ scan-build38 -o ../ report-201604 / gmake -j2

Przykład generowania raportu dla jądra FreeBSD:

# użycie własnego MAKEOBJDIR pozwala na zbudowanie jądra bez rootowania
mkdir/tmp/freebsd-obj
# sam montaż
COMPILER_TYPE =clang / usr/ local/ bin/ scan-build38 -o ../ report-201604 / \
make buildkernel KERNCONF =GENERIC MAKEOBJDIRPREFIX =/ tmp/ freebsd-obj

Pomysł, jak można się domyślić, polega na oczyszczeniu, a następnie uruchomieniu kompilacji w obszarze scan-build.

Wynikiem jest bardzo ładny raport HTML ze szczegółowymi wyjaśnieniami, możliwością filtrowania błędów według typu i tak dalej. Koniecznie zajrzyj na stronę internetową i zobacz jak to wygląda.

W tym kontekście nie mogę nie zauważyć, że w świecie Clang/LLVM istnieją również narzędzia dynamiczny analizy, tak zwane „środki odkażające”. Jest ich sporo, znajdują bardzo fajne błędy i działają szybciej niż Valgrind (choć tylko na Linuksie). Niestety omówienie środków dezynfekujących wykracza poza zakres tej notatki, więc przeczytaj je samodzielnie.

Studio PVS

Zamknięty analizator statyczny, dystrybuowany za pieniądze. PVS-Studio działa tylko w systemie Windows i tylko z Visual Studio. Istnieje wiele informacji na temat istnienia wersji dla systemu Linux, ale nie jest ona dostępna na oficjalnej stronie internetowej. O ile rozumiem, cena licencji jest ustalana indywidualnie z każdym klientem. Dostępna wersja próbna.

Testowałem PVS-Studio 6.02 na Windows 7 SP1 działającym pod KVM z zainstalowanym Visual Studio 2013 Express Edition. Podczas instalacji PVS-Studio pobrano także .NET Framework 4.6. Wygląda mniej więcej tak. Otwierasz projekt (testowałem na PostgreSQL) w Visual Studio, w PVS-Studio klikasz „teraz zacznę budować projekt”, następnie w Visual Studio klikasz Build, po zakończeniu kompilacji w PVS-Studio klikasz „I” skończyłem” i zobacz raport.

PVS-Studio naprawdę znajduje bardzo fajne błędy, których Clang Static Analyzer nie widzi (na przykład). Bardzo podobał mi się także interfejs, który pozwala sortować i filtrować błędy według ich typu, ważności, pliku, w którym zostały znalezione, i tak dalej.

Z jednej strony smutne jest to, że aby móc korzystać z PVS-Studio, projekt musi móc się skompilować pod Windowsem. Z drugiej strony użycie CMake w projekcie oraz zbudowanie go i przetestowanie pod różnymi systemami operacyjnymi, w tym Windows, jest w każdym przypadku bardzo dobrym pomysłem. Może więc nie jest to aż tak wielka wada. Ponadto pod poniższymi linkami można znaleźć wskazówki dotyczące tego, jak ludziom udało się uruchomić PVS-Studio na projektach, które nie są zbudowane dla systemu Windows: jeden, dwa, trzy, cztery.

Dodatek: Wypróbowałem wersję beta PVS-Studio dla systemu Linux. Okazało się, że jest bardzo łatwy w użyciu. Tworzymy plik pvs.conf z mniej więcej następującą zawartością:

lic-file=/home/afiskon/PVS-Studio.lic
plik-wyjściowy=/home/afiskon/postgresql/pvs-output.log

Następnie mówimy:

oczyścić
./ skonfiguruj ...
śledzenie pvs-studio-analyzer - make
# zostanie utworzony duży (dla mnie ~40 MB) plik strace_out
analiza pvs-studio-analyzer --cfg ./ pvs.conf
konwerter plogów -t lista zadań -o wynik.zadanie pvs-wyjście.log

Dodatek: PVS-Studio dla systemu Linux opuściło wersję beta i jest teraz dostępne dla wszystkich.

Skanowanie pokrycia

Pokrycie jest uważane za jeden z najbardziej wyrafinowanych (a przez to drogich) analizatorów statycznych. Niestety na oficjalnej stronie nie można pobrać nawet wersji próbnej. Możesz wypełnić formularz, a jeśli jesteś pracownikiem IBM, być może skontaktujemy się z Tobą. Na Bardzo Silne pragnienie Coverity do jakiejś prehistorycznej wersji można znaleźć za pomocą nieoficjalnych kanałów. Jest dostępny dla systemu Windows i Linux i działa w przybliżeniu takiej samej zasady co Studio PVS. Ale bez numeru seryjnego lub leków Coverity nie pokaże raportów. Aby znaleźć numer seryjny lub lek, musisz mieć nie tylko bardzo silne pragnienie, ale bardzo, bardzo ... Bardzo mocny.

Na szczęście Coverity ma wersję SaaS - skanowanie okładek. Nie tylko skanowanie okładów jest dostępne dla zwykłych śmiertelników, ale także jest całkowicie bezpłatny. Nie ma połączenia z określoną platformą. Jednak tylko otwarte projekty można analizować za pomocą skanowania pokrycia.

Oto jak to działa. Rejestrujesz swój projekt za pośrednictwem interfejsu internetowego (lub dołączasz do istniejącego, ale jest to mniej interesujący przypadek). Aby wyświetlić raporty, musisz przejść przez moderację, która zajmuje 1-2 dni robocze.

Raporty są zbudowane w ten sposób. Najpierw budujesz swój projekt lokalnie za pomocą specjalnego narzędzia o nazwie Coverity Build Tool. To narzędzie jest podobne do budowania skanowania z Clang Static Analyzer i jest dostępne dla wszystkich możliwych platform, w tym wszystkich egzotyków, takich jak FreeBSD, a nawet NetBSD.

Instalowanie narzędzie do kompilacji osłony:

TAR -xVZF Cov-analiza-linux64-7.7.0.4.tar.got
Eksport ścieżka =/ home/ eax/ temp/ cov-analiza-linux64-7.7.0.4/ bin: $ ścieżka

Przygotujmy projekt testowy (użyłem kodu z artykułu, kontynuuj uczenie się OpenGL: proste dane wyjściowe):

Git Clone git @ github.com:afiskon/ c-opengl-text.git
Tekst cd c-opengl
Git Init
Aktualizacja submodułu git
kompilacja mkdir
CD Build
cmake ..

Następnie gromadzimy projekt pod COV-Build:

Cov-Build--Dir Cov-Int Make -J2 Demo Emdconv

Ważny! Nie zmieniaj nazwy katalogu Cov-Int.

Archiwaj katalog Cov-Int:

tar -cvzf c-opengl-text.tgz cov-int

Prześlij archiwum za pomocą formularza przesyłania projektu. Istnieją również instrukcje na stronie internetowej Scan Coverity do automatyzacji tego kroku za pomocą Curl. Trochę czekamy i możemy zobaczyć wyniki analizy. Należy pamiętać, że aby przejść moderację, musisz złożyć co najmniej jedną kompilację do analizy.

Skanowanie okładki bardzo dobrze szuka błędów. Z pewnością lepiej niż Analizator statyczny Clang. Jednocześnie istnieją fałszywe pozytywy, ale są one znacznie mniejsze. Dogodnie interfejs internetowy ma coś w rodzaju wbudowanego śledzenia błędów, który pozwala przypisać ciężkość błędom, który jest odpowiedzialny za ich naprawienie i podobne rzeczy. Możesz zobaczyć, które błędy są nowe, a które były już w poprzednich wersjach. Fałszywe pozytywy mogą być oznaczone jako takie i ukryte.

Pamiętaj, że nie musisz być właścicielem, aby analizować projekt w Coverity Scan. Osobiście odniosłem sukces w analizie kodu PostgreSQL bez dołączania do istniejącego projektu. Wydaje się również, że jeśli naprawdę chcesz (na przykład używając podmodułów Git), możesz wrzucić do przeglądu mały i niezbyt otwarty kod źródłowy.

Wniosek

Oto kilka innych analizatorów statycznych, które nie zostały uwzględnione w recenzji:

Każdy z analizowanych analizatorów znajduje błędy, których nie znajdują inne. Dlatego najlepiej jest użyć ich wszystkich na raz. Robienie tego bezpośrednio przez cały czas najprawdopodobniej nie będzie działać obiektywnie. Ale wykonanie przynajmniej jednego uruchomienia przed każdym wydaniem z pewnością nie będzie złym pomysłem. Jednocześnie Clang Static Analyzer wydaje się być najbardziej wszechstronnym, a jednocześnie dość potężnym. Jeśli interesuje Cię jeden analizator, który jest niezbędny w każdym projekcie, użyj tego. Mimo wszystko polecam dodatkowo skorzystać przynajmniej z PVS-Studio lub Coverity Scan.

Jakich analizatorów statycznych próbowałeś i/lub regularnie używałeś i jakie są twoje wrażenia na ich temat?

Analiza kodu statycznego Jest to proces identyfikowania błędów i niedociągnięć w kodzie źródłowym programów. Analizę statyczną można traktować jako zautomatyzowany proces przeglądu kodu. Przyjrzyjmy się bliżej przeglądowi kodu.

Przegląd kodu to jedna z najstarszych i najbardziej niezawodnych metod identyfikacji defektów. Polega na wspólnym uważnym przeczytaniu kodu źródłowego i przedstawieniu rekomendacji dotyczących jego ulepszenia. Proces czytania kodu ujawnia błędy lub części kodu, które mogą stać się błędne w przyszłości. Uważa się również, że autor kodu nie powinien wyjaśniać, jak działa ta lub inna część programu podczas przeglądu. Algorytm działania powinien być jasny bezpośrednio z tekstu programu i komentarzy. Jeżeli ten warunek nie jest spełniony, kod należy zmodyfikować.

Zwykle recenzje kodu działają dobrze, ponieważ programiści znacznie częściej zauważają błędy w kodzie innych osób. Więcej informacji na temat technik przeglądu kodu można znaleźć w doskonałej książce Steve’a McConnella Code Complete.

Jedyną istotną wadą metodologii wspólnego przeglądu kodu jest jej niezwykle wysoki koszt. Należy regularnie spotykać kilku programistów, aby przeglądali nowy kod lub ponownie przeglądali kod po wydaniu zaleceń. Jednocześnie programiści muszą mieć regularne przerwy na odpoczynek. Jeśli spróbujesz przejrzeć duże fragmenty kodu na raz, Twoja uwaga szybko się przytępi, a korzyści z przeglądu kodu szybko znikną.

Okazuje się, że z jednej strony chcesz regularnie przeglądać kod. Z drugiej strony jest za drogi. Rozwiązaniem kompromisowym są narzędzia do analizy kodu statycznego. Niestrudzenie przetwarzają kod źródłowy programów i wydają programistom zalecenia, aby zwrócili szczególną uwagę na określone sekcje kodu. Program nie zastąpi oczywiście pełnego przeglądu kodu wykonanego przez zespół programistów. Jednak stosunek korzyści do kosztów sprawia, że ​​wykorzystanie analizy statycznej jest bardzo przydatną praktyką stosowaną przez wiele firm.

Problemy rozwiązywane przez programy do statycznej analizy kodu można podzielić na 3 kategorie:

  1. Identyfikacja błędów w programach. Zostanie to omówione bardziej szczegółowo poniżej.
  2. Zalecenia dotyczące formatowania kodu. Niektóre analizatory statyczne pozwalają sprawdzić, czy kod źródłowy jest zgodny z firmowym standardem formatowania kodu. Odnosi się to do kontrolowania wielkości wcięć w różnych projektach, używania spacji/znaków tabulacji i tak dalej.
  3. Liczenie metryczne. Metryka oprogramowania to miara, która zapewnia wartość liczbową niektórych właściwości oprogramowania lub jego specyfikacji. Istnieje wiele różnych wskaźników, które można obliczyć za pomocą różnych narzędzi.

Inne zalety statycznej analizy kodu:

  1. Pełne pokrycie kodu. Analizatory statyczne niezwykle rzadko sprawdzają nawet te fragmenty kodu, które otrzymują kontrolę. Takich sekcji kodu z reguły nie można testować innymi metodami. Pozwala to znaleźć defekty w procedurach obsługi rzadkich zdarzeń, procedurach obsługi błędów lub systemie rejestrowania.
  2. Analiza statyczna jest niezależna od użytego kompilatora i środowiska, w którym będzie wykonywany skompilowany program. Dzięki temu możesz znaleźć ukryte błędy, które mogą ujawnić się dopiero po kilku latach. Są to na przykład błędy o nieokreślonym zachowaniu. Takie błędy mogą pojawić się przy zmianie wersji kompilatora lub przy użyciu innych przełączników w celu optymalizacji kodu. Inny ciekawy przykład ukrytych błędów podano w artykule „Nadpisanie pamięci – dlaczego?”.
  3. Możesz łatwo i szybko wykryć literówki i konsekwencje użycia funkcji Kopiuj-Wklej. Z reguły znajdowanie tych błędów w inny sposób jest nieefektywną stratą czasu i wysiłku. Szkoda, że ​​po godzinie debugowania okazuje się, że błąd występuje w wyrażeniu takim jak „strcmp(A, A)”. Omawiając typowe błędy, zwykle się o nich nie wspomina. Jednak w praktyce dużo czasu poświęca się na ich identyfikację.

Wady statycznej analizy kodu

  1. Analiza statyczna jest generalnie słaba w diagnozowaniu wycieków pamięci i błędów współbieżności. Aby wykryć takie błędy, faktycznie trzeba wirtualnie wykonać część programu. Jest to niezwykle trudne do wdrożenia. Ponadto takie algorytmy wymagają dużo pamięci i czasu procesora. Z reguły analizatory statyczne ograniczają się do diagnozowania prostych przypadków. Bardziej skutecznym sposobem identyfikowania wycieków pamięci i współistniejących błędów jest użycie narzędzi analizy dynamicznej.
  2. Program do analizy statycznej ostrzega o podejrzanych miejscach. Oznacza to, że faktycznie kod może być całkowicie poprawny. Nazywa się je fałszywymi alarmami. Tylko programista jest w stanie zrozumieć, czy analizator wskazuje błąd, czy też wygenerował fałszywie dodatni wynik. Konieczność sprawdzania fałszywych alarmów zajmuje czas pracy i zmniejsza uwagę na te części kodu, które faktycznie zawierają błędy.

Błędy wykrywane przez analizatory statyczne są bardzo zróżnicowane. Oto na przykład lista diagnostyki, która jest zaimplementowana w narzędziu PVS-Studio. Niektóre analizatory specjalizują się w określonym obszarze lub typie defektu. Inne obsługują określone standardy kodowania, na przykład MISRA-C:1998, MISRA-C:2004, reguły Suttera-Alexandrescu, reguły Meyersa-Klausa i tak dalej.

Dziedzina analizy statycznej aktywnie się rozwija, pojawiają się nowe zasady i standardy diagnostyczne, a niektóre zasady stają się przestarzałe. Dlatego nie ma sensu porównywać analizatorów na podstawie list wykrytych defektów. Jedynym sposobem porównania narzędzi jest przeprowadzenie ich przez zestaw projektów i policzenie liczby rzeczywistych błędów, które wykryją. Temat ten został omówiony bardziej szczegółowo w artykule „

Wstęp

Standardowe możliwości oprogramowania i różnych systemów sterowania są dla większości klientów niewystarczające. Systemy zarządzania stronami internetowymi (na przykład WordPress, Joomla lub Bitrix), programy księgowe, systemy zarządzania klientami (CRM), przedsiębiorstwami i produkcją (na przykład 1C i SAP) zapewniają szerokie możliwości rozszerzenia funkcjonalności i dostosowania do potrzeb konkretnych klientów. Takie możliwości są realizowane przy użyciu niestandardowych modułów innych firm lub dostosowywania istniejących. Moduły te to kod programu napisany w jednym z wbudowanych języków programowania, który wchodzi w interakcję z systemem i realizuje wymagane przez klientów funkcjonalności.

Nie wszystkie organizacje zdają sobie sprawę, że specjalnie osadzony kod lub strona internetowa może zawierać poważne luki, których wykorzystanie przez atakującego może doprowadzić do wycieku poufnych informacji, a zakładki oprogramowania to specjalne sekcje kodu przeznaczone do wykonywania dowolnych operacji przy użyciu tajnych poleceń znane twórcy kodu. Ponadto niestandardowy kod może zawierać błędy, które mogą zniszczyć lub uszkodzić bazy danych lub zakłócić płynne procesy biznesowe.

Firmy zaznajomione z opisanymi powyżej zagrożeniami starają się angażować audytorów i specjalistów w analizę kodów źródłowych programów pod kątem akceptacji gotowych modułów, tak aby eksperci mogli określić bezpieczeństwo opracowanego rozwiązania i upewnić się, że nie ma w nim luk, w nich błędy lub błędy oprogramowania. Ale ta metoda kontroli ma wiele wad. Po pierwsze, usługa ta poważnie zwiększa budżet na rozwój; po drugie, przeprowadzenie audytu i analizy zajmuje dużo czasu – od tygodnia do kilku miesięcy; po trzecie, takie podejście nie gwarantuje całkowitego braku problemów z analizowanym kodem - istnieje możliwość wystąpienia błędu ludzkiego i odkrycia nieznanych wcześniej wektorów ataku po zaakceptowaniu i uruchomieniu kodu.

Istnieje bezpieczna metodyka rozwoju, która zapewnia integrację procesów audytu i kontroli kodu na etapie tworzenia oprogramowania - SDL (Security Development Lifecycle, cykl życia bezpiecznego rozwoju). Jednak tylko programista może zastosować tę metodologię, jeśli mówimy o klientach, to SDL nie ma dla nich zastosowania, ponieważ proces wiąże się z przebudową algorytmów tworzenia kodu i jest już za późno na jego wykorzystanie w trakcie akceptacji. Ponadto wiele zmian obejmuje niewielką część istniejącego kodu, w którym to przypadku SDL również nie ma zastosowania.

Aby rozwiązać problem audytu kodu źródłowego i zapewnić ochronę przed wykorzystaniem luk w kodach osadzonych i aplikacjach internetowych, dostępne są analizatory kodu źródłowego.

Klasyfikacja analizatorów kodu źródłowego

Analizatory kodu źródłowego to klasa oprogramowania stworzonego w celu identyfikowania i zapobiegania wykorzystywaniu błędów oprogramowania w kodach źródłowych. Wszystkie produkty służące do analizy kodu źródłowego można podzielić na trzy typy:

  • Do pierwszej grupy zaliczają się analizatory kodu aplikacji internetowych oraz narzędzia zapobiegające wykorzystaniu luk w zabezpieczeniach witryn internetowych.
  • Druga grupa to wbudowane analizatory kodu, które pozwalają wykryć obszary problematyczne w kodzie źródłowym modułów mających na celu rozszerzenie funkcjonalności systemów korporacyjnych i produkcyjnych. Do takich modułów zaliczają się programy dla linii produktów 1C, rozszerzenia systemów CRM, systemy zarządzania przedsiębiorstwem i systemy SAP.
  • Ostatnia grupa przeznaczona jest do analizy kodu źródłowego w różnych językach programowania niezwiązanych z aplikacjami biznesowymi i aplikacjami internetowymi. Analizatory takie przeznaczone są dla klientów i twórców oprogramowania. Ta grupa analizatorów wykorzystywana jest również do stosowania metodologii bezpiecznego tworzenia oprogramowania. Statyczne analizatory kodu wyszukują problemy i potencjalne luki w kodach źródłowych i dostarczają rekomendacji dotyczących ich eliminacji.

Warto zauważyć, że większość analizatorów jest typu mieszanego i realizuje funkcje analizy szerokiej gamy produktów programowych - aplikacji internetowych, kodu osadzonego i zwykłego oprogramowania. Jednak w tym przeglądzie skupiono się na wykorzystaniu analizatorów przez klientów programistycznych, dlatego większą uwagę poświęcono analizatorom dla aplikacji internetowych i kodu osadzonego.

Analizatory mogą zawierać różne mechanizmy analityczne, jednak najbardziej powszechną i uniwersalną jest analiza statyczna kodu źródłowego – SAST (Static Application Security Testing), istnieją również metody analizy dynamicznej – DAST (Dynamic Application Security Testing), które dokonują kontroli kodu w trakcie jego wykonywania oraz różne opcje hybrydowe łączące różne typy analiz. Analiza dynamiczna jest niezależną metodą weryfikacji, która może rozszerzyć możliwości analizy statycznej lub być stosowana samodzielnie w przypadkach, gdy nie jest dostępny dostęp do kodów źródłowych. Przegląd ten obejmuje wyłącznie analizatory statyczne.

Analizatory kodu osadzonego i aplikacji internetowych różnią się zestawem cech. Obejmuje nie tylko jakość analizy oraz listę obsługiwanych produktów oprogramowania i języków programowania, ale także dodatkowe mechanizmy: możliwość automatycznego poprawiania błędów, obecność funkcji zapobiegających wykorzystaniu błędów bez zmian w kodzie, możliwość aktualizacji wbudowana baza podatności i błędów programistycznych, dostępność certyfikatów zgodności i możliwość spełnienia wymagań różnych organów regulacyjnych.

Zasady działania analizatorów kodu źródłowego

Ogólne zasady działania są podobne dla wszystkich klas analizatorów: zarówno analizatorów kodu źródłowego aplikacji internetowych, jak i analizatorów kodu wbudowanego. Różnica między tego typu produktami polega jedynie na możliwości określenia cech wykonania i interakcji kodu ze światem zewnętrznym, co znajduje odzwierciedlenie w bazach podatności analizatorów. Większość analizatorów dostępnych na rynku realizuje funkcje obu klas, sprawdzając równie dobrze zarówno kod osadzony w aplikacjach biznesowych, jak i kod aplikacji webowych.

Dane wejściowe dla analizatora kodu źródłowego to tablica tekstów źródłowych programu i ich zależności (ładowalne moduły, użyte oprogramowanie innych firm itp.). W wyniku swojej pracy wszystkie analizatory generują raport o wykrytych podatnościach i błędach programistycznych, ponadto niektóre analizatory udostępniają funkcje automatycznej korekcji błędów.

Warto zaznaczyć, że automatyczna korekcja błędów nie zawsze działa poprawnie, dlatego jest to funkcjonalność przeznaczona wyłącznie dla twórców aplikacji webowych i modułów wbudowanych.Klient produktu powinien polegać wyłącznie na raporcie końcowym analizatora i wykorzystywać uzyskane dane do podjąć decyzję o akceptacji i wdrożeniu opracowanego kodu lub przesłaniu go do rewizji.

Rysunek 1. Algorytm analizatora kodu źródłowego

Przy ocenie kodów źródłowych analizatory korzystają z różnych baz danych zawierających opisy podatności i błędów programistycznych:

  • Własna baza danych podatności i błędów programistycznych - każdy twórca analizatorów kodu źródłowego posiada własne działy analityczno-badawcze, które przygotowują specjalistyczne bazy danych do analizy kodów źródłowych programów. Jakość własnej bazy danych jest jednym z kluczowych kryteriów wpływających na ogólną jakość produktu. Dodatkowo własna baza danych musi być dynamiczna i stale aktualizowana – nowe wektory ataków i wykorzystywania podatności, a także zmiany w językach programowania i metodach rozwoju wymagają od twórców analizatorów ciągłej aktualizacji bazy danych w celu utrzymania wysokiej jakości skanowania. Produkty ze statyczną, nieaktualizującą się bazą danych najczęściej przegrywają w testach porównawczych.
  • Państwowe bazy danych błędów programistycznych - istnieje szereg państwowych baz danych podatności, których kompilacją i obsługą zajmują się organy regulacyjne w różnych krajach. Przykładowo w USA wykorzystywana jest baza danych CWE – Common Weakness Enumeration, prowadzona przez organizację MITRE, wspieraną m.in. przez Departament Obrony USA. Rosja nie posiada jeszcze podobnej bazy danych, ale w przyszłości rosyjski FSTEC planuje uzupełnić swoje bazy danych o podatnościach i zagrożeniach o bazę danych o błędach programowych. Analizatory podatności realizują obsługę bazy danych CWE integrując ją z własną bazą podatności lub wykorzystując ją jako odrębny mechanizm weryfikacji.
  • Wymagania standardów i rekomendacje dotyczące bezpiecznego programowania - istnieje szereg standardów rządowych i branżowych opisujących wymagania dotyczące bezpiecznego tworzenia aplikacji, a także szereg rekomendacji i „najlepszych praktyk” od światowych ekspertów w dziedzinie tworzenia i bezpieczeństwa oprogramowania. Dokumenty te nie opisują bezpośrednio błędów programistycznych, w przeciwieństwie do CWE, ale zawierają listę metod, które można przekonwertować do wykorzystania w statycznym analizatorze kodu źródłowego.

Jakość analizy, liczba fałszywych alarmów i pominiętych błędów zależy bezpośrednio od tego, jakie bazy danych są wykorzystywane w analizatorze. Dodatkowo analiza zgodności z wymaganiami regulacyjnymi pozwala na ułatwienie i uproszczenie procedury audytu zewnętrznego infrastruktury i systemów informatycznych, jeżeli wymagania są obowiązkowe. Na przykład wymagania PCI DSS są obowiązkowe dla aplikacji internetowych i wbudowanego kodu współpracującego z informacjami o płatnościach dla kart bankowych, podczas gdy przeprowadzany jest zewnętrzny audyt zgodności PCI DSS, obejmujący analizę używanego oprogramowania.

Rynku światowym

Na światowym rynku dostępnych jest wiele różnych analizatorów – zarówno od znanych dostawców zabezpieczeń, jak i niszowych graczy zajmujących się wyłącznie tą klasą produktów. Centrum Analityczne Gartnera klasyfikuje i ocenia analizatory kodu źródłowego od ponad pięciu lat, natomiast do 2011 roku Gartner osobno identyfikował omawiane w tym artykule analizatory statyczne, później łącząc je w wyższą klasę – Application Security Testing).

W badaniu Gartner Magic Quadrant 2015 liderami na rynku testów bezpieczeństwa są HP, Veracode i IBM. Jednocześnie Veracode jest jedyną wiodącą firmą, która nie posiada analizatora jako oprogramowania, a funkcjonalność dostarczana jest jedynie jako usługa w chmurze Veracode. Reszta wiodących firm oferuje albo wyłącznie produkty dokonujące kontroli komputerów użytkowników, albo możliwość wyboru między produktem a usługą w chmurze. HP i IBM pozostały liderami rynku światowego przez ostatnie pięć lat; przegląd ich produktów znajduje się poniżej. Produktem najbliższym pozycji lidera jest produkt firmy Checkmarx, która specjalizuje się wyłącznie w tej klasie produktów, dlatego i on znalazł się w teście.

Rysunek 2. Magic Quadrant dla analitykówGartner o uczestnikach rynku analizy bezpieczeństwa aplikacji w sierpniu 2015 r

Według raportu analityków ReportsnReports, w Stanach Zjednoczonych wielkość rynku analizatorów kodu źródłowego w 2014 roku wyniosła 2,5 miliarda dolarów, a do 2019 roku przewidywany jest dwukrotny wzrost do 5 miliardów dolarów przy rocznym wzroście na poziomie 14,9%. Ponad 50% organizacji ankietowanych na potrzeby raportu planuje przeznaczyć i zwiększyć budżety na analizę kodu źródłowego na potrzeby niestandardowego rozwoju, a tylko 3% wypowiadało się negatywnie na temat wykorzystania tych produktów.

Duża liczba produktów w rejonie pretendentów potwierdza popularność tej klasy produktu i szybki rozwój branży. W ciągu ostatnich pięciu lat całkowita liczba producentów w tym kwadrancie prawie potroiła się, a trzy produkty dodano od raportu z 2014 r.

Rynek rosyjski

Rosyjski rynek analizatorów kodów źródłowych jest dość młody - pierwsze produkty publiczne zaczęły pojawiać się na rynku niecałe pięć lat temu. Jednocześnie rynek powstał z dwóch kierunków - z jednej strony firmy opracowujące produkty do testowania w celu zidentyfikowania niezgłoszonych możliwości w laboratoriach FSTEC, FSB i Ministerstwie Obrony Federacji Rosyjskiej; Z drugiej strony są firmy zaangażowane w różne obszary bezpieczeństwa i które postanowiły dodać nową klasę produktów do swojego portfela.

Najbardziej znaczącymi graczami na nowym rynku są pozytywne technologie, InfoWatch i Solar Security. Pozytywne technologie od dawna specjalizują się w znalezieniu i analizie luk w zabezpieczeniach; Ich portfolio obejmuje produkt MaxPatrol, jednego z liderów rynku krajowego w zakresie zewnętrznego monitorowania bezpieczeństwa, więc nic dziwnego, że firma postanowiła zaangażować się w analizę wewnętrzną i opracować własny analizator kodu źródłowego. Infowatch opracował jako deweloper systemów DLP, ostatecznie stając się grupą firm w poszukiwaniu nowych nisz rynkowych. W 2012 r. Apercut stał się częścią InfoWatch, dodając narzędzie do analizy kodu źródłowego do portfela InfoWatch. Inwestycje i doświadczenie Infowatch pozwoliły nam szybko rozwinąć produkt na wysoki poziom. Solar Security oficjalnie zaprezentował swój produkt Solar Incode dopiero pod koniec października 2015 r., Ale już w momencie zwolnienia mieli cztery oficjalne wdrożenia w Rosji.

Firmy, które opracowują analizy kodów źródłowych do testowania certyfikacji od dziesięcioleci, na ogół nie spieszą się, aby oferować analizy dla biznesu, więc nasz przegląd obejmuje tylko jeden taki produkt - firmy Echelon. Być może w przyszłości będzie w stanie wypierać innych graczy rynkowych, przede wszystkim ze względu na obszerne teoretyczne i praktyczne doświadczenie programistów tego produktu w dziedzinie poszukiwania luk i możliwości niezgłoszonych.

Kolejnym niszowym graczem na rynku rosyjskim jest Digital Security, firma konsultingowa w zakresie bezpieczeństwa informacji. Mając duże doświadczenie w audytowaniu i wdrażaniu systemów ERP, znalazła niezajętą ​​niszę i rozpoczęła prace nad produktem do analizy bezpieczeństwa systemów ERP, który m.in. zawierał mechanizmy analizy kodów źródłowych dla programów wbudowanych.

Krótki przegląd analizatorów

Pierwszym narzędziem do analizy kodu źródłowego w naszej recenzji jest produkt firmy Fortify, którego właścicielem jest firma Hewlett-Packard od 2010 roku. Linia HP Fortify obejmuje różnorodne produkty do analizy kodów programów: istnieje usługa SaaS Fortify On-Demand, która polega na przesłaniu kodu źródłowego do chmury HP oraz pełnoprawna aplikacja HP ​​Fortify Static Code Analyzer instalowana w infrastrukturze klienta.

HP Fortify Static Code Analyzer obsługuje szeroką gamę języków i platform programowania, w tym aplikacje internetowe napisane w PHP, Python, Java/JSP, ASP.Net i JavaScript oraz kod osadzony w ABAP (SAP), Action Script i VBScript.

Rysunek 3. Interfejs narzędzia HP Fortify Static Code Analyzer

Wśród cech produktu warto podkreślić obecność w HP Fortify Static Code Analyzer obsługi integracji z różnymi systemami zarządzania rozwojem i śledzenia błędów. Jeśli twórca kodu zapewni klientowi dostęp do bezpośredniego raportowania błędów do Bugzilli, HP Quality Center lub Microsoft TFS, analizator może automatycznie generować raporty o błędach w tych systemach bez konieczności ręcznej interwencji.

Działanie produktu opiera się na własnych bazach wiedzy HP Fortify, powstałych w wyniku adaptacji bazy danych CWE. Produkt realizuje analizę w celu spełnienia wymagań zaleceń DISA STIG, FISMA, PCI DSS i OWASP.

Wśród wad HP Fortify Static Code Analyzer należy wymienić brak lokalizacji produktu na rynek rosyjski - interfejs i raporty są w języku angielskim, brak materiałów i dokumentacji produktu w języku rosyjskim, analiza wbudowanych kod dla 1C i innych krajowych produktów na poziomie przedsiębiorstwa nie jest obsługiwany.

Zalety analizatora kodu statycznego HP Fortify:

  • znana marka, rozwiązanie wysokiej jakości;
  • duża lista analizowanych języków programowania i obsługiwanych środowisk programistycznych;
  • dostępność integracji z systemami zarządzania rozwojem i innymi produktami HP Fortify;
  • wsparcie dla międzynarodowych standardów, rekomendacji i „najlepszych praktyk”.

Checkmarx CxSAST to narzędzie amerykańsko-izraelskiej firmy Checkmarx, specjalizującej się w tworzeniu analizatorów kodu źródłowego. Produkt ten przeznaczony jest przede wszystkim do analizy konwencjonalnego oprogramowania, ale dzięki obsłudze języków programowania PHP, Python, JavaScript, Perl i Ruby doskonale nadaje się do analizy aplikacji internetowych. Checkmarx CxSAST to uniwersalny analizator, który nie ma określonej specyfiki i dlatego nadaje się do stosowania na każdym etapie cyklu życia oprogramowania - od opracowania po aplikację.

Rysunek 4. Interfejs Checkmarx CxSAST

Checkmarx CxSAST implementuje obsługę bazy danych błędów kodu CWE, wspiera kontrole zgodności z zaleceniami OWASP i SANS 25, standardami PCI DSS, HIPAA, MISRA, FISMA i BSIMM. Wszystkie problemy wykryte przez Checkmarx CxSAST są podzielone według poziomu ryzyka - od drobnego do krytycznego. Wśród cech produktu jest obecność funkcji do wizualizacji kodu z konstrukcją schematów blokowych tras wykonania oraz zalecenia dotyczące rozwiązywania problemów z powiązaniem ze schematem graficznym.

Do wad produktu należy zaliczyć brak wsparcia dla analizy kodu osadzonego w aplikacjach biznesowych, brak lokalizacji oraz trudność w korzystaniu z produktu przez klientów z kodem oprogramowania, gdyż rozwiązanie jest przeznaczone przede wszystkim dla programistów i jest ściśle zintegrowane ze środowiskami deweloperskimi.

Korzyści z Checkmarx CxSAST:

  • duża liczba obsługiwanych języków programowania;
  • duża prędkość produktu, możliwość skanowania tylko nazwanych sekcji kodu;
  • możliwość wizualizacji wykresów wykonania analizowanego kodu;
  • raporty wizualne i graficzne metryki kodów źródłowych.

Kolejnym produktem znanego dostawcy jest analizator kodu źródłowego IBM Security AppScan Source. Linia AppScan obejmuje wiele produktów związanych z bezpiecznym tworzeniem oprogramowania, jednak inne produkty nie nadają się do korzystania z kodu oprogramowania u klientów, ponieważ mają dużo niepotrzebnej funkcjonalności. IBM Security AppScan Source, podobnie jak Checkmarx CxSAST, jest przeznaczony przede wszystkim dla organizacji programistycznych, obsługując jednocześnie jeszcze mniej języków programowania - tylko PHP, Perl i JavaScript. Języki programowania dla kodu osadzonego w aplikacjach biznesowych nie są obsługiwane.

Rysunek 5. Interfejs źródła IBM Security AppScan

IBM Security AppScan Source ściśle integruje się z platformą programistyczną IBM Rational, dlatego produkt jest najczęściej używany w fazie tworzenia i testowania oprogramowania i nie nadaje się dobrze do przeprowadzania akceptacji lub weryfikacji niestandardowej aplikacji.

Cechą szczególną IBM Security AppScan Source jest obsługa analizy programu dla IBM Worklight, platformy dla mobilnych aplikacji biznesowych. Lista obsługiwanych standardów i wymagań jest skąpa - PCI DSS oraz zalecenia DISA i OWASP, baza podatności porównuje problemy wykryte za pomocą CWE.

Nie zidentyfikowano żadnych szczególnych zalet tego rozwiązania dla klientów w fazie rozwoju.

AppChecker krajowej firmy NPO Eshelon CJSC to rozwiązanie, które pojawiło się na rynku całkiem niedawno. Pierwsza wersja produktu została wypuszczona zaledwie rok temu, jednak warto wziąć pod uwagę doświadczenie firmy Echelon w analizie kodu programu. „NPO Eshelon” jest laboratorium testowym FSTEC, FSB i Ministerstwa Obrony Federacji Rosyjskiej i posiada szerokie doświadczenie w dziedzinie analizy statycznej i dynamicznej kodów źródłowych programów.

Rysunek 6. Interfejs AppCheckera „Echelon”.

AppChecker przeznaczony jest do analizy różnorodnych programów i aplikacji internetowych napisanych w językach PHP, Java i C/C++. W pełni wspiera klasyfikację podatności CWE i uwzględnia rekomendacje OWASP, CERT i NISP. Produkt może służyć do przeprowadzania audytów na zgodność z wymaganiami PCI DSS oraz standardem Banku Rosji IBBS-2.6-2014.

Mankamenty produktu wynikają z wczesnego etapu rozwoju rozwiązania – brakuje wsparcia dla popularnych języków tworzenia stron internetowych oraz możliwości analizy osadzonego kodu.

Zalety:

  • możliwość przeprowadzenia audytu zgodnie z wymogami krajowymi i PCI DSS;
  • uwzględnienie wpływu cech języka programowania ze względu na elastyczną konfigurację analizowanych projektów;
  • niska cena.

PT Application Inspector to produkt rosyjskiego dewelopera Positive Technologies, wyróżniający się podejściem do rozwiązywania problemu analizy kodu źródłowego. Celem PT Application Inspector jest przede wszystkim wyszukiwanie luk w kodzie, a nie identyfikacja typowych błędów oprogramowania.

W przeciwieństwie do wszystkich innych produktów uwzględnionych w tej recenzji, PT Application Inspector ma nie tylko możliwość generowania raportu i wykazywania luk, ale także możliwość automatycznego tworzenia exploitów dla określonych kategorii i typów luk - małych modułów wykonywalnych, które wykorzystują znalezione luki. Za pomocą stworzonych exploitów można praktycznie sprawdzić zagrożenie wykrytymi podatnościami, a także kontrolować twórcę, sprawdzając działanie exploita po zadeklarowanym zamknięciu luki.

Rysunek 7. Interfejs Inspektora Aplikacji PT

PT Application Inspector obsługuje zarówno języki tworzenia aplikacji internetowych (PHP, JavaScript), jak i kod osadzony dla aplikacji biznesowych - SAP ABAP, SAP Java, Oracle EBS Java, Oracle EBS PL/SQL. PT Application Inspector obsługuje także wizualizację tras wykonywania programów.

PT Application Inspector to kompleksowe rozwiązanie zarówno dla programistów, jak i klientów korzystających z niestandardowych aplikacji internetowych i wtyczek do aplikacji biznesowych. Baza danych luk i błędów w kodzie programu zawiera własne opracowania Positive Technologies, bazę danych CWE i bazę danych WASC (baza danych konsorcjum sieciowego, odpowiednik CWE dla aplikacji internetowych).

Korzystanie z PT Application Inspector pozwala na spełnienie wymagań standardów PCI DSS, STO BR IBBS, a także 17. rozporządzenia FSTEC oraz wymagań dotyczących braku niezadeklarowanych możliwości (istotnych dla certyfikacji kodu).

Zalety:

  • wsparcie analizy aplikacji webowych oraz szeroka gama systemów deweloperskich dla aplikacji biznesowych;
  • produkt krajowy, lokalny;
  • szeroka gama obsługiwanych standardów państwowych;
  • wykorzystanie bazy danych podatności aplikacji webowych WASC i klasyfikatora CWE;
  • możliwość wizualizacji kodu programu i wyszukiwania zakładek programów.

InfoWatch Appercut został opracowany przez rosyjską firmę InfoWatch. Główną różnicą pomiędzy tym produktem a wszystkimi innymi z tej kolekcji jest jego specjalizacja w świadczeniu usług dla klientów aplikacji biznesowych.

InfoWatch Appercut obsługuje niemal wszystkie języki programowania, w których tworzone są aplikacje internetowe (JavaScript, Python, PHP, Ruby) oraz wbudowane moduły dla propozycji biznesowych - 1C, ABAP, X++ (ERP Microsoft Axapta), Java, Lotus Script. InfoWatch Appercut ma możliwość dostosowania się do specyfiki konkretnej aplikacji i specyfiki procesów biznesowych każdej firmy.

Rysunek 8. Interfejs InfoWatch Appercut

InfoWatch Appercut obsługuje wiele wymagań dotyczących skutecznego i bezpiecznego programowania, w tym ogólne wymagania PCI DSS i HIPPA, rekomendacje i „najlepsze praktyki” CERT i OWAST, a także rekomendacje producentów platform procesów biznesowych - 1C, SAP, Oracle, Microsoft.

Zalety:

  • produkt krajowy, lokalny, certyfikowany przez FSTEC Rosji;
  • jedyny produkt obsługujący wszystkie popularne platformy biznesowe w Rosji, w tym 1C, SAP, Oracle EBS, IBM Collaboration Solutions (Lotus) i Microsoft Axapta;
  • Szybki skaner, który sprawdza w ciągu kilku sekund i może sprawdzić tylko zmieniony kod i fragmenty kodu.

Digital Security ERPScan to specjalistyczny produkt do analizy i monitorowania bezpieczeństwa systemów biznesowych zbudowanych w oparciu o produkty SAP, pierwsza wersja została wydana w 2010 roku. Oprócz modułu analizy konfiguracji, podatności i kontroli dostępu (SOD), ERPScan zawiera moduł oceny bezpieczeństwa kodu źródłowego, który realizuje funkcje wyszukiwania zakładek, wywołań krytycznych, podatności i błędów programistycznych w kodzie w ABAP i języki programowania Java. Jednocześnie produkt uwzględnia specyfikę platformy SAP, koreluje wykryte podatności w kodzie z ustawieniami konfiguracyjnymi i uprawnieniami dostępu oraz przeprowadza analizę lepiej niż niewyspecjalizowane produkty współpracujące z tymi samymi językami programowania.

Rysunek 9. Interfejs Digital Security ERPScan

Dodatkowe funkcje ERPScan obejmują możliwość automatycznego generowania łat dla wykrytych luk, a także generowania sygnatur ewentualnych ataków i przesyłania tych sygnatur do systemów wykrywania i zapobiegania włamaniom (we współpracy z CISCO). Ponadto system zawiera mechanizmy oceny wydajności wbudowanego kodu, co jest krytyczne w przypadku aplikacji biznesowych, gdyż powolne działanie dodatkowych modułów może poważnie wpłynąć na procesy biznesowe w organizacji. System wspiera także analizę zgodnie ze szczegółowymi zaleceniami dotyczącymi analizy kodu aplikacji biznesowych, takimi jak EAS-SEC i BIZEC, a także ogólnymi zaleceniami PCI DSS i OWASP.

Zalety:

  • głęboka specjalizacja na jednej platformie aplikacji biznesowych z korelacją analizy z ustawieniami konfiguracyjnymi i prawami dostępu;
  • testy wydajności kodu osadzonego;
  • automatyczne tworzenie poprawek dla znalezionych luk i łatek wirtualnych;
  • szukaj luk typu zero-day.

Solar inCode to narzędzie do statycznej analizy kodu, zaprojektowane w celu identyfikacji luk w zabezpieczeniach informacji i niezadeklarowanych możliwości w kodach źródłowych oprogramowania. Głównym wyróżnikiem produktu jest możliwość odtworzenia kodu źródłowego aplikacji z działającego pliku przy wykorzystaniu technologii dekompilacji (inżynieria wsteczna).

Solar inCode umożliwia analizę kodu źródłowego napisanego w językach programowania Java, Scala, Java dla Androida, PHP i Objective C. W przeciwieństwie do większości konkurencji, lista obsługiwanych języków programowania obejmuje narzędzia programistyczne dla platform mobilnych Android i iOS .

Rysunek 10. Interfejs

W przypadku braku kodu źródłowego Solar inCode pozwala na analizę gotowych aplikacji, funkcjonalność ta wspiera aplikacje webowe oraz aplikacje mobilne. W szczególności w przypadku aplikacji mobilnych wystarczy skopiować link do aplikacji z Google Play lub Apple Store do skanera, aplikacja zostanie automatycznie pobrana, zdekompilowana i sprawdzona.

Korzystanie z Solar inCode pozwala na spełnienie wymagań standardów PCI DSS, STO BR IBBS, a także 17. rozporządzenia FSTEC oraz wymagań dotyczących braku niezadeklarowanych zdolności (istotnych dla certyfikacji kodu).

Zalety:

  • Wsparcie analizy aplikacji na urządzenia mobilne z systemami Android i iOS;
  • wspiera analizę aplikacji webowych i mobilnych bez wykorzystania kodu źródłowego programów;
  • udostępnia wyniki analiz w formie konkretnych zaleceń dotyczących eliminacji podatności;
  • generuje szczegółowe rekomendacje dotyczące konfiguracji narzędzi bezpieczeństwa: SIEM, WAF, FW, NGFW;
  • łatwo zintegrować się z bezpiecznym procesem tworzenia oprogramowania, wspierając pracę z repozytoriami kodu źródłowego.

wnioski

Obecność błędów oprogramowania, luk i backdoorów w oprogramowaniu tworzonym na zamówienie, niezależnie od tego, czy są to aplikacje internetowe, czy wtyczki do aplikacji biznesowych, stanowi poważne ryzyko dla bezpieczeństwa danych firmowych. Zastosowanie analizatorów kodu źródłowego może znacznie zmniejszyć te zagrożenia i utrzymać pod kontrolą jakość pracy wykonywanej przez twórców kodu programu bez konieczności poświęcania dodatkowego czasu i pieniędzy na usługi ekspertów i audytorów zewnętrznych. Jednocześnie korzystanie z analizatorów kodu źródłowego najczęściej nie wymaga specjalnego przeszkolenia, przydzielenia oddzielnych pracowników i nie wprowadza innych niedogodności, jeśli produkt służy wyłącznie do akceptacji, a korekta błędów przeprowadzana jest przez programistę. Wszystko to sprawia, że ​​to narzędzie jest obowiązkowe do użycia podczas korzystania z niestandardowych rozwiązań.

Wybierając analizator kodu źródłowego, należy wziąć pod uwagę funkcjonalność produktów i jakość ich pracy. Przede wszystkim należy zwrócić uwagę na możliwość sprawdzenia przez produkt języków programowania, w których zaimplementowane są sprawdzane kody źródłowe. Kolejnym kryterium wyboru produktu powinna być jakość testów, o której mogą decydować kompetencje firmy deweloperskiej oraz podczas działania demonstracyjnego produktu. Kolejnym czynnikiem wyboru produktu może być dostępność audytu pod kątem zgodności z wymaganiami norm krajowych i międzynarodowych, jeśli ich wdrożenie jest wymagane dla korporacyjnych procesów biznesowych.

W tej recenzji zdecydowanym liderem wśród produktów zagranicznych pod względem obsługi języków programowania i jakości skanowania jest rozwiązanie HP Fortify Static Code Analyzer. Checkmarx CxSAST to również dobry produkt, ale potrafi analizować tylko zwykłe aplikacje i aplikacje internetowe, produkt nie obsługuje wtyczek do aplikacji biznesowych. Rozwiązanie IBM Security AppScan Source wygląda tandetnie na tle konkurencji i nie odbiega ani funkcjonalnością, ani jakością kontroli. Produkt ten nie jest jednak przeznaczony dla użytkowników biznesowych i jest przeznaczony do stosowania w firmach deweloperskich, gdzie może być skuteczniejszy niż konkurencja.

Wśród produktów rosyjskich trudno wyróżnić jednoznacznego lidera, rynek reprezentują trzy główne produkty – InfoWatch Appercut, PT Application Inspector oraz Solar inCode. Jednocześnie produkty te znacznie różnią się technologicznie i są przeznaczone dla różnych grup docelowych - pierwszy obsługuje więcej platform aplikacji biznesowych i jest szybszy dzięki wyszukiwaniu podatności wyłącznie metodami analizy statycznej. Drugi łączy w sobie analizę statyczną i dynamiczną oraz ich kombinację, co poprawiając jakość skanowania, prowadzi do wydłużenia czasu potrzebnego na sprawdzenie kodu źródłowego. Trzeci ma na celu rozwiązanie problemów użytkowników biznesowych i specjalistów ds. bezpieczeństwa informacji, a także umożliwia testowanie aplikacji bez dostępu do kodu źródłowego.

„Echelon” AppChecker nie dorównuje jeszcze konkurencji i ma niewielki zestaw funkcjonalności, ale biorąc pod uwagę wczesny etap rozwoju produktu, jest całkiem możliwe, że w najbliższej przyszłości może zająć czołowe pozycje w rankingach źródeł analizatory kodu.

Digital Security ERPScan to doskonały produkt do rozwiązania wysoce specjalistycznego zadania analizy aplikacji biznesowych na platformę SAP. Koncentrując się wyłącznie na tym rynku, Digital Security opracowało produkt unikalny w swojej funkcjonalności, który nie tylko analizuje kod źródłowy, ale także uwzględnia całą specyfikę platformy SAP, specyficzne ustawienia konfiguracyjne i prawa dostępu aplikacji biznesowych, a także ma możliwość automatycznego tworzenia łat dla wykrytych luk.

adnotacja

Obecnie opracowano dużą liczbę narzędzi automatyzujących wyszukiwanie luk w programach. W tym artykule omówimy niektóre z nich.

Wstęp

Statyczna analiza kodu to analiza oprogramowania przeprowadzana na kodzie źródłowym programów i wdrażana bez faktycznego wykonywania badanego programu.

Oprogramowanie często zawiera różne luki wynikające z błędów w kodzie programu. Błędy popełnione podczas opracowywania programów w niektórych sytuacjach prowadzą do awarii programu, a w konsekwencji do zakłócenia normalnego działania programu: często skutkuje to zmianami i uszkodzeniem danych, zatrzymaniem programu lub nawet systemu. Większość podatności związana jest z nieprawidłowym przetwarzaniem danych otrzymanych z zewnątrz lub niewystarczająco rygorystyczną ich weryfikacją.

Do identyfikacji podatności wykorzystywane są różne narzędzia, na przykład statyczne analizatory kodu źródłowego programu, których przegląd znajduje się w tym artykule.

Klasyfikacja luk w zabezpieczeniach

Gdy zostanie naruszony wymóg poprawnego działania programu na wszystkich możliwych danych wejściowych, możliwe staje się pojawienie się tzw. luk w zabezpieczeniach. Luki w zabezpieczeniach mogą oznaczać, że jeden program może zostać wykorzystany do pokonania ograniczeń bezpieczeństwa całego systemu.

Klasyfikacja luk bezpieczeństwa w zależności od błędów oprogramowania:

  1. Przepełnienie bufora. Luka ta wynika z braku kontroli nad przekroczeniem zakresu tablicy w pamięci podczas wykonywania programu. Gdy zbyt duży pakiet danych przepełni bufor o ograniczonym rozmiarze, zawartość dodatkowych komórek pamięci zostanie nadpisana, co spowoduje awarię i zamknięcie programu. Na podstawie lokalizacji bufora w pamięci procesu rozróżnia się przepełnienia bufora na stosie (przepełnienie bufora stosu), stercie (przepełnienie bufora sterty) i obszarze danych statycznych (przepełnienie bufora bss).
  2. Luki w zabezpieczeniach (luka w zabezpieczeniach skażonych danych wejściowych). Luki mogą powstać w przypadkach, gdy dane wejściowe użytkownika są przekazywane bez wystarczającej kontroli do interpretera jakiegoś języka zewnętrznego (zwykle powłoki Unix lub języka SQL). W takim przypadku użytkownik może określić dane wejściowe w taki sposób, że uruchomiony interpreter wykona zupełnie inne polecenie, niż było to zamierzone przez autorów podatnego programu.
  3. Usterka ciągu formatującego. Ten typ luki w zabezpieczeniach stanowi podklasę luki. Dzieje się tak z powodu niewystarczającej kontroli parametrów podczas korzystania z funkcji formatu I/O printf, fprintf, scanf itp. standardowej biblioteki C. Funkcje te przyjmują jako jeden z parametrów ciąg znaków określający format wejściowy lub wyjściowy kolejnych argumentów funkcji. Jeśli użytkownik może określić typ formatowania, luka ta może wynikać z nieudanego użycia funkcji formatowania ciągów.
  4. Luki w zabezpieczeniach wynikające z błędów synchronizacji (warunki wyścigu). Problemy związane z wielozadaniowością prowadzą do sytuacji tzw.: program, który nie jest przeznaczony do działania w środowisku wielozadaniowym, może sądzić, że np. plików, których używa w swojej pracy, nie można zmienić za pomocą innego programu. W rezultacie osoba atakująca, która na czas podmieni zawartość tych plików roboczych, może zmusić program do wykonania określonych działań.

Oczywiście oprócz wymienionych istnieją inne klasy luk w zabezpieczeniach.

Przegląd istniejących analizatorów

Do wykrywania luk w zabezpieczeniach programów wykorzystywane są następujące narzędzia:

  • Debugery dynamiczne. Narzędzia umożliwiające debugowanie programu w trakcie jego wykonywania.
  • Analizatory statyczne (debuggery statyczne). Narzędzia wykorzystujące informacje zgromadzone podczas analizy statycznej programu.

Analizatory statyczne wskazują te miejsca w programie, w których może znajdować się błąd. Te podejrzane fragmenty kodu mogą zawierać błąd lub być całkowicie nieszkodliwe.

W tym artykule omówiono kilka istniejących analizatorów statycznych. Przyjrzyjmy się bliżej każdemu z nich.

1.BOON

Narzędzie, które w oparciu o głęboką analizę semantyczną automatyzuje proces skanowania tekstów źródłowych C w poszukiwaniu podatności mogących prowadzić do przepełnienia bufora. Identyfikuje możliwe defekty, zakładając, że niektóre wartości są częścią typu ukrytego o określonym rozmiarze bufora.

2.CQual

Narzędzie analityczne do wykrywania błędów w programach C. Program rozszerza język C o dodatkowe specyfikatory typów definiowane przez użytkownika. Programista komentuje swój program odpowiednimi specyfikatorami, a następnie cqual sprawdza, czy nie występują błędy. Nieprawidłowe adnotacje wskazują na potencjalne błędy. Cqual można wykorzystać do wykrycia potencjalnych luk w zabezpieczeniach ciągu formatującego.

3. MOPY

(MOdel sprawdzanie programów pod kątem bezpieczeństwa) - narzędzie służące do wyszukiwania luk w zabezpieczeniach w programach C. Jego cel: dynamiczne dopasowanie, zapewniające zgodność programu C z modelem statycznym. MOPS wykorzystuje model audytu oprogramowania, który ma pomóc w ustaleniu, czy program jest zgodny z zestawem reguł zdefiniowanych przy tworzeniu bezpiecznych programów.

4. ITS4, RATS, PScan, Flawfinder

Do wyszukiwania błędów przepełnienia bufora i błędów formatowania ciągów używane są następujące analizatory statyczne:

  1. . Proste narzędzie, które statycznie skanuje kod źródłowy C/C++ w celu wykrycia potencjalnych luk w zabezpieczeniach. Oznacza wywołania potencjalnie niebezpiecznych funkcji, takich jak strcpy/memcpy, i przeprowadza powierzchowną analizę semantyczną, próbując ocenić, jak niebezpieczny jest taki kod, a także udziela porad, jak go ulepszyć.
  2. . Narzędzie RATS (Rough Auditing Tool for Security) przetwarza kod napisany w C/C++, a także może przetwarzać skrypty w Perlu, PHP i Pythonie. RATS skanuje kod źródłowy w poszukiwaniu potencjalnie niebezpiecznych wywołań funkcji. Celem tego narzędzia nie jest ostateczne wykrycie błędów, ale wyciągnięcie rozsądnych wniosków, na podstawie których specjalista może ręcznie przejrzeć kod. RATS wykorzystuje kombinację kontroli bezpieczeństwa, od kontroli semantycznych w ITS4 po głęboką analizę semantyczną w celu wyszukania defektów przepełnienia bufora uzyskanych z MOPS.
  3. . Skanuje kod źródłowy C pod kątem potencjalnie nieprawidłowego użycia funkcji typu printf i identyfikuje luki w ciągach formatujących.
  4. . Podobnie jak RATS, jest to statyczny skaner kodu źródłowego dla programów napisanych w C/C++. Wyszukuje najczęściej nadużywane funkcje, przypisuje im oceny ryzyka (na podstawie informacji takich jak przekazane parametry) i tworzy listę potencjalnych luk, uszeregowując je według ryzyka.

Wszystkie te narzędzia są podobne i wykorzystują jedynie analizę leksykalną i podstawową. Dlatego wyniki generowane przez te programy mogą zawierać aż do 100% fałszywych wiadomości.

5. Pęczek

Narzędzie do analizy i wizualizacji programów w języku C, które buduje graf zależności pomagający audytorowi zrozumieć modułową strukturę programu.

6. ONZ

Prosty analizator kodu źródłowego. Został zaprojektowany do wyszukiwania błędów, takich jak niezainicjowane zmienne, wskaźniki zerowe i tablice poza zakresem. UNO umożliwia wykonanie prostej analizy przepływu sterowania i danych, analizę wewnątrz- i międzyproceduralną oraz określenie właściwości użytkownika. Jednak to narzędzie nie zostało opracowane do analizy rzeczywistych aplikacji, nie obsługuje wielu standardowych bibliotek i na tym etapie rozwoju nie pozwala na analizę żadnych poważnych programów.

7. FlexeLint (PC-Lint)

Analizator ten przeznaczony jest do analizy kodu źródłowego w celu identyfikacji błędów różnego typu. Program wykonuje analizę semantyczną kodu źródłowego, analizę przepływu danych i kontrolę.

Pod koniec pracy wydawane są komunikaty kilku głównych typów:

  • Możliwy jest wskaźnik zerowy;
  • Problemy z alokacją pamięci (na przykład po malloc() nie ma free());
  • Problematyczny przepływ kontroli (na przykład nieosiągalny kod);
  • Możliwe przepełnienie bufora, przepełnienie arytmetyczne;
  • Ostrzeżenia o złym i potencjalnie niebezpiecznym stylu kodu.

8. Viva64

Narzędzie pomagające specjalistom śledzić potencjalnie niebezpieczne fragmenty w kodzie źródłowym programów C/C++ związane z przejściem z systemów 32-bitowych na 64-bitowe. Viva64 jest wbudowana w środowisko Microsoft Visual Studio 2005/2008, co ułatwia wygodną pracę z tym narzędziem. Analizator pomaga napisać poprawny i zoptymalizowany kod dla systemów 64-bitowych.

9. Test Parasoftu C++

Specjalistyczne narzędzie dla systemu Windows, które pozwala zautomatyzować analizę jakości kodu C++. Pakiet C++Test analizuje projekt i generuje kod do testowania komponentów zawartych w projekcie. Pakiet C++Test wykonuje bardzo ważne zadanie polegające na analizowaniu klas C++. Po załadowaniu projektu należy skonfigurować metody testowania. Oprogramowanie sprawdza każdy argument metody i zwraca typy odpowiednich wartości. W przypadku tych prostych typów zastępowane są domyślne wartości argumentów; Można zdefiniować dane testowe dla typów i klas zdefiniowanych przez użytkownika. Możesz zastąpić domyślne argumenty C++Test i zwrócić wartości uzyskane z testów. Na szczególną uwagę zasługuje zdolność C++Test do testowania niedokończonego kodu. Oprogramowanie generuje kod pośredniczący dla dowolnej metody i funkcji, która jeszcze nie istnieje. Obsługiwana jest symulacja urządzeń zewnętrznych i danych wejściowych zdefiniowanych przez użytkownika. Obie funkcje umożliwiają ponowne testowanie. Po zdefiniowaniu parametrów testowych dla wszystkich metod pakiet C++Test jest gotowy do uruchomienia kodu wykonywalnego. Pakiet generuje kod testowy, wywołując kompilator Visual C++ w celu jego przygotowania. Istnieje możliwość generowania testów na poziomie metody, klasy, pliku i projektu.

10. Pokrycie

Narzędzia te służą do identyfikowania i korygowania defektów bezpieczeństwa i jakości w zastosowaniach o znaczeniu krytycznym. Technologia Coverity usuwa bariery w pisaniu i wdrażaniu złożonego oprogramowania, automatyzując wykrywanie i rozwiązywanie krytycznych błędów oprogramowania i luk bezpieczeństwa w procesie rozwoju. Narzędzie Coverity jest w stanie przetworzyć dziesiątki milionów linii kodu z minimalnym błędem dodatnim, zapewniając 100% pokrycie śledzenia.

11. KlocWork K7

Produkty firmy przeznaczone są do automatycznej analizy statycznej kodu, identyfikowania i zapobiegania defektom oprogramowania oraz problemom bezpieczeństwa. Narzędzia firmy pomagają identyfikować pierwotne przyczyny wad w zakresie jakości i bezpieczeństwa oprogramowania oraz śledzić i zapobiegać tym błędom w całym procesie tworzenia oprogramowania.

12. Frama-C

Otwarty, zintegrowany zestaw narzędzi do analizy kodu źródłowego w języku C. W zestawie znajduje się ACSL (ANSI/ISO CSpecification Language) - specjalny język, który pozwala na szczegółowe opisanie specyfikacji funkcji C, na przykład określenie zakresu prawidłowych wartości wejściowych funkcji i zakresu normalnego wyjścia wartości.

Ten zestaw narzędzi pomoże Ci wykonać następujące czynności:

  • Przeprowadź formalny przegląd kodu;
  • Poszukaj potencjalnych błędów wykonania;
  • Wykonaj audyt lub przegląd kodu;
  • Przeprowadź inżynierię wsteczną kodu, aby poprawić zrozumienie struktury;
  • Generuj formalną dokumentację.

13. CodeSurfer

Narzędzie do analizy programów, które nie zostało zaprojektowane specjalnie do wyszukiwania luk w zabezpieczeniach. Jego główne zalety to:

  • Analiza wskaźników;
  • Różne analizy przepływu danych (wykorzystanie i definicja zmiennych, zależności danych, konstrukcja grafów wywoławczych);
  • Język skryptowy.

CodeSurfer może być używany do wyszukiwania błędów w kodzie źródłowym, lepszego zrozumienia kodu źródłowego i inżynierii wstecznej programów. W środowisku CodeSurfer opracowano prototypowe narzędzie do wykrywania luk w zabezpieczeniach, jednak opracowane narzędzie jest wykorzystywane wyłącznie w organizacji deweloperskiej.

14. FxCop

Zapewnia możliwość automatycznego sprawdzania zestawów .NET pod kątem zgodności z wytycznymi dotyczącymi projektowania programu Microsoft .NET Framework. Skompilowany kod jest sprawdzany przy użyciu mechanizmów odbicia, analizy MSIL i analizy wykresu wywołań. W rezultacie FxCop jest w stanie wykryć ponad 200 defektów (lub błędów) w następujących obszarach:

  • Architektura biblioteki;
  • Lokalizacja;
  • Zasady nazewnictwa;
  • Wydajność;
  • Bezpieczeństwo.

FxCop zapewnia możliwość tworzenia własnych reguł za pomocą specjalnego SDK. FxCop można uruchomić w interfejsie GUI lub w wierszu poleceń.

15. Sprawdzanie Java

Jest to statyczny analizator programów Java oparty na technologii TermWare.

Narzędzie to pozwala zidentyfikować defekty kodu takie jak:

  • nieostrożna obsługa wyjątków (puste bloki catch, zgłaszanie ogólnych wyjątków itp.);
  • ukrywanie nazw (np. gdy nazwa członka klasy jest taka sama jak nazwa formalnego parametru metody);
  • naruszenia stylu (możesz ustawić styl programowania za pomocą zestawu wyrażeń regularnych);
  • naruszenia standardowych umów użytkowania (na przykład przesłonięcie metody równości, ale nie hashCode);
  • naruszenia synchronizacji (na przykład, gdy dostęp do zmiennej synchronizowanej znajduje się poza blokiem synchronizowanym).

Zestawem kontroli można sterować za pomocą komentarzy sterujących.

JavaChecker można wywołać ze skryptu ANT.

16. Małpa

Analizator podobieństwa, który wyszukuje powtarzającą się składnię w wielu plikach jednocześnie. Program rozumie składnię różnych języków programowania, w tym C#, T-SQL, JavaScript i Visual BasicR, a także potrafi wyszukiwać powtarzające się fragmenty w plikach tekstowych. Wiele opcji dostosowywania pozwala dostosować reguły wyszukiwania zduplikowanych kodów. Na przykład parametr progu określa, ile powtarzających się linii kodu uważa się za duplikaty.

Simian to małe narzędzie zaprojektowane do skutecznego wyszukiwania duplikatów kodu. Nie ma interfejsu graficznego, ale można go uruchomić z wiersza poleceń lub uzyskać do niego dostęp programowo. Wyniki są wyprowadzane w formie tekstowej i mogą być prezentowane w jednym z wbudowanych formatów (na przykład XML). Chociaż rzadki interfejs Simiana i ograniczone możliwości wyjściowe wymagają trochę nauki, pomaga to w utrzymaniu integralności i skuteczności produktu. Simian nadaje się do wyszukiwania duplikatów kodu zarówno w dużych, jak i małych projektach.

Zduplikowany kod zmniejsza łatwość konserwacji i aktualizacji projektu. Możesz użyć Simian, aby szybko znaleźć zduplikowane fragmenty kodu w wielu plikach jednocześnie. Ponieważ Simian można uruchomić z wiersza poleceń, można go włączyć do procesu kompilacji, aby otrzymywać ostrzeżenia lub zatrzymać proces w przypadku powtórzeń kodu.

Wniosek

Dlatego w tym artykule zbadano statyczne analizatory kodu źródłowego, które są narzędziami pomocniczymi dla programisty. Każde narzędzie jest inne i pomaga monitorować szeroką gamę klas luk w zabezpieczeniach programów. Można stwierdzić, że analizatory statyczne muszą być dokładne i czułe. Niestety, statyczne narzędzia do debugowania nie mogą dać absolutnie wiarygodnych wyników.