Slik omgår hackere referrer checks

En referrer er en http header som nettleseren din sender med, på alle nettsider du besøker. Hvis jeg er inne på www.metronet.no, og klikker på en link som går til www.teknologia.no, ja da vil referreren din se slik ut:

http://www.metronet.no/blogg/2009/09/redirects-hvordan-flytte-nettsidene-dine

Jeg har tidligere skrevet om emnet, og hvorfor man ikke kan stole på referreren. Men nå skal jeg vise nøyaktig hvordan hackere klarer å omgå en referrer sperre.

Først litt om hvordan nettleseren sender avgårde din referrer.

Når jeg er inne på deewoo.org og klikker på lenken som går videre til arpa.no, sender nettleseren følgende:

GET /blog/ HTTP/1.1
Host: arpa.no
User-Agent: Mozilla/5.0
Referer: http://www.deewoo.org/?p=1047

Noen headere er tatt bort. Denne referreren kan leses inn med php:

$ref = $_SERVER['HTTP_REFERER'];
$string = "arpa.no";

if($ref) {
	if(strstr($refr,$string)) {

	}
	else {
		die("Hacking forsøk!");
	}
}

Her sjekkes det først om referrer eksisterer, for å ikke blokke ut de som har blank referrer. Deretter sjekkes det om domenet, fins i referreren. Hvis den ikke gjør det, drepes scriptet, og angrepet blir stoppet.

Et eksempel på et vanlig angrep
La oss si du er innlogget som admin på savio.no. Og idet du surfer på nettet, blir din nettleser utsatt for følgende kode:

<img src="http://www.savio.no/login/slettBruker.php?id=1">

Dette er hypotetisk.

Det som da vil skje er at din nettleser sender en forespørsel til savio.no, med beskjed om at bruker nummer 1 skal slettes. Dersom den som besøker koden, samtidig faktisk er innlogget som admin, vil admin brukeren bli slettet.

LES OGSÅ: Hva er egentlig XSS?

Grunnen til at dette skjer, er fordi nettleseren ikke kan vite at forespørselen kommer fra angriperen sitt domene, og ikke savio.no. Dermed sender den samtidig med alle cookies, som admin har forbundet med savio.no. Altså innloggingskakene.

Dersom savio har en slik referrer check jeg skrev lenger oppe, vil angrepet mislykkes.

Så hvordan omgår hackere slike sperrer?
Slike referrer checks kan omgåes med følgende kode:

<iframe width="1" height="1" src="javascript:document.write=%22<img src='

http://www.savio.no/admin/slettBruker?id=1'%22"></iframe>

Med å bruke inline javascript inni en iframe, blir referrern blank. Og dermed er referrer checken omgått.

Nettopp dette er grunnen til at mange sier at referrer checks er ubrukelige.

Løsningen?
Ved å bruke engangs tokens, kan slike csrf( cross site request forgery) angrep bli stoppet.

Del på Facebook
Del på Twitter
Legg til på Nettby









Dette innlegget ble skrevet på Wednesday, September 2nd, 2009. Og er lagret under PHP, Programmering, csrf, javascript, sikkerhet, xss. Skumma gjennom av 1905 stykker.

2 Responses to “Slik omgår hackere referrer checks”

  1. Robert on September 2nd, 2009 at 10:57 pm

    Fin lesing, keep it up :-)

  2. PolitiskSelvmord on January 20th, 2010 at 6:29 pm

    Flott artikkel! Jeg har aldri tenkt på dette sikkerhetshullet før! Kjekt å være klar over :)

Legg igjen en kommentar