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.



































Fin lesing, keep it up
Flott artikkel! Jeg har aldri tenkt på dette sikkerhetshullet før! Kjekt å være klar over