tisdag 31 mars 2009

Öppen diskussion om en säker webb

Om vi fick göra vad vi ville - hur skulle vi säkra webben? Det var utgångspunkten för passet efter lunch. En öppen diskussion med alltmer högljudda forskare. God stämning. Starka åsikter.

Here we go ...

Varför funkar inte SSL?
Trevor Jim, AT&T Research, inledde med att ondgöra sig över SSL. Varför är det fortfarande ett problem?

OK, vi ska inte begära att alla sajter på nätet kör SSL. Då kommer sidor och innehåll inte kunna cache:as längre så vi skulle få prestandaproblem.

Men förutom det så kunde vi konstatera att det finns några aktuella problem med SSL:
  • Dyrt. Varför ska certifikat som godkänns av webbläsarna kosta så mycket? Det gör ju bara att vi får sämre säkerhet. Slutsatsen var att stora CA-företag bara är intresserade av pengar, inte av säkerhet.
  • Kryptering != autentisering. Varför har vi hakat upp oss på att SSL ska ge kryptering av data och autentisering av servern? Om vi vill skydda informationen på linan så kan vi väl bara köra på ett sessionsnyckelpar? Visst, vi riskerar att få man-in-the-middle men helt okrypterat är bra mycket sämre. Viktiga sajter kan (fortsätta) köra med "riktiga" cert.
  • För krångligt? Utvecklare misslyckas konstant med att använda SSL korrekt. De kör SSL på inloggningssidan men går sen över till HTTP och skickar sessionsid:t i klartext. På nåt sätt har vi inte lyckats informera om hur SSL ska användas.
JavaScript roten till allt ont?
OK, vi var så klart överens om att vi alla vill ha JavaScript. Vi vill ha rika webbapplikationer och klientkod. Samtidigt måste vi erkänna att en majoritet av dagens webbattacker beror på JavaScript och dess obegränsade access till DOM:en.

Följande förslag framkom:
  • Begränsa access till DOM:en. Kanske borde skript-taggen ha ett antal obligatoriska attribut som säger vad skriptet vill ha access till. Sen kan webbläsaren ev ihop med användaren avgöra om det är OK.
  • Separera läs- och skrivrättigheter. Många inmixade skript behöver läsa saker på sidan men inte skriva. Skilj på de rättigheterna.
  • Separera data och kod. Markera vilken information som är kod och vilken som är data i HTML-sidan. På det viset kan man inte injicera skript i datafält.
  • Modularisera skripten. Låt de olika skripten på sidan bli separata moduler och tillåt dem bara kommunicera på ett strukturerat sätt med meddelanden. Typ som processkommunikation i ett operativsystem.
Sessionshantering
Jag tog upp frågan om varför kakor används för sessionshantering? Det är nån sorts mix av tillstånd och session som har patchats med secure- och HTTPOnly-attribut. Vi borde istället separera ut sessionshanteringen och sköta den med etablerad kryptografi.

Vi vill inte ha obligatorisk identifiering på nätet, t ex med unika, persistenta certifikat i varje webbläsare. Det skulle få hemska integritetsföljder. Istället handlar sessionshantering om recognition, dvs möjligheten att känna igen klienten på ett robust och säkert sätt. Här återkom idén om sessionsnyckelpar eller sessionscertifikat.

3 kommentarer:

Martin Holst Swende sa...

* Det där med att man Kryptering != autentisering har jag stört mig på länge. Det borde helt klart finnas stöd för att köra HTTPS mot icke-autentiserad part om kryptering är det enda man vill skydda sig mot. (Och det går ju delvis redan idag: digest-formulär funkar ju så - men varför stannade man vid formulär - varför inte all data?)

* Ett annat problem med SSL är att det inte går att köra flera virtuella host:ar bakom en https, eftersom hela http-anropet krypteras, således måste autentiserings/krypterings-biten avklaras innan dispatchern kan bestämma vart den ska gå. Och det blir ju problem ifall olika hostar vill använda olika certifikat. Så många som har sina sajter på webhotell kan inte använda https. (Rätta mig gärna om jag har uppfattat detta fel)

* Javascript : En sak jag tänkt på är att en site borde kunna säga, exempelvis i http-headern (mindre bra) eller i html-headern (bättre) att "denna sida innehåller Pure HTML" - dvs ingen scriptdata öht. Det skulle kunna lösa en del problem för gamla och simpla sajter (de som oftast har mest problem nuförtiden). Ungf som att servern kunde slå på Noscript.

Martin Holst Swende sa...

-- Edit till kommentaren ovan: när jag skrev digest-formulär menade digest-baserad login.

John Wilander sa...

"flera virtuella host:ar bakom en https"
Det känner jag inte till. Vore intressant att veta om det är så. Det är isf ett stort problem för mindre sajter.

"denna sida innehåller Pure HTML"
Absolut. Nån sorts policy-utlåtande från servern är vägen framåt. Det liknar skydden mot kodinjektion i desktopapplikationer med icke-exekverbara minnessegment. Applikationen/webbsidan säger huruvida självmodifierande kod eller dynamiskt uppbyggd kod ska få köras eller ej.