Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Webbsäkerhet för IT-tekniker VT2013
Johan Leitet
johan.leitet.se
Dagens agenda
• Klient/server-arkitektur, attackvektorer
• HTTPS
• Attackvektorer, klientsida
- Cross-site-scripting
- Session-hijacking
- CSRF
- Vikten av validering
- Phishing
- Privacy
• Attackvektorer, serversida
- SQL-injections
- Lösenordshantering
- SPAM
Klient-/serverarkitekturen
Webbserver Klient
Serverarkitekturen, Attackvektorer
Webbserver
Databas
Externa servrar
Klientarkitekturen, Attackvektorer
Plugin Fysisk
säkerhet
Övriga risker:
HTTPS
:80
:443
???
Hela HTTP-
meddelandet
krypteras
Hallå Kalle! Läget?
%€SD€236! 3&"#4 6€"
Symmetrisk kryptering
"Ett hemligt meddelande"
"Ett hemligt meddelande"
"SF%&##__fgd)(=09643774"
Kryptering
Sessionsnyckel
Dekryptering
Sessionsnyckel
Asymmetrisk kryptering
"Ett hemligt meddelande"
"Ett hemligt meddelande"
"LK/%ds135/€GNBGD"
Kryptering
Publik nyckel
Dekryptering
Privat nyckel
HTTPS, flöde
Anrop, https, :443,
random:#€%RFDG
Certifikat med publik nyckel,
random:€#€TFX1
Sessionsnyckel krypterad med publik nyckel
Meddelande krypterat med sessionsnyckel
Meddelande krypterat med sessionsnyckel
...
HTTPS
Klientsideattacker
Klient • XSS
• Session hijacking
• CSRF
• Privacy attacker
• Click-jacking
• Phishing
• Attacker riktade mot
tredjepartsprogramvara
• ...
Klientsideskript (javascript)
Skriven kod som talar om för
webbläsaren vad den ska göra.
Idag: Uteslutande JavaScript
Hade förr ryktet om sig att vara
enkelt och ”inte ett riktigt
programmeringsspråk”
AJAX
Dynamiskt förändra en webbsida
Reagera på händelser
Kontrollera data innan den skickas till servern
Lagra data lokalt på klienten
Information om klienten
Geolocation
Drag and Drop
Ljud/Video-kontroll
Canvas
Eventuella problem
• Koden är publik
• ”Utvecklare” som förlitar sig på klientsidans kod
- Vid validering
- Vid inloggningsförfarande
- För att stoppa användaren från att genomföra handlingar
• Ajax-applikationer ökar angreppsytan
• Nya API:er/ökad komplexitet ökar angreppsytan (HTML5)
• Luckor i webbläsarimplementationen
• Denial-of-Service-problem (DOS-attack)
• Cross-site Scripting (XSS)
XSS – Cross Site Scripting
XSS går i korthet ut på att en attackerare får sin JavaScript-kod att komma ifrån en
av användaren betrodd server.
XSS
text = text.replace(/</g, ”<”).replace(/>/g, ”>”);
XSS
• Persistent XSS
• Ickepersistent XSS
Din sökning efter "Kalle Anka" resulterade inte i något resultat.
Cookies
Cookies (kakor) är små textmeddelanden som sparas på klienten vid besök på
webbsidor som väljer att skapa och spara cookies.
Det är bara den sajt som skapat cookien som kan läsa ut information från denna.
Sessioner
Sessioner används för att webbservern ska kunna ”minnas” dig som användare.
Sessions-idn sparas ofta som
kakor på klienten för att
servern ska kunna hålla reda
på besökarna av sidan.
Session hijacking
sessionID = a12d sessionID = a12d
Vikten av validering/filtrering
Det stora problemet vid session hijacking-attacken i demot är att formuläret är oskyddat. Inskickad data
valideras inte och utdata filtreras inte.
Validate input, filter output!
http://www.val.se/val/val2010/statistik/index.html#handskrivna
Samy is my hero
<div id=mycode style="BACKGROUND: url('java
script:eval(document.all.mycode.expr)')" expr="var
B=String.fromCharCode(34);var
A=String.fromCharCode(39);function g(){var C;try{var
D=document.body.createTextRange();C=D.htmlText}catch(e){}if
(C){return C}else …
White listing vs. Black listing
Black listing-filter:
/^[^´”]$/
Undvik att ersätta farliga
tecken. Det finns alltid vägar
runt detta.
Validera all indata och filtrera utdata!
White listing-filter:
/^[0-9A-ZÅÄÖa-zåäö_]$/
Tala explicit om vilka tecken
som får anges. Mycket bättre
Validering av indata på klienten spelar ingen roll. Detta
måste göras på servern.
Filtrering av utdata kan man eventuellt tänka sig göra
på klienten.
CSRF – Cross-Site Request Forgery
Få användaren att göra något på en annan site utan att veta om det.
• Ändra admininställningar på sin blogg
• Inloggad mot din router?
• Boka resor
• Påverka e-handlares "Rekommenderat för dig"
• Påverka sökhistoriken
• ....
Klientvalidering / Servervalidering
KLIENT SERVER
skicka
Ett klientskript
validerar
FEL!
OK Servern validerar
OK
Behandla data
Privacy
https://panopticlick.eff.org/
Phishing
Webbmailanvandare
Ditt konto har blivit matt. For att ateraktivera ditt konto maste du
aktivera ditt konto pa adressen
http://lnuaktivera.fulsite.com/?key=12f45sd543
Halsningar
Administratoren
Serverattacker
• SQL-injections
• (D)DoS-attacker
• ....
Webbserver
SQL-injections
SQL-injections
select * from users where username=’’; drop table users; ’
select * from users where username=’INMATAT VÄRDE’
Hur undvika?
1) Använd inte inline-SQL. Använd istället:
• Lagrade procedurer
• Parametriserade frågor
2) Om du måste använda inline-SQL. Validera, validera, validera
Egen autentisiering?
1) Behöver du ha egen inlogging?
Räcker det kanske med Facebook, Google, Twitter?
Om du måste ha inloggning:
1) Tala om för användaren hur uppgifterna hanteras!
2) Tvinga inte användaren att utforma lösenordet på ett speciellt sätt, men informera gärna om
vikten av ett starkt lösenord.
(Man kan tänka sig minsta längd, typ 6 tecken.)
3) Tillåt specialtecken och lååååånga lösenord.
4) Var noggrann vid implementationen.
Ditt lösenord
Lösenordshantering
Om olyckan mot förmodan är framme. Ha ryggen fri.
• Se till att bara spara hashade, saltade lösenord.
• Spara aldrig användarens lösenord så att detta
går att återge.
Rainbow tables (ordböcker)
Lösenord Förekomst per 92084
super123 996
hejsan 141
123456 118
111
hejhej 102
bajskorv 96
sommar 93
hemligt 69
blomma 60
bloggtoppen 60
Registrering
Användaren registrerar
lösenord (sommar) En slumpad salt skapas.
Exempelvis: hj234KLsd
Addera användarens
lösenord till saltet.
hj234KLsdsommar
Hasha resultatet
hj234KLsdsommar
2d86c4246f3c0eb516628bf324d6b9a
Spara hashen + saltet i
databasen
Inloggning
Användaren anger
användarnamn och
lösenord
Slå upp saltet som används
för användaren
Addera det lösenord
användaren angav till
saltet.
Hasha resultatet
Kontrollera om resultatet är
samma som det som står i
databasen
Gör världen lite säkrare
Kära webbplatsägare
Nyligen registrerade jag ett konto på er tjänst. Det verkar dock inte bättre än att ni sparat mitt
lösenord i klartext vilket gör att dessa uppgifter kan komma på vift om någon illasinnad hittar en
säkerhetslucka i ert system. Att spara lösenord på detta sätt bryter i alla avseende mot god sed och
det är definitivt något ni bör se över så fort som möjligt.
Om du som läser detta mail inte har direkt insyn i hur systemet är utvecklat så vänligen
vidarebefordra detta mail till de som har denna insyn.
Vänliga hälsningar
/ Ellen Nu
"
Behövs lösenord?
http://notes.xoxco.com/post/27999787765/is-it-time-for-password-less-login
Skydda dig själv
• Använd aldrig samma lösenord på mer än en sajt!
• Se över säkerheten på viktiga sajter så som Google, Facebook etc.
Använd tvåstegsautentiseringar.
2-stegsverifiering (multifaktorverifiering)
Något man vet
Något man har
SPAM
Webbsidor är en perfekt rekryteringsplats där spambots kan rekrytera mailadresser.
<a href=”mailto:[email protected]”>Mailadress till Johan</a>
Maila Johan på: johan.leitet[snabel-a här]lnu.se
Eller använd ett kontaktformulär…
SPAM via webbsidan
Captcha Completely Automated Public Turing test to tell Computers
and Humans Apart
Effektivt sätt att stoppa agenter från att registrera sig på
din sajt eller kommentera i din blogg.