Softwarové zranitelnosti objevené v produkčním prostředí stojí organizace v průměru čtyřikrát více k opravě než zranitelnosti objevené během vývoje. Zpráva IBM o nákladech na únik dat z roku 2025 uvádí průměrné náklady na únik dat na 4.88 milionu dolarů a úniky dat, které vznikají v nezjištěných zranitelnostech zdrojového kódu, patří k nejdražším k nápravě, protože jejich příčina vyžaduje nejen reakci na incident, ale i nápravu kódové základny. Nástroje pro skenování kódu existují proto, aby se odhalování zranitelností přesunulo co nejdříve, do vývojového prostředí, nikoli do časové osy po úniku dat.
Skenování kódu je automatizovaná analýza zdrojového kódu, kompilovaných binárních souborů nebo spuštěných aplikací za účelem identifikace bezpečnostních zranitelností, vad kvality, porušení předpisů a technického dluhu předtím, než se software dostane do produkčního prostředí. Je to základní vrstva zabezpečení aplikací, nikoli náhrada za penetrační testování nebo modelování hrozeb, ale systematická základna, která zachycuje předvídatelné, opakující se třídy chyb, které žádný lidský kontrolor ve velkém měřítku konzistentně nezachycuje.
Naskenujte všechny jazyky, které váš tým dodává
SMART TS XL spustí statické skenování kódu napříč COBOLem, Javou, Pythonem, JavaScriptem a celým vaším portfoliem současně.
ZJISTĚTE VÍCE…Co je skenování kódu?
Skenování kódu je automatizované zkoumání softwarových artefaktů, zdrojového kódu, bajtkódu, binárních souborů nebo spuštěných aplikací za účelem identifikace defektů bez nutnosti ruční kontroly každého řádku lidskou rukou. Skenovací nástroje používají sady pravidel, porovnávání vzorů, analýzu datového toku a v sofistikovanějších nástrojích i meziprocedurální sledování vad, aby nalezly problémy, které by se jinak dostaly do produkčního prostředí bez odhalení.
Co skenování kódu není: Není náhradou za kontrolu kódu, architektonickou analýzu, penetrační testování ani monitorování za běhu. Je to rychlý, systematický a škálovatelný první filtr, který spolehlivě a konzistentně zachycuje známé vzory v celé kódové základně, včetně částí, kterým se recenzenti kódu pečlivě nevěnují, protože se zdají být rutinní.
Co v tomto kontextu znamená ověřování kódu: ověřování kódu potvrzuje, že se kód chová podle své specifikace. Skenování je jednou ze složek ověřování, automatizovanou složkou, která se zabývá detekcí vzorů a analýzou toku dat. Manuální kontrola, testování a formální ověřování jsou dalšími složkami. Společně tvoří ověřovací program; skenování samo o sobě nestačí.
Statické vs. dynamické skenování kódu: Základní rozdíl
Nejdůležitější volbou při vytváření skenovacího programu je pochopení toho, kdy se každý přístup spouští a co dokáže vidět:
| Dimenze | Statický (SAST) | Dynamický (DAST) |
|---|---|---|
| Když to běží | Ve zdrojovém kódu není nutné žádné spuštění | Proti spuštěné aplikaci |
| Co vidí | Struktura kódu, tok dat, porušení vzorů | Chování za běhu, konfigurace serveru, odpovědi API |
| Nálezy | Vzory SQL injection, pevně zakódované tajné kódy, nezabezpečené kryptoměny, zápach kódu | Obcházení autorizace, běhové injektáž, chyby ve správě relací, nesprávná konfigurace serveru |
| Chybí | Zranitelnosti týkající se pouze běhového prostředí, problémy s konfigurací | Vzory na úrovni kódu, které se během testování nespouštějí. |
| Rychlost | Rychlý, běží během několika sekund až minut | Pomalý, vyžaduje běžící prostředí |
| Zpětná vazba od vývojářů | Okamžité, IDE nebo předběžné potvrzení (pre-commit) | Zpožděno, vyžaduje nasazení aplikace |
| Falešně pozitivní sazba | Vyšší, chybí běhový kontext | Nižší, potvrzuje zneužitelnost |
| Nejlépe integrované v | IDE, pre-commit, CI/CD při každém PR | Zkušební prostředí, předběžná brána |
Praktické řešení pro většinu týmů: spustit obojí . Statické skenování v IDE a CI pipeline poskytuje rychlou a včasnou zpětnou vazbu o vzorcích kódu. Dynamické skenování v testovacím prostředí potvrzuje zneužitelnost a odhaluje problémy s konfigurací, které statická analýza nevidí.
Čtyři typy skenování kódu
SAST, Statické testování bezpečnosti aplikací
SAST analyzuje zdrojový kód, bajtkód nebo binární soubor bez nutnosti spuštění. Jedná se o nejběžnější formu skenování kódu, integrovanou do IDE a CI/CD pipeline. SAST nachází zranitelnosti typu injection (vkládání) pomocí analýzy taintů (sledování nedůvěryhodného vstupu k nebezpečným jímkám), kryptografické zneužití pomocí porovnávání vzorů, pevně zakódované přihlašovací údaje pomocí analýzy řetězců a strukturální problémy s kvalitou pomocí metrik a pravidel vzorů.
Nejlepší nástroje: Semgrep, SonarQube, Checkmarx, CodeQL, Veracode, Snyk Code, SMART TS XL.
DAST, dynamické testování bezpečnosti aplikací
DAST běží na živé aplikaci, odesílá vytvořené vstupy a sleduje odpovědi. Nemůže vidět zdrojový kód, interaguje s aplikací zvenčí, stejně jako by to udělal útočník. DAST nachází obcházení autentizace, chyby v obchodní logice, padělání požadavků na straně serveru a zranitelnosti konfigurace, které SAST nedokáže detekovat, protože vyžadují běhový kontext.
Nejlepší nástroje: OWASP ZAP, Burp Suite, Invicti, Acunetix, HCL AppScan.
SCA, analýza složení softwaru
SCA prohledává manifesty závislostí (package.json, pom.xml, requirements.txt, go.mod) proti databázím zranitelností za účelem identifikace známých CVE v knihovnách třetích stran. Každá moderní aplikace používá závislosti s otevřeným zdrojovým kódem. SCA je vrstva skenování, která zajišťuje, že tyto závislosti nezavádějí známé zranitelnosti.
Nejlepší nástroje: Snyk, OWASP Dependency-Check, Mend (dříve WhiteSource), GitHub Dependabot, npm audit.
IAST, Interaktivní testování bezpečnosti aplikací
IAST instrumentuje aplikaci za běhu pomocí agentů nebo senzorů zabudovaných v aplikačním serveru. Sleduje skutečné zpracování požadavků zevnitř aplikace a kombinuje tak přesnost DAST za běhu s poznatky SAST na úrovni kódu. IAST má ze všech čtyř typů nejnižší míru falešně pozitivních výsledků, ale vyžaduje instrumentované nasazení v prostředí.
Nejlepší nástroje: Contrast Security, Seeker (Synopsys), HCL IAST.
Jak je kombinovat: Spouštět SAST při každém commitu pro rychlou zpětnou vazbu od vývojářů. Spouštět SCA při každé změně závislostí. Spouštět DAST proti staging před každým vydáním. Přidat IAST pro kritické aplikace, kde je třeba minimalizovat míru falešně pozitivních výsledků.
Co skenování kódu skutečně najde
Různé typy skenování zachycují různé třídy zranitelností. Toto mapování pomáhá týmům pochopit, do kterého skeneru investovat s ohledem na jejich specifický rizikový profil:
| Kategorie zranitelnosti | SAST | DAST | SCA | IAST |
|---|---|---|---|---|
| SQL injection | Silný (analýza kontaminace) | Silné (aktivní testování) | Ne | Silný |
| XSS | Středně | Silný | Ne | Silný |
| Pevně zakódované tajné klíče/přihlašovací údaje | Strong (shoda se vzorem) | Ne | Částečný | Ne |
| Nefunkční ověřování | Částečné (pouze vzor) | Silný | Ne | Silný |
| Zranitelné závislosti (CVE) | Ne | Ne | Silný | Ne |
| Zneužití kryptografických prvků | Silné (známé špatné API) | Ne | Částečný | Částečný |
| Nesprávná konfigurace zabezpečení | Částečné (konfigurace v kódu) | Silný | Ne | Částečný |
| SSRF | Silný (analýza kontaminace) | Silný | Ne | Silný |
| Průchod cestou | Silný | Středně | Ne | Silný |
| Příkazová injekce | Silný (analýza kontaminace) | Silný | Ne | Silný |
| Kvalita kódu / technický dluh | Silný | Ne | Ne | Ne |
| Mrtvý kód | Silný | Ne | Ne | Ne |
Skenování kódu v SDLC: Kdy co spustit
Princip shift-left v zabezpečení, tedy co nejranější fáze vývojového cyklu detekce zranitelností, je důvodem, proč se skenování kódu stalo standardní praxí. Oprava nalezení SQL injection v IDE vývojáře trvá jen pár minut. Jeho nalezení v produkčním prostředí po narušení bezpečnosti stojí týdny reakce na incidenty, nápravy a regulačního hlášení.
V IDE: SonarLint, rozšíření Snyk IDE a pluginy Semgrep IDE zobrazují nálezy přímo v kódu vývojářů. Oprava příznaku SQL injection, který se objeví při zápisu zranitelného řádku, trvá jen několik sekund.
Pre-commit hooky: Spouštějte rychlá pravidla SAST a detekci tajných kódů ještě předtím, než se kód dostane do repozitáře. Pre-commit hooky by měly být rychlé, do deseti sekund, jinak je vývojáři deaktivují.
U každého pull requestu: Úplná SAST kontrola a kontrola SCA. V tomto případě většina týmů vynucuje kontroly kvality a blokuje slučování, když se objeví nová kritická zjištění.
Noční nebo týdenní: Hloubková interprocedurální analýza, kompletní DAST skenování, komplexní SCA audity. Tyto audity jsou příliš pomalé pro provádění jednotlivých commitů, ale pravidelně se spouštějí na hlavní větvi.
Kompletní konfigurace skenování CI/CD:
yaml
# GitHub Actions: layered scanning at the right pipeline stage
name: Code Scanning Pipeline
on:
push:
branches: [main, develop]
pull_request:
jobs:
sast:
name: Static Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Semgrep SAST scan
uses: semgrep/semgrep-action@v1
with:
config: >-
p/owasp-top-ten
p/security-audit
p/secrets
- name: SonarCloud quality gate
uses: SonarSource/sonarcloud-github-action@master
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
sca:
name: Dependency Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Snyk dependency check
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
secrets:
name: Secret Detection
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: TruffleHog secret scan
uses: trufflesecurity/trufflehog@main
with:
extra_args: --only-verified
Nástroje pro skenování kódu: Praktický přehled
| Nástroj | Typ | nejlepší | Open Source |
|---|---|---|---|
| Semgrep | SAST | Vlastní pravidla, rychlé skenování, více jazyků | Ano (pravidla komunity) |
| SonarQube / SonarCloud | SAST | Kvalita + bezpečnost, integrace CI/CD, sledování trendů | Komunitní vydání |
| CodeQL | SAST | Hloubková sémantická analýza, nativní pro GitHub | Ano |
| checkmark | SAST | Programy Enterprise AppSec, dodržování předpisů | Ne |
| Snykův kód | SAST | Zabezpečení zaměřené na vývojáře, prioritně IDE | Freemium |
| OWASP ZAP | DAST | Zdarma DAST, kompatibilní s CI/CD | Ano |
| Balíček Burp | DAST | Manuální + automatizované testování bezpečnosti webových aplikací | Komunitní vydání |
| Snyk / Mend | SCA | Správa zranitelností závislostí | Freemium |
| Kontrola závislostí OWASP | SCA | Skenování CVE závislostí s otevřeným zdrojovým kódem | Ano |
| Zabezpečení kontrastu | IAST | Přesnost za běhu, nízký počet falešně pozitivních výsledků | Ne |
| SMART TS XL | SAST + strukturální | Vícejazyčný, COBOL, podnikový, starší | Ne |
Nejlepší postupy pro efektivní skenování kódu
Začněte s vysoce spolehlivými pravidly s nízkým šumem. Spuštění každé dostupné sady pravidel hned první den vede k tisícům zjištění, zahlcuje vývojáře a brzdí jejich zavádění. Začněte s kurátorsky vybranou sadou pravidel s vysokou závažností a vysokou spolehlivostí, vzory OWASP Top 10, detekcí tajných kódů a známými nebezpečnými voláními funkcí. Pravidla přidávejte postupně, jakmile si tým získá důvěru v dané nástroje.
Vynucovat pouze u nového kódu. U starších kódových základen s existujícími nálezy konfigurace blokování bran kvality pouze u nálezů uvedených v aktuálním požadavku na změnu (ne u celé kódové základny) zavede do pracovního postupu bezpečnostní kontroly, aniž by se vytvořil nahromadění již existujících nálezů, které by blokovaly veškerý vývoj.
yaml
# SonarQube: new-code quality gate configuration
# Block merges on new critical security hotspots only
sonar.qualitygate.wait=true
sonar.newCode.referenceBranch=main
# Existing findings in main don't block PRs
# Only new findings in the PR diff are gated
Systematicky laďte falešně pozitivní výsledky. Falešně pozitivní výsledek, který vývojář prošetří a jednou zamítne, je nepříjemný. Falešně pozitivní výsledek, který se spustí u každého požadavku na podporu projektu po dobu šesti měsíců, naučí vývojáře zcela ignorovat zjištění. Zaveďte proces kontroly potlačení výsledků: každé potlačení vyžaduje zdokumentované odůvodnění a potlačení výsledků se kontroluje čtvrtletně.
Mapujte zjištění podle úrovní závažnosti. Ne každé zjištění vyžaduje okamžitou akci. Víceúrovňová reakce:
- kritický (CVSS 9+, potvrzeno zneužitelné): blokování nasazení, oprava do 24 hodin
- Vysoký (CVSS 7-8): sloučení bloků PR, oprava v rámci sprintu
- Střední: přidat k nevyřízeným záležitostem, řešit do čtvrtletí
- Nízké / Informativní: sledovat, řešit během refaktoringu
Měřte, na čem záleží. Sledujte průměrnou dobu do nápravy (MTTR) podle úrovně závažnosti, poměr uzavřených a nalezených nálezů na sprint a míru falešně pozitivních výsledků v průběhu času. Tyto metriky vám říkají, zda skenovací program funguje, nejen zda skener běží.
Jak skenování kódu zabraňuje technickému dluhu
Technický dluh se hromadí, když se problémy s kvalitou odkládají, když se vzorec SQL injection, který by mohl být zachycen pravidlem SAST v době vývoje, dostane do produkčního prostředí a vyžaduje k opravě bezpečnostní záplatu, regresní testování a koordinaci nasazení. Nástroje pro skenování kódu tuto akumulaci zachycují u zdroje.
Tři mechanismy propojují skenování kódu přímo se snižováním technického dluhu:
Detekce složitosti. Cyklomatická složitost nad prahovou hodnotou, hluboce vnořené podmíněné výrazy a dlouhé funkce jsou pachy kódu, které skenovací nástroje signalizují. Pokud se tyto vzorce neřeší, hromadí se v kódových základech, jejichž změny jsou postupně obtížnější a nákladnější. Skenování poskytuje včasné varování založené na metrikách, které podnítí refaktoring dříve, než se složitost stane strukturální.
Detekce duplicit. Duplicitní kód je jednou z nejdražších forem technického dluhu, každá oprava chyby a změna funkce musí být aplikována na více místech a kopie se nevyhnutelně divergují. Detekce duplicit v SonarQube a podobná pravidla odhalují tento vzorec napříč kódovou základnou, což umožňuje konsolidaci dříve, než divergence vytvoří nekonzistenci.
Identifikace mrtvého kódu. Mrtvé kódy, funkce a moduly, které nejsou nikdy volány žádnou produkční cestou, zvětšují velikost kódové základny, mate vývojáře a komplikují analýzu migrace. Skenovací nástroje, které provádějí analýzu dosažitelnosti, systematicky identifikují mrtvý kód, což umožňuje jeho odstranění dříve, než se dále nahromadí.
Složený efekt: kódová základna podrobená neustálému skenování má nižší hustotu defektů, nižší cyklomatickou složitost, nižší míru duplikace a nižší procento mrtvého kódu než srovnatelná kódová základna bez skenování. Tyto metriky se přímo promítají do rychlejšího vývoje funkcí, nižších nákladů na údržbu a sníženého rizika produkčních incidentů.
Jak SMART TS XL Zajišťuje skenování kódu v podnikovém měřítku
Standardní nástroje pro skenování kódu fungují v jednom jazyce. V podnikových prostředích, kde koexistují služby Java, pipeline Pythonu, dávkové programy COBOLu, streamy úloh JCL a moduly RPG, přičemž každý z nich vyžaduje vlastní skener s vlastní konfigurací a vlastním dashboardem s výsledky, je obraz skenování kódu fragmentovaný.
SMART TS XLJe statická analýza kódu Skenuje všechny jazyky v prostředí současně – COBOL, JCL, Java, Python, RPG, PL/I, SQL a moderní cloudové balíčky – a v rámci jediného analytického kroku tak vytváří jednotné metriky kvality, bezpečnostní zjištění a strukturální data napříč celým portfoliem. Pro organizace se staršími mainframovými aplikacemi a moderními cloudovými službami představuje toto pokrytí napříč jazyky rozdíl mezi skenovacím programem, který pokrývá moderní balíčky, a programem, který pokrývá celý systém.
Funkce mapování závislostí aplikací rozšiřuje skenování za hranice jednotlivých souborů na architektonickou analýzu: které komponenty mají nejvyšší propojení, kde existují cyklické závislosti a které programy sdílejí data prostřednictvím implicitních rozhraní souborů namísto explicitních API. Tato strukturální zjištění představují problémy s architektonickou bezpečností a kvalitou, které nástroje pro porovnávání vzorů v jednotlivých souborech nemohou detekovat.
Díky analýze dopadu lze výsledky skenování aplikovat ve velkém měřítku: když je zranitelnost nalezena v komponentě s vysokou mírou zátěže, na které závisí 150 programů, analýza dopadu stanoví rozsah nápravných prací, které programy je třeba otestovat, které volající programy je třeba aktualizovat a jaký je celkový dosah opravy. Tím se zjištěné zranitelnosti převedou ze seznamu problémů do strukturovaného nápravného programu s definovaným rozsahem.
Funkce podnikového vyhledávání umožňuje dotazovat se na výsledky skenování v celém portfoliu: během několika sekund lze najít každý program, který používá specifické nezabezpečené API, každý soubor obsahující pevně zakódované přihlašovací údaje, každou komponentu, která překračuje prahovou hodnotu složitosti, napříč miliony řádků kódu v libovolné kombinaci jazyků.
Pro týmy řídící starší modernizace programy, SMART TS XLSkenování poskytuje základní informace o kvalitě před migrací: nefunkční kód vyloučený z rozsahu migrace, rozdělení složitosti, které určuje pořadí migrace, a bezpečnostní zjištění, která je třeba napravit před nasazením převedeného kódu do cloudové infrastruktury.
Skenovat včas, skenovat průběžně, skenovat vše
Organizace s nejnižší průměrnou dobou pro nápravu bezpečnostních zranitelností nejsou ty s nejagresivnějšími programy penetračního testování. Jsou to ty, které odhalí nejvíce zranitelností ještě předtím, než se dostanou do fáze kontroly kódu, v IDE vývojáře, v pre-commit hooku, v CI/CD pipeline. Skenování kódu je způsob, jakým se to děje ve velkém měřítku.
Vytvoření skenovacího programu znamená výběr správné kombinace SAST, DAST, SCA a IAST pro váš rizikový profil, jejich integraci ve správných bodech životního cyklu vývoje, jejich ladění s cílem minimalizovat šum bez obětování pokrytí a měření efektivity programu v čase, spíše než předpoklad, že skener běží. Běžící skener je začátek. Cílem je fungující program.


