Service Minimalisatie en Attack Surface Reductie
Het minimaliseren van actieve services en daemons is een fundamenteel principe van Linux hardening. Elke actieve service vertegenwoordigt een potentieel aanvalsvector, zelfs wanneer deze service geen kritieke functionaliteit levert. Nederlandse overheidsorganisaties moeten daarom een zero-tolerance beleid hanteren voor onnodige services op productiesystemen.
De eerste stap in service minimalisatie is het inventariseren van alle actieve services op een nieuw geïnstalleerde Linux server. Systemd-gebaseerde distributies gebruiken het systeemctl commando om actieve services te identificeren, terwijl oudere distributies init-scripts gebruiken. Een grondige analyse moet per service bepalen of deze daadwerkelijk nodig is voor de server functie. Bijvoorbeeld, een database server heeft geen webserver nodig, en een applicatieserver zonder GUI hoeft geen desktop environment services te draaien.
Het uitschakelen van onnodige services gebeurt in meerdere stappen. Eerst worden services gestopt om direct de actieve aanvalsruimte te reduceren. Vervolgens worden services disabled om te voorkomen dat ze automatisch opstarten bij herstart. Ten slotte worden service packages volledig verwijderd waar mogelijk, zodat zelfs toekomstige updates deze services niet kunnen herinstalleren. Deze gelaagde aanpak zorgt ervoor dat services niet per ongeluk weer worden geactiveerd.
CIS Benchmarks specificeren per distributie welke services standaard moeten worden uitgeschakeld. Veelvoorkomende voorbeelden zijn telnet, FTP, HTTP en SNMP services die in veel omgevingen niet nodig zijn en die bekend staan om hun beveiligingsproblemen. Moderne alternatieven zoals SSH voor telnet en SFTP voor FTP bieden betere beveiliging en moeten de voorkeur krijgen wanneer remote toegang nodig is.
Service minimalisatie heeft een directe impact op de beveiligingspostuur van een server. Minder actieve services betekent minder kwetsbaarheden die kunnen worden uitgebuit, minder configuratiecomplexiteit om te beheren, en minder log data om te analyseren. Bovendien verbetert het de prestatie omdat minder resources worden gebruikt door onnodige services, wat bijdraagt aan een efficiëntere operationele omgeving.
Voor Nederlandse overheidsorganisaties is service minimalisatie niet alleen een technische best practice, maar ook een compliance vereiste. BIO-normen stellen dat organisaties alleen services moeten activeren die nodig zijn voor bedrijfsdoeleinden, en dat alle actieve services moeten worden gedocumenteerd en regelmatig gecontroleerd. Dit betekent dat service minimalisatie niet alleen bij installatie plaatsvindt, maar ook tijdens periodieke beveiligingsaudits wordt geëvalueerd en bijgewerkt.
SSH Hardening en Toegangsbeheer
Secure Shell (SSH) is het primaire mechanisme voor remote beheer van Linux servers in Nederlandse overheidsorganisaties. Onjuist geconfigureerde SSH services vormen echter een kritieke beveiligingsrisico omdat ze directe toegang bieden tot het systeem. SSH hardening is daarom een essentieel onderdeel van elke Linux server configuratie.
De meest fundamentele SSH hardening maatregel is het uitschakelen van wachtwoordgebaseerde authenticatie ten gunste van public key authenticatie. Wachtwoordauthenticatie is kwetsbaar voor brute force aanvallen, terwijl public key authenticatie cryptografisch sterk is en niet gevoelig voor dictionary aanvallen. Organisaties moeten SSH key pairs genereren voor alle beheerders en deze keys beheren via een gecentraliseerd key management systeem. De private keys moeten nooit worden gedeeld en moeten worden beschermd met sterke passphrases.
SSH configuratie moet worden aangepast om kwetsbare cryptografische algoritmen en protocollen uit te schakelen. Oude SSH versies zoals SSHv1 zijn volledig onveilig en mogen nooit worden gebruikt. Modern SSH configuratiebestanden moeten alleen sterke cipher suites toestaan en zwakke algoritmen zoals MD5, SHA1, en CBC mode ciphers uitschakelen. De Ciphers, MACs, en KexAlgorithms directives in sshd_config moeten worden geconfigureerd om alleen moderne, veilige opties te gebruiken.
Root login via SSH moet altijd worden uitgeschakeld, ongeacht of wachtwoord- of key-gebaseerde authenticatie wordt gebruikt. Beheerders moeten inloggen als normale gebruikers en vervolgens sudo gebruiken voor privileged operaties. Deze aanpak verhoogt de auditabiliteit en reduceert de kans dat een gecompromitteerde root account directe systeemtoegang biedt. Het PermitRootLogin directive moet expliciet worden ingesteld op 'no' in de SSH configuratie.
Port forwarding en X11 forwarding moeten worden geëvalueerd op basis van operationele behoeften. In veel omgevingen zijn deze features niet nodig en moeten worden uitgeschakeld om de aanvalsruimte te minimaliseren. AllowTcpForwarding en X11Forwarding directives kunnen worden gebruikt om deze functionaliteit te controleren. Voor organisaties die deze features nodig hebben, moet het gebruik worden gelogd en gecontroleerd.
SSH toegang moet worden beperkt tot specifieke IP-adressen of netwerken waar mogelijk. Dit kan worden bereikt via firewall regels of via de sshd_config AllowUsers en DenyUsers directives. Voor Nederlandse overheidsorganisaties is het gebruikelijk dat beheerders alleen toegang hebben vanaf beveiligde netwerken zoals beheernetwerken of VPN verbindingen. Dit principe van network segmentation reduceert de blootstelling van SSH services aan het internet.
Login timeouts en connection limits moeten worden geconfigureerd om brute force aanvallen te beperken. MaxAuthTries beperkt het aantal gefaalde authenticatiepogingen per verbinding, terwijl MaxStartups beperkt het aantal gelijktijdige onauthenticated verbindingen. ClientAliveInterval en ClientAliveCountMax configureren automatische timeout voor inactieve verbindingen. Deze maatregelen maken het moeilijker voor aanvallers om systematisch wachtwoorden te proberen of resources te consumeren met denial-of-service aanvallen.
Uitgebreide logging van SSH activiteiten is essentieel voor detectie en forensische analyse. Verbose logging moet worden ingeschakeld om alle authenticatiepogingen te loggen, inclusief geslaagde en gefaalde pogingen. Logbestanden moeten worden verzameld in een gecentraliseerd SIEM systeem waar anomalie detectie kan worden uitgevoerd. Ongewone toegangspatronen, zoals verbindingen vanaf nieuwe locaties of op ongebruikelijke tijden, moeten automatisch worden geïdentificeerd en gealert.
Bestandssysteembeveiliging en Toegangsrechten
Bestandssysteembeveiliging is een kritiek aspect van Linux hardening omdat het bepaalt wie toegang heeft tot welke bestanden en directories. Onjuiste permissies kunnen leiden tot ongeautoriseerde toegang tot gevoelige data of tot privilege escalation wanneer beheerdersbestanden toegankelijk zijn voor gewone gebruikers.
Het Linux permissie systeem is gebaseerd op drie basisklassen: eigenaar (owner), groep (group), en anderen (others). Elke klasse kan drie soorten permissies hebben: lezen (read), schrijven (write), en uitvoeren (execute). Deze permissies worden numeriek weergegeven via octale notatie of symbolisch via letter codes. De umask waarde bepaalt de standaard permissies voor nieuw aangemaakte bestanden en directories, en moet worden geconfigureerd om over-permissive standaarden te voorkomen.
Sensitive bestanden en directories vereisen strikte permissies. Configuratiebestanden in /etc moeten bijvoorbeeld niet wereldwijd leesbaar zijn wanneer ze wachtwoorden of geheimen bevatten. Cryptografische keys en certificaten moeten beperkt zijn tot de eigenaar met minimale toegang voor anderen. Logbestanden kunnen gevoelige informatie bevatten en moeten daarom niet wereldwijd toegankelijk zijn. CIS Benchmarks specificeren minimale permissies voor veelvoorkomende configuratiebestanden en directories.
Setuid en setgid executables zijn een specifiek beveiligingsrisico omdat ze programma's in staat stellen om te draaien met verhoogde privileges. Onnodige setuid/setgid bits moeten worden verwijderd, en alle setuid/setgid executables moeten regelmatig worden gecontroleerd op kwetsbaarheden. Het vinden van setuid executables kan worden gedaan via het find commando, en de resultaten moeten worden gevalideerd tegen een whitelist van legitieme setuid programs.
World-writable directories zijn gevaarlijk omdat ze iedereen in staat stellen om bestanden te creëren of te wijzigen, wat kan leiden tot privilege escalation of malware installatie. World-writable directories moeten worden geïdentificeerd en geëvalueerd. Wanneer wereldwijde schrijfrechten niet nodig zijn, moeten deze worden verwijderd. Voor directories die wereldwijde schrijfrechten nodig hebben, zoals /tmp, moeten extra beveiligingsmaatregelen worden toegepast zoals de nosuid, nodev, en noexec mount opties.
Filesystem mount opties spelen een belangrijke rol in beveiliging. De /tmp en /var/tmp directories moeten worden gemount met nosuid, nodev, en noexec om te voorkomen dat executables worden uitgevoerd vanuit deze directories en om privilege escalation te voorkomen. De /home directory partition moet nosuid en nodev hebben om te voorkomen dat gebruikers device files of setuid executables kunnen creëren. De /boot directory moet read-only worden gemount waar mogelijk om te voorkomen dat boot-level malware wordt geïnstalleerd.
Extended attributes zoals file capabilities bieden fijnmazigere controle dan traditionele setuid executables. Linux capabilities splitsen root privileges op in kleinere, specifieke privileges. Een applicatie kan bijvoorbeeld NET_BIND_SERVICE capability hebben om te binden aan privileged poorten zonder volledige root toegang. Het gebruik van capabilities in plaats van setuid vermindert de aanvalsruimte omdat programma's alleen de minimale privileges krijgen die ze nodig hebben.
Automated compliance scanning moet regelmatig worden uitgevoerd om bestandssysteem permissies te valideren. Tools zoals AIDE (Advanced Intrusion Detection Environment) of Tripwire kunnen baseline snapshots maken van bestandssysteem permissies en wijzigingen detecteren. Wanneer ongeautoriseerde wijzigingen worden gedetecteerd, moeten deze onmiddellijk worden onderzocht. Deze monitoring is essentieel voor het handhaven van beveiligingsconfiguraties na de initiële hardening.
Voor Nederlandse overheidsorganisaties moeten bestandssysteem permissies worden gedocumenteerd en gecontroleerd als onderdeel van regelmatige security audits. Het implementeren van least privilege principes op bestandssysteemniveau is een vereiste voor BIO-naleving en helpt organisaties te beschermen tegen zowel externe aanvallen als insider threats. Automatisering van permissie controles via configuration management tools zoals Ansible of Puppet zorgt ervoor dat beveiligingsconfiguraties consistent blijven over alle servers in de omgeving.
Netwerkbeveiliging en Firewall Configuratie
Netwerkbeveiliging is essentieel voor Linux servers omdat netwerkverbindingen de primaire vector zijn voor aanvallen. Onbeveiligde netwerkservices kunnen worden gescand, geëxploiteerd, en gebruikt als entry points voor verdere penetratie in de organisatie. Daarom moeten alle Linux servers worden geconfigureerd met host-based firewalls die ongeautoriseerde netwerktoegang blokkeren.
Linux firewalls zijn traditioneel geïmplementeerd via iptables, maar moderne distributies zijn overgestapt naar nftables als opvolger. Beide systemen werken op kernel niveau en kunnen zeer fijnmazige netwerkcontroles implementeren. Het belangrijkste principe is default deny: alle inkomende verbindingen worden standaard geblokkeerd, en alleen expliciet geautoriseerde services worden toegestaan.
Firewall regels moeten worden geconfigureerd volgens het principe van least privilege op netwerkniveau. Alleen de minimale set aan netwerkservices die nodig zijn voor de server functie moeten worden toegestaan. Bijvoorbeeld, een database server heeft alleen database poorten nodig en geen HTTP of FTP services. Een webserver heeft alleen HTTP/HTTPS poorten nodig en geen database poorten. Deze aanpak minimaliseert de netwerk aanvalsruimte aanzienlijk.
Voor Nederlandse overheidsorganisaties is het gebruikelijk om firewalls te configureren via management tools die consistentie waarborgen over alle servers. Firewall configuratie moet worden gedocumenteerd en version controlled, zodat wijzigingen kunnen worden getracked en gevalideerd. Automatisering via configuration management tools zorgt ervoor dat firewall regels correct worden toegepast en niet handmatig kunnen worden gewijzigd zonder goedkeuring.
DDoS bescherming op host niveau kan worden geïmplementeerd via rate limiting in firewall regels. Connection rate limiting beperkt het aantal nieuwe verbindingen per seconde vanaf een enkel IP-adres, wat helpt tegen SYN flood aanvallen. Packet rate limiting beperkt het totale aantal pakketten dat wordt geaccepteerd, wat helpt tegen volumetrische DDoS aanvallen. Deze maatregelen zijn complementair aan netwerk-level DDoS bescherming maar bieden een extra verdedigingslaag.
Ingress filtering moet worden geconfigureerd om spoofed source IP-adressen te blokkeren. Pakketten met source IP-adressen die niet kunnen bestaan in de netwerkcontext (zoals private IP-adressen op externe interfaces) moeten worden gedropt. Dit voorkomt dat aanvallers gebruik maken van IP spoofing voor verschillende aanvalstypen. Uitgebreide RFC 3704 ingress filtering implementeert deze controles op een systematische manier.
Egress filtering is even belangrijk als ingress filtering maar wordt vaak over het hoofd gezien. Servers moeten alleen toegestaan worden om verbindingen te maken naar bestemmingen die nodig zijn voor hun functie. Bijvoorbeeld, een interne database server heeft geen reden om verbindingen te maken naar het internet. Egress filtering helpt bij het detecteren van gecompromitteerde systemen die proberen te communiceren met command-and-control servers, en het voorkomt data exfiltration zelfs wanneer andere beveiligingscontroles falen.
Logging van firewall activiteiten is essentieel voor netwerk security monitoring. Alle gedropte pakketten moeten worden gelogd met voldoende context om aanvallen te identificeren. Logbestanden moeten worden verzameld in een gecentraliseerd SIEM systeem waar netwerk anomalie detectie kan worden uitgevoerd. Patronen zoals gescande poorten, brute force pogingen, of verdachte geografische locaties moeten automatisch worden geïdentificeerd.
IPv6 beveiliging wordt vaak over het hoofd gezien omdat veel organisaties primair IPv4 gebruiken. Echter, moderne Linux distributies hebben IPv6 standaard ingeschakeld, en onbeveiligde IPv6 configuraties kunnen een achterdeur vormen voor aanvallen. IPv6 firewall regels moeten worden geconfigureerd parallel aan IPv4 regels, of IPv6 moet worden uitgeschakeld wanneer het niet wordt gebruikt. Het negeren van IPv6 beveiliging creëert een significant beveiligingsrisico in moderne netwerkomgevingen.
Network intrusion detection en prevention systemen (IDS/IPS) op host niveau kunnen worden geïmplementeerd via tools zoals Suricata of Snort. Deze tools monitoren netwerkverkeer voor bekende aanvalspatronen en kunnen automatisch verdachte activiteiten blokkeren. Voor kritieke servers kan host-based IDS/IPS een waardevolle aanvulling zijn op netwerk-level security controls. De configuratie vereist regelmatige updates van signature databases om effectief te blijven tegen nieuwe bedreigingen.
Toegangscontrole en Mandatory Access Control
Toegangscontrole in Linux gaat verder dan traditionele file permissies en user/group management. Mandatory Access Control (MAC) systemen zoals SELinux en AppArmor bieden aanvullende beveiligingslagen die systeemwijd beveiligingsbeleid afdwingen, zelfs wanneer individuele applicaties of gebruikers worden gecompromitteerd. Voor Nederlandse overheidsorganisaties met hoge beveiligingsvereisten zijn MAC systemen een essentieel onderdeel van Linux hardening.
SELinux (Security-Enhanced Linux) is een MAC implementatie die standaard beschikbaar is in Red Hat Enterprise Linux, CentOS, en Fedora distributies. SELinux werkt op basis van security contexts die bestanden, processen, en gebruikers labelen met security informatie. Beleid regels definiëren welke acties zijn toegestaan tussen verschillende security contexts. Wanneer een applicatie probeert een actie uit te voeren die niet is toegestaan door het SELinux beleid, wordt deze actie geblokkeerd ongeacht traditionele Linux permissies.
SELinux kan draaien in drie modi: Enforcing mode blokkeert acties die het beleid schenden, Permissive mode logt schendingen maar blokkeert ze niet (handig voor troubleshooting), en Disabled mode schakelt SELinux volledig uit. Voor productiesystemen moet SELinux altijd in Enforcing mode draaien. De configuratie vereist zorgvuldige tuning omdat standaard SELinux beleid soms te restrictief is voor custom applicaties, maar het biedt aanzienlijke beveiligingsvoordelen wanneer correct geconfigureerd.
AppArmor is een alternatieve MAC implementatie die standaard beschikbaar is in Ubuntu, SUSE Linux Enterprise Server, en enkele andere distributies. AppArmor werkt op basis van application profiles die definiëren welke systeembre resources een applicatie mag benaderen. Profiles zijn gemakkelijker te schrijven en te onderhouden dan SELinux beleid, wat AppArmor een populaire keuze maakt voor organisaties die beginnen met MAC implementatie. AppArmor profiles kunnen worden gegenereerd in learning mode, waarbij de applicatie wordt geobserveerd en een profile wordt gecreëerd op basis van daadwerkelijk gedrag.
Beide MAC systemen bieden bescherming tegen zero-day exploits door de aanvalsruimte te beperken. Zelfs wanneer een applicatie een kwetsbaarheid heeft die privilege escalation mogelijk maakt, kan het MAC systeem de geëscaleerde privileges beperken tot alleen die resources die zijn toegestaan door het security beleid. Dit defense-in-depth aanpak is bijzonder waardevol voor internet-facing services die regelmatig worden aangevallen.
User en group management moet worden geconfigureerd volgens least privilege principes. Gebruikers moeten alleen de minimale privileges krijgen die nodig zijn voor hun taken. Het gebruik van sudo voor privileged operaties is superieur aan het delen van root wachtwoorden omdat sudo uitgebreide logging biedt en fijnmazige toegangscontrole mogelijk maakt. Sudo rules moeten worden geconfigureerd om alleen specifieke commando's toe te staan, niet volledige shell toegang, wanneer mogelijk.
Password policies moeten worden geconfigureerd via PAM (Pluggable Authentication Modules) om sterke wachtwoorden af te dwingen. Minimale wachtwoord lengte, complexiteit vereisten, en expiry policies moeten worden ingesteld volgens organisatie security policies. Voor systemen met hoge beveiligingsvereisten moet multi-factor authenticatie worden geïmplementeerd, bij voorkeur via hardware tokens of TOTP applicaties. Wachtwoord-gerelateerde account lockout policies moeten worden geconfigureerd om brute force aanvallen te beperken.
Account management policies moeten automatische account creation en deletion procedures omvatten. Wanneer medewerkers de organisatie verlaten, moeten hun accounts onmiddellijk worden gedeactiveerd of verwijderd. Dormant accounts die niet zijn gebruikt gedurende een bepaalde periode moeten worden geïdentificeerd en geëvalueerd. Regelmatige account audits moeten worden uitgevoerd om te valideren dat alle actieve accounts legitiem zijn en dat toegangsrechten passen bij huidige rollen en verantwoordelijkheden.
Voor Nederlandse overheidsorganisaties is toegangscontrole niet alleen een technische kwestie, maar ook een compliance vereiste. BIO-normen stellen dat organisaties toegangsbeheer moeten implementeren op basis van need-to-know principes, en dat alle toegang moet worden geautoriseerd, gelogd, en regelmatig gecontroleerd. MAC systemen helpen bij het afdwingen van deze vereisten op technisch niveau, terwijl proces en procedures zorgen voor juiste authorisatie en auditing op organisatorisch niveau.
Kernel Beveiligingsparameters en System Tuning
De Linux kernel is de fundament van het besturingssysteem en controleert alle hardware toegang en systeembre operaties. Kernel beveiligingsparameters bepalen hoe het systeem reageert op verschillende condities en welke features beschikbaar zijn voor gebruikers en applicaties. Hardening van kernel parameters is daarom essentieel voor een volledig geharde Linux server.
Kernel parameter tuning gebeurt via het /etc/sysctl.conf bestand of via bestanden in /etc/sysctl.d/ directory. Deze parameters controleren diverse aspecten van systeemgedrag, inclusief netwerk stack configuratie, memory management, en security features. CIS Benchmarks specificeren welke kernel parameters moeten worden aangepast voor verschillende beveiligingsdoeleinden.
IP forwarding moet worden uitgeschakeld op servers die niet fungeren als routers, omdat IP forwarding wordt gebruikt voor network attacks zoals man-in-the-middle aanvallen. Het net.ipv4.ip_forward en net.ipv6.conf.all.forwarding parameters moeten worden ingesteld op 0 voor niet-router systemen. Dit is een fundamentele beveiligingsmaatregel die vaak over het hoofd wordt gezien.
Source routing is een netwerkfeature die kan worden misbruikt voor routing attacks en moet daarom worden uitgeschakeld. De net.ipv4.conf.all.accept_source_route en gerelateerde parameters voor IPv6 moeten worden ingesteld op 0. ICMP redirects kunnen ook worden misbruikt voor man-in-the-middle aanvallen en moeten worden uitgeschakeld via net.ipv4.conf.all.accept_redirects parameters.
SYN flood protection moet worden ingeschakeld om te beschermen tegen TCP SYN flood DDoS aanvallen. De net.ipv4.tcp_syncookies parameter activeert SYN cookies die helpen bij het afweren van SYN floods zonder volledige connection state te behouden. Daarnaast moeten net.ipv4.tcp_max_syn_backlog en net.core.somaxconn parameters worden geconfigureerd om de buffer grootte te optimaliseren voor connection handling.
Kernel logging van suspicious activities moet worden ingeschakeld via net.ipv4.conf.all.log_martians parameter. Dit logt pakketten met impossible source addresses, wat helpt bij het detecteren van network scanning en spoofing pogingen. Logging moet worden gecombineerd met log analysis tools om effectief te zijn, maar het biedt waardevolle visibility in netwerk security events.
Memory protection features zoals Address Space Layout Randomization (ASLR) moeten worden geactiveerd. ASLR randomize het geheugenadres waar programma's worden geladen, wat het moeilijker maakt voor aanvallers om memory corruption exploits te gebruiken. De kernel.randomize_va_space parameter moet worden ingesteld op 2 voor volledige ASLR. Kernel dmesg toegang moet worden beperkt via kernel.dmesg_restrict parameter om te voorkomen dat gevoelige kernel messages worden gelekt.
Kernel module loading moet worden beperkt tot alleen geautoriseerde modules. Het uitschakelen van automatische module loading via kernel.modules_disabled parameter voorkomt dat kwaadaardige software kernel modules laadt. Wanneer module loading nodig is, moet dit worden gecontroleerd via kernel module signing en blacklisting van onveilige modules. Kernel modules die niet nodig zijn moeten worden zwartgelijst om te voorkomen dat ze per ongeluk worden geladen.
Core dumps bevatten geheugeninhoud op het moment van een crash en kunnen gevoelige informatie zoals wachtwoorden of geheimen bevatten. Core dumps moeten worden geconfigureerd met restrictieve permissies of volledig worden uitgeschakeld voor productiesystemen. De kernel.core_pattern parameter bepaalt waar core dumps worden opgeslagen en kan worden geconfigureerd om dumps te verzenden naar een beveiligde locatie voor analyse. De fs.suid_dumpable parameter controleert of setuid processen core dumps kunnen genereren en moet worden beperkt.
System resource limits moeten worden geconfigureerd om te beschermen tegen resource exhaustion aanvallen. Via /etc/security/limits.conf kunnen maximum waarden worden ingesteld voor CPU tijd, geheugengebruik, aantal processen, en andere resources per gebruiker of groep. Deze limits voorkomen dat individuele gebruikers of gecompromitteerde accounts systeembre resources consumeren en denial-of-service condities veroorzaken.
Voor Nederlandse overheidsorganisaties moet kernel hardening worden geïmplementeerd als onderdeel van een systematische server hardening aanpak. CIS Benchmarks bieden uitgebreide lijsten van aanbevolen kernel parameters voor verschillende distributies en use cases. Configuration management tools moeten worden gebruikt om kernel parameters consistent toe te passen over alle servers en om te voorkomen dat wijzigingen handmatig kunnen worden teruggedraaid. Regelmatige compliance scanning moet valideren dat kernel parameters correct zijn geconfigureerd en niet zijn gewijzigd sinds de laatste audit.