SAST Tools vergelijking

Auteur: Wibren Wiersma

Om een softwareapplicatie te scannen op security kwetsbaarheden kan gebruik gemaakt worden van zo geheten Static Application Security Testing (SAST) tools. Er zijn veel verschillende SAST tools beschikbaar, maar hoe kunnen deze vergeleken worden?

Voorkennis

Code van applicaties bestaat tegenwoordig vaak uit meerdere programeer talen, frameworks en dependencies.

Deze dependencies kunnen vaak geautomatiseerd worden binnengehaald door zogeheten package managers. De dependencies zijn vaak ontwikkeld door andere partijen dan de partij die de code heeft geschreven. Als er dus security kwetsbaarheden worden gevonden in die dependencies, dan ligt de verantwoordelijkheid voor het dichten van die security kwetsbaarheid bij een externe partij. Maar het is de verantwoordelijkheid van de partij die deze dependencies gebruikt om de dependency te updaten als er een nieuwe versie is of om een andere dependency te kiezen als security kwetsbaarheden niet gedicht worden door de beheerder van die dependency. Dependencies ook weer dependencies hebben waardoor het hele verhaal nog complexer wordt.

Soorten en talen

Door de verscheidenheid aan gebruikte technologieën binnen applicaties zijn er ook verschillende tools. Er zijn tools die de code scannen voor bugs en kwaliteit, tools die de code scannen voor security kwetsbaarheden en tools die de dependencies van de software doorzoeken naar bekende security kwetsbaarheden. In dit onderzoek is gefocust op security kwetsbaarheden waardoor alleen de laatste twee soorten zijn onderzocht.

Om verschillende SAST tools met elkaar te vergelijken kunnen deze het beste op dezelfde software losgelaten worden om daarna de resultaten van de tools met elkaar te vergelijken. Voor de vergelijking is gebruik gemaakt van een webapplicatie waarvan de technieken zijn weergegeven in de volgende tabel.

 

Taal

Framework

Package Manger

Backend

Java

Spring

Maven

Frontend

JavaScript/TypeScript

React

Npm

In het onderzoek zijn de SAST tools van de onderstaande tabel met elkaar vergeleken. Als een SAST tool een technologie ondersteunt staat er een “X” bij.

Tool

Backend

Frontend

Licentie

Java

Maven

JavaScript/
TypeScript

Npm

SonarQube

X

 

X

 

Gratis optie

Npm audit

 

 

 

X

Gratis

FindSecurityBugs

X

 

 

 

Opensource

Snyk

X

X

X

X

Gratis optie

Semgrep

X

 

X

 

Opensource

ShiftLeft Scan

X

X

 

X

Opensource

Dependency Check

 

X

 

 

Opensource

OSSIndex

 

X

 

 

Opensource

De tools die een “Gratis optie” licentie hebben zijn beperkt aan de scan capaciteit of soorten scans. Om die beperkingen weg te nemen zijn er betaalde versies.

In de volgende kopjes worden de tools per stuk besproken.

SonarQube

SonarQube is een bekende tool die voornamelijk code checkt op bugs en kwaliteit, maar ook security kwetsbaarheden aangeeft.

+ SonarQube wordt veel gebruikt door developers.

+ Heeft veel resultaten voor bugs en code kwaliteit waardoor de tool naast security ook gebruikt kan worden voor het waarborgen van de code kwaliteit.

– Configuratie kost wat tijd, maar kan door de ervaring van anderen verkort worden.

Npm audit

De package manager Npm bevat ook Npm audit die de dependencies kan scannen op bekende kwetsbaarheden.

+ Npm wordt veel gebruikt door developers.

+ Geïntegreerd met Npm dus geen afzonderlijke installatie nodig.

FindSecurityBugs

FindSecurityBugs is een klassieker binnen de SAST tools. Voor dit onderzoek getest met SpotBugs, maar zou ook geïntegreerd kunnen worden in SonarQube.

+ Heeft erg goede analyses voor een opensource tool.

+ Heeft integraties met andere tools.

Snyk

Snyk is een commerciële tool de op alle gebieden van de test applicatie kan scannen.

+ Snyk heeft een mooie interface en is makkelijk in te stellen en te configureren.

+ Een groot pluspunt aan Snyk is dat de dependency lijst van de applicatie wordt geüpload naar de cloud en dat er daarna email notificaties worden gestuurd als er nieuwe kwetsbaarheden in je dependencies zijn gevonden.

– Een min punt aan Snyk is dat de uitleg van de security kwetsbaarheden in de code beter kan. Zie ook onderstaande afbeelding. Er wordt bijvoorbeeld niet uitgelegd waarom hardcoded secrets een probleem zijn. Ook zijn er geen links naar externe websites met meer uitleg. Daarbij zijn de voorbeeld oplossingen ook niet heel behulpzaam. Een hardcoded password los je namelijk niet op door het te vervangen met een ander hardcoded password.

