Verder Terug Inhoud

8. Beveiliging van het netwerk

Netwerkbeveiliging wordt steeds belangrijker omdat mensen steeds langer verbonden zijn met het netwerk. De beveiliging van het netwerk in gevaar brengen is vaak veel eenvoudiger dan het in gevaar brengen van de fysieke of lokale beveiliging en wordt steeds alledaagser.

Er zijn een aantal goede tools die hulp bieden bij netwerkbeveiliging en steeds meer daarvan worden geleverd bij Linux distributies.

8.1 Packet Sniffers

Een van de meest gebruikte manieren waarop indringers zich toegang tot meer systemen op je netwerk verschaffen is door het gebruik van een "packet sniffer" op een reeds in gevaar gebrachte host. Deze "sniffer" luistert op de Ethernet poort slechts naar dingen als passwd, login en su in de pakkettenstroom en logt dan het verkeer dat volgt. Op deze manier verkrijgen aanvallers wachtwoorden voor systemen waarop ze niet eens probeerden in te breken. Wachtwoorden die uit platte tekst bestaan zijn erg kwetsbaar voor deze aanval.

Voorbeeld: Host A is gecompromitteerd. Aanvaller installeert een sniffer. Sniffer pikt een beheerder logging op naar host B, afkomstig van host C. Het verkrijgt het persoonlijke wachtwoord van de beheerder zodra er ingelogd wordt op B. Dan doet de beheerder een su om een probleem op te lossen. Ze hebben nu het root wachtwoord voor host B. Later laat de beheerder iemand telnet uitvoeren vanaf zijn account naar host Z op een andere site. Nu heeft de aanvaller een wachtwoord/login op host Z.

Tegenwoordig hoeft de aanvaller niet eens meer een systeem te compromitteren om dit te doen: ze kunnen ook een laptop of pc het gebouw binnenbrengen en het systeem aftappen.

Het gebruik van ssh of andere methoden om wachtwoorden te coderen dwarsboomt deze aanval. Zaken als APOP voor POP accounts kunnen deze aanval ook voorkomen. (Normale POP logins zijn hier erg kwetsbaar voor, zoals alles dat platte-tekst wachtwoorden over het netwerk verstuurt).

8.2 Systeemdiensten en tcp-wrappers

Het eerste waar je naar moet kijken, voordat je je Linux systeem op ENIG netwerk aansluit, is wat voor diensten je moet bieden. Diensten die je niet hoeft te bieden moeten uitgeschakeld worden, zodat je één ding minder hebt om je zorgen over te maken en aanvallers een plek minder hebben om te zoeken naar een lek.

Er zijn een aantal manieren om diensten onder Linux uit te schakelen. Je kunt kijken naar je /etc/inetd.conf bestand om te zien welke diensten worden aangeboden door je inetd. Schakel degenen die je niet nodig hebt uit door een # aan het begin van de regel te plaatsen en vervolgens je inetd proces een SIGHUP te sturen.

Je kunt ook diensten uit je /etc/services bestand verwijderen (of een # aan het begin van de regel plaatsen). Dit heeft tot gevolg dat lokale clients de dienst ook niet kunnen vinden (als je bijvoorbeeld ftp verwijdert en probeert te ftp-en naar een remote site vanaf die machine, zal dat mislukken en de boodschap "unknown service" zal getoond worden). Het is meestal de moeite niet waard om diensten te verwijderen uit /etc/services, omdat het geen aanvullende beveiliging verschaft. Als een lokale persoon ftp zou willen gebruiken ondanks het feit dat je een # aan het begin van de regel hebt geplaatst, maken ze hun eigen client aan die de gebruikelijke FTP poort gebruikt en nog prima werkt.

Enkele diensten die je wellicht ingeschakeld zou willen laten zijn:

Als je weet dat je een bepaald pakket niet gaat gebruiken, kun je het ook helemaal verwijderen. rpm -e naam van het pakket onder de Red Hat distributie zal het gehele pakket verwijderen. Onder Debian doet dpkg --remove hetzelfde.

Bovendien moet je echt de rsh/rlogin/rcp utility's uitschakelen en tevens voorkomen dat login (gebruikt door rlogin), shell (gebruikt door rcp) en exec (gebruikt door rsh) worden gestart in /etc/inetd.conf. Deze protocollen zijn extreem onveilig en zijn in het verleden het doel geweest van misbruik.

Je moet /etc/rc.d/rc[0-9].d (op Red Hat; /etc/rc[0-9].d op Debian) controleren om te zien of er servers in deze directory's gestart worden die niet nodig zijn. De bestanden in deze directory's zijn eigenlijk symbolische links naar bestanden in de directory /etc/rc.d/init.d (op Red Hat; /etc/init.d op Debian). Het hernoemen van de bestanden in de init.d directory schakelt alle symbolische links uit die naar dat bestand verwijzen. Als je een dienst slechts voor een bepaald run level uit wilt schakelen, hernoem dan de desbetreffende symbolische link door de hoofdletter S te vervangen door een kleine letter s, zoals dit:

      
                          root#  cd /etc/rc6.d 
                          root#  mv S45dhcpd s45dhcpd  

Als je rc bestanden in BSD-stijl hebt, moet je /etc/rc* controleren op programma's die je niet nodig hebt.

Bij de meeste Linux distributies worden tcp_wrappers geleverd die al je TCP diensten "wrappen". Een tcp_wrapper (tcpd) wordt aangeroepen door inetd in plaats van de echte server. tcpd controleert dan de host die om de dienst verzoekt en start ofwel de echte server op of weigert toegang vanaf die host. Met tcpd kun je de toegang tot je TCP diensten beperken. Je moet een /etc/hosts.allow aanmaken en alleen toevoegen in de hosts die toegang tot de diensten van je machine nodig hebben.

Als je een dialup thuisgebruiker bent, stellen we voor dat je ze ALLEMAAL weigert. tcpd logt ook mislukte pogingen om toegang tot diensten te krijgen, dus dit kan je waarschuwen als je aangevallen wordt. Als je nieuwe diensten toevoegt, moet je je ervan overtuigen dat je ze zo configureert dat ze tcp-verbindingen gebruiken als ze zijn gebaseerd op TCP. Een normale dialup gebruiker kan bijvoorbeeld voorkomen dat buitenstaanders verbinding maken met zijn machine en toch de mogelijkheid hebben om post te ontvangen en netwerkverbindingen naar het Internet te maken. Om dit te doen, moet je het volgende aan je /etc/hosts.allow toevoegen:

ALL: 127.

En natuurlijk bevat /etc/hosts.deny:

ALL: ALL

wat externe verbindingen naar je machine voorkomt en je toch toestaat om van binnenuit een verbinding te maken met servers op het Internet.

Houd in gedachten dat tcp_wrappers alleen diensten die uitgevoerd worden door inetd beschermt en een bepaald aantal anderen. Het is heel goed mogelijk dat er ook andere diensten op je machine draaien. Je kunt netstat -ta gebruiken om een lijst te zoeken met alle diensten die je machine aanbiedt.

8.3 Verifieer je DNS informatie

Het up-to-date houden van DNS informatie van alle hosts op je netwerk kan helpen op de beveiliging te vergroten. Als een ongeautoriseerde host verbinding krijgt met je netwerk, kun je dat herkennen door het ontbreken van een DNS entry. Veel diensten kunnen zo worden ingesteld dat ze geen verbindingen toestaan van hosts die geen geldige DNS entry hebben.

8.4 identd

identd is een klein programma dat als kenmerk heeft dat het buiten je inetd server om draait. Het houdt bij welke gebruiker welke TCP dienst uitvoert en rapporteert dit vervolgens aan een ieder die hierom verzoekt.

Veel mensen onderschatten de bruikbaarheid van identd en schakelen het dus uit of blokkeren alle verzoeken van de site hiervoor. identd is er niet om remote sites van dienst te zijn. Er is geen enkele manier om erachter te komen of de gegevens die je ontvangt van de remote identd al dan niet correct zijn. Er vindt geen verificatie plaats van identd verzoeken.

Waarom zou je het dan willen draaien? Omdat het jou van nut is en het extra gegevens kan opleveren als je iemand moet traceren. Als je identd niet is gecompromitteerd, weet je dat het remote sites de gebruikersnaam of gebruikers-id van mensen die TCP diensten gebruiken vertelt. Als de beheerder op een remote site je aanspreekt en je vertelt dat gebruiker die-en-die heeft geprobeerd om hun site te "hacken", kun je gemakkelijk actie ondernemen tegen die gebruiker. Als je geen identd draait, zul je een heleboel logs moeten bekijken om uit te vinden wie er op dat moment online was en normaal gesproken veel meer tijd nodig hebben om die gebruiker op te sporen.

Aan de identd die geleverd wordt bij de meeste distributies is meer in te stellen dan de meeste mensen denken. Je kunt het voor bepaalde gebruikers uitschakelen (ze kunnen een .noident bestand aanmaken), je kunt alle identd verzoeken loggen (we raden dit aan), je kunt zelfs identd een uid in plaats van een gebruikersnaam of zelfs NO-USER laten terugsturen.

8.5 SATAN, ISS en andere netwerkscanners

Er zijn een aantal verschillende softwarepakketten die doen aan poort- en dienst-gebaseerd scannen van machines of netwerken. SATAN, ISS, SAINT en Nessus zijn enkele van de meer bekende. Deze software maakt verbinding met de doelmachine (of al de doelmachines op een netwerk) op alle mogelijke poorten en probeert uit te vinden welke dienst daar draait. Gebaseerd op deze informatie kun je zeggen of de machine kwetsbaar is voor een bepaald soort misbruik op die server.

SATAN (Security Administrator's Tool for Analyzing Networks) is een poortscanner met een webinterface. Het kan ingesteld worden om lichte, medium of zware controles op een machine of een computernetwerk uit te voeren. Het is een goed idee om SATAN te downloaden en je machine of netwerk te scannen en de problemen die het vindt op te lossen. Download SATAN vanaf metalab of vanaf een goed bekend staande FTP of website. Er is een trojaanse copie van SATAN verspreid over het net: http://www.trouble.org/~zen/satan/satan.html. Merk op dat SATAN al geruime tijd niet meer is bijgewerkt en enkele van de andere tools hieronder wellicht beter werken.

ISS (Internet Security Scanner) is een andere poort-gebaseerde scanner. Het is sneller dan SATAN en dus wellicht beter voor grotere netwerken. Echter, SATAN heeft de eigenschap dat het meer informatie verschaft.

Abacus bestaat uit een set tools om te voorzien in host-gebaseerde beveiliging en inbraakdetectie. Neem een kijkje op de homepage op het web voor meer informatie. http://www.psionic.com/abacus/

SAINT is een bijgewerkte versie van SATAN. Het is web-gebaseerd en heeft veel meer up-to-date tests dan SATAN. Je kunt hier meer over te weten komen op: http://www.wwdsi.com/~saint

Nessus is een gratis beveiligingsscanner. Het is gemakkelijk in gebruik dankzij een GTK grafische interface. Het is ook uitgerust met een erg aardige plugin setup voor nieuwe poort-scan testen. Kijk voor meer informatie op: http://www.nessus.org

Poortscans detecteren

Er zijn enkele tools ontworpen om je te waarschuwen voor poortscans door SATAN, ISS en andere scansoftware. Echter, als je tcp_wrappers ruimdenkend gebruikt en regelmatig je logbestanden nakijkt, zullen je deze poortscans wel opvallen. Zelfs met de meest minimale instelling laat SATAN sporen na in de logs op een Red Hat systeem.

Er zijn ook "stealth" poort scanners. Een pakket waarop het TCP ACK bit ingesteld is (zoals dat gedaan wordt wanneer de verbindingen tot stand zijn gebracht) zal waarschijnlijk wel door een firewall komen die pakketten filtert. Het RST pakket dat teruggestuurd wordt vanaf een poort die _geen tot stand gebrachte sessie had_ kan worden gezien als bewijs dat er leven is op die poort. Ik denk niet dat tcp_wrappers dit zal detecteren.

8.6 sendmail, qmail en MTA's

Een van de belangrijkste diensten die je aan kan bieden is een mailserver. Helaas is het ook de meest kwestbare voor aanvallen, wat te wijten is aan het aantal taken dat het uit moet voeren en de privileges die het kenmerkend nodig heeft.

Als je sendmail gebruikt, is het erg belangrijk dat je de meest recente versie gebruikt. sendmail heeft een heel lange geschiedenis van misbruik op het gebied van beveiliging. Let erop dat je altijd de meest recente versie vanaf http://www.sendmail.org gebruikt.

Houd in gedachten dat sendmail niet hoeft te draaien om mail te kunnen versturen. Als je een thuisgebruiker bent, kun je sendmail helemaal uitschakelen en gewoon je mail client gebruiken om mail te versturen. Je kunt er ook voor kiezen om de "-bd" flag uit het sendmail startup bestand te verwijderen en daarbij inkomende verzoeken om mail uit te schakelen. Met andere woorden, je kunt sendmail opstarten vanuit je startup script door daarvoor in de plaats het volgende te gebruiken:

        #  /usr/lib/sendmail -q15m  

Dit zorgt ervoor dat sendmail de berichtenlijst elke vijftien minuten nazoekt op berichten die bij de eerste poging niet met succes konden worden overgebracht.

Veel beheerders kiezen ervoor om sendmail niet te gebruiken en kiezen in plaats daarvan voor een van de andere mailtransport middelen. Je zou kunnen overwegen om over te stappen op qmail. qmail is vanaf het eerste begin ontworpen met beveiliging in gedachten. Het is snel, stabiel en veilig. Qmail kan worden gevonden op http://www.qmail.org

Een directe concurrent van qmail is "postfix", geschreven door Wietse Venema, de auteur van tcp_wrappers en andere beveiligingstools. Vroeger heette het vmailer, werd gesponsord door IBM en is ook een mailtransport middel dat vanaf het eerste begin geschreven is met beveiliging in het achterhoofd. Je kunt meer informatie over postfix vinden op http://www.postfix.org

8.7 Denial of Service aanvallen

Een "Denial of Service" (DoS) aanval is er een waar de aanvaller probeert om enkele bronnen zo overbelast te maken dat ze geen rechtmatige verzoeken meer kunnen beantwoorden of rechtmatige gebruikers de toegang tot hun machine ontzeggen.

Denial of service aanvallen zijn in de aflopen jaren sterk in aantal toegenomen. Enkele van de meer populaire en recente zijn hieronder opgesomd. Merk op dat er steeds weer nieuwe verschijnen, dus dit zijn slechts een paar voorbeelden. Lees de Linux security lists, de bugtraq list en archieven voor meer recente informatie.

Je kunt de code van de meeste misbruiken en een meer diepgaande beschrijving van hoe ze werken, vinden op http://www.rootshell.com door gebruik te maken van hun zoekmachine.

8.8 NFS (Network File System) beveiliging

NFS is een veelgebruikt protocol om bestanden te delen. Het staat servers toe om nfsd en mountd te draaien om gehele bestandssystemen te "exporteren" naar andere machines door gebruik te maken van de ondersteuning van het NFS bestandssysteem dat is ingebouwd in hun kernels (of een andere client ondersteuning als het geen Linux machines zijn). mountd houdt de gemounte bestandssystemen bij in /etc/mtab en kan ze tonen met showmount.

Veel sites gebruiken NFS om gebruikers te voorzien van een home directory, zodat ze, ongeacht vanaf welke machine in het cluster ze inloggen, allemaal hun eigen bestanden hebben.

Er is maar een kleine hoeveelheid beveiliging toegestaan bij het exporteren van bestandssystemen. Je kunt je nfsd de remote root gebruiker (uid=0) laten omzetten naar de nobody gebruiker, waardoor totale toegang tot de bestanden die worden geëxporteerd wordt ontzegt. Omdat individuele gebruikers echter toegang hebben tot hun eigen bestanden (of op z'n minst met hetzelfde uid), kan de remote root gebruiker inloggen (of su gebruiken om in te loggen) op hun account en totale toegang hebben tot hun bestanden. Dit is slechts een kleine hindernis voor een aanvaller die toegang heeft om je remote bestandssystemen te mounten.

Als je NFS moet gebruiken, wees er dan zeker van dat je alleen exporteert naar die machines waarnaar het echt nodig is. Exporteer nooit je gehele root directory; exporteer alleen directory's die je moet exporteren.

Bekijk de NFS HOWTO voor meer informatie over NFS, beschikbaar op http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html

8.9 NIS (Network Information Service) (voorheen YP)

Network Information Service (voorheen YP) is een manier waarop informatie verspreid wordt naar een groep machines. De NIS beheerder beheert de informatietabellen en converteert ze naar NIS map bestanden. Deze mappen worden dan op het netwerk gezet, waar ze NIS client machines toestaan om login, wachtwoord, home directory en shell informatie te verkrijgen (alle informatie in een standaard /etc/passwd bestand). Dit staat gebruikers toe om eenmalig hun wachtwoord te veranderen, waarna dit zijn uitwerking heeft op alle machines in het NIS domein.

NIS is helemaal niet veilig. Dit was ook nooit de bedoeling. Het was bedoeld om handig en nuttig te zijn. Iedereen die de naam van je NIS domein kan raden (waar dan ook op het net), kan in het bezit komen van een kopie van je passwd bestand en gebruik maken van "crack" en "John the Ripper" om de wachtwoorden van je gebruikers te kraken. Ook is het mogelijk om NIS te "spoofen" en allerlei soorten nare trucks uit te halen.Als je NIS moet gebruiken, wees je dan bewust van de gevaren.

Er is een veel veiligere vervanging voor NIS, genaamd NIS+. Bekijk de NIS HOWTO voor meer informatie: http://metalab.unc.edu/mdw/HOWTO/NIS-HOWTO.html

8.10 Firewalls

Firewalls zijn bedoeld om te controleren welke informatie je lokale netwerk binnenkomt en uitgaat. De firewall host is kenmerkend verbonden met het Internet en je lokale LAN en de enige toegang vanaf je LAN naar het Internet is via de firewall. Op deze manier kan de firewall in de gaten houden wat naar en vanaf het Internet en je lokale LAN wordt gestuurd.

Er zijn een aantal soorten firewalls en manieren om ze op te zetten. Op Linux machines kunnen erg goede firewalls gemaakt worden. Firewall code kan rechtstreeks in 2.0 en hogere kernels ingebouwd worden. De user-space tools ipfwadm voor 2.0 kernels en ipchains voor 2.2 kernels staan je toe om direct de soorten netwerkverkeer die je toestaat te veranderen. Je kunt ook bepaalde soorten netwerkverkeer loggen.

Firewalls zijn een erg nuttige en belangrijke techniek om je netwerk te beveiligen. Denk echter nooit dat omdat je een firewall hebt, je je machines die erachter hangen niet hoeft te beveiligen. Dit is een fatale fout. Bekijk de erg goede Firewall-HOWTO op je meest recente metalab archief voor meer informatie over firewalls en Linux. http://metalab.unc.edu/mdw/HOWTO/Firewall-HOWTO.html

Meer informatie kan ook gevonden worden in de IP-Masquerade mini-howto: http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html

Meer informatie over ipfwadm (de tool waarmee je de instellingen voor je firewall kan veranderen) kan worden gevonden op: http://www.xos.nl/linux/ipfwadm/

Als je geen ervaring met firewalls hebt en van plan bent er een op te zetten voor meer dan slechts een simpel beveiligingsbeleid, is het "Firewalls book" door O'Reilly and Associates of een ander online firewall document verplicht leesvoer. Bekijk http://www.ora.com voor meer informatie. Het National Institute of Standards and Technology heeft een uitstekend document over firewalls samengesteld. Hoewel het stamt uit 1995, is het nog steeds behoorlijk goed. Je kunt het vinden op http://csrc.nist.gov/nistpubs/800-10/main.html. Ook interessant:

8.11 IP Chains - Linux Kernel 2.2.x Firewalling

Linux IP Firewalling Chains is een update naar de 2.0 Linux firewalling code voor de 2.2 kernel. Het heeft veel meer voorzieningen dan voorgaande uitvoeringen, inclusief:

Als je nu ipfwadm op je 2.0 kernel gebruikt, zijn er scripts beschikbaar om het ipfwadm commando formaat te converteren naar het formaat dat ipchains gebruikt.

Lees de IP Chains HOWTO voor verdere informatie. Het is beschikbaar op http://www.rustcorp.com/linux/ipchains/HOWTO.html

8.12 VPN's - Virtual Private Networks

VPN's zijn een manier om een "virtueel" netwerk tot stand te brengen bovenop een reeds bestaand netwerk. Dit virtuele netwerk is vaak gecodeerd en stuurt het verkeer alleen naar en van enkele bekende entiteiten die deel uitmaken van het netwerk. VPN's worden vaak gebruikt om iemand die thuis werkt via het publieke Internet te verbinden met het interne bedrijfsnetwerk.

Als je een Linux masquerading firewall draait en je moet MS PPTP (Microsoft's VPN point-to-point product) pakketten omzeilen, is er een Linux kernel patch uitgekomen om juist dat te doen. Zie: ip-masq-vpn.

Er zijn diverse Linux VPN oplossingen beschikbaar:

Zie ook de paragraaf over IPSEC voor aanwijzingen en meer informatie.


Verder Terug Inhoud