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”)

Microsoft Security Development Lifecycle

Practice #10: Perform Static Analysis
Analiza statyczna w każdym sprincie

Źródło: http://www.microsoft.com/security/sdl/discover/sdlagile.aspx

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

modele matematyczne

reguły logiczne Hoare_logic

analiza przepływu Data-flow_analysis

metryki kodu źródłowego - ocena jakości kodu źródłowego na podstawie danych statystycznych

Szybkość działania - szybkie wykrywanie błędów, których naprawa jest prosta i mało kosztowna

nie wymagają uruchamiania programu

łatwe do zrównoleglenia

Ł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

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

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

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

Koszt naprawy błędu w zależności od momentu wykrycia

Źródło: http://www.microsoft.com/security/sdl/about/benefits.aspx

Lint - UNIX V7 1979, historyczny program od którego nazwy często określa się narzędzia do analizy i szukania błedów

C/C++: cppcheck, clint, splint, clang, frama-c

PHP: pixy, php-sat

Java: FindBugs, jlint, PMD, Checkstyle

Python: pylint

dotNet: FxCop, CAT.NET

JavaScript: jslint

HTML: tidy (wersja online) , W3C Validator

CSS: W3C CSS Validator , http://csslint.net/csslint

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

VisualCodeGrepper C/C++, C#, VB, PHP, Java and PL/SQL

Wiele innych:

List_of_tools_for_static_code_analysis

Source Code Security Analyzers

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;

sekurak.pl

Tomasz Nowak, Statyczna analiza kodu źródłowego

Cppcheck

Splint publications