Security
AI-worm in een IoT-printer: drie firewallregels die houden
Een vrijdagavond-page over een babbelzieke kantoorprinter werd een wormjacht. Wat we vonden, wat de printer vervolgens deed, en drie firewallregels die de pivot stoppen.

Vrijdag, 21:47. Een MSP-partner stuurde ons een Sentinel-alert door: een Konica Minolta multifunctional in een advocatenkantoor met 40 mensen opende elke 90 seconden uitgaande TLS-verbindingen naar een host die geen van ons herkende. De printer hoort, ooit, één ding naar het internet te sturen: een firmware-check call naar de fabrikant. Tegen middernacht zat er op de print spooler iets dat sterk leek op de voorhoede van een AI-gedreven worm.
De nacht die volgde werd een nette case study in waarom printers nog steeds de zachte onderbuik van het kantoornetwerk zijn, en wat een worm tegenhoudt zodra die geland is. Hieronder de walkthrough, de drie firewallregels die het incident indamden, en een notitie over wat er verschuift als de worm die de pivot doet, gekoppeld is aan een klein language model.
Wat de printer eigenlijk deed
De eerste twintig minuten waren weinig glamoureus. We trokken de uitgaande flow van de printer uit de pfSense-box, resolvden het bestemmings-IP, en kregen een vers Let's Encrypt-certificaat op een .top-domein dat negen dagen eerder geregistreerd was. De TLS SNI matchte. De user agent op de zeldzame HTTP-fallback was een standaard curl/8.5.0. Dat sloot de fabrikant uit.
De printer was gecompromitteerd via zijn embedded web admin. De standaard inloggegevens waren jaren geleden veranderd, maar het apparaat exposed een ongepatchte IPP-endpoint op TCP/631 naar het kantoor-LAN, en een file-upload-bug in de spool handler liet elke LAN-side caller een bestand in de print spooler droppen met execute-bits. De keten is deprimerend bekend: er staan tientallen CVE-listed IPP-issues bij MFP-fabrikanten over de afgelopen twee jaar die hetzelfde patroon volgen. Vanaf daar draaide een kleine ELF-binary als de gebruiker van de print daemon, beaconde elke 90 seconden naar zijn C2, en wachtte.
Waar het op wachtte, hadden we tegen 02:00 uit. Elke beacon kreeg een kleine JSON-instructie terug. De meeste waren no-ops. Twee niet. Eén vroeg de printer om zijn eigen /24 te scannen op hosts die op TCP/445 antwoordden. De ander vroeg om een authenticated SMB-verbinding op te zetten met een lijst gebruikersnamen die de printer eerder had gecached uit de Active Directory print-queue-metadata die hij in plain text bewaarde.
Dat is de pivot. De printer is het bruggenhoofd. Active Directory is de prijs.
Waarom een printer het perfecte pivot point is
Als je een attack surface voor een aanvaller zou ontwerpen, zou je een printer bouwen. Hij draait een volledige Linux-userland met een kernel uit ongeveer 2018. Hij heeft credentials voor de file server (voor scan-to-folder), credentials voor de mail server (voor scan-to-email), en een service account in Active Directory (voor secure print release). Hij staat op het kantoor-LAN. Hij wordt zelden gepatcht. Hij wordt vrijwel nooit gemonitord.
En dat is al een decennium zo. De Pwn2Own-wedstrijd van het Zero Day Initiative heeft sinds 2021 een eigen printerklasse, en elk jaar landen deelnemers binnen de tijdslimiet pre-auth RCE op de grote merken. De ZDI-writeups zijn de moeite waard als je je vertrouwen in firmware kwijt wil. De HP-, Lexmark-, Canon- en Konica-vloten leveren elk meerdere high-severity advisories per jaar; een ruwe zoekopdracht op NVD naar "printer" geeft honderden resultaten terug, het overgrote deel van na 2022.
De endpoint protection-markt weet dit. Vrijwel niemand levert een agent die op een printer draait. EDR-dekking op de kantoorvloer stopt bij de werkstations en de file server. Je MFP is, security-technisch, een onbewaakte Linux-box die credentials bewaart voor de systemen die je EDR betaald wordt om te beschermen. Hetzelfde geldt voor de IP-camera bij de receptie, de voice gateway in de comms-ruimte, en de badge-reader-controller in het keukenplafond. Geen EDR. Allemaal credentials voor iets wat ze over het LAN bereiken.
Niets hiervan is nieuw. Wat wel nieuw is, is dat per 2026 de C2 aan de andere kant van die beacon geen persoon achter een bureau hoeft te zijn die het volgende commando kiest. Het kan een klein model zijn met een doel, een tool-use loop, en een geheugen van wat werkte op de laatste vijftig netwerken waarop het landde.
Het AI-wormtijdperk is er, in stilte
Onderzoekers van Cornell Tech en de Technion publiceerden begin 2024 een proof-of-concept genaamd Morris II, een worm die zich verspreidde via GenAI-aangedreven e-mailassistenten door adversarial prompts mee te smokkelen in hun eigen output. De 2026-variant die wij zagen, doet iets simpelers en gemeners: hij laat het apparaat dom en stopt het brein in een klein model aan de C2-kant. De implant op de printer was 84 KB. De worm-logica zat niet in de binary. Hij zat in het gesprek tussen de printer en de C2, in JSON, in het Engels.
De printer draaide het voetvolk. Het model draaide het brein. De bandbreedte van een beacon-plus-instructie was onder 2 KB per round trip. We hadden het maanden kunnen missen als de EDR het bestemmingsdomein niet als nieuw had gemarkeerd. Wat je zou moeten dwarszitten, is dat dezelfde architectuur werkt op elke andere onbeheerde Linux-box op je kantoorvloer. Het model kan het niets schelen op welke hij landt.
Als je nog steeds denkt aan printers als apparaten die "met de print server praten", zit je één CVE verwijderd van een slechte week. Behandel ze als untrusted Linux-boxen die toevallig printen.
De drie firewallregels die houden
Wij hebben de gewoonte, als we het netwerk van een klant auditen, om exact drie regels voor de printer-VLAN op te schrijven en dan te kijken hoeveel er al staan. Vrijwel nooit alle drie. Soms geen enkele.
Hier zijn ze, in iptables-vorm, zodat ze meer lezen als een instructie dan als een vendor-screenshot. Pas de syntax aan op je edge: pfSense, OPNsense, Fortigate, Meraki, wat je ook hebt. Het gaat niet om de syntax. Het gaat om de drie verkeersrichtingen.
Regel 1: printers initiëren geen egress, behalve naar de fabrikant
# Allow firmware checks to the vendor's published API host
iptables -A FORWARD -s 10.50.20.0/24 -d konica.api.example.com \
-p tcp --dport 443 -j ACCEPT
# Allow DNS and NTP to the internal resolver only
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.10.53 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.10.53 -p udp --dport 123 -j ACCEPT
# Drop everything else outbound
iptables -A FORWARD -s 10.50.20.0/24 -j DROP
De C2-beacon die we vingen, zou met deze regel op de eerste hop gestorven zijn. De printer heeft nooit iets te zoeken op Let's Encrypt-fronted .top-domeinen. Default-deny egress op de printer-VLAN maakt van het apparaat een fles. Wat erop landt, blijft erop. Dat de worm HTTPS gebruikt, doet er niet toe; de regel zit op het IP en de poort, niet op de payload.
Regel 2: printers kunnen geen east-west initiëren, behalve naar de print server
# Allow the printer VLAN to reach ONLY the print server on the spool port
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.10.25 \
-p tcp --dport 9100 -j ACCEPT
# Block all other lateral traffic from printers to internal subnets
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.10.0/24 -j DROP
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.30.0/24 -j DROP
iptables -A FORWARD -s 10.50.20.0/24 -d 10.50.40.0/24 -j DROP
Dit is de regel die de SMB-scan tegenhoudt. De printer probeerde een host in 10.50.x.x te vinden die op 445 antwoordde. Met east-west deny ingesteld levert de scan niets op, en heeft de worm nergens om naartoe te pivoteren. De print server is de enige toegestane buur, en alleen op de spool-poort. Als je vloot scan-to-folder of scan-to-email gebruikt, voeg dan de file server en mail relay toe als named exceptions op de specifieke poorten die ze daadwerkelijk nodig hebben. Twee extra regels. Niet het hele subnet.
Regel 3: werkstations en servers initiëren geen verbindingen terug naar printers
# Allow only the print server to push jobs and status queries to printers
iptables -A FORWARD -s 10.50.10.25 -d 10.50.20.0/24 -p tcp --dport 9100 -j ACCEPT
iptables -A FORWARD -s 10.50.10.25 -d 10.50.20.0/24 -p tcp --dport 631 -j ACCEPT
# Block everything else from internal hosts toward printers
iptables -A FORWARD -d 10.50.20.0/24 -j DROP
Dit is de regel die mensen vergeten. Als een worm de andere kant op loopt, bijvoorbeeld vanuit een gecompromitteerd werkstation op zoek naar printer-firmware om als persistence cache te backdooren, is de enige host met een pad erin de print server. Dat is één box om te harden, geen veertig. Het killt ook het standaard reconnaissance-patroon waarbij een aanvaller die op een werkstation is geland, het hele printer-subnet pingt om in kaart te brengen wat er staat.
Drie regels. Twee voorkomen dat de printer als pivot wordt gebruikt. De derde voorkomt dat de printer als persistence cache wordt gebruikt. Samen hadden ze het incident gereduceerd tot "apparaat beacont naar C2, faalt, geeft op". Het onderzoekslog zou eruit hebben gezien alsof er niets gebeurd was.
Wat de agent op de C2 daadwerkelijk doet
Het is de moeite waard precies te zijn over de rol van het language model in deze aanval, want de security-pers neigt ertoe het te overdrijven. Het model doet geen zero-day discovery. Het schrijft geen shellcode. Het doet waar modellen goed in zijn: een gestructureerde beschrijving van een onbekende omgeving lezen, de meest bruikbare volgende actie kiezen uit een kort menu, en over runs heen leren welke menu-items renderen op netwerken die op de jouwe lijken.
De printer rapporteert, in plain text, wat hij ziet: open poorten bij buren, response banners, gecachte credentials, de inhoud van /etc/passwd als hij die kan lezen. Het model kiest een van pakweg dertig voorgekookte subroutines: scan_subnet, try_smb_login, exfil_file, drop_persistence. De keuzes zijn saai. Wat veranderd is, is dat er geen menselijke latency meer in de loop zit. De pivot van foothold naar lateral movement kostte een aanvaller vroeger dagen. Met een model aan het stuur kost het minuten.
Dit is waarom firewall-posture meer telt, niet minder, in het AI-wormtijdperk. Detectievensters worden kleiner. De verdediging die houdt, is de verdediging die helemaal geen detectie nodig heeft.
Hoe een audit van vijf minuten eruitziet
Je hebt geen SIEM nodig om te weten of je blootstaat. Pak de printer-VLAN bij je grootste kantoor en draai drie commando's.
# 1. From a non-print-server workstation: can you reach printers on risky ports?
nmap -sS -p 80,443,445,631,9100 10.50.20.0/24
# 2. From the printer (SSH or device debug shell): can it reach the internet?
curl -m 5 -o /dev/null -w "%{http_code}\n" https://cloudflare.com
# 3. From the printer: can it reach a non-print-server host on SMB?
nc -zv -w 3 10.50.10.40 445
Als het eerste commando ergens open poorten teruggeeft buiten de richting van de print server, ontbreekt regel 3. Als het tweede 200 teruggeeft, ontbreekt regel 1. Als het derde verbindt, ontbreekt regel 2. Vijf minuten werk en je weet exact hoeveel exposure je hebt.
Slot
De Konica waar we mee begonnen, werd uit het rack gehaald, geflasht, en teruggezet op een VLAN met alle drie de regels. De klant betaalde een factuur voor die nacht. Een herhaling is uitgebleven. Het interessante is dat de regels niets kostten: hun bestaande pfSense kon alle drie vanaf dag één, en de dag-één-configuratie was "allow any any" omdat dat is wat de quick-start-guide van de fabrikant produceert. De fix was een configuratiewijziging, geen inkooporder.
Toen we vorig kwartaal de network triage agent voor een van onze MSP-klanten bouwden, liepen we steeds tegen hetzelfde aan: het model is snel met het vlaggen van afwijkende flows, maar traag in het schrijven van de firewallregel die ze daadwerkelijk indamt. We sloten af door de agent uit te leveren met een library aan pre-gevalideerde regelfragmenten, gesorteerd per apparaatklasse, zodat de mens op piket binnen een minuut kon lezen, sanity-checken en plakken. Printers waren entry één in die library.
Pak vanmiddag het luidruchtigste apparaat op je netwerk. Draai de drie commando's. Kijk hoeveel van de drie regels je al hebt staan.
Kern
Een printer is een untrusted Linux-box op je LAN. Drie firewallregels op het VLAN maken van de favoriete pivot van een worm een doodlopende weg.
FAQ
Wat is een AI-worm, in begrijpelijke taal?
Een klein programma dat op een apparaat landt en aan een language model vraagt wat de volgende zet is. Het model kiest het doel, de exploit en de volgende pivot. De implant blijft minuscuul omdat de hersenen op de C2 zitten.
Kan een printer echt bij Active Directory?
Ja. De meeste kantoor-MFP's bewaren een service account zodat secure-print release werkt, en ze cachen user metadata uit de print queue. Een aanvaller die LAN-side code op de printer landt, erft vaak allebei.
Is VLAN-segmentatie alleen genoeg?
Nee. Een VLAN zonder expliciete regels is niet meer dan een label. Je hebt ook default-deny egress nodig, east-west blocks, en een regel die beperkt wie verbindingen terug naar het printer-subnet kan initiëren.
Hoe vaak moet ik deze regels opnieuw auditen?
Per kwartaal is een redelijke basis, plus elke keer dat je een nieuwe printer toevoegt of de print server wijzigt. De drie-commando-check aan het eind van deze post is voldoende tussen formele audits door.
Breken deze regels legitieme functies zoals scan-to-email?
Niet als je ze goed scopet. Scan-to-email en scan-to-folder zijn in de meeste vloten server-initiated relaties, dus de mail- en file-servers toevoegen als named exceptions op regel 2 houdt de workflow in leven.