Crowbar - foto: Richard DudleyBij een routine controle ontdekte ik op woensdagmiddag 19 november dat de website van een klant enkele vreemde nieuwe bestanden bevatte. Na enkele grondige scans werd mijn vrees bevestigd: de website van mijn klant (op Joomla 1.5.26 met veiligheidspatch) was "gehacked" (eigenlijk zou ik liever het woord "gecracked" gebruiken, maar in de volksmond spreekt men over "gehacked").

Nadat ik de hele website had geanalyseerd op veiligheidsproblemen, opgeschoond, klant & hosting provider geinformeerd, kreeg ik een tweede onaangename verrassing: Ook een van mijn eigen Joomla 3.3.6 websites (hier verder genoemd: voorbeeld.nl) was gehacked.

Uit mijn analyse blijkt dat het doel van de hackers was om backlinks te genereren naar een externe website waar farmaceutische medicijnen zoals Viagra & Cialis worden verkocht.

/includes/xmlrpc.php backdoor

Op een nog onbekende manier is iemand er in geslaagd om op 19 oktober 2014 een backdoor script op de server te plaatsen: /includes/xmlrpc.php
De bestandsdatum van 07 september 2014 23:15:01 bleek door de hacker aangepast. Uit analyse van mijn back-ups bleek dat het bestand op 18 oktober 2014 nog niet aanwezig was, maar op 19 oktober 2014 wel. Helaas ontdekte ik de hack 1 dag te laat en was de het webserver access logbestand van 19 oktober niet meer beschikbaar.

Via het /includes/xmlrpc.php backdoor script hebben hackers op 9 november enkele nieuwe bestanden op mijn site geplaatst en enkele bestanden gewijzigd.

/.htaccess aanpassing

Het server configuratie override bestand .htaccess in de root van mijn website zorgt voor mooie website adressen.
Op 09 november 11:45:48 hebben de hackers aan het begin van het bestand enkele regels code toegevoegd:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing|spaumbot) [OR]
RewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing)
RewriteRule ^([^/]*)/$ /main.php?p=$1 [L]

Deze code zorgt ervoor dat al het verkeer dat via zoekmachines op mijn site komt, automatisch wordt doorgestuurd naar een bestand main.php

/main.php

Dit /main.php bestand is op 9 november in de root van mijn website geplaatst, en door hackers gecamoufleerd door het een oudere bestandsdatum (10 juli 2013 11:25:27) te geven. De hackers hebben de inhoud van het script verborgen door het te coderen volgens "base64". Ze hebben het op een vernuftige manier gedaan zodat het bestand niet wordt gevonden als je bestanden scant op "base64_decode". De code bevat:

