Zpět na domů

sa-tests-db: toky dat ve statické analýze

Článek popisuje evoluci statického analyzátoru na korpusu sa-tests-db: od šablonového hledání k hybridnímu data-flow s meziprocedurální a control-flow analýzou. Diskutována jsou omezení šablon, výhody toků dat a role externího benchmarku podle ruského státního standardu R 71207-2024.

Od šablon k data-flow: sa-tests-db a ruský státní standard
Advertisement 728x90

Evoluce statické analýzy: od vzorů k datovým tokům v sa-tests-db

Statický analyzátor prochází kvalifikací podle normy ČSN EN ISO/IEC 27034 na testovací sadě sa-tests-db pro šest programovacích jazyků: C, C#, Go, Java, JavaScript, Python. Toho dosahuje přechodem od hledání vzorů k analýze datových toků s ohledem na mezifunkční volání, řídicí tok a citlivost na pole struktur. Tento přístup minimalizuje falešné poplachy a přehlédnutí typů chyb.

Omezení hledání vzorů

Analýza založená na vzorech hledá nebezpečná volání jako sprintf, system nebo SPI_execute v kontextu několika řádků. Je efektivní pro rychlé prvotní skenování, ale má omezení:

  • Nebere v úvahu datové toky mezi místy definice a použití.
  • Falešné poplachy vznikají při náhodném sousedství podezřelého kódu bez skutečné souvislosti.
  • Přeskočí dlouhé řetězce přes funkce nebo soubory.

Na externí testovací sadě sa-tests-db se tato omezení rychle projeví, což vyžaduje přechod k analýze datových toků.

Google AdInline article slot

Analýza datových toků

Přechod k datovým tokům odpovídá na otázku: mohou data ze zdrojů (getenv, recv, fgets) dosáhnout nebezpečných míst (sink). Tím se vytváří graf vazeb mezi definicí a použitím hodnot.

Výhody:

  • Snížení falešných poplachů díky ověření skutečné cesty.
  • Odhalení mezifunkčních cest.

V implementaci analyzátor sleduje šíření kontaminovaných dat (taint propagation), vylučuje nesouvisející hodnoty.

Google AdInline article slot

Mezifunkční analýza

Vnitro-funkční analýza datových toků nestačí pro reálné zranitelnosti procházející řetězci volání. Mezifunkční vrstva propojuje argumenty s parametry:

  • Sledování vrácených hodnot.
  • Analýza argumentů ve voláních.
  • Vytváření grafu volání pro mezisouborové cesty.

Bez tohoto kroku vzory vidí pouze lokální bloky a ztrácejí systémový kontext.

Zohlednění řídicího toku

Existence datové cesty nezaručuje zranitelnost. Cesta může být blokována:

Google AdInline article slot
  • Validací.
  • Ošetřením chyb.
  • Kontrolami oprávnění.
  • Logicky nedosažitelnými větvemi.

Integrace analýzy řídicího toku klasifikuje cesty:

  • Bezpodmínečné (vysoká priorita).
  • Podmíněné (vyžadují manuální kontrolu).

Tím se filtruje šum a zvyšuje přesnost hlášení.

Citlivost na pole struktur

Ve strukturách by kontaminace jednoho pole neměla zasáhnout celou strukturu. Rozlišování polí snižuje falešné poplachy:

  • Samostatné sledování taint pro každé pole.
  • Vyloučení bezpečných polí při dosažení sink.

Takové detaily jsou klíčové pro produkční kód se složitými daty.

Hybridní architektura analyzátoru

Optimální přístup kombinuje fáze:

  • Předběžné skenování vzory pro kandidáty.
  • Odstranění triviálně bezpečných případů.
  • Úplná analýza datových toků pro zbývající.
  • Stanovení priority podle potvrzených cest.
  • Snížení priority pro nepotvrzené.

Tím se vyvažuje rychlost a přesnost.

Role sa-tests-db ve vývoji

Sada sa-tests-db slouží jako externí benchmark pro typy chyb odpovídající normě ČSN EN ISO/IEC 27034. Odhaluje regrese při změnách:

  • Metriky: falešné poplachy, přehlédnuté chyby podle jazyků.
  • Neagregované průměry, ale detailní rozdělení podle kategorií.

Testování z 23. března 2026 potvrdilo kvalifikaci pro C, C#, Go, Java, JS, Python.

Co je důležité

  • Vzory jsou vhodné pouze pro rychlý filtr, analýza datových toků je nezbytná pro přesnost.
  • Mezifunkční analýza + analýza řídicího toku najde 80 % reálných cest.
  • Citlivost na pole snižuje šum o 30–50 % ve strukturách.
  • sa-tests-db je regresní test, ne jednorázová ukázka.
  • Norma vyžaduje metriky podle typů chyb, ne obecná čísla.

— Editorial Team

Advertisement 728x90

Číst dál