phpMyAdmin is waarschijnlijk de meestgebruikte — volgens velen de beste — management tool voor MySQL databases. Hierdoor wordt deze tool meestal standaard geleverd bij een hostingpakket of bij controlpanels als Plesk, DirectAdmin of CPanel. Wanneer er een lek in PMA ontstaat, dan zijn kwaadwillenden er als de kippen bij met hun pogingen om in te breken op databases op verschillende servers.
Hackers gebruiken de setup die bij schone downloads van PMA aanwezig is om op die manier toegang tot databases te verkrijgen of ze gebruiken simpelweg brute-forcing, waar phpMyAdmin helaas geen beveiliging tegen biedt. Het uiteindelijke doel moge voor de hand liggen:
Security Trough Obscurity
Een veelgebruikte methode om PMA te beveiligen is door de URL aan te passen naar iets alternatiefs als "sqladmin" of iets totaal willekeurigs. Helaas heeft dit hooguit als effect dat je de hacker vertraagt in zijn pogingen. Deze manier van beveiligen wordt vaak "Security Trough Obscurity" genoemd, kortom schijnveiligheid.
Daarom onderstaand een aantal stappen die je kunt zetten om phpMyAdmin wel juist te beveiligen:
Beveiligingsmaatregelen
1. Installeer phpMyAdmin vanaf de packagemanager
Download niet zelf een kopie van phpMyAdmin maar gebruik de versie die aangeboden wordt via de standaard packagemanager. Wellicht heb je dan niet perse de laatste versie, maar wel een versie die de laatste beveiligingspatches heeft. Met APT — de meestgebruikte packagemanager — kun je PMA als volgt installeren:
2. Een sterk wachtwoord dat je periodiek veranderd
Hoe voor de hand liggend ook, maar kies altijd een zeer sterk wachtwoord. Wachtwoorden die onder de koppen "Strong Passwords" of "Ft. Knox Passwords" staan op de Random Key Generator-site zijn sterk genoeg.
Pas vervolgens je wachtwoord ook vaak genoeg aan, eens in de drie maanden bijvoorbeeld (is geen industry standard of iets dergelijks). Een jaartal in je wachtwoord gebruiken is een absolute no-go en als je vervolgens het jaartal elk jaar aanpast ben je gewoon af.
3. Apache Access Control
Deze methode zorgt dat je alleen bepaalde ip-adressen (of hostnames) kunt toestaan op PMA. Alle 'onbekende' ip-adressen worden dan standaard geblokkeerd. De exacte syntax verschilt tussen Apache 2.2 en Apache2.4, maar spreekt verder voor zich. Onderstaand een simpel voorbeeld voor beide versies, welke je aan het bestand /etc/phpmyadmin/apache.conf
kunt toevoegen:
Gebruik in het geval van Apache2.4 liever niet de Allow host
methode gezien deze relatief makkelijk te spoofen is. Houdt tevens de IP-adressen die je toevoegt beperkt en gebruik vooral geen ranges, gezien dit de beveiliging alleen maar verzwakt.
4. Vermeid phpMyAdmin's 'HTTP'-authenticatie, gebruik 'Cookie'-authenticatie
Wanneer je een recente versie van PMA gebruikt dan staat standaard de 'cookie authentication' aan en hoef je aan te passen. Wanneer je echter een wat oudere versie hebt kan het zijn dat de 'http authentication' ingeschakeld is, welke helaas zeer onveilig is omdat deze gebruik maakt van het verouderde basic access authentication-mechanisme van HTTP.
Om er echt zeker van te zijn dat jouw configuratie juist is, zorg je dat in het bestand /etc/phpmyadmin/config.inc.php
de volgende instellingen terug te vinden zijn:
5. Maak gebruik van HTTPS
Zorg dat phpmyadmin alleen toegankelijk is via een SSL verbinding. Je kunt hier natuurlijk een certificaat voor kopen, een gratis LetsEncrypt certificaat gebruiken maar een self-signed certificaat is het gemakkelijkst en werkt even goed. De enige uitzondering is dat je een keer een uitzondering moet toevoegen aan je webbrowser.
In onderstaand voorbeeld gebruik ik het standaard snakeoil-certificaat dat geïnstalleerd is op bijna alle Linux distributies. Mocht dit niet het geval zijn dan kun je het certificaat genereren:
Eventueel kun je ook handmatig een certificaat genereren:
Vervolgens dien je de SSL-module in Apache in te schakelen, indien dat nog niet gebeurd is:
Vervolgens kun je een default-host met het standaard certificaat toevoegen. Maak hiervoor een nieuw bestand in /etc/apache2/sites-available/000-defaults-ssl.conf
met de volgende inhoud:
Pas bovenstaand eventueel de paden en het admin adres aan en schakel vervolgens de site in:
Controleer eventueel of de andere sites nog werken. Door deze instelling wordt voor alle standaard SSL verbindingen hetzelfde certificaat gebruikt, dit kun je later eventueel per VirtualHost
nog aanpassen.
Als laatste zorg je dat in /etc/phpmyadmin/config.inc.php
— of een in een nieuw php-bestand in de map /etc/phpmyadmin/conf.d
als deze map bestaat — waardoor phpMyAdmin http redirect naar https:
Conclusie
Bovenstaand worden slechts een aantal methoden genoemd om phpMyAdmin goed te beveiligen, er bestaan zeker meer mogelijkheden om je beveiliging sterker of anders te realiseren. Bijvoorbeeld door phpMyAdmin op een niet standaard poort te installeren — met een VirtualHost in Apache — en alleen jouw ip-adres toe te staan via een iptables firewall, echter vereist deze methode relatief veel configuratie.
Genoemde punten zijn gebaseerd op standaarden die meestal al op servers aanwezig zijn waar phpMyAdmin op geïnstalleerd is. Daarnaast geven deze punten een beveiliging die ruimvoldoende is voor de meeste configuraties.
Zo lang systemen in ontwikkeling zijn, ontwikkelen kwaadwillenden zich mee. Hierdoor dient elke beveiliging continu bijgehouden te worden en wordt een beveiliging altijd minder sterk na verloop van tijd. Blijf daarom op de hoogte van veranderingen en probeer waar mogelijk constant verbeteringen in te bouwen. Wanneer een server bijvoorbeeld zeer gevoelige informatie bevat is het simpelweg de beste oplossing om phpMyAdmin in zijn geheel te vermijden.
Gebruikte bronnen
- Een goed wachtwoord
- phpMyAdmin authentication mechanismes
- phpMyAdmin over SSL