Nástroje na statickú analýzu zdrojového kódu

  • sobota, júl 3, 2021
Singel-post cover image

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.

SonarQube

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

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 Code

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.

Find Security Bugs as a  plugin inside IntelliJ IDEA

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.

Security Code Scan as a Visual Studio extension

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.