preg_replace("/.*/e",
"\x65\x76\x61\x6C\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'

dat eigenlijk gecamoufleerd eval(base64_decode is, waardoor er eigenlijk staat:

preg_replace("/.*/e",
"eval(base64_decode('

Dit main.php bestand laad spam content van externe website en toont het op het eigen domein onder www.voorbeeld.nl/spam-url

/sitemap.xml

Op 9 november 11:50:42 werd er een nieuw bestand in de root van mijn website geplaatst: /sitemap.xml
Door middel van zo'n sitemap.xml bestand kunnen zoekmachines gemakkelijk zien welke pagina's ze moeten indexeren. Mijn nieuwe sitemap bevatte 590 spam links:
983-website-hack-via-xmlrpc-backdoor-script-sitemapxml
en nog 588 andere spam links.

En op 10 november kwam Google langs, werden de 590 spam links opgevraagd en werd de externe spam content op mijn site voorbeeld.nl geindexeerd.

Nog meer verdachte bestanden

Behalve de hierboven beschreven bestanden, werden er nog meer backdoor bestanden op mijn site geplaatst:

  • /libraries/joomla/session/cache.php 19/08/2013 14:45:46 (door hackers aangepaste datum!)
  • /administrator/fs-login.phtml 09/11/2014 11:45:48
  • /language/comnon.phtml 09/11/2014 11:45:48
  • /layouts/fedit.php 09/11/2014 11:45:48
  • /libraries/fedit.php 09/11/2014 11:45:48
  • /logs/comnon.php 09/11/2014 11:45:48
  • /plugins/fs-login.phtml 09/11/2014 11:45:48
  • /tmp/Iicense.php 09/11/2014 11:45:48

Dit zijn (waarschijnlijk reserve) backdoor scripts.

Hoe te controleren?

  1. zoek via google naar:
    site:www.jouwwebsite.nl viagra
    Hopelijk zie je daar geen resultaten...

  2. kijk met FTP op jouw server naar:
    /sitemap.xml -> is dit bestand aanwezig en bevat het spam links?
    /.htaccess -> is jouw eigen .htaccess aangepast?
    /main.php -> bevat het bestand vreemde, onleesbare code?
    /includes/xmlrpc.php -> bevat het bestand vreemde, onleesbare code?

  3. gebruik SSH en scan naar verdachte bestanden met behulp van:
    983-website-hack-via-xmlrpc-backdoor-script-grep

  4. gebruik python scripts als NeoPI om de website te scannen op verdachte bestanden:
    https://github.com/Neohapsis/NeoPI 


Oplossen van de hack

  1. backup van de huidige situatie gemaakt (bestanden + database), bijv mbt Akeeba Backup
  2. de toegevoegde redirect code in .htaccess verwijderd
  3. alle verdachte bestanden verwijderd
  4. nogmaals controle op alle bestanden dmv doorzoeken op vreemde code & mbv NeoPI
  5. eigen XMap sitemap opnieuw bij Google aangemeld

Niet alleen Joomla sites

Na mijn analyse & herstel van de website heb ik meteen contact met mijn hosting provider gehad over de hack. Ik heb mijn analyse met ze gedeeld zodat ze hun server verder kunnen beveiligen. Mijn hosting provider heeft hun servers gescand op het voorkomen van de verdachte /main.php en helaas verschillende gehackte websites aangetroffen: Joomla, WordPress en Drupal websites.

Geschreven door Peter Martin (pe7er).

14 reacties

EasyDiscuss Avatar
Bouwman
Bedankt voor het hele komplete verhaal Peter. Ik was toevallig ook met 1 site bezig die gehackt was, terwijl ik die keurig geupdate had. Bij deze site was er alleen sprake van een xmlrpc.php bestandje (de rest dus niet).
EasyDiscuss Avatar
marco007
Peter,<br />Bedankt voor je uitleg. Ik heb rond oktober hetzelfde gehad met een 2.5.27 website.<br />Ik kreeg via google en mijn provider de melding van de hack en de provider heeft uit voorzorg de website off-line gehaald.<br />Probleem lijkt nu verholpen, maar met je "handleiding" erbij zal ik de bestanden nog een keer nalopen.<br />Groet,<br />Marco
EasyDiscuss Avatar
pe7er
Na mijn blogpost heb nog een website van een andere klant opgeschoond. Het betrof een oude Joomla 1.5.26, voorzien van de security patch.<br />Op die website was het /includes/xmlrpc.php backdoorscript geinstalleerd.<br /><br />Maar ook een xmlrpc.php "backdoor component":<br />/administrator/components/com_xmlrpc/install.xml -> install script<br />/components/com_xmlrpc/xmlrpc.php -> backdoor script<br /><br />Net als appletree hierboven beschreef, vond ik daar gelukkig geen andere gehackte bestanden. De crackers hadden het /includes/xmlrpc.php backdoorscript nog niet gebruikt om de website van spam scripts te voorzien (zoals ik beschreef in mijn blogpost).
EasyDiscuss Avatar
vanamersfo
Ja, inderdaad. Bedankt Peter voor je verhaal en manier om het op te lossen.<br /><br />Vandaag ben ook ik bezig geweest met het ruimen van de rommel die deze onvriendelijke gasten hebben gemaakt. Heel vervelend. Maar goed...<br /><br />Heeft iemand een idee hoe deze hack tot stand is gekomen? Mijn site was net als marco007 en appletree gewoon up to date 2.5.17 en volgens mij waren ook de componenten up to date. <br />Een vriend vertelde me dat er mogelijk iets mis zou kunnen zijn bij de webhost (De site die het betrof staat bij byte.nl <br />Misschien kunnen jullie dit bevestigen?)<br />Het valt me namelijk op dat er maar een paar (NL) sites getroffen lijken te zijn.
EasyDiscuss Avatar
nathan
Tnx Peter! Goed verhaal. Het lek zelf is nog een raadsel begrijp ik? Die zie ik natuurlijk graag gedicht. Bij mij ook Byte. Iemand die deze hack herkent en niet bij Byte zit? Geen beschuldigingen behalve naar de hacker toe uiteraard... ;-) <br /><br />Een andere aanpak: welke libraries delen Joomla!, Drupal en Wordpress? In ieder geval zijn het allen PHP gebaseerde CMS'en (php lek?). Iemand die nog bij z'n access log kan en zo een 'entry' point kan achterhalen van de hacker?
EasyDiscuss Avatar
psikkes
Ook hier 1 site met hetzelfde probleem. de versie is Joomla 3.3.6 ! Ook gehost via byte.nl<br /><br />PS: Bedankt inderdaad voor de uiteenzetting
EasyDiscuss Avatar
pe7er
Het probleem beperkt zich niet tot een hosting provider, het speelt ook op andere servers bij andere hosting bedrijven.<br /><br />Nog een tip om de spam pagina's sneller uit zoekmachines te krijgen is om voor de spam links een "410 Gone error" te genereren. Dat kun je doen door de volgende code in de .htaccess op te nemen:<br /><br />RewriteRule \S*viagra+\S* - [G]<br />RewriteRule \S*cialis+\S* - [G]<br />RewriteRule \S*pharmacy+\S* - [G]<br />RewriteRule \S*propecia+\S* - [G]<br />RewriteRule \S*drugs+\S* - [G]
EasyDiscuss Avatar
frankavan
Dank Peter, door jouw artikel heb ik alles snel op kunnen lossen.<br />Het is me overigens een raadsel 'hoe ze binnen kwamen'.<br />Ook ik zit bij Byte en gebruik Joomla 3.36
EasyDiscuss Avatar
Lex Reurings
'gebruik SSH en scan naar verdachte bestanden met behulp van:'<br />Hoe doe ik dat, Peter?
EasyDiscuss Avatar
pe7er
Om SSH te kunnen gebruiken dient jouw hosting provider SSH op de server te ondersteunen. (Voor mij is bij keuze voor webhosting "SSH toegang tot server" een van de criteria).<br /><br />Met SSH kun je via de command line (op Linux/ Mac OSX: Terminal en op Windows via PuTTy) inloggen op de server en daar commando's uitvoeren. Bijv met behulp van het commando "grep" naar bepaalde stukjes tekst in tekstbestanden zoeken.<br /><br />Meer info nodig? Zoek met google op bijv "SSH tutorial" of "SSH tutorial grep".
EasyDiscuss Avatar
slibbe
Dank je wel. Dit is voor mij helaas dagelijkse praktijk en al langer dan een maand, maar dan wel uitsluitend met 1.5 sites.<br />Ik heb voor alle sites geschedulede scripts die checken op nieuwe files. Dat gaat ook bij mij mis als de datum/timestamp van de geplaatste/aangepaste bestanden wordt aangepast.<br />Ik sta op het punt om hetzij op basis van hashes te gaan checken, hetzij per site de wijzigingen bij te houden in git, dan wel een combinatie hiervan.
EasyDiscuss Avatar
wimstrik
Peter bedankt voor je uitgebreide uitleg. Dankzij jouw snelle handelen een site kunnen herstellen voordat er daadwerkelijk spam verstuurd was.
EasyDiscuss Avatar
Rondeb
Jullie kunnen ook onderstaand command line ook gebruiken via ssh (putty)werkte bij mij! <br /><br />find \( -name \*.jpg -or -name \*.png -or -name \*.jpeg -or -name \*.gif -or -name \*.bmp \) -type f -exec file {} \; | grep 'PHP'
EasyDiscuss Avatar
nathan
En vergeet je DB niet te 'vervangen' / op te schonen! Bij mij tref ik in ieder geval 3 nieuwe accounts aan gerelateerd aan de hack.<br /><br />@Slibbe: combi is handig idd. GIT is erg handig voor mij nu, maar niet toereikend. <br />@Rondeb: je zoekopdracht legt een andere hack bloot meen ik, niet perse deze. Ik ben geen uitvoerbare 'afbeeldingen' tegen gekomen.

Reageer

1000 Resterende tekens