XML-RPC maar even uitgezet

Eén van mijn overwegingen om (tot recent) weg te blijven van WordPress was de angst voor kwetsbaarheden. Roelant.net is een behoorlijk oud domein en wordt dagelijks door duizenden bots gevonden met zowel goede als minder goede intenties. Zelfs toen ik helemaal niets publiceerde, kon ik rekenen op honderden “bezoeken” per dag. Dusdanig dat ik me al langere tijd genoodzaakt zag om er een Cloudflare-filter tussen te hangen.1Ondanks de privacy-bezwaren – “ze zijn te groot” – en dat ik me er bewust van ben dat niet iedereen Cloudflare een tof bedrijf meer vindt sinds hun terughoudendheid om doxing sites de dienstverlening te ontzeggen. Vooralsnog is er geen beter alternatief dat ik me kan veroorloven en vind ik dat ze in de “good vs. evil” balans vooralsnog in hun voordeel uitvalt. Dat is mooi zichtbaar door het verschil voor en na dat ik weer actief iets publiceerde hier (vanaf 10 juni) en ernaar verwijs:

Grafiek toont het recente aantal requests via cloudflare van de laatste 30 dagen. Voor de periode van begin tot 9 juli is een gemiddelde van 700 tot 1500 verzoeken per dag te zien. Voor de periode van 9 juni tot vandaag is schommelt het aantal tussen gemiddeld 5000 tot 1000 verzoeken, met een uitschieter naar 15000.
Verzoeken op roelant.net de afgelopen 30 dagen

Zelfs zonder actieve WordPress installatie zag ik in het verleden in de server logs al pogingen om dingen met /wp-admin te doen. Dus is het niet heel verbazend dat zodra die installatie er wèl is, het al snel “storm” loopt:

Een grafiek die toont dat het aantal mislukte (malafide) aanmeldpogingen over de afgelopen dagen hand over hand toeneemt. Op het hoogtepunt zijn er 700 malafide aanmeldpogingen per dag. e

En ondanks dat mijn hoster claimt dat ze verzoeken voor XML RPC zelf afvangen, zie ik dat een substantieel deel van de dingen die limit login attempts afvangt, juist daarop binnenkomen:

Een tabel met tijdelijk buitengesloten IP-adressen wegens buitensporig veel inlogpogingen. 

De tabel toont in de heading welke gegevens die bevat: datum, IP, "geprobeerd in te loggen als" en gateway. 

De tabel bevat 16 regels, van 02:07 's nachts tot 6:54 's morgens, verschillende IP's, inlogpogingen als "admin" en "wwwadmin" met erachter tussen haakjes respectievelijk 1 of 2 lockouts, en de gateway is in 10 gevallen wp_xsmlrpc en de overige gevallen wp_login.
Recente IP-lockouts wegens buitensporig aantal mislukte inlogpogingen deze morgen

En even testen bleek dat xmlrpc.php op mijn domein het inderdaad nog prima deed. Een korte zoekopdracht leverde al snel op dat je tegenwoordig prima zonder kunt.2Van Kinsta had ik tot recent trouwens nog nooit gehoord, maar sinds ik Marcel Bootsman op Mastodon volg (die werkt daar), heb ik begrepen dat ze onder andere in WordPress-hosting gespecialiseerd zijn, dus ik ga er vanuit dat ze weten waar ze het over hebben. 😉 De instructies die je daar vindt om via Apache het verkeer af te vangen3Kan natuurlijk ook via een plugin, maar als dat niet nodig is, doe ik dat liever niet. Met elke extra plugin die je installeert introduceer je potentieel weer kwetsbaarheden. Bovendien moeten de verzoeken toch nog eerst verwerkt worden door PHP dus genereert dat meer load, in plaats van dat de verzoeken door Apache direct met een 403 Forbidden worden afgewezen. om daar zijn echter achterhaald, de methode met deny,allow herken ik van vroegah, maar werkte niet meer toen ik het testen. Gelukkig vond ik al snel op Stackoverflow dat het vanaf Apache 2.4 anders werkt:

<Files "xmlrpc.php">  
  Require all denied
</Files>

In plaats van:

<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

Doe er je voordeel mee. 😉

Footnotes

  • 1
    Ondanks de privacy-bezwaren – “ze zijn te groot” – en dat ik me er bewust van ben dat niet iedereen Cloudflare een tof bedrijf meer vindt sinds hun terughoudendheid om doxing sites de dienstverlening te ontzeggen. Vooralsnog is er geen beter alternatief dat ik me kan veroorloven en vind ik dat ze in de “good vs. evil” balans vooralsnog in hun voordeel uitvalt.
  • 2
    Van Kinsta had ik tot recent trouwens nog nooit gehoord, maar sinds ik Marcel Bootsman op Mastodon volg (die werkt daar), heb ik begrepen dat ze onder andere in WordPress-hosting gespecialiseerd zijn, dus ik ga er vanuit dat ze weten waar ze het over hebben. 😉
  • 3
    Kan natuurlijk ook via een plugin, maar als dat niet nodig is, doe ik dat liever niet. Met elke extra plugin die je installeert introduceer je potentieel weer kwetsbaarheden. Bovendien moeten de verzoeken toch nog eerst verwerkt worden door PHP dus genereert dat meer load, in plaats van dat de verzoeken door Apache direct met een 403 Forbidden worden afgewezen.
Categories: