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ů.
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.
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:
- 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í
taintpro 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
Zatím žádné komentáře.