(Bron: Screenshot Wibren Wiersma)

Semgrep

Semgrep is een tool waarbij er eenvoudig eigen scanregels geschreven kunnen worden in een python achtige taal. Het is ook mogelijk om een set regels van anderen te gebruiken. In dit onderzoek is gekozen voor de OWASP-top-10 set (niet gemaakt door OWASP) deze bevat 426 regels.

– Door de vele regels is Semgrep wel erg traag. Het scannen van onze applicatie koste 2,5 uur.

– Alle bevindingen werden in de terminal weergegeven. Het zou handiger zijn dit naar een bestand te schrijven.

ShiftLeft Scan

ShiftLeft scan is een tool die gebruik maakt van verschillende andere opensource tools waaronder FindSecurityBugs.

– Dit leidde wel tot een lange scan van een half uur.

+ Maar de resultaten zijn goed en kunnen worden weergegeven in een browser of in een extensie voor je programmeer omgeving.

OWASP Dependency Check

OWASP Dependency Check is een tool dat gebruik maakt van veel databases om zo veel mogelijk kwetsbaarheden in je dependencies te vinden.

+ Heeft zeer uitgebreide analyses van de kwetsbaarheden in je dependencies.

– Mist dependency trees om eenvoudig te onderzoeken via welke dependency de kwetsbaarheid is geïntroduceerd in je applicatie.

OSSIndex

Is een tool vergelijkbaar met OWASP Dependency Check maar maakt alleen gebruik van de database OSSIndex van Sonatype.

– Vervelend aan deze tool was dat het de build stopte voor elke submodule wanneer daar kwetsbaarheden inzaten. Waardoor voor een volledige scan telkens de build hervat moest worden vanaf de volgende module.

Resultaten

De tools zijn losgelaten op de test applicatie. De bevinden zijn daarna onderzocht om te bepalen of het echte security kwetsbaarheden zijn (TP) of dat het vals alarm was (FP). Het percentage echte security kwetsbaarheden ten opzichte van alle bevindingen wordt ook wel de precisie van de tool genoemd.

Uit de resultaten blijkt dat ShiftLeft Scan de meeste echte security kwetsbaarheden heeft gevonden. Maar ShiftLeft Scan heeft een vergelijkbare precisie met andere tools. Wat ook opvalt is dat Semgrep veel valse meldingen heeft gedaan op de frontend. Hierdoor is de precisie erg laag.

Tool

Java TP

Java FP

Frontend TP

Frontend FP

Precisie

SonarQube

13

7

1

4

66%

FindSecurityBugs

16

10

   

62%

ShiftLeft Scan

30

21

   

59%

Snyk

9

6

0

3

50%

Semgrep

5

1

1

37

14%

Resultaten van de tools op de code.

Bij de dependency scanners valt op dat Dependency Check de meeste kwetsbaarheden heeft gevonden in de Maven dependencies. OSSIndex volgt op de voet. Snyk en ShiftLeft Scan doen het iets minder goed. Bij Npm zien we dat de standaard meegeleverde tool Npm audit het goed doet, maar ShiftLeft Scan vindt nog iets meer.

Tool

Maven

Npm

Npm audit

 

23

Snyk

31

19

ShiftLeft Scan

29

29

Dependency Check

47

 

OSSIndex

39

 

Resultaten van de tools op de dependencies.

Conclusie

Bij de Java code scanning zien we dat ShiftLeft Scan het erg goed doet. Wel heeft ShiftLeft Scan een lange scantijd. Mocht een minder lange scan tijd nodig zijn dan is FindSecurityBugs of SonarQube een goed alternatief, deze twee kunnen ook samen gebruikt worden.

Bij de frontend code scanning zien we dat er maar twee tools een echte security kwetsbaarheid hebben gevonden, namelijk Semgrep en SonarQube. Vergelijken is daarom lastig. Wel is duidelijk dat Semgrep een erg slechte precisie heeft, dus dat die sowieso niet gebruikt moet worden. SonarQube is een goede optie, zeker als het ook al gebruikt wordt voor de Java code scanning.

Bij de Maven dependency scanning doet OWASP Dependency Check het heel goed en is daarom aanbevolen.

Bij de Npm dependency scanning is ShiftLeft Scan de beste, maar als de lange scantijd een probleem is kan ook goed Npm audit of Snyk gebruikt worden. Met als voordeel dat Npm audit al met npm meegeleverd wordt, en dat Snyk ook email notificaties geeft bij nieuwe kwetsbaarheden.

Onderwerpen

Delen
Share on linkedin
Share on email

Contact

Andere technische blogs
Blazor
Svelte, een populair front-end framework
Security tooling in de ontwikkelstraat

Word jij onze nieuwe Carthago expert?

Alle ruimte voor ontwikkeling en fun!

Carthago ICT maakt gebruik van cookies om je ervaring te verbeteren. We gaan er van uit dat je hiermee akkoord gaat. Lees meer.