In 2006 had ik enkele websites draaien onder PHP 4 met daarop Joomla. Joomla is een gratis te gebruiken CMS website, met ontzettend veel add-on functionaliteit waarmee je bijna alles kunt doen wat je wilt. Tot mijn verbazing werd ik regelmatig geconfronteerd met het feit dat er 1 of andere boodschap op de website stond dat mijn site gehackt was door een radicale groepering. Om er achter te komen hoe dit kon, en wie dit deed ben ik gestart met het plaatsen van additionele code op de site waarmee ik gegevens kon achterhalen die vervolgens achtergelaten werden als een tekst bericht in en secure plaats op de site.
In de code stond een verwijzing naar een directory die beschermd werd met een .HTaccess bestand. De code maakte een log file aan met daarin de volgende gegevens: IP-adres van de bezoeker, tijdstip geverifieerd aan de servertijd, tijdstip geverifieerd aan de cliënt tijd en eerst bezochte pagina.
Met behulp van het IP adres en het verschil in de twee opgeslagen tijden kon ik de locatie van de bezoeker snel achterhalen, en met de waarde eerstbezochte pagina kon ik achterhalen wanneer de site gehackt werd. Zodra de eerstbezochte pagina vervangen werd van index.php naar index.html wist ik dat de site er niet meer was.
Echter zag ik in de diverse logs van de websites dat de index.php niet veranderde van index.php naar index.html, maar dat deze werd vervangen van index.php naar een andere pagina. De daarop volgende pagina was dan inderdaad index.html.
Door het achterhalen van de locatie van de “hacker” kwam ik er achter dat deze zich in Nederland bevond. Door een lookup te doen op het IP adres kon ik vervolgens achterhalen welke internet provider hier achter zat.
Ik had nu dus een locatie en een IP-adres. De verandering op de website voorafgaand aan het daadwerkelijk omzetten van de index werd vooraf gegaan aan een MySQL injection script. Iets waar Joomla wel gevoelig voor is.
Graag wou ik erachter komen hoe deze SQL injection mogelijk was, omdat je daar een wachtwoord voor nodig hebt. Het wachtwoord maakt gebruik van MD5 technologie, waardoor wachtwoorden veranderen in een “onleesbaar” 32 karakters tellende HASH. De volgende stap was dus mijn websites beschermen, maar ook om de aanvaller te laten weten dat ik hem door had. Daar moest ik dus even goed over nadenken.
Toen kwam ik op het volgende idee. Ik maakte een duplicaat van de website, en gaf het IP-adres wat ik in de diverse logs had gevonden op in het .HTacces bestand. Door daar dan met behulp van een PHP script een reroutering plaats te laten vinden werd de “hacker” iedere keer dat hij op mijn websites iets probeerde doorgeleid naar een kopie van de website met daarachter een andere database, en kon ik veilig extra code meesturen. Die extra code creëerde een cookie op de pc van de aanvaller wat ik vervolgens op al mijn sites kon uitlezen. De aanvaller liet vervolgens een behoorlijke berg gegevens achter, en aan de hand daarvan kon ik achter heel veel informatie komen.
Uiteindelijk bleek het om een 16 jarige scholier te gaan die onder de zogenaamde groep Scriptkiddies valt. Scriptkiddies zijn meestal jongeren die op internet speuren naar scriptjes waarmee ze behoorlijk wat narigheid uithalen. Maar hoe is dit nu mogelijk en wat kun je eraan doen?
Het wordt mogelijk gemaakt door het feit dat het wachtwoord, weliswaar als “Hash” code, gewoon op de pagina’s staat. Door vervolgens op de website “view source” te klikken in het internet Explorer wordt de “HASH” code zichtbaar, en deze kan op diverse websites getest worden met behulp van de zogenaamde Rainbow techniek. De Rainbow techniek gaat uit van een database van meer dan 50.000.000 bekende woorden, een zogenaamde Dictionary, en de dus bekende 50.000.000 HASH codes. Deze database groeit dagelijks.
De resterende informatie zoals hostname van de server, meestal localhost, en de databasenaam staan gewoon in de code, en is dus als platte tekst leesbaar. Met behulp van de hostname, databasenaam en het gedecrypte wachtwoord kun je willekeurige SQL injections doen, en kun je dus een eigen admin account aanmaken met bijhorend wachtwoord. Vervolgens log je in op de site, als administrator, en kun je doen en laten wat je wilt.
Je kunt hier op diverse manieren wat aan doen, en de door mij gebruikte methode is nu dat ik een dubbele check uitvoer. Alle wachtwoorden worden met MD5 technologie omgezet in een HASH, en deze HAH word vervolgens met een dubbelcheck procedure nogmaals omgezet in een HASH. Deze tweede HASH staat in mijn PHP code, en is dus niet bekend in de zogenaamde Dictionary. Het kost wat tijd om dit in te bouwen, maar het levert wel een sterke beveiliging op, en sindsdien is geen enkele van mijn websites meer gehackt.
De hacker zelf aanpakken kan niet op basis van oog om oog, tand om tand, en aangifte doen heeft in de meeste gevallen ook geen zin. Simpelweg omdat de wet er niet duidelijk in is, en de politie niet weet wat ze met de aangifte moeten doen.
Meer dan een jaar na dit gebeuren vond ik een artikel op een nieuwssite waarin bekend gemaakt werd dat je HASH code kunt googlen. Met vermelding van een website.
Bij deze site geef je een eigen website wachtwoord op. (Let op de disclaimer onder aan de pagina) Druk op de knop GO, en je searchstring word gegenereerd. Kopieer de searchstring naar je browser, en je ziet meteen of je wachtwoord bekend is.
Password en wachtwoord leveren veel hits op, en je merkt dan ook meteen op dat heel veel websites als admin wachtwoord 1 van deze twee gebruiken. Ik voorspel dat we de komende tijd veel sites tegen gaan komen met de boodschap: Gehackt.
Een voorbeeld van een hack als bovenstaand beschreven is www.mil.be. Deze website is van het Belgische ministerie van defensie, en liet na de hack de onderstaande afbeelding zien: