Checklijst Joomla Veiligheid

Afdrukken PDF
Geschreven door Rutger op woensdag 05 november 2008 18:48, in: Veiligheid

Checklijst Joomla! Veiligheid
Geschreven door Rutger, woensdag, 22 oktober 2008 19:23
Deze handleiding is geen garantie dat u nooit gehacked zult worden, maar het maakt het zeker een stuk moeilijker.

Welkom in de wereld van Joomla!. Wat ongelooflijk belangrijk is, na de installatie van Joomla! is uw website en bestanden beveiligen tegen hackers. Ook bij Joomla! dat Open Source is, kan het wel eens voorkomen dat er een site gehacked wordt.


Het is gratis maar!

Laat uzelf niet verblinden door het gemak waarmee u Joomla! kunt installeren. Het onderhouden van een veilige, dynamische website op het grote mensen internet is immers niet eenvoudig. Toereikende veiligheid eist het continue bewaken en effort steken in de veiligheid.

Geen enkele manier is de juiste!

Door de enorme complexiteit van de huidige web- en internetsystemen, kunnen veiligheidslekken niet zomaar opgelost worden. Zeker niet door alleen maar een aantal keer te klikken. Er is geen op maat gemaakt programma of oplossing. U, of iemand die u vertrouwt moet genoeg leren over de infrastructuur van uw server of website om de juiste beslissingen te kunnen maken.

Ervaring is de sleutel!

Om de website zo goed mogelijk te beveiligen moet men simpelweg ervaring opdoen. Soms zijn dit harde, moeilijke lessen. Of leer zoveel mogelijk van anderen. Lezen, leren en proberen is de enige manier om deze leerschool te doorlopen.

Gehacked, en nu?

Ons forum raakt gevuld met berichten "Help, site gehacked!! wat nu?". Niet zo gek lang geleden was er een zwakke plek in een van de Joomla! versies. Heel vaak had de gehackte situatie voorkomen kunnen worden door de beheerders van de website om de simpele veilige handelingen uit te voeren. Als u dit document leest voordat uw site is gehacked kan ik u alleen maar feliciteren.

Aan de slag ermee

  1. Kunt u een dynamische, bereikbaar voor heel de wereld, database ondersteunde, interactieve, gebruikers-registreerde webserver 24 uur per dag beheren?
  2. Heeft u de tijd en middelen om te reageren om de overweldigende hoeveelheid veiligheidslekken?


Veiligheidupdates

Blijf geinformeerd over de veiligheidsupdates. Sindskort biedt Joomla!!Community een extra service aan om per e-mail op de hoogte te blijven van alles over Joomla!. Schrijf u daarvoor in op www.Joomlacommunity.eu.

Gebruik een (locale) test omgeving

Als u serieus bezig bent met Joomla! en dus ook proffesioneel, is dit een manier om met Joomla! om te gaan. Ontwikkel en test de site(s) (eventueel lokaal, in de zin van niet direct vanaf het internet bereikbaar). Dit is niet alleen goed voor uzelf, maar voorkomt ook online fouten.


Gebruik een acceptatie en productie omgeving

Zet de site pas na het ontwikkelen en testen online in een acceptatie omgeving om te controleren of alles ook online (op het internet) werkt. Stel de site pas daarna in een productie omgeving beschikbaar voor uw bezoekers.

Joomla! configureren

Installeer alleen officiele installaties van Joomla!. Check alle forums als u plugins en extra's wenst te gebruiken. Ben u niet zeker van een plugin? Gebruik hem dan niet. Voor u het weet heeft u een probleem.  Upgrade naar de laatste stabiele versie zodra u de kans heeft.

Verander de standaard administrator naam

Verander zo snel mogelijk de administrator naam naar een eigen gekozen naam na de installatie. Deze zeer eenvoudige handeling maakt het al een stuk lastiger om zomaar te raden naar een gebruikersnaam / wachtwoord combinatie. Hetzelfde geldt voor het admin wachtwoord, verander het onmiddellijk na de installatie en verander het daarna regelmatig.


Beveilig uw directories en bestanden

