→ Slide 1
Statyczna analiza kodu
Analiza statyczna kodu - analiza struktury kodu źródłowego lub kodu skompilowanego bez jego uruchomienia.
Static Analysis Software Testing (SAST) - narzędzia do automatycznej analizy statycznej
Analiza statyczna a inspekcja kodu („code review”)
→ Slide 2
→ Slide 3
Metody analizy
analiza leksykograficzna - wyszukiwanie niebezpiecznych konstrukcji w kodzie źródłowym, zazwyczaj na podstawie zestawu reguł, różnych heurystyk i dopasowania do wzorców błędów
metody formalne - oparte na matematycznej definicji zachowania programu
metryki kodu źródłowego - ocena jakości kodu źródłowego na podstawie danych statystycznych
→ Slide 4
Cechy
Szybkość działania - szybkie wykrywanie błędów, których naprawa jest prosta i mało kosztowna
Łatwość użycia - proste we wdrożeniu w cykl wytwarzania oprogramowania
Automatyzacja - integracja z narzędziami continius integrations, serwery automatyzacji, IDE, kontrola wersji
Możliwości rozszerzania: własne reguły, wtyczki, …
Dużo darmowych narzędzi
→ Slide 5
Wady
Wymagany dostęp do źródeł
Reguły wykrywają zazwyczaj proste błędy i nie są w stanie wyeliminować ręcznego sprawdzenia kodu
Dużo szumu, zbyt czułe - duże prawdopodobieństwo zaklasyfikowanie poprawnego fragmentu jako błędu (false positive)
Każde narzędzie zazwyczaj pokrywa pewien zakres testów (do 14% błędów?!). Dlatego warto korzystać z kilku różnych skanerów kodu. Istnieją narzędzia integrujące wiele narzędzi SAST, np:
CodeEx, Yast (open source), dlatego warto korzystać z kilku
→ Slide 6
Czego dotyczy analiza statyczna
analiza poprawności składni
luki w bezpieczeństwie, także błędy które mogą pojawić się przy specyficznych danych wejściowych
detekcja backdoors, niebezpieczne i nieaktualne funkcje, wycieki pamięci, przepełnienie bufora, używanie niezainicjowanych zmiennych, SQL Injections,
jakość kodu, ocena stylu, powtórzenia kodu, nieużywane fragmenty kodu, …
wydajność, wykrywanie wąskich gardeł, niewydajne konstrukcje, sugestie dotyczące poprawienia wydajności
zgodność z dobrymi praktykami, zachowanie standardów, norm nazewniczych, problemy z przenośnością kodu
→ Slide 7
Dlaczego analizować kod?
Statyczna analiza programu pozwala na:
zwiększenie wydajności i stabilności poprzez zasady oparte na dobrych praktykach,
unikniecie typowych błędów podczas programowania,
dostarczenie struktury do zarządzania standardami kodu.
wymuszenie zasad i standardów pisania kodu
zwiększanie bezpieczeństwa poprzez kolejny etap testowania
analizując sygnalizowane błędy można się sporo nauczyć na temat dobrych praktyk bezpiecznego programowania
→ Slide 8
→ Slide 9
Narzędzia
Lint - UNIX V7 1979, historyczny program od którego nazwy często określa się narzędzia do analizy i szukania błedów
→ Slide 10
Wielojęzykowe
rats (rough auditing tool for security) C, C++, Perl, PHP, Python
PMD Java, JavaScript, XML, XSL (zawiera CPD analiza powtórzeń: C, C++, C#, PHP, Ruby, Fortran)
Yasca Java, C/C++,
HTML, JavaScript, ASP, ColdFusion, PHP, COBOL, .NET, and other languages + integracja z innymi SAT
-
Wiele innych:
→ Slide 11
Ograniczenia
Jest wiele typów błędów, które ciężko jest wykryć, np. błędy związane są z konfiguracją lub logiką biznesową
Problemem są zależności, dodatkowe moduły, biblioteki, konteksty dodawane przez frameworki
Skomplikowane algorytmy i architektury bardzo ciężko jest analizować
// calculate the number of days
int days = hours / 23;
→ Slide 12