Een paar leerzaam dagen gehad, nadat Google (Google is Great!) me waarschuwde dat Google vermoedde dat er vanaf mijn digitale speeltuin malware verspreid werd. Dat Krijnen.Com gehacked was! Het is een tamelijk technisch verhaal, aan te raden voor wie zelf een site draait, die kan er zijn voordeel mee doen. Wie zich beperkt tot FaceBook en Google +, of een ander sociaal netwerk: zolang u goed op u wachtwoorden past, krijgt u geen last van dit soort problemen.
Opmerkelijk: mijn host Verio.Com is dat niet opgevallen, terwijl Verio zich qua security graag profileert als een Kafkaiaans digitaal Fort Knox. Ter frustratie van deze klant, want daardoor kan ik nooit iets snel vernieuwen. Nieuwere releases van Movable Type, mijn nog steeds favoriete publishing system, eisen nieuwere releases van Perl, van MySQL, en van PHP. Maar Verio staat die meestal pas een jaar of twee tot drie na het verschijnen van nieuwe releases toe. Tot op zekere hoogte te billijken, want meestal duurt het wel een jaar of wat en een zooi patches voordat de nieuwe security holes die onvermijdelijk in nieuwe releases zitten er weer uitgevlooid zijn.
Als gebruiker zit je daardoor, zoals Amerikanen dat zo mooi zeggen, ‘between the devil and the deep blue sea’.
Ik wil graag upgraden naar de laatste Movable Type, al is het maar uit nieuwsgierigheid. Maar ik begrijp ook iets van de policy van Verio, dus ik oefen al vijftien jaar lang twee tot drie jaar geduld uit. Haastige spoed, zelden goed, komt goed.
Goed, komt er zo’n melding van Google. Netjes ontvangen omdat onderdeel van mijn account een abonnement op meldingen van nieuwe APIs is, omdat ik nog veel meer met Google doe, en omdat ik via de Webmaster Tools een aantal sites aangemeld heb. Daar letten ze op en dat doen ze goed.
Wat ze ook meteen doen is iedere bezoeker die via Chrome mijn site bezoekt een onheilspellend stoplicht voorschotelen. ‘Opgepast: het is hier niet veilig. Ga terug, of op eigen risico verder. Wij hebben u gewaarschuwd.’ Zoiets: “This site may harm your computer“
Erger: iedere bezoeker van mijn TechBlog op de website van de krant waar ik werk, krijgt die onheilspellende boodschap ook voor ogen. Omdat mijn Techblog Interface vanaf mijn server in een iFrame op de portal van de krant opgehoest werd. Bezoekers die via Safari arriveerden werden ook gewaarschuwd, ik denk omdat Apple die lijst van Google krijgt. Of omdat Apple zelf een scan van klanten draait, en omdat ik een iDisk heb val ik daaronder. Microsoft Internet Explorer? Geen idee, die gebruik ik nooit.
Maar eens even op mijn kop gekrabd en een minuut of tien goed nagedacht.
Zou het mogelijk zijn dat de boel via een user interface van PHP, ImageFolio, de admin van Movable Type, MySQL of de beheerskant van de server via passwords gekraakt is?
Zou kunnen, maar het leek me me sterk, gezien mijn tamelijk paranoide password policy. Nergens hetzelfde, overal tussen de 50 en de 64 willekeurige karakters. Niet eens passphrases, geserveerd vanuit 1Password, de kluis met wachtwoorden opgesloten achter een ander password van 64 karakters.
Ook al geen geen passphrase, maar zoiets:
1enwUwsJzogMnJEVkpSztkky2+34avQsWq/4GuWvQrms7vRgQeXVftGkdSLUxck1
Denk daarom niet via een password.
Wat dan?
Google gaf me in eerste instantie op zaterdagmiddag alleen de onheilstijding an sich, zonder verdere bijzonderheden.
Die bijzonderheden kun je wel aanvragen, dus dat gedaan, en ook op http://www.stopbadware.org/ een verzoek om een analyse ingevuld.
Intussen zelf op zoek naar gekke dingen op de server.
Daar staan na 15 jaar ongeveer 1500 artikelen en een drieduizend foto’s. Verder tientallen scripts en een paar duizend kleine files. Ieder artikel, iedere foto zit ook nog in een cache en een back-up, iedere foto verwijst naar een kleine file met stats. Meer dan honderd scripts handelen verzoeken af of communiceren op de een of andere manier met de database of de boze buitenwereld.
Om te beginnen alles passwords veranderd.
Maar: totaal zinloze actie als de hacker een tool achter gelaten heeft die meeleest. Het is hetzelfde als na een inbraak alle sloten van je huis vervangen, terwijl de inbreker zich nog op zolder of in de kelder verborgen heeft.
Toch maar gedaan, in de wetenschap dat voor een gehackte server maar een soelaas afdoende is: foto’s en tekst stuk voor stuk downloaden, en daarna de server (laten) formatteren en opnieuw opbouwen.
Maar: dat kan altijd nog, eerst maar een even wat anders proberen.
Zaterdagavond en nacht tot 02:30 paar tooltjes losgelaten en intussen directory voor directory, file voor file, zitten zoeken naar iets geks. Text files, php en cgi scripts, log files, er moet ergens iets verborgen zijn. Zoeken op afwijkende grootte, op files die recent veranderd zijn, in en logfiles.
Geluk bij de overlast: probleem niet gevonden, maar wel iets wat een ander groot probleem had kunnen worden was. Er zit iets of iemand te vervelen in de zoekfunctie van de fotoalbums in ImageFolio. Daarop worden van buitenaf honderden vragen per minuut op afgevuurd. Aan de aard van de vragen – technisch Swahili/Abacadabra – te zien een poging om via een buffer overflow MySQL te hacken.
Maar had volgens mij niets met de waarschuwing en de blokkade van Google te maken, dacht ik.
Ach, wat geeft het ook? ImageFolio was best een mooie applicatie toen ik het 12 jaar geleden opbouwde. Maar de tijden zijn veranderd. Nu heb ik alles al op Picasa, Google + en de iDisk staan, dus definitief afscheid genomen van ImageFolio. Alles verwijderd, met een paar honderd megabyte aan caches en logfiles, die die andere hacker aan het genereren was. Weg ermee.
Na een kort nachtje – waarom droomde ik van gekraakte computers? – om 05:30 verder gegaan met zoeken. Google Chrome bleef intussen voor de poort van krijnen.com/interface liggen, en voor bndestem.nl/interface. Opgepast! Besmette server! Niet naar binnen gaan!
Tegen de middag via Google Webmaster Tools een waarschuwing voor een redirect java script:
Een loos alert, waar ik niets mee op schoot. Het is een valide redirect. Het zorgde ervoor dat een artikel, waarop iemand via een zoekmachine beland is, geopend werd in het iFrame op bndestem.nl. Niet meer dan een waarschuwing van Google dat de redirect voerde naar iets waar Google voor gewaarschuwd heeft.
Verder zoeken dus maar.
Een uur later presenteert de Google via de Webmaster Tools de verlossende tip:
De boosdoener was een Java Script waar ik Tweets mee pushte. Daar heb ik een borrel op genomen, want dat maakte het allemaal veel minder erg.
Die simpele regel code zorgde ervoor dat nieuwe artikelen op DutchCowboys en op nog een paar andere techpagina’s vanaf de RSS feeds in een kadertje netjes gepresenteerd werd. Het heeft een jaar of twee perfect gewerkt, al werd het al een jaar niet meer ondersteund.
Het was dus de beta.publitweet.com die gekraakt was, en niet mijn speeltuin. Inplaats van rss feeds parsen was dat script bezig met redirecten naar beonce.ru en dat was een Russische malware server.
Het enige wat ik nog moest doen doen is door mijn files en templates vlooien, en alle verwijzingen naar dat script uit de templates (en uit deMySQL tabellen) verwijderen.
Daarna de database optimaliseren, en de statische content vanuit MovableType opnieuw laten bouwen.
Tot slot, na de grote schoonmaak: aan Google en aan stopbadware.org een review aanvragen.
Een paar uur later kreeg ontving ik via mail de zegen en de absolutie van Google en StopBadWare:
URL: http://krijnen.com/interface/
Congratulations! This URL is no longer reported as badware by any of StopBadware’s data providers. We have therefore closed this review and updated our Badware Website Clearinghouse. Any warnings about the URL that are based on our providers’ data should be removed shortly.
Moraal van het verhaal: nooit meer Java scripts aanroepen op een externe site die niet honderd procent betrouwbaar is. Ik heb het vervangen een script op Twitter.com dat mijn tweets in een iFrame op het TechBlog neerzet. Dat durf ik nog wel, want als Twitter gehacked wordt, dan horen we dat wel binnen een minuut. De developer plugins en API’s van Facebook: idem dito, gewoon doen.
De TechBlog (Interface) heb ik uit het iFrame op BN DeStem gehaald, omdat me dat ook te veel gedoe opleverde. Ik heb er een logo van BN DeStem ingebakken, en vind het wel netjes zo. Het enige verschil voor u is de url. Die is nu krijnen.com/interface i.p.v. bndestem.nl/interface
We zijn nu een week verder, en beta.publitweet.com is nog steeds besmet, terwijl beonce.ru uit de lucht is. Saillant: als je op eigen risico doorklikt naar publitweet, maken ze daar nog steeds reclame voor hun SPAM-free Twitter Content. Ze waarschuwen kan niet want wie op Contact klikt komt terecht op de Russische site en die is dood.