torsdag 2 april 2009

Informationsflöde i webbapplikationer

Andrei Sabelfeld, Chalmers, berättade om hur långt hans grupp har kommit i att följa informationsflöde och -läckage i webbapplikationer.

Informationsläckage handlar om att data flödar från hemliga till publika variabler eller strukturer, t ex ett XSS-injicerat skript som skickar info från ett känsligt formulärfält (hemligt) till attackerarens sajt (publik).

Varför vill vi styra flödet?
Om vi skulle låsa det så att skript bara får skicka info till och från samma domän så funkar inte saker som Google Analytics och annonser som är skriptbaserade och behöver läsa saker i DOM:en.

Om vi bygger en mashup direkt i sidan så är allt tillgängligt för de injicerade delarna. Om vi istället bygger på iframes så blir nästan inget tillgängligt.

Därför vill man kunna uttrycka vilken information som får avslöjas, eller "deklassificeras".

Tidigare forskning
Än så länge har man inte fått ihop de formella språk där man kan bevisa ett programs flödesegenskaper med praktiskt användbara system. State of the art är JIF (Java Information Flow) i vilket man har byggt exempelvis ramverket SIF (Servlet Information Flow). Varför har man inte kommit längre? Det är ett svårt problem att lösa!

En attackerare ska inte kunna ta reda på något om hemliga variabler utan att det finns en deklassificeringsregel som tillåter det.

Tillåten deklassificering, d() är deklassificeringsfunktionen:
"Avsiktlig"
publik = d(hemligt)

"Fördröjd"
hemlig2 = hemlig1
hemlig1=0
publik = d(hemlig1)
publik = hemlig2

Förbjuden deklassificering
"Tvättning"
hemlig1=hemlig2
publik = d(hemlig1)

"I förväg"
publik=hemlig
publik=d(hemlig)

"Via termineringsvillkor"
while(hemlig do skip)
publik= 5

Det här håller man alltså på att utreda för webbapplikationer inklusive JavaScript.

Inga kommentarer: