CSS :visited may be a bit overrated

OK, second time is a charm. This script is probably of some peripheral interest:

In the past two years or so, a majority of browser vendors decided to take a drastic step of severely crippling CSS :visited selectors in order to prevent websites from stealing your browsing history.


It is widely believed that techniques such as cache timing may theoretically offer comparable insights, but the attacks demonstrated so far seemed unconvincing. Among other faults, they relied on destructive, one-shot testing that altered the state of the examined cache; produced only probabilistic results; and were far too slow and noisy to be practically useful. Consequently, no serious attempts to address the underlying weakness have been made.


My proof of concept is fairly crude, and will fail for a minority of readers; but in my testing, it offers reliable, high-performance, non-destructive cache inspection that blurs the boundary between :visited and all the "less interesting" techniques.

"The Tangled Web" is out

Okay, okay, it's official. You can now buy The Tangled Web from Amazon, Barnes & Noble, and all the other usual retailers for around $30. You can also order directly from the publisher, in which case, discount code 939758568 gets you 30% off.


No Starch provides a complimentary, DRM-free PDF, Mobi, and ePub bundle with every paper copy; you can also buy e-book edition separately. Kindle and other third-party formats should be available very soon.


More info about the book itself, including a sample chapter, can be found on this page.

In praise of anarchy: metrics are holding you back

It is a comforting to think about information security as a form of computer science - but the reality of securing complex enterprises is as unscientific as it gets. We can theoretize how to write perfectly secure software, but no large organization will ever be in a meaningful vicinity of that goal. We can also try to objectively measure our performance, and the resilience of our defenses - but by doing so, we casually stroll into a trap.


Why? I think there are two qualities that make all the difference in our line of work. One of them is adaptability - the capacity to identify and respond to new business circumstances and incremental risks that appear every day. The other is agility - the ability to make changes really fast. Despite its hypnotic allure, perfection is not a practical trait; in fact, I'm tempted to say that it is not that desirable to begin with.


Almost every framework for constructing security metrics is centered around that last pursuit - perfection. It may not seem that way, but it's usually the bottom line: the whole idea is to entice security teams to define more or less static benchmarks of their performance. From that follows the focus on continually improving the readings in order to demonstrate progress.


Many frameworks also promise to advance one's adaptability and agility, but that outcome is very seldom true. These two attributes depend entirely on having bright, inquisitive security engineers thriving in a healthy corporate culture. A dysfunctional organization, or a security team with no technical insight, will find false comfort in a checklist and a set of indicators - but will not be able to competently respond to the threats they
need to worry about the most.


A healthy team is no better off: they risk being lulled into complacency by linking their apparent performance to the result of a recurring numerical measurement. It's not that taking measurements is a bad idea; in fact it's an indispensable tool of our trade. But using metrics as long-term performance indicators is a very dangerous path: they do not really tell you how secure you are, because we have absolutely no clue how to compute that. Instead, by focusing on hundreds of trivial and often irrelevant data points, they take your eyes off the new and the unknown.


And this brings me to the other concern: the existence of predefined benchmarks impairs flexibility. Quite simply, yesterday's approach, enshrined in quarterly statistics and hundreds of pages of policy docs, will always overstay it welcome. It's not that the security landscape is constantly undergoing dramatic shifts; but if you don't observe the environment and adjust your course and goals daily, the errors do accumulate... until there is no going back.

Good news, everyone!

No Starch Press just posted a sample chapter for The Tangled Web. You can grab the PDF here and see what it's all about. The book itself should be available by November 15; you can also preorder on Amazon.


If you don't know what this is all about, you can also head over to the home page of the book; but the bottom line is that I think it's the first-ever reasonably detailed examination of the browser security model and its evolution through the years - and really, that's something you just need to know to develop modern web apps.


PS. It's apparently always April Fools' at Microsoft!

Røeggendommen

Se også kommentar til Høyesterettsdommen

Den ferske dommen fra Borgarting Lagmannsrett i saken mellom Ivar Petter Røeggen og DnB vil bety at småsparere er uten juridisk beskyttelse i møte med profesjonelle finansinstitusjoner. Ingen ville kjøpt spareproduktene som Røeggen investerte i fra DnB Nor om det var kjent hvordan de fungerte. Likevel vant banken frem. 

Det Røeggen kjøpte var i realiteten to produkter som banken selv hadde valgt å koble sammen til ett for å gjøre det salgbart. Den ene delen var et fastrenteinnskudd og det andre en opsjon som potensielt kunne bli verdiløs. Det er vanskelig å se noe annet motiv for å lage en slik pakke enn å tilsløre innholdet.

Det er ubestridt at Røeggen lånte penger av DnB Nor til 8,37% rente, og satte det inn igjen i samme bank til 5,4%. Røeggen betalte altså hvert år 3% for et bokføringstriks. Det er helt usannsynlig at verken Røeggen, rettens dommere eller andre under noen omstendighet ville takket ja til en slik avtale. Slik var imidlertid produktet Røeggen investerte i konstruert.

Lagmannsretten argumenterer likevel for at all relevant informasjonen var tilgjengelig for Røeggen. I prospektet står det nemlig at ”(produktet) bygger på et obligasjonslån som banken selv utsteder. I stedet for å betale renter på lånet kjøper DnB ulike finansielle instrumenter som gir deg som investor tilgang til en eventuell oppgang i aksjekursene i”. For det første er jo ulike finansielle instrumenter en merkelig formulering når det er opsjon banken mener. ”Opsjon” kan man slå opp i et leksikon. Forsøk det samme med ”ulike finansielle instrumenter” .

Videre, hvorfor skriver ikke banken rett ut at 73% av produktet er et fastrenteinnskudd til 5,4%? Det er slett ikke opplagt for alle at ”et obligasjonslån” er det samme som et slikt innskudd, og renten på innskuddet var etter det jeg forstår heller ikke oppgitt.

Det er naturligvis mulig å regne seg frem til denne renten, men hadde det ikke vært mye enklere om banken hadde gjort det for alle kundene? Kanskje enda mer interessant er det jo å spørre hvorfor denne informasjonen ikke var tydeligere. Kan hensyn til salget av produktet ha spilt inn her? I dagens regelverk er bankene eksplisitt forpliktet til å opplyse om slike skjulte kostnader, men det skulle da egentlig bare mangle at kunden får opplyst prisen på produktet? Her kan ikke dagens regelverk anses som annet en kodifisering av et minimumsmål for god forretningsskikk.

Retten mener imidlertid at Røeggen selv burde etterspurt eventuell mangelfull informasjon. Mener virkelig retten at det er hensiktsmessig at hver enkelt kjøper selv skal fremprovosere nødvendig informasjon for å vurdere produktene? Det vil i så fall ha vidtrekkende konsekvenser for alt fra salg av brødristere til bilkjøp. Ansvaret for tilstrekkelig informasjon kan bare ligge ett sted, og det er hos selger.

I følge dommen er det uansett i skjønneste orden at banken har vært lite meddelsom med informasjon om rentemarginen fordi ”… hvordan banken sikret at den kunne oppfylle hovedstolsgarantien, er i prinsippet uten betydning for Røeggen.”. Retten gir imidlertid ingen nærmere forklaring på hvorfor det er uten betydning for kunden hvilken rente han får på sin fastrentekonto.

Så mener retten å vite at ”Grunnen til tapet var at han var uheldig med tidspunktet for investeringen.” Nja. Markedet snudde riktignok mot Røeggen, men problemet var jo de høye skjulte kostnadene. Disse ble synliggjort av et trådt aksjemarked, men retten har misforstått dersom den trodde at dette var hovedproblemet. Problemet her var at Røeggen med sikkerhet ville tape mot alternative investeringsstrategier uten skjulte kostnader.

Uansett hvor avansert DnB Nors produkt var skrudd sammen, ville de aldri kunne oppnådd et bedre forhold mellom avkastning og risiko enn aksjeindeksen. Nedtynget av gebyrer og med en uhensiktsmessig struktur måtte dette produktet bli en ekstremt dårlig langsiktig investering. Hver enkelt investor er naturligvis i utgangspunktet selv ansvarlig egne investeringer. Det fordrer imidlertid at selgeren ikke skjuler de faktiske provisjonskostnadene for kunden.

An origin is forever

This post is inspired chiefly by the work of Artur Janc.


The Internet is a pretty seedy place, yet we are quite willing to hand over our secrets to a small group or trusted web apps. Heck, in recent years, we also started giving them capabilities: social networking sites often get to see your geolocation, and your instant messenger may be able to access your microphone or webcam feeds. Some of this does not even require your initial consent: certain browsers and plugins come with hardcoded domains that are permitted to install software updates, or change system settings at a whim.


The push toward web application capabilities is somewhat frightening once you realize that the boundaries between web applications are very poorly defined, and that nobody is trying to solve that uncomfortable problem first. Look at the scoping rules for JavaScript DOM access, for HTTP cookies, and for auxiliary mechanisms such as password managers: they not only differ substantially, but routinely interfere with each other in destructive ways. Compartmentalizing complex web applications should be a breeze, but instead, it's an impenetrable form of art.


Worse, content isolation on the web is very superficial - so even if the boundaries can be drawn, most types of privileged contexts can't distance themselves from the rest of the world, and expose just a handful of well-defined APIs. Instead, every non-trivial web application needs to heavily compensate for the risk of clickjacking, cross-request forgery, reflected cross-site scripting, and dozens of other attacks of that sort. All the developers eventually fail, by the way: show me a domain with no history of XSS, and I will show you a web application nobody cares about.


Unlike some other tough challenges in browser engineering, the risks of living with privileged applications could mitigated fairly nicely simply by requiring some effort up front: even without inventing any new security mechanisms, you could require applications to use origin cookies, have a sensible CSP policy, and use HSTS, before being allowed to prompt for extra privileges. It's not impossible to do something meaningful - it's just unpopular with the creators of privileged APIs.


But the problems with the clarity of robustness of application boundaries aside, there is also a third, perhaps more fascinating issue: what do you do if your web application execution context becomes corrupted in some way? As it turns out, there is no mechanism for the server to say that from now on, it wants to have a clean slate, and that the browser should drop or at least isolate any already running code, or previously stored data.


This seemingly odd wish is actually critical to web application security. For example, let's assume there is an XSS vulnerability in a web mail system or a social networking application. Because of the convenient but unfortunate design of HTML, such vulnerabilities are unavoidable, but we seldom wonder if it's possible to cleanly and predictably recover from them. Intuitively, patching the underlying bug, invalidating session cookies, and perhaps forcing password change, is all it should take; in fact, applications using httponly cookies can often skip the last two steps.


Alas, an once-compromised web origin can stay tainted indefinitely. At the very minimum, the attacker is in full control for as long as the user keeps the once-affected website open in any browser window; with the advent of portable computers, it is not uncommon for users to keep a single commonly used website open for weeks. During that period, there is nothing the legitimate owner of the site can do - and in fact, there is no robust way to gauge if the infection is still going on. And hey, it gets better: if content from the compromised origin is commonly embedded on third-party pages (think syndicated "like" buttons or advertisements), with some luck, attacker's JavaScript may become practically invincible, surviving closing the original application and the deletion of browser cache. If that doesn't give you a pause, it should.


And let's not forget open wireless networks: the problem there is about as bad. It does not matter that you are not logged into anything sensitive while visiting Starbucks. An invisible frame, a strategic write to localStorage, or a bit of DNS or cache poisoning, is all it takes for the attacker to automatically elevate his privileges the moment you return to a safe environment and log back in.


With all that, and with the proliferation of mechanisms such as web workers and offline apps, we are rapidly approaching a point where recovering from a trivial XSS bug and other common web security lapses is getting almost as punishing as recovering from RCE - and for no good reason, too. Sure: today, it's so easy to phish users or exploit real RCE bugs, that backdooring web origins is not worth the effort. But in a not-too-distant future, that balance may shift.

Strukturerte produkter

Vi venter nå på dom fra lagmannsretten i saken mellom Ivar Petter Røeggen og DnB. I 2000 investerte Røeggen i et såkalt strukturert produkt. 73% av investeringen ble så satt på en høyrentekonto. De resterende 27% ble brukt til å kjøpe en opsjon som ville gi avkastning dersom markedet gikk opp. Om markedet gikk ned ville opsjonen være verdiløs.

I løpet av tegningsperioden ville så bankinnskuddet forrente seg slik at det til slutt ville tilsvare nøyaktig det investerte beløpet. På denne måten var Røeggen garantert det opprinnelige innskuddet dersom opsjonen skulle vise seg å bli verdiløs.

Allerede her hadde imidlertid produktet en katastrofal svakhet. Renten som banken måtte betale for å sikre minimumsbeløpet lå nesten halvannen prosent under fastrenten som banken garantert kunne oppnå i rentemarkedet. Hvert år tok altså DnB betalt 1,4% bare for å ha penger stående på en høyrentekonto. Når vi i tillegg vet at Røeggen og mange andre belånte mye av investeringen, blir regnestykket enda verre. Differansen mellom innskuddsrenten og lånerenten var på hele 2,5%. I og med at låne ble satt rett inn på konto i samme bank foregikk det ingen reelle transaksjoner mellom kunde og bank. Hvert år mottok altså DnB 2,5% bare for å føre pluss på én konto og minus på en annen. Dette må ha vært et fantastisk produkt for DnB.

Norsk Regnesentral fant riktig nok at en lang rekke slike produkt ikke kom så galt ut sammenlignet med aksjeindeksen og bankinnskudd når man så på realisert avkastning i ettertid. Beregninger gjort i ettertid har imidlertid begrenset verdi. For å kunne si noe om investeringene i strukturerte produkter var hensiktsmessige da de ble gjort, må man regne ut forventet avkastning på investeringstidspunktet og renten en bør sammenligne med er fastrenten i investeringsperioden. For produktet i denne saken kan man regne ut at forventet avkastning var 7,7% per år basert på avkastningen til Dow Jones EURO STOXX 50 (den største investeringen til fondet) siden 1987. Hadde man heller investert opsjonsdelen direkte i indeksen og resten i et fastrenteprodukt ville forventet avkastning blitt 8,6%.

I tillegg til dårlig rente var også opsjonsdelen av produktet et problem. Investerer man i opsjoner, bullfond eller tilsvarende derivater må man hvert år betale en ikke ubetydelig sum i noe som best kan sammenlignes med en forsikringspremie. En opsjon vil nemlig reduseres i verdi hvert eneste år selv når aksjekursene ikke faller.

Vi vet at fasiten var at børsindeksen falt og at Røeggen dermed fikk bruk for den forsikringen han hadde betalt premie for. Man skulle derfor tro at produktet i alle fall hadde klart seg bedre enn en investering i indeksfond i dette konkrete tilfellet, når tapet tross alt ble begrenset av nedsidegarantien slik intensjonen var?

Svaret er imidlertid nei. Røeggen tapte selv når produktets garanti kom til anvendelse på grunn av høye rentekostnader. Om han hadde investert direkte i indeksen hadde han oppnådd en avkastning på 27% før omkostninger på investeringen. Det er mindre enn hva et fastrenteprodukt ville gitt på den tiden, men betydelig mer enn sluttresultatet som ble 0.

Opsjoner generelt har blitt oversolgt av banker og finansinstitusjoner. Det er usikkert hvorfor det har skjedd, men det kan ha med utviklingen av finansfaget. I 1973 ble artikkelen som beskriver hvordan man prissetter opsjoner publisert. Formlene slo umiddelbart an på Wall Street og bruk av opsjoner og andre derivater i finansverden eksploderte.

Siden hele hensikten med å investere i aksjer er å ta risiko og få betalt for det over tid, virker imidlertid ideen om å kjøpe forsikring for investeringsbeløpet litt pussig. Om man ikke er beredt til å tape bør man ikke forsikre seg, men heller investere et mindre beløp.