Draag zorg voor een betere beveiliging van je configuration.php door het in een andere map dan je root html map te plaatsen. Draag er dan zorg voor dat alle beschrijfbare mappen en bestanden ook buiten je publieke root worden geplaatst. Controleer ook de 3rd party extensions of deze paden hebben die naar een beschrijfbare map wijzen.

  1. verplaatst het bestand naar andere map en geeft het wellicht ook andere naam.
  2. maak een nieuw configuration.php bestand aan met daarin onderstaande code
  3. zorg ervoor dat deze nieuwe configuration.php niet schijfbaar is, zo kan Joomla! het bestand ook niet overschrijven.

Aanvulling configuration.php

<?php
require( dirname( __FILE__ ) . '/anderemap/anderenaam.php' );
?>

Let er wel op dat u in het vervolg aanpassingen aan de instellingen direct in het bestand moet doen en niet meer via de Joomla! backend.

Pas de map en bestandsrechten aan

Op het moment dat de site geconfigureerd is en stabiel draait pas dan de veiligheid aan op de mappen en bestanden. Zet de maprechten naar CHMOD 755 en de bestandrechten naar 644. Er is een speciale stap opgenomen binnen de Joomla! configuratie om dit in een keer te doen. Ga naar: Site -> Globale configuratie -> Server om alle rechten aan te passen. Test de 3rd party extensies en doorloop de code.

Verwijder bestanden / mappen / templates die u niet nodig hebt

Laat geen templates en bestanden achter die niet gebruikt worden. Na de installatie moet de installatie map altijd worden verwijderen. Hernoem deze map nu niet, verwijder hem echt.

Apache configuratie

Gebruik de Apache .htaccess

Voorkom de zeer typische exploit pogingen met de locale Apache .htaccess bestanden. Deze mogelijkheid bestaat echter niet op alle servers. Controleer samen met de hoster als u tegen problemen aanloopt. Door gebruik te maken van .htaccess kunt u de wat meer gevoelige mappen (bijv. administrator) beter beveiligen met wachtwoorden. Je kan ook de mappen zo beveiligen dat u op IP adres kan filteren. En let er ook op of er gebruik wordt gemaakt van PHP4, is dit zo, schakel dan als het mogelijk is naar PHP5.

MySQL configuratie

Beveilig de database

Zorg er voor dat de MySQL accounts opzet met beperkte rechten. De originele installatie van MySQL is niet veilig en goed opletten is hier de boodschap. Dit geldt natuurlijk alleen voor diegene die een eigen server hebben draaien. Controleer de handleidingen goed voor het toepassen van de juiste rechten.

PHP configuratie

Begrijpen hoe PHP werkt

Als u de in's- en out's wilt weten hoe u moet werken met de php.ini en hoe de PHP configuratie wordt opgebouwd moet u de officiele gids even lezen. Lees het volgende document maar eens aandachtig door. OfficiÎle lijst van php.ini Directives Dit is wel een Engelstalig document. Er staat ook een default php.ini bestand wat zeer uitgebreid behandeld wordt.

Gebruik PHP5

Op het moment worden PHP4 en PHP5 nog gebruikt. PHP4 is de oudere versie, waar geen veiligheids updates meer voor worden gemaakt. Meestal zijn ze beide wel te vinden op je server. Zodra u merkt dat uw hoster nog PHP4 gebruikt, neem dan contact met ze op, om te upgraden naar PHP5. 

Gebruik lokale php.ini bestanden

Op gedeelde servers kunt u het main.php bestand niet bewerken. Maar u kunt wel vaak aangepaste lokale php.ini bestanden toevoegen.  Als dit mag, kunt u het php.ini bestand kopieren naar elke sub-directory die aangepaste instellingen heeft.

Aantal belangrijke zaken die je in het oog moet houden

  1. Lokale php.ini bestanden worden aangeroepen als de server zo is ingesteld dat ze ook gebruikt worden. Hierbij moet u ook de php.ini in uw root html directory niet vergeten. U kunt dit bestand testen of deze bestanden uw site beinvloeden door een directory aan te geven in uw .ini.
  2. Lokale php.ini bestanden beinvloeden alleen .php bestanden die in dezelfde map staan, of de included() of required() tags hebben. Normaal gezien zijn er maar twee Joomla! mappen waar een php.ini bestand in zal zitten. Dat zijn de http_root (de naam kan natuurlijk anders zijn), waar de Joomla! Frontend index.php in staat. En de Joomla! administrator map, waar de Backend administrator index.php staat. Andere mappen die niet via het web worden aangeroepen hebben geen lokaal php.ini bestand nodig.
  3. Als er een php.ini bestand in elke map is, zal er waarschijnlijk een script geweest zijn die dit voor u heeft gedaan. Als dit niet de bedoeling was dan kunnen ze verwijderen worden. Hou alleen goed in de gaten, als ze verwijderd worden en er werkt ineens iets niet meer, dat ze terug gezet kunnen worden. Open dan ook dat .ini bestand eens, om te kijken waarom die nodig zou moeten zijn.


Gebruik de PHP disable_funtions

Gebruik de disable_functions om gevaarlijke PHP mogelijkheden uit te schakelen die niet nodig zijn voor de website. Hieronder is een normale set-up voor een Joomla! site:

Disable_functions = show_source, system, Shell_exec, passthru, exec, phpinfo, popen, proc_open


Gebruik de PHP open_basedir

Open_basedir zou aan moeten staan en juist ingesteld moeten worden. Dit commando beperkt het aantal bestanden dat met PHP geopend kan worden in de mappen boom. Dit commando wordt niet beinvloed als de Safe Mode aan of uit is.

De beperking die met open_basedir word gegeven is een zogenaamde prefix en geen map naam.

Dit betekent dat open_basedir = /dir/incl toegang geeft naar /dir/include en /dir/incls als deze bestaan.

Als men een beperking wilt opleggen aan de map, sluit dan het commando af met een slash /.

Bijvoorbeeld: open_basedir = /home/users/you/public_html.


Pas magic_quotes_gpc aan

Pas het magic_quotes_gpc commando aan als dat nodig is voor de site. Voor Joomla! 1.0 moet dit aan staan om slechte 3rd party extensions te beveiligen. Het veiligste is echter om magic_quotes_gpc op off te zetten en natuurlijk de 3rd party extensions te vermijden.

Joomla! 1.5 werkt gewoon, hoe dit ook gebruikt wordt.

Magic_quotes_gpc = 1


Werk niet met PHP safe_mode

Probeer safe_mode te vermijden. Deze werkbare maar niet complete oplossing voor een dieper gelegen probleem kan een vals gevoel van veiligheid geven. Op de officiele PHP site staat een uitleg voor dit probleem.

Safe_mode = 0


Werk niet met PHP register_globals

Het automatisch registeren van globale variabelen was waarschijnlijk een van de domste dingen die de PHP ontwikkelaars konden doen. Dit commando bepaald het registreren van EGPCS (Environment, GET, POST, Cookie, Server) variabelen als globale variabele waar ze onmiddellijk en zonder terughoudendheid beschikbaar worden voor alle PHP scripts. Op deze manier kunnen ze makkelijk de eigen variabele overschrijven als men niet op past. De ontwikkelaars hebben dit natuurlijk ook gezien en raden het gebruik dan ook af.

Mocht u nu op een server werken die register_globals voorschrijft, mag u zich zorgen maken. Ondanks het feit dat dit voor uw eigen site kunt uitzetten in uw lokale php.ini bestand geeft dit geen extra beveiliging omdat andere sites op deze server wel kwetsbaar voor aanvallen zijn. Op deze manier kan uw site dan toch aangevallen worden. Dus:

Register_globals = 0


Werk niet met PHP allow_url_fopen

Deze optie zet de URL-aware fopen wrappers aan die url-achtige objecten kan openen. Zoals normale bestanden. Standaard wrappers worden gebruikt om toegang te verlenen aan externe bestanden die gebruik maken van het ftp (file transfer protocol) of het http (hyper text transfer protocol). Sommige extensies zoals zlib kunnen ook wrappers registreren. Dit kan alleen aangegeven worden in de php.ini voor veiligheidsredenen.

Allow_url_fopen = 0


Site administratie en wachtwoord beheer.

Gebruik goed opgezette wachtwoorden

Verander de wachtwoorden regelmatig en hou ze echt uniek. Gebruik een combinatie van letters, nummers of symbolen. Vermijd ten alle tijden een enkele naam of woorden die u vind in een woordenboek. Gebruik geen namen van uzelf, familie, huisdieren, initialen met geboortedatum etc. Gebruik eventueel een wachtwoord generator.

Gebruik een wachtwoord schema

De meeste gebruikers hebben doorgaans niet meer als 3 niveau's van wachwoorden nodig, webmaster / beheerders vaak niet meer als 5. Elk niveau moet dan op geen enkele manier een relatie hebben met een ander niveau. Dit met name op gebruikersnamen en wachtwoorden gebied.

Hou een strak website back-up schema aan

Vertrouw nooit enkel op de backup van anderen, zoals uw hoster bijvoorbeeld. Ga eens zitten en denk eens rustig na over hoe u wat wilt gaan back-uppen. Veel providers geven trouwens in hun algemene bepaling ook aan, dat u niet moet vertrouwen op hun back-up's. U kunt gebruik maken van een Joomla! extensie, maar wat als joomla! zelf al problemen geeft? Daarom kiezen velen ook voor een ftp client om een backup te maken naar een lokale PC.

Hou inbraakpogingen in het oog

VPS en dedicated server gebruikers gebruiken vaak TripWire of SAMHAIN. Deze programmaís bieden een zeer uitgebreide vorm van het controleren en rapporteren van bestanden. Deze programma's kunnen goed verborgen worden geinstalleerd en zichzelf ook beschermen tegen een serieuze infiltratie van de webserver of website. Wat wel belangrijk is om te weten dat gebruikers die op een gedeelde server werken (shared server) deze techniek niet kunnen gebruiken.

Gebruik geautomatiseerde IDS programma's (Intrusion Detection System)

Gebruik deze programma's om aanvallen te blokkeren en een alarm te triggeren als er zeer foute HTTP aanvragen binnenkomen.

Maar gebruik ook, manuele IDS

Hoe? Heel simpel, de website / server houdt zogenaamde 'raw logs' bij. Deze logs laten elke aanvraag op uw site / server zien. Lees ze gewoon door en scan op activiteiten die u vreemd voorkomen. Baseer u niet alleen op samenvattingen en mooie grafieken.


Blijf up-to-date met security patches en upgrades

Heeft u een eigen server met software? Check dan regelmatig op vernieuwde software en test deze. Dit geldt ook voor de Joomla updates die u via Joomla!Community krijgt.


Ben pro-actief in het zoeken naar website zwakheden

Zoek op google of in forums over eventuele posts over zwakheden in de gebruikte software. En zoek dan ook op of er al iets over bekend is.

Ben pro-actief naar het zoeken van zogenaamde SQL injections zwakheden

Gebruik software zoals Paros Proxy om automatisch SQL injection testen uit te voeren op uw eigen PHP software of bestanden. Kijk ook eens op de volgende zoek strings:

  • Google Search
  • Wikipedia Article


Gebruik zogenaamde Shell scripts om automatisch veiligheidstaken uit te voeren

Zoek eens op de forums op:

  • Joomla! Version Checking
  • Joomla! Component/Module Version Checking
  • Exploit Checking


Deze Shell scripts geven dan onmiddellijk aan of er een nieuwe versie is van zaken.


Blijf lezen en leren over beveiligingssoftware

Er is geen totaal oplossing om een site of server te beschermen tegen alles. Als dat er zou zijn, zou dat zo hard aangevallen worden dat het waarschijnlijk al een zwakke plek is.

Probeer niet opnieuw het wiel uit te vinden

Huur af en toe eens een veiligheidsexpert in om een interne en externe audit te doen op de netwerk / server / websites. Verwacht absoluut niet dat u alle gaten kan dichten en denk er altijd aan dat er blinde vlekken zijn. Bepaal met de expert of de risico's te groot of acceptable zijn.

Denk goed na!