Sikkerhedsbrud i webapplikationer er et stadig stigende problem. Gang på gang skriver pressen om indbrud og kompromitterede systemer ved de store spillere på internettet og vi er så småt begyndt at diskutere hvornår en hacking-skandale er en reel krigshandling.
Som udviklere har vi et fælles ansvar at leve op til – vore applikationer er kun så sikre som deres svageste led.
Open Web Application Security Project er et fællesskab der fokuserer på sikkerhed og årligt, baseret på statistik, sammensætter en liste over de 10 mest benyttede angreb.
Nederst på listen finder vi:
Uvaliderede redirects og forwards
Redirects er meget almindelige i webapplikationer. Det foregår ved at en webserver sender et svar til browseren indeholdene en 30x statuskode og en ny adresse:
HTTP/1.1 301 Moved Permanently
Location: http://www.qed.dk
Eksempelvis kunne vi have et login-system hvor brugeren tilgår qed.dk/sikker-side der, såfremt brugeren ikke er logget ind, redirecter videre til qed.dk/login?retur-url=/sikker-side der så til sidst redirecter tilbage til retur-url.
Angrebet
Såfremt destinationsadressen ikke valideres kan en ondsindet person sende brugeren til et hvilket som helst site.
Forwards er en makanisme hvor en webserver kan udvælge, hvilket indhold der skal præsenteres for brugeren. Også her kan der være tale om valg ud fra brugerparametre, og dermed kan mekanismen bruges til fx. at præsentere indhold der normalt er afskærmet ved hjælp af autorisation.
Truslen
Risikoen er at brugeren intet-anende kan blive videresendt til et phishing- eller malware-site eller at en angriber kan omgå sikkerhedschecks og dermed tilgå data der normalt kræver autorisation.
Angrebseksempel
- En angriber sender en adresse til ofret enten i en email eller via en webside indeholdene en speciel adresse i redirect-delen.
- Ofret klikker på linket da den første del af linket er et velkendt website som ofret har tillid til.
- Det velkendte site redirecter til angribers del af adressen
- Destinationen kan være et site der installerer malware eller på anden måde høster private oplysninger.
Undgå angreb
- Undgå brug af redirects og forwards
- Hvis redirects er i brug, så undgå at eksponere destinations-adresser i fx. urls og scripts
- Hvis du er nød til at eksponere destinations-adresser (fx. login-eksemplet) så kan man enten
- Bruge et token som parameter der så på serversiden mappes til den egentlige adresse
- Grundigt validere adressen, er serverdelen fx. den samme server som vi sidder på – eller en godkendt ekstern server.
I ASP.NET MVC er der en speciel funktion RedirectToLocal
der kun tillader redirects til lokale adresser og dermed reducerer risici.
Det er nødvendigt at have god kontrol af inputdata og redirects er især sårbare, så en god kontrol af disse er fundamentet for en sikker webapplikation.