Ga naar inhoud

Platformen (WordPress, Drupal) zonder agent

Niet alles wat een organisatie heeft, draait op een server waar je een agent op zet: een WordPress-shop bij een shared hoster, een Drupal-portaal bij een agency. Een platform in monsys is zo’n site. Hij rapporteert zelf naar de hub via Monsys Connect, een plugin die alleen uitgaand praat. De hub verbindt nooit met de site: behalve om het eigendomsbewijs te lezen.

  • Inventaris: core-, PHP- en databaseversie, elke plugin en elk thema met versie, actief/inactief en of er een update is. Ze verschijnen ook in Inventaris → Componenten (scope platform), dus “waar draait plugin X” werkt over servers, containers én externe sites.
  • Kwetsbaarheden: componenten worden gematcht tegen NVD (CPE, versie-bewust, editie-bewust) en: als je een Wordfence Intelligence-key hebt: tegen een gespiegelde Wordfence-feed. KEV-vlaggen komen van CISA.
  • Hygiëne-checklist: debug-modus, XML-RPC, bestandsbewerking in admin, standaard admin-gebruiker, HTTPS, cron, automatische updates, aantal beheerders.
  • Integriteit: core-bestanden vergeleken met de officiële wordpress.org-checksums (dagelijks). Afwijkingen zijn een klassiek web-shell-signaal.
  • Gebeurtenissen: geaggregeerde mislukte logins (per IP en gebruikersnaam) en elke account die beheerder wordt (direct gemeld).
  • Stilte-detectie: geen rapport in 1 uur → kritieke melding, zoals bij een agent. Komt de site terug, dan sluit de melding vanzelf.

Meldingen beginnen altijd met [domein], zodat een push op je telefoon leesbaar is zonder te openen.

  1. Inventaris → Platformen → Platform toevoegen. Kies WordPress, vul een naam en het domein in (alleen de hostnaam, bv. shop.voorbeeld.be).
  2. Kopieer de API-key (msk_…) en het verificatietoken (mvt_…). De key wordt maar één keer getoond; je kan hem later wel roteren.
  3. Installeer en activeer de plugin Monsys Connect op de site. Plak key en token onder Instellingen → Monsys Connect en sla op.
  4. Klik in monsys op Verifiëren. De plugin publiceert het token op https://<domein>/.well-known/monsys-verify.txt (en als fallback op /?monsys_verify=1); de hub haalt het op met dezelfde SSRF-bescherming als de pentest-laag.
  5. Bij het eerste rapport springt de status op actief.

Een site die DISABLE_WP_CRON gebruikt, heeft een externe cron nodig die de WP-Cron-events uitvoert (de aanbevolen productie-opstelling). De plugin herkent dat en meldt cron dan als “in orde”.

  • De API-key is write-only: het enige dat erachter zit, is het ingest-endpoint. Een gelekte key kan hoogstens data voor die ene site posten: nooit iets lezen, nooit een andere site aanraken. Roteer hem bij twijfel (TOTP vereist).
  • Alleen de hash van de key staat in de hub. Het prefix (msk_3f9a…) is wat je in de UI ziet.
  • De plugin stuurt nooit inhoud, bezoekersdata, wachtwoorden of ruwe logregels.
  • Acties (hieronder) krijgen alleen geverifieerde platformen.

Een editor kan, met TOTP, een actie aanvragen op een component: plugin/thema updaten, plugin deactiveren of activeren. De aanvraag wordt Ed25519-gesigneerd en meegegeven in het antwoord op de eerstvolgende heartbeat van de plugin (≤ 5 min). De plugin luistert dus nog steeds nergens naar.

Elke actie verloopt zo:

  1. Pre-checks: vrije schijfruimte, schrijfrechten, geen onderhoudsmodus, directe bestandstoegang.
  2. Backup: zip van de component in wp-content/uploads/monsys-backups/ (afgeschermd, laatste tien bewaard).
  3. Toepassen via de WordPress-upgrader.
  4. Post-checks: voorpagina, admin-ajax en, als WooCommerce aanwezig is, de shop moeten antwoorden zonder fatale fout.
  5. Faalt een check, dan herstelt de plugin de backup automatisch en meldt teruggedraaid. Een actie die niet door de pre-checks komt, verandert niets (mislukt).

Alleen omkeerbare acties bestaan. Core-upgrades, verwijderen en acties op de plugin zelf zijn bewust niet mogelijk. Het verdict komt terug met de volledige check-trail en staat in de actielijst; een geslaagde actie is een stille ✅, een teruggedraaide of mislukte een ⚠️.

Wordfence Intelligence is gratis, ook commercieel, maar vereist sinds 2026 een account en API-key. Zet WORDFENCE_API_KEY in de hub-omgeving; de hub spiegelt de scanner-feed één keer per uur en elke tenant leest de spiegel. Bij elke match tonen we de verplichte attributie (copyright, licentie, link naar het record, MITRE-vermelding bij CVE’s).