Statické bezpečnostné testovanie aplikácií (SAST) je proces, kde zdrojový kód programu je podrobený skenovaniu za účelom identifikácie logických chýb, bezpečnostných zraniteľností, alebo iných problémov. Na rozdiel od dynamického bezpečnostného testovania aplikácie (DAST), tento proces iba parsuje a analyzuje zdrojový kód bez plnej kompilácie alebo vykonávania programu.
Na tento účel existuje veľké množstvo komerčných aj nekomerčných nástrojov. Cieľom tohto článku je stručné zhrnutie niektorých z nich.
Článok je rozdelený do dvoch hlavných častí.
V prvej časti predstavíme zopár veľkých a dobre známych, komerčných SAST programov. Takéto programy zvyčajne podporujú mnohé programovacie jazyky a framework-y a poskytujú intuitívne grafické rozhranie. Niektoré ponúkajú aj demo verzie, resp. časovo obmedzené verzie (trial), no nie je to pravidlo.
V druhej časti stručne popíšeme niektoré slobodné SAST programy. Sú to menšie a jednoduché nástroje, ktoré zvyčajne pracujú iba s jedným programovacím jazykom, alebo bajtkódom. Taktiež to bývajú prevažne konzolové nástroje.
Komerčné nástroje
SonarQube
SonarQube od spoločnosti SonarSource je dobre známe riešenie. Jedná sa o plnohodnotnú webovú aplikáciu s prívetivým užívateľským rozhraním. Taktiež ponúka integráciu s viacerými zostavovacími nástrojmi, programovacími prostrediami a CI/CD riešeniami.
Oficiálna distribúcia spočíva v troch platených variantách a jednej slobodnej variante, ktorá je šírená zdarma. Komerčné verzie SonarQube majú integrované rozsiahle množstvo bezpečnostných pravidiel pre mnohé programovacie jazyky. To je taktiež jednou s hlavných výhod platenej verzie oproti slobodnej verzii.
Ešte existuje slobodná distribúcia tohto softvéru, ktorú poskytuje OWASP. Táto verzia vylepšuje a rozširuje schopnosti bezpečnostného skenovania slobodnej verzie SonarQube. Avšak tento projekt sa momentálne zdá byť opustený. Od roku 2019 nebolo vidieť žiadnu aktivitu vývoja.
Samotný SonarQube nie je schopný skontrolovať závislosti skenovanej aplikácie. Bavíme sa o procese zvanom Analýza Kompozície Softvéru (SCA) alebo Open-Source Analýza (OSA). Naštastie existuje zdarma šírený doplnok od tretej strany, ktorý do SonarQube dodá túto schopnosť.
Osobný názor
SonarQube sa ľahko inštaluje a ľahko používa. Slobodná verzia však nie je veľmi vhodná na vážne bezpečnostné analýzy. Primárnym cieľom je zlepšiť kvalitu a čitateľnosť kódu. Skrátka pravidlá týkajúce sa bezpečnosti tu chýbajú. Platená verzia je v tomto výrazne napred. Užívateľské rozhranie je taktiež veľmi intuitívne.
CxSAST
CxSAST od firmy Checkmarx je drahý produkt. Cena však korešponduje s kvalitou.
Jedná sa o plne komerčný produkt bez žiadnej skúšobnej verzie. Jediný legálny spôsob ako si to vyskúšať je vyžiadaním demonštratívnej prezentácie.
Na rozdiel od predchádzajúceho riešenia je CxSAST plne zameraný na hľadanie bezpečnostných zraniteľností. Nesnaží sa teda byť všeobecným riešením.
CxSAST nedokáže kontrolovať závislosti skenovanej aplikácie. Na to existuje riešenie zvané CxSCA.
Osobný názor
CxSAST sa inštaluje a aktivuje pomerne komplikovane. Schopnosťami sa však jedná o veľmi dobrý produkt. Pre tých, čo hľadajú program iba na automatizáciu bezpečnostného preverovania a na kontrolu kvality kódu použijú niečo iné, resp. ich to nezaujíma, CxSAST môže byť vhodnejšie riešenie ako SonarQube.
Snyk Code
Snyk Code je pomerne mladý projekt. Primárne slúži ako SCA/OSA program, aspoň teda v jeho voľnej verzii. Zdarma šírená slobodná verzia je k dispozícií aj na Githube.
Platená verzia údajne ponúka aj SAST schopnosti, no autor tohto článku s ňou ešte nemal tú česť.
Snyk taktiež ponúka verejný repozitár mnohých známych zraniteľností v slobodných programovacích knižniciach.
Slobodné nástroje
Find Security Bugs - Java
Tento projekt je vyvíjaný ako doplnok pre program SpotBugs. Jeho účelom je hľadať zraniteľnosti v programoch napísaných v jazyku Java.
Program ponúka integráciu s najčastejšími JVM zostavovacími nástrojmi ako Ant, Maven, alebo Gradle. Ak ho použijeme ako doplnok do zostavovacieho nástroja, potom nájdené zraniteľnosti budú zobrazené ako varovania prekladača.
Autori taktiež ponúkajú doplnky pre programovacie prostredia Eclipse, IntelliJ IDEA a Android Studio s užšou integráciou s ich statickými analýzatormi kódu.
Program dokáže nájsť mnoho bežných zraniteľností so špeciálnou podporou pre typické Java aplikačné frameworky ako napríklad Spring MVC.
Security Code Scan - C#
Security Code Scan je slobodný projekt šírený ako samostatná konzolová aplikácia, doplnok do prostredia Visual Studio, alebo NuGet balík. Dokáže detegovať typické zraniteľnosti ako SQL Injection, Cross-Site Scripting, Cross-Site Request Forgery a iné.
Podporuje aj .NET Core aj teraz už zastaraný .NET Framework, a môže byť integrované do CI systémov so špeciálnou podporou pre Github a Gitlab.
Bandit - Python
Bandit je konzolová aplikácia distribuovaná ako pip balík.
Skenuje všeobecný Python kód s podporou populárnych webových aplikačných frameworkov ako napr. Django.
Nižšie je príklad nájdenej bezpečnostnej chyby. Bandit umožňuje svoj výstup exportovať do rozličných formátov včítane html, xml, csv, json a iných. Je ho teda možné pomerne jednoducho integrovať do CI/CD riešení.
...
>> Issue: [B301:blacklist_calls] Use of unsafe yaml load. Allows
instantiation of arbitrary objects. Consider yaml.safe_load().
Severity: Medium Confidence: High
Location: examples/yaml_load.py:5
More Info: https://bandit.readthedocs.io/en/latest/
4 ystr = yaml.dump({'a' : 1, 'b' : 2, 'c' : 3})
5 y = yaml.load(ystr)
6 yaml.dump(y)
...
phpcs-security-audit - PHP
phpcs-security-audit je doplnok pre PHP_CodeSniffer, ktorý ponúka pravidlá na hľadanie bezpečnostných zraniteľností. Zameriava sa na štandardnú PHP knižnicu a poskytuje dedikovanú podporu pre Drupal 7.
PHP_CodeSniffer je samostatne spustiteľná konzolová aplikácia, ktorá parsuje a spracováva zdrojový kód testovaného programu. Existuje tiež oficiálna podpora pre Jenkins CI/CD.
$ phpcs --extensions=php,inc,lib,module,info --standard=./vendor/pheromone/phpcs-security-audit/example_base_ruleset.xml ./vendor/pheromone/phpcs-security-audit/tests.php
FILE: tests.php
--------------------------------------------------------------------------------
FOUND 18 ERRORS AND 36 WARNINGS AFFECTING 44 LINES
--------------------------------------------------------------------------------
6 | WARNING | Possible XSS detected with . on echo
6 | ERROR | Easy XSS detected because of direct user input with $_POST on echo
9 | WARNING | Usage of preg_replace with /e modifier is not recommended.
10 | WARNING | Usage of preg_replace with /e modifier is not recommended.
10 | ERROR | User input and /e modifier found in preg_replace, remote code execution possible.
11 | ERROR | User input found in preg_replace, /e modifier could be used for malicious intent.
...
Záver
V tomto článku sme si rýchlo prešli niektoré zo známejších SAST nástrojov. Tabuľka nižšie nám celý článok sumarizuje.
Riešenie | Licencia | Programovacie jazyky | SCA/OSA |
---|---|---|---|
SonarQube | Zdarma+Platená | Mnoho | Doplnok zdarma |
Checkmarx CxSAST | Platená | Mnoho | Doplnok |
Snyk Code | Demo zdarma+Platená | Mnoho | Áno |
Find Security Bugs | Zdarma | Java | Nie |
Security Code Scan | Zdarma | .NET jazyky | Nie |
Bandit | Zdarma | Python | Nie |
phpcs-security-audit | Zdarma | PHP | Nie |
Pre viac informácií odporúčame navštíviť tento OWASP článok.
Je potrebné mať na pamäti, že SAST nástroje predstavujú iba jednu časť riadneho CI/CD riešenia. Jedná sa o mocné nástroje, ktoré pomáhajú rozoznať bezpečnostné zraniteľnosti v programom. Mali by sme spomenúť, že mnohé SAST nástroje neskenujú v programoch použité knižnice tretích strán. Na to sú potrebné takzvané SCA, resp. OSA nástroje. Možno ich v budúcnosti pokryjeme samostatným článkom.
Ako hociktorá technológia, SAST má tiež určité limity. Automatické skeny produkujú veľké množstvo falošných hlásení. Tieto musia byť manuálne obhliadnuté bezpečnostným špecialistom, alebo aspoň skúseným senior programátorom.
SAST nástroje taktiež nedokážu nájsť všetky bezpečnostné problémy. To platí najmä pre zraniteľnosti spôsobené chybnou aplikačnou logikou. TO zahŕňa nevhodný autorizačný manažment, izolácia užívateľov atď.. Preto je vhodné doplniť statickú analýzu občasným dynamickým bezpečnostným testovaním (DAST) a penetračným testovaním.