Wachtwoorden zijn één van de belangrijkste
beveiligingsmogelijkheden die vandaag de dag gebruikt worden. Het is
belangrijk voor zowel jezelf als je gebruikers om veilige, niet te raden,
wachtwoorden te hebben. Het merendeel van de meer recente Linux distributies
levert passwd
programma's die het je niet toestaan om een makkelijk
te raden wachtwoord in te stellen. Zorg dat je passwd
programma up to
date is en deze mogelijkheden heeft.
Een diepgaande verhandeling over versleuteling valt buiten de strekking van dit document, maar een inleiding is op z'n plaats. Versleuteling is erg nuttig, waarschijnlijk zelfs noodzakelijk tegenwoordig. Er zijn veel verschillende methoden om gegevens te versleutelen, elk met zijn eigen kenmerken.
De meeste Unix systemen (en Linux is geen uitzondering) gebruiken primair
een eenrichtingsverkeer versleutelingsalgoritme, genaamd DES (Data Encryption
Standard) om wachtwoorden te versleutelen. Dit versleutelde wachtwoord wordt
dan opgeslagen in (gebruikelijk) /etc/passwd
(of minder
gebruikelijk) /etc/shadow
. Als je probeert in te loggen wordt het
wachtwoord dat je intypt opnieuw versleuteld en vergeleken met de entry in
het bestand waarin je wachtwoorden worden opgeslagen. Als ze overeenkomen
moet het wel hetzelfde wachtwoord zijn en word je toegang verleend. Hoewel
DES een tweerichtingsverkeer versleutelingsalgoritme is (je kunt een bericht
coderen en decoderen, op voorwaarde dat je de juiste sleutels hebt), is de
variant die de meeste Unix systemen gebruiken de "one-way". Dit betekent dat
het niet mogelijk is om de versleuteling om te keren om zodoende het
wachtwoord te verkrijgen vanuit de inhoud van /etc/passwd
(of
/etc/shadow
).
Aanvallen met brute kracht, zoals "Crack" of "John the Ripper" (zie paragraaf crack ) kunnen vaak wachtwoorden raden, tenzij je wachtwoord afdoende willekeurig is. PAM modules (zie hieronder) staan je toe om een andere versleutelingsroutine voor je wachtwoorden te gebruiken. (MD5 of iets dergelijks). Je kunt tevens Crack in je voordeel gebruiken. Overweeg het periodiek uitvoeren van Crack op je wachtwoord database om onveilige wachtwoorden te vinden. Neem vervolgens contact op met de overtredende gebruiker en vertel hem dat hij zijn wachtwoord moet veranderen.
Kijk op http://consult.cern.ch/writeup/security/security_3.html voor informatie over het kiezen van een goed wachtwoord.
Public-key versleuteling, zoals dat gebruikt wordt voor PGP, gebruikt een sleutel voor het coderen en een sleutel voor het decoderen. Traditionele versleuteling gebruikt echter dezelfde sleutel voor het coderen en decoderen; deze sleutel moet bekend zijn bij beide partijen en zal dus op de een af andere wijze veilig van de een naar de ander overgebracht moeten worden.
Om de noodzaak van het veilig overbrengen van de coderingssleutel te verlichten, gebruikt public-key versleuteling twee afzonderlijke sleutels: een publieke sleutel en een persoonlijke sleutel. Ieders publieke sleutel is beschikbaar voor iedereen om de codering uit te voeren, terwijl tegelijkertijd iedereen zijn of haar persoonlijke sleutel heeft om berichten, die gecodeerd zijn met de juiste publieke sleutel, te decoderen.
Zowel public-key als private-key versleuteling hebben hun voordelen en je kunt over deze verschillen lezen in The RSA Cryptography FAQ, genoemd aan het eind van deze paragraaf.
PGP (Pretty Good Privacy) wordt goed ondersteund onder Linux. De versies 2.6.2 en 5.0 staan er bekend om dat ze goed werken. Voor een goed eerste-beginselen-boekje over PGP en hoe het te gebruiken, kun je de PGP FAQ bekijken: http://www.pgp.com/service/export/faq/55faq.cgi.
Let erop dat je de versie gebruikt die geschikt is voor het land waar je woont. Als gevolg van exportbeperkingen door de regering van de VS, is het verboden om sterke versleuteling in elektronische vorm de landsgrenzen over te brengen.
Exportcontroles worden nu beheerd door EAR (Export Administration Regulations). Ze worden niet langer bepaald door ITAR.
Er is ook een stap-voor-stap gids voor het instellen van PGP onder Linux, beschikbaar op http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html. Het is geschreven voor de internationale versie van PGP, maar het is makkelijk aan te passen aan de versie voor de Verenigde Staten. Je hebt mogelijk ook een patch nodig voor de recente versies van Linux; de patch is beschikbaar op ftp://metalab.unc.edu/pub/Linux/apps/crypto.
Er is een project waar gewerkt wordt aan een gratis re-implementatie van PGP met open source. GnuPG is een complete en gratis vervanging van PGP. Omdat het geen IDEA of RSA gebruikt, kan het zonder enige beperkingen gebruikt worden. GnuPG komt bijna overeen met OpenPGP. Zie de GNU Privacy Guard webpagina voor meer informatie: http://www.gnupg.org/.
Meer informatie over versleuteling kan gevonden worden in "The RSA cryptography FAQ", beschikbaar op http://www.rsa.com/rsalabs/newfaq/. Hier vind je informatie over begrippen als "Diffie-Hellman", "public-key cryptography", "digital certificates", enz.
Gebruikers vragen vaak naar de verschillen tussen de diverse beveiligings- en versleutelingsprotocollen en hoe ze gebruikt moeten worden. Hoewel dit geen document over versleuteling is, is het een goed idee om kort uit te leggen wat elk protocol inhoudt en waar meer informatie te vinden is.
Afgezien van CIPE en andere vormen van gegevensversleuteling, zijn er ook diverse andere uitvoeringen van IPSEC voor Linux. IPSEC is een poging van de IETF om cryptografisch-veilige communicaties op het IP netwerkniveau te creëren en om te voorzien in authenticatie, integriteit, toegangscontrole en vertrouwelijkheid. Informatie over IPSEC en ontwerpen voor Internet kan gevonden worden op http://www.ietf.org/html.charters/ipsec-charter.html. Je kunt er ook verwijzingen naar andere protocollen betreffende sleutelbeheer vinden en een IPSEC mailing list en archieven.
De x-kernel Linux uitvoering, die ontwikkeld wordt op de Universiteit van Arizona, gebruikt een object-gebaseerde opzet voor het uitvoeren van netwerkprotocollen genaamd x-kernel en kan worden gevonden op http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Simpel gezegd is de x-kernel een methode om berichten op het kernelniveau door te geven, wat zorgt voor een gemakkelijkere uitvoering.
Een andere vrij verkrijgbare IPSEC uitvoering is de Linux FreeS/WAN IPSEC. Hun webpagina verklaart:
"Met deze diensten kun je veilige tunnels door niet vertrouwde netwerken bouwen. Alles wat door het niet vertrouwde net gaat wordt gecodeerd door de IPSEC gateway machine en gedecodeerd door de gateway aan de andere kant. Het resultaat is Virtual Private Network of VPN. Dit is een netwerk dat effectief privé is, ondanks dat het machines op verschillende sites omvat die zijn verbonden door het onveilige Internet."
Het is beschikbaar om te downloaden vanaf http://www.xs4all.nl/~freeswan/ en heeft op het moment van dit schrijven juist versie 1.0 bereikt.
Net als bij andere vormen van versleuteling wordt het niet verspreid met de kernel vanwege exportbeperkingen.
ssh
(Secure Shell) en stelnet
ssh
en stelnet
zijn programma's die het mogelijk maken
om in te loggen op remote systemen middels een versleutelde verbinding.
openssh
is een serie programma's die gebruikt wordt als een
veilige vervanging voor rlogin
, rsh
en rcp
. Het
gebruikt public-key versleuteling zowel om communicatie tussen twee hosts te
versleutelen als wel het authenticeren van gebruikers. Het kan gebruikt
worden om veilig in te loggen op een remote host of voor het copiëren van
gegevens tussen hosts, terwijl "man-in-het-midden aanvallen" (sessie-kaping) en
DNS spoofing voorkomen worden. Het voert gegevenscompressie op je
verbindingen uit en zorgt voor veilige X11 communicatie tussen hosts.
Er zijn tegenwoordig diverse ssh uitvoeringen. De originele
commerciële uitvoering van Data Fellows kan gevonden worden op
http://www.datafellows.com. De
ssh
homepage kan worden gevonden op
http://www.cs.hut.fi/ssh/.
De uitstekende Openssh uitvoering is gebaseerd op een vroege versie van ssh van Data Fellows en is geheel bewerkt zodat het geen enkel patent of eigendomsdelen bevat. Het is gratis en onder een BSD licentie. Het kan worden gevonden op: http://www.openssh.com.
Er is ook een open source project om ssh van de grond af te re-implementeren, genaamd "psst...". Voor meer informatie zie: http://www.net.lut.ac.uk/psst/
Je kunt ook ssh
gebruiken vanaf je Windows werkstation naar je
Linux ssh
server. Er zijn diverse gratis verkrijgbare Windows client
uitvoeringen, inclusief degene op
http://guardian.htu.tuwien.ac.at/therapy/ssh/ als ook een
commerciële uitvoering van Data Fellows
http://www.datafellows.com.
SSLeay is een gratis uitvoering van Netscape's Secure Sockets Layer protocol, ontwikkeld door Eric Young. Het bevat diverse applicaties zoals een veilig telnet, een module voor Apache, diverse databases en ook diverse algoritmes inclusief DES, IDEA en Blowfish.
Door gebruik te maken van deze library werd een veilige telnet vervanging gecreëerd die versleutelt over een telnet-verbinding. In tegenstelling tot SSH gebruikt stelnet SSL, het Secure Sockets Layer protocol, ontwikkeld door Netscape. Je kunt Secure telnet en Secure FTP vinden door te beginnen met de SSLeay FAQ, beschikbaar op http://www.psy.uq.oz.au/~ftp/Crypto/.
SRP is een andere veilige telnet/ftp implementatie. Uit hun webpagina:
"Het SRP project ontwikkelt veilige Internet software voor gratis wereldwijd gebruik. Beginnend met een volledig veilig Telnet en FTP distributie, hopen we de zwakke netwerk authenticatie systemen te verdringen met sterke vervangers die gebruikersvriendelijkheid niet opofferen voor beveiliging. Beveiliging moet standaard zijn, geen optie!"
Ga voor meer informatie naar http://srp.stanford.edu/srp.
Recente versies van de Red Hat Linux distributie komen met een uniform authenticatie schema, genaamd "PAM". PAM maakt het mogelijk dat je je authenticatiemethoden en vereisten in één keer verandert en alle lokale authencatiemethoden kort samenvat zonder dat je enige binary's hoeft te recompileren. Configuratie van PAM ligt buiten de strekking van dit document, maar neem zeker eens een kijkje op de PAM website voor meer informatie. http://www.kernel.org/pub/linux/libs/pam/index.html.
Gewoon een paar dingen die je met PAM kunt doen:
Binnen een paar uur, nodig voor het installeren en configureren van je
systeem, kun je veel aanvallen op voorhand voorkomen. Gebruik bijvoorbeeld PAM
om het systeemwijd gebruik van .rhosts
bestanden in home directory's
van gebruikers uit te schakelen door het toevoegen van deze regels aan
/etc/pam.d/rlogin
:
#
# Disable rsh/rlogin/rexec for users
#
login auth required pam_rhosts_auth.so no_rhosts
Het primaire doel van deze software is te voorzien in een faciliteit voor een veilige (tegen het afluisteren of aftappen van berichten, inclusief het analyseren van het netwerkverkeer en faked message injection) subnetwerk interconnectie over een onveilig packet netwerk zoals het Internet.
CIPE versleutelt de gegevens op het netwerk niveau. Pakketten die reizen tussen hosts op het netwerk worden versleuteld. Het versleutelingsmechanisme is dichtbij het stuurprogramma geplaatst dat de pakketten verstuurt en ontvangt.
Dit werkt in tegenstelling tot SSH, dat de gegevens per verbinding versleutelt, op het socket niveau. Een logische verbinding tussen programma's die op verschillende hosts uitgevoerd worden wordt versleuteld.
CIPE kan gebruikt worden bij "tunnelling" om een Virtual Private Network aan te maken. Low-level versleuteling heeft het voordeel dat het zo gemaakt kan worden dat het transparant werkt tussen de twee netwerken verbonden in het VPN, zonder enige wijziging aan applicatie-software.
Samengevat uit de CIPE documentatie:
De IPSEC normen definiëren een set protocollen die gebruikt kunnen worden (onder andere) om versleutelde VPN's te bouwen. IPSEC is echter een zware en gecompliceerde set van protocollen met een heleboel opties. Uitvoeringen van de volledige set protocollen worden nog zelden gebruikt en sommige geschilpunten (zoals sleutelbeheer) zijn nog niet volledig opgelost. CIPE gebruikt een eenvoudigere benadering, waarbij veel dingen die in parameters vastgelegd kunnen worden (zoals de keuze van het actuele versleutelingsalgoritme wat gebruikt wordt) een keuze is die tijdens de installatie gemaakt moet worden. Dit beperkt de flexibiliteit, maar zorgt voor een eenvoudige (en derhalve efficiënte, makkelijk te debuggen...) uitvoering.
Verdere informatie kan worden gevonden op http://www.inka.de/~bigred/devel/cipe.html
Net als met andere vormen van versleuteling wordt het niet standaard met de kernel meegeleverd wegens exportbeperkingen.
Kerberos is een authenticatiesysteem, ontwikkeld door het Athena Project op MIT. Als een gebruiker inlogt, authenticeert Kerberos deze gebruiker (gebruik makend van een wachtwoord) en voorziet de gebruiker in een manier om zijn identiteit te bewijzen aan andere servers en hosts verspreid over het netwerk.
Deze authenticatie wordt dan gebruikt door programma's zoals
rlogin
om het de gebruiker mogelijk te maken op andere hosts in te
loggen zonder wachtwoord (in plaats van het .rhosts
bestand). Deze
authenticatiemethode kan ook gebruikt worden door het mailsysteem om te
garanderen dat de mail is aangeleverd bij de juiste persoon, evenals het
garanderen dat de afzender is wie hij beweert te zijn.
Kerberos en de andere programma's die erbij geleverd worden, voorkomen dat gebruikers het systeem "spoofen" en zodoende laten geloven dat ze iemand anders zijn. Helaas is het installeren van Kerberos erg indringend, omdat het het aanpassen of vervangen van vele standaard programma's vereist.
Je kunt meer informatie over Kerberos vinden door te kijken op the kerberos FAQ en de code kan worden gevonden op http://nii.isi.edu/info/kerberos/.
[Van: Stein, Jennifer G., Clifford Neuman en Jeffrey L. Schiller. "Kerberos: Een Authenticatie Service voor Open Netwerk Systemen." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]
Kerberos zou niet je eerste stap moeten zijn in het verbeteren van de beveiliging van je host. Het is nogal ingewikkeld en wordt niet zo veel gebruikt als bijvoorbeeld SSH.
Shadow passwords is een manier om je gecodeerde wachtwoordinformatie
geheim te houden voor normale gebruikers. Recente versies van zowel Red
Hat als Debian Linux maken standaard gebruik van shadow passwords, maar op
andere systemen worden gecodeerde wachtwoorden opgeslagen in het
/etc/passwd
bestand, dat iedereen kan lezen. Iedereen kan
hier vervolgens programma's op loslaten die wachtwoorden kunnen raden en
zodoende proberen vast te stellen wat ze zijn. Shadow passwords daarentegen
worden opgeslagen in /etc/shadow
, dat alleen door bevoegde
gebruikers kan worden gelezen. Om shadow passwords te kunnen gebruiken, moet
je je ervan vergewissen dat al je voorzieningen die toegang nodig hebben tot
wachtwoordinformatie opnieuw zijn gecompileerd om het te ondersteunen. PAM
(hierboven) biedt je de mogelijkheid om simpelweg een shadow module te
plaatsen; het vereist geen hercompilatie van executables. Je kunt een beroep
doen op de Shadow-Password HOWTO voor meer informatie als dat nodig is. Het is
beschikbaar op
http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html Het is nu
behoorlijk gedateerd en niet nodig voor distributies die PAM ondersteunen.
Als om wat voor reden dan ook je passwd
programma geen moeilijk
te raden wachtwoorden afdwingt, zul je wellicht een programma willen uitvoeren
dat wachtwoorden kraakt om je zodoende ervan te kunnen vergewissen dat de
wachtwoorden van je gebruikers veilig zijn.
Programma's die wachtwoorden kraken zijn gebaseerd op een simpel idee: ze proberen elk woord in het woordenboek en vervolgens variaties op deze woorden, coderen ze allemaal en vergelijken ze met je gecodeerde wachtwoord. Als dit tot een treffer leidt, weten ze wat je wachtwoord is.
Er zijn een aantal van deze programma's in omloop ... waarvan de twee meest
opvallende "Crack" en "John the Ripper" zijn (
http://www.false.com/security/john/index.html). Ze nemen een hoop
van je CPU tijd in beslag, maar je zou wel moeten kunnen vertellen of een
aanvaller binnen zou kunnen komen middels deze programma's, door ze eerst zelf
uit te voeren en gebruikers met zwakke wachtwoorden op de hoogte te stellen.
Houd in de gaten dat een aanvaller eerst een ander lek moet gebruiken om je
/etc/passwd
bestand te kunnen lezen, maar zulke lekken komen vaker
voor dan je denkt.
Omdat beveiliging slechts zo krachtig is als je meest onveilige host, is het de moeite waard te vermelden dat als je enige Windows machines op je netwerk hebt, je eens L0phtCrack, een Crack implementatie voor Windows, zou moeten proberen. Het is beschikbaar op http://www.l0pht.com
CFS is een manier om hele directorystructuren te coderen en gebruikers de mogelijkheid te geven om gecodeerde bestanden hierin op te slaan. Het maakt gebruik van een NFS server die draait op de lokale machine. RPM's zijn beschikbaar op http://www.zedz.net/redhat/ en meer informatie over hoe het werkt staat op ftp://ftp.research.att.com/dist/mab/.
TCFS overtreft CFS doordat er meer integratie met het bestandssysteem is toegevoegd, zodat het duidelijker voor de gebruikers is dat het bestandssysteem gecodeerd is. Meer informatie staat op http://edu-gw.dia.unisa.it/tcfs/.
Het hoeft ook niet gebruikt te worden op gehele bestandssystemen, het werkt ook op directorystructuren.
Het is belangrijk dat je je grafische beeldscherm beveiligt om te voorkomen dat aanvallers je wachtwoord inpikken terwijl je het intypt, documenten of andere informatie die op je scherm staat lezen of zelfs een lek gebruiken om root toegang te verkrijgen. Het uitvoeren van remote X applicaties over het netwerk kan ook vol gevaar zijn, doordat het snuffelaars mogelijk wordt gemaakt om al je interactie met het remote systeem te zien.
X heeft een aantal manieren voor toegangsbeheer. De eenvoudigste van deze
is host-gebaseerd: je gebruikt xhost
om alle hosts die toegang mogen
hebben tot je beeldscherm te specificeren. Dit is absoluut niet veilig, want
als iemand toegang heeft tot je machine, kan het commando xhost + hun machine
gegeven worden en men komt gemakkelijk binnen.
Bovendien, als je toegang vanaf een niet vertrouwde machine toe moet staan,
kan iedereen daar je beeldscherm compromitteren.
Als je xdm
(X Display Manager) gebruikt om in te loggen, krijg
je een veel betere toegangsmethode: MIT-MAGIC-COOKIE-1. Een 128-bit "cookie"
wordt gegenereerd en opgeslagen in je .Xauthority
bestand. Als je
een remote machine toegang moet verschaffen tot je beeldscherm, kun je het
xauth
commando en de informatie in je .Xauthority
bestand
gebruiken om toegang te verschaffen voor alleen die verbinding. Zie de
Remote-X-Apps mini-HOWTO, beschikbaar op
http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.
Je kunt ook ssh
gebruiken (zie
ssh
, hierboven) om
veilige X verbindingen mogelijk te maken. Dit heeft als voordeel dat het
ook duidelijk is voor de eindgebruiker en houdt in dat er geen
ongecodeerde gegevens over het netwerk verzonden worden.
Bekijk de Xsecurity
man pagina voor meer informatie over X
beveiliging. De meest veilige gok is het gebruik van xdm
om in te
loggen op je console en vervolgens ssh
te gebruiken om naar remote
sites te gaan waarop je X programma's wilt uitvoeren.
SVGAlib programma's zijn kenmerkend SUID-root, ten einde al de video hardware van je Linux machines te kunnen benaderen. Dit maakt ze erg gevaarijk. Als ze crashen, zul je kenmerkend je machine opnieuw moeten opstarten om een bruikbare console terug te krijgen. Let er op dat elk SVGA programma dat je uitvoert authentiek en op z'n minst enigszins vertrouwd is. Nog beter, voer ze helemaal niet uit.
Het Linux GGI project probeert verschillende van de problemen met video
interfaces onder Linux op te lossen. GGI zal een klein stukje van de video
code naar de Linux kernel verplaatsen en vervolgens de toegang tot het
videosysteem beheren. Dit betekent dat GGI in staat is om op elk moment je
console in een bekende, goede staat te herstellen. Het voorziet ook in een
beveiligings-waarschuwingssleutel, zodat je zeker weet dat er geen Trojan
horse login
programma op je console draait.
http://synergy.caltech.edu/~ggi/