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.
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).
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:
ftp
telnet
(of ssh
)pop-3
of imap
identd
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.
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.
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.
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
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.
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
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.
Als je ooit te maken krijgt met een ping flood aanval, gebruik dan
een tool als tcpdump
om te bepalen waar de pakketten vandaan komen
(of vandaan schijnen te komen) en neem vervolgens contact op met je provider
om deze informatie door te geven. Ping floods kunnen het eenvoudigst tot
staan worden gebracht op het router niveau of door gebruik te maken van
een firewall.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.
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
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
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:
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
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.