tisdag 31 mars 2009

Mozilla om säkra informationsflöden

Brendan Eich presenterade vad Mozilla försöker göra åt hela cross-site-röran, dvs problemet med att information och request kan flöda mellan sidor och sajter.

De försöker möjliggöra policies för informationsflöde (information flow).


Vad är informationsflöde?
Vi tar en zupersnabb grundkurs i informationsflöde.

Explicit informationsflöde:
Antag att variabel x innehåller något känsligt, t ex ditt sessionsid. Om man kopierar det värdet till en annan variabel så sker ett explicit informationsflöde.

Implicit informationsflöde:
Tänk dig kod som gör följande (raderna numrerade):

1: y = true
2: z = true
3: if (x) y = false
4: if (y) z = false

Här sker ett implicit informationsflöde från x till z. Varför? Jo, värdet på x avgör värdet på y (rad 3) och värdet på y avgör värdet på z (rad 4).

Man vill kunna styra såna flöden med en teknisk säkerhetspolicy.

Känslig information skyddas
Genom taggning (labeling) av känslig information såsom sessionsidn eller formulärfält med kreditkortsinformation så kan en policymotor förhindra att den känsliga informationen accessas av andra sajter eller av skriptkod. Det innebär generellt skydd mot CSRF (sessionsid får inte skickas med om request:et kommer från en annan sajt) och skydd av DOM:en från injicerade skript.

Mozilla är på gång att bygga in sånt stöd. Då kommer webbläsaren ha en default-policy och webbutvecklare kan skriva policies för sina egna sajter. Det betyder att även medvetet injicerad skriptkod (t ex annonser eller mashup:s) inte kan komma åt den information som taggats som känslig.

Blir det effektivt eller segt?
Hur ska man tagga informationen effektivt? Mozilla försöker få till det med sparse labeling (ungefär "gles taggning"). De använder implicit taggning för allt inom same origin, medan externa data och funktioner får explicita taggar. Konstanter och lokala variabler får inte några taggar alls.

Går det snabbt nog att enforce:a policyn runtime? Deras experiment visar att gles taggning ger ca 20 % overhead och fullständig taggning ger 70 % overhead.

Inga kommentarer: