🛡️ Øvelse 30 – Grundlæggende taint-analyse med Snyk
ℹ️ Information
Formålet med denne øvelse er at introducere grundlæggende taint-analyse med værktøjet Snyk.
I opgaven skal du udføre analysen på en ASP.NET Core-applikation. Repositoriet, du skal klone, er her: https://github.com/brunobritodev/ASP.NET-Core-SQL-Injection-Example.
Som navnet på applikationen indikerer, indeholder applikationen en sårbarhed, der gør den modtagelig over for injection-angrebet SQL Injection.
Sårbarheden, som vi skal arbejde med, er implementeret i Controller-klassen HomeController i metoden SearchStudentUnsecure.
Sårbarheden er meget åbenlys, hvilket gør den velegnet til at lære om taint-analyser.
Taint-analysen udføres ved, at en algoritme følger en inputværdi fra kilden (source) til dens endelige mål (sink).
I applikationen er source browserens input til applikationen, som ses i metoden:
Source må altså være argumentet name. Sink i applikationen er databasen, hvilket også kan ses i koden for metoden SearchStudentUnsecure:
var conn = _context.Database.GetDbConnection();
var query = "SELECT FirstName, LastName FROM Student WHERE FirstName LIKE '%" + name + "%'";
IEnumerable<Student> students;
try
{
await conn.OpenAsync();
students = await conn.QueryAsync<Student>(query);
}
Kodelinjen await conn.QueryAsync<Student>(query) laver et kald til databasen med en SQL-string, som indeholder ikke-valideret data. Det vil sige, at tainted data nu får lov til at bevæge sig direkte fra source til sink.
I opgaven skal I efterprøve dette ved at anvende værktøjet Snyk CLI som taint-analyseværktøj.
Værktøjet er det samme som anvendt i Opgave 29.
Du skal dog først oprette en konto og aktivere Code scan-funktionen. Følg guiden her.
Derefter skal du blot følge trinene i instruktionerne.
⚠️ Vigtigt: Skanning for sårbarheder i tredjepartsbiblioteker (f.eks. NuGet-pakker) er ikke det samme som statisk kodeanalyse.
Tredjepartsskanning handler om at finde kendte sikkerhedsproblemer i eksterne komponenter, mens statisk kodeanalyse (som taint-analyse) analyserer selve koden i jeres projekt.
Mange værktøjer som Snyk kan udføre begge dele, så det er vigtigt at kende forskellen, da studerende ofte forveksler 3. parts skanninger med statisk kode analyse.
📝 Instruktioner
- 📥 Klon projektet fra dette repository.
- 📂 I den klonede projekts mappe, skift til mappen
SqlInjection. - 🛠️ Udfør taint-analysen ved at følge instruktionerne fra afsnittet
Testing a repository from its root folderi denne dokumentation. - 📝 Notér, hvilket linjenummer SQL-injection sårbarheden bliver fundet på.
- 🔍 Verificér i koden, at linjenummeret for sårbarheden er der, hvor den forurenede data sendes til sink.
🤔 Refleksionsspørgsmål
- 🤔 Hvordan hjælper taint-analyse med at identificere sikkerhedsrisici i software?
- ⚠️ Hvilke begrænsninger har automatiserede statiske analyseværktøjer som Snyk i forhold til kompleks kode og kontekst(domæne viden)?
- 🔄 Hvordan kan viden om kildedata (source) og destinationssted (sink) i koden forbedre sikkerhedsarbejdet?
- 🛡️ Hvordan bør fundne sårbarheder håndteres i udviklings- og driftsprocessen for at øge sikkerheden?
🔗 Kobling til relevante standarder og principper
| Element i øvelsen | Relateret standard / princip | Kommentar |
|---|---|---|
| Taint-analyse og statisk kodeanalyse | ISO/IEC 27002:2022, afsnit 8.29 (Security testing) | Anbefaler brug af sikkerhedstest og sårbarheds analyse som en del af sikkerhedstest. |
| OWASP ASVS 5.0.0, Kapitellet "Assessment and Certification" | Afsnittene "Verification Mechanisms" og "The Role of Automated Security Testing Tools" omtaler anvendelsen hensigt og uhensigtmæssig brug af automatiseret værktøjer | |
| Secure by Design | Fremhæver værdien af analyseværktøjer, og viser svagheder ift. manglende invarians ved objekters instantiering |
💡 Taint-analyse er et effektivt værktøj til at identificere potentielle sikkerhedsbrud ved at spore hvordan data bevæger sig gennem applikationen fra usikre kilder til kritiske operationer.