View page as slide show

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 analizy statycznej

Analiza statyczna a inspekcja kodu („code review”)

Agile Development Using Microsoft Security Development Lifecycle - 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łedów
  • metody formalne - oparte na matematycznej definicji zachowania programu
  • obliczanie metryk kodu źródłowego. Ocena jakości kodu źródłowego na podstawie danych statystycznych.
  • Łatwość użycia, prostota wdrożenia w cykl wytwarzania oprogramowania
  • Automatyzacja, integracja z narzędziami continius integrations
  • Szybkie wykrywanie błędów, których naprawa jest prosta i mało kosztowna
    • nie wymaga uruchomienia aplikacji
    • łatwe do zrównoleglenia
  • Możliwości rozszerzania: własne reguły, wtyczki,
  • Integracja z innymi narzędziami: serwery automatyzacji, IDE, kontrola wersji
  • Dużo darmowych narzędzi
  • Wymagany dostęp do źródeł
  • Reguły wykrywają zazwyczaj proste błędy (nie zastąpią ręcznego sprawdzenia)
  • Dużo szumu, zbyt czułe (duże prawdopodobieństwo false positive)
  • Każde narzędzie zazwyczaj pokrywa pewien zakres testów (do 14% błędów?!) dlatego warto korzystać z kilku.
  • Istnieją narzędzia integrujące wiele narzędzi SAST, np: CodeEx, Yast (open source)
  • Nie zastąpi „ręcznego” sprawdzania (code review)
  • 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

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

www.microsoft.com_global_security_sdl_publishingimages_about_benefits_reducecost_01.jpg

Ź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

  • 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:

  • Jest wiele typów błędów które ciężko jest wykryć
  • Trudno wykrywalne błędy związane są z konfiguracją lub logiką biznesową.
  • Dodatkowe moduły, biblioteki, konteksty dodawane przez frameworki
  • Skomplikowane algorytmy i architektury
// calculate the number of days
int days = hours / 23;