Implementation Analysis of Open-Source Static Analysis Tools for Detecting Security Vulnerabilities
Abstract
Brukere må kunne føle seg trygge på at verktøy for statisk kodeanalyse holder sitt løfte om dekningsgrad. Begrensninger, og ikke minst den faktiske ytelsen til disse verktøyene bør gjøres kjent slik at det med sikkerhet kan bestemmes om de er hensiktsmessig for ønsket bruk. Vi har analysert implementasjonen og identifisert begrensninger for tre verktøy for statisk kodeanalyse som er laget for å oppdage sikkerhetshull, og basert på prinsippet om åpen og fritt tilgjengelig kildekode. De tre verktøyene er SpotBugs, Find Security Bugs, og ESVD. Basert på analysen fant vi et sett med felles styrker og begrensninger. Bruken av taint analysis er en teknikk som ofte fører til bedre oppdagelsesrate av sikkerhetshull. I tillegg fant vi at en generaliserbar implementasjon ser ut til å påvirke dekningsgraden positivt, ettersom algoritmer enkelt kan bli gjenbrukt for nye sikkerhetshull. Begrensede mengder av kilder og sluker (eng. source og sink) påvirker oppdagelsesraten svært negativt. Dårlig control-flow og data-flow analysis er også en hovedårsak til dårlige oppdagelsesrater. Vi fant også at oppdagede sikkerhetshull noen ganger klassifiseres som helt andre typer sikkerhetshull. Denne masteroppgaven utfører en viktig undersøkelse av verktøy for statisk kodeanalyse, noe som ikke tidligere har blitt gjort til en slik grad. Bidragene fra denne masteroppgaven er detaljerte ytelsesresultater basert på mer enn 20 000 eksekveringer på sårbar kode, i tillegg til en beskrivelse av implementasjonen til verktøyene for statisk kodeanalyse, deres begrensninger, forbedringer av disse begrensningene, og forslag til forbedringer for hele felleskapet for statisk kodeanalyse. A static analysis tool that claims to cover a specific vulnerability has an inherited level of trust to fulfill. Bringing the actual performance and limitations of these tools into the spotlight helps to prove or disprove any question about their applicability. We have analyzed the implementation and identified limitations for three open-source static analysis tools aimed at detecting security vulnerabilities, namely SpotBugs, Find Security Bugs, and ESVD. A common pattern of strengths and limitations emerged as a result of this analysis. The use of taint analysis is an important technique for increased detection rates. A generalizable implementation also seems to benefit the coverage, as code can be reused for new vulnerabilities with only minor modifications. Incomplete collections of vulnerable sources and sinks is a limitation with a significant impact on the detection rates of the static analysis tools; the same applies to weak control- and data-flow analysis. The misclassification of vulnerabilities and an inconsistent or missing confidence ranking also negatively affect the tools. This master thesis serves as an important first step into a scarcely explored part of static analysis tools. The contributions from this master thesis are the detailed performance results produced from over 20,000 vulnerability reports, in addition to describing the implementation of the static analysis tools, identifying limitations, the improvements to address these limitations, and further improvement proposals.