Nästa Föregående Innehållsförteckning

6. Lösenordssäkerhet och kryptering

En av de viktigaste säkerhetsegenskaperna som används nuförtiden är lösenord. Det är viktigt för både dig och dina användare att ha säkra, icke gissningsbara lösenord. De flesta nyare Linuxdistributioner innehåller "passwd"-program som inte tillåter för lätta lösenord. Se till att ditt "passwd"-program är uppdaterat och har dessa egenskaper.

Djup diskussion om kryptering är utanför räckvidden av detta dokument, men en introduktion är på sin plats. Kryptering är väldigt användbart och till och med nödvändigt nuförtiden. Det finns alla möjliga olika metoder för att kryptera data, var och en med sina egna egenskaper.

De flesta unixar (och Linux är inget undantag) använder i huvudsak en envägs krypteringsalgoritm, som heter DES (Data Encryption Standard), för att kryptera lösenorden. Det krypterade lösenordet lagras sedan i (vanligtvis) /etc/passwd eller (mer sällan) /etc/shadow. När du försöker att logga in så krypteras det du skriver in och jämförs sedan med posten i den fil som lagrar lösenorden. Om det stämmer, så måste det vara rätt lösenord, och du får tillgång till systemet. Även om DES är en tvåvägs krypteringsalgoritm (du kan kryptera och dekryptera ett meddelande, givet att du har rätt nycklar.), så är varianten som de flesta unixar använder envägs. Detta betyder att det inte skall vara möjligt att göra krypteringen baklänges för att få fram lösenord i klartext från /etc/passwd (eller /etc/shadow).

Råstyrke-attacker (brute force), såsom "Crack" eller "John the Ripper" (se nedan) kan ofta gissa lösenord om lösenorden inte är tillräckligt slumpartat. PAM-moduler (se nedan) låter dig använda en annan krypteringsalgoritm till dina lösenord (som MD5 eller liknande).

Du kan gå till http://consult.cern.ch/writeup/security/security_3.html för mer information om hur du väljer ett bra lösenord.

6.1 PGP och Public Key kryptografi

Public key kryptografi, så som den som används för PGP, handlar om kryptografi som använder en nyckel för kryptering och en annan nyckel för dekryptering. Traditionellt så har kryptografi använt samma nyckel för kryptering och dekryptering. Denna "privata" nyckel måste vara känd av båda parter, och på något sätt transporteras från en till en annan på ett säkert sätt.

Public key kryptering upphäver behovet att säkert transportera nyckeln som behövs för dekryptering genom att använda två skilda nycklar, en publik nyckel och en privat nyckel. Varje persons publika nyckel är tillgänglig för vem som helst och används för krypteringen, samtidigt så har varje person sin privata nyckel som han kan använda för att dekryptera meddelanden som har krypterats med den rätta publika nyckeln.

Det finns fördelar både med Public Key och Private Key kryptering, och du kan läsa om dessa skillnader i RSA Cryptography FAQ, vars adress listas i slutet av denna sektion.

PGP (Pretty Good Privacy) stöds bra i Linux. Det är känt att versionerna 2.6.2 och 5.0 fungerar bra. För en bra grund om PGP och hur man använder det, titta på PGP FAQ. http://www.pgp.com/service/export/faq/55faq.cgi Se till att använda den versionen som passar för ditt land, eftersom exportrestriktioner av den amerikanska regeringen gör att stark kryptering anses vara ett militärt vapen och inte får föras ut ur landet i elektronisk form.

Det finns även en steg-för-steg guide för att konfigurera PGP på Linux på: http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html Den skrevs för den internationella versionen av PGP, men anpassas lätt till den amerikanska versionen. Du kan också behöva en patch för vissa av de senaste versionerna av Linux, som finns på ftp://sunsite.unc.edu/pub/Linux/apps/crypto.

Mer information om kryptografi hittar du i RSA Cryptography FAQ, som finns på http://www.rsa.com/rsalabs/newfaq/. Här hittar du information om termer som "Diffie-Hellman", "public-key cryptography", "Digital Certificates", osv.

6.2 SSL, S-HTTP, HTTPS och S/MIME

Ofta frågar användare om skillnaden mellan olika säkerhets- och krypteringsprotokoll, och hur man använder dem. Även om detta inte är ett dokument om kryptering, så är det en bra ide att ge en kort förklaring av varje, och var man hittar ytterligare information.

6.3 Linux x-kernel IPSEC implementering

Tillsammans med CIPE, och andra former av datakryptering, så finns det också en implementering av IPSEC för Linux. IPSEC är en ansträngning av IETF för att skapa en kryptografiskt säker kommunikation på IP nätverkslagret, som även tillhandahåller autentisering, integritett, accesskontroll och konfidentialitet. Information om IPSEC och ett Internet utkast hittar du på http://www.ietf.org/html.charters/ipsec-charter.html. Du kan även hitta länkar till andra protokoll som handlar om nyckelhantering, och en e-postlista och arkiv för IPSEC.

Linuximplementationen, som utvecklas vid University of Arizona, använder ett objektbaserat ramverk för att implementera nätverksprotokoll som heter x-kernel, och hittas på http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html. Stort sett så är x-kernel en metod att skicka meddelanden på kärnnivån, vilket leder till en enklare implementering.

Som med andra former av kryptografi, så distribueras den inte med kärnan som standard, på grund av exportrestriktioner.

6.4 SSH (Secure Shell), stelnet

SSH och stelnet är program som låter dig logga in på andra system och ha en krypterad anslutning.

SSH är en svit av program som används som en säker ersättare till rlogin, rsh och rcp. Den använder Public key kryptografi för att kryptera kommunikationen mellan två datorer, såväl som för användarautentisering. Detta kan användas för att på ett säkert sätt logga in till en annan dator eller kopiera data mellan datorer, samtidigt som det förhindrar man-mitt-i-mellan attacker (sessionskapning) och DNS "spoofing". Den utför datakompression på dina anslutningar, och säkra X11-kommunikationer mellan datorer. Hemsidan för SSH finns på http://www.cs.hut.fi/ssh/

Du kan också använda SSH från din Windows-arbetsstation till din Linux SSH-server. Det finns flera fritt tillgängliga implementationer av Windowsklienter, inlkusive den på http://guardian.htu.tuwien.ac.at/therapy/ssh/ såväl som en komersiell implementation från DataFellows, på http://www.datafellows.com.

SSLeay är en fri implementation av Netscapes Secure Socket Layer protokoll, inklusive applikationer, som Secure telnet, en modul för Apache, flera databaser såväl som flera algoritmer inklusive DES, IDEA och Blowfish.

Med detta bibliotek har en säker telnet-ersättare skapats som krypterar över en telnetanslutning. Till skillnad från SSH så använder stelnet SSL, Secure Sockets Layer protokollet som utvecklats av Netscape. Du kan hitta Secure telnet och Secure FTP genom att börja med SSLeay FAQ, som finns på http://www.psy.uq.oz.au/~ftp/Crypto/

6.5 PAM - Pluggable Authentication Modules

Nyare versioner av Linuxdistributionen RedHat levereras med ett enhetligt autentiseringssätt som heter "PAM". PAM låter dig "on the fly" ändra dina autentiseringsmetoder, krav och kapsla in alla lokala autentiseringsmetoder utan att kompilera om någon av dina binärer. Konfigurationen av PAM ligger utanför detta dokuments räckvidd, men ta en titt på hemsidan för PAM för mer information. http://www.kernel.org/pub/linux/libs/pam/index.html

Bara några saker du kan göra med PAM:

Inom några timmar av installation och konfiguration av ditt system, så kan du förhindra många attacker redan innan de inträffar. Till exempel, använd PAM för att stänga av den systemvida användningen av .rhosts filer i användarnas hemkataloger genom att lägga till dessa rader i /etc/pam.d/login:

         #
         # Disable rsh/rlogin/rexec for users
         #
         login auth required pam_rhosts_auth.so no_rhosts

6.6 Kryptografisk IP inkapsling (CIPE)

Huvudmålet med denna mjukvara är att tillhandahålla en facilitet för säker (mot "eavesdropping", inklusive trafikanalys och fejkad meddelandeinsättning) subnätverksanslutning över osäkra paketnätverk som Internet.

CIPE krypterar datan på nätverkslagret. Paket som färdas mellan datorer blir krypterade. Krypteringsmotorn placeras nära drivrutinen som skickar och tar emot paket.

Detta är olikt SSH, som krypterar data vid anslutningen på socketnivå. En logisk anslutning mellan program som kör på olika datorer är krypterad.

CIPE kan användas i tunnling för att skapa ett Virtuellt Privat Nätverk. Lågnivåkryptering har fördelen att den kan göras transparent mellan de två nätverken som är ihopkopplade i VPN, utan att ändra något i applikationsmjukvaran.

Sammanfattning från dokumentationen av CIPE:

Standarden för IPSEC definierar en mängd protokoll som kan användas (bland annat) till att bygga krypterade VPN. Men IPSEC är en ganska tungviktig och komplicerad protokollmängd med många valmöjligheter. Implementationer av det kompletta protokollet är fortfarande sällan använda och vissa aspekter (såsom nyckelhantering) är fortfarande inte helt lösta. CIPE använder en enklare metod, i vilken många saker som kan bli parametriserade (som valet av vilken krypteringsalgoritm som skall användas) är ett val som görs vid kompileringen. Detta begränsar flexibiliteten, men tillåter en enkel (och därför effektiv, lätt att debugga...) implemetation.

Mer information finns på http://www.inka.de/~bigred/devel/cipe.html

Som med andra former av kryptografi, så distribueras den inte med kärnan som standard, på grund av exportrestriktioner.

6.7 Kerberos

Kerberos är ett autentiseringssystem som är utvecklat av Athena projektet på MIT. När en användare loggar in så autentiserar Kerberos den användaren (med lösenord) och ger användaren ett sätt att bevisa sin identitet till andra servrar och datorer som finns på nätverket.

Denna autentisering används sedan av program som rlogin för att låta användaren logga in på andra datorer utan lösenord (istället för filen .rhosts). Autentiseringen används även av e-postsystemet för att garantera att e-posten levereras till rätt person, såväl som att garantera att avsändaren är den han utger sig för.

Den övergripande effekten av att installera Kerberos och de flertaliga programmen som följer med är att nästan eliminera möjligheten för användare att lura systemet att tro att de är någon annan. Tyvärr så är det väldigt irriterande att installera Kerberos, eftersom det kräver att man modifierar eller ersätter ett antal standardprogram.

Du kan hitta mer information om Kerberos på http://www.veritas.com/common/f/97042301.htm och källkoden finns på http://nii.isi.edu/info/kerberos/

[Från: Stein, Jennifer G., Clifford Neuman, and Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]

6.8 Skuggade lösenord

Skuggade lösenord är ett sätt att hålla den krypterade lösenordsinformationen hemlig för normala användare. Normalt så sparas det krypterade lösenordet i /etc/passwd, vilken alla kan läsa. De kan då köra program som gissar lösenord mot den filen och försöka få ut lösenorden i klartext. Skuggade lösenord sparar istället informationen i filen /etc/shadow, som bara priviligerade användare kan läsa. För att kunna använda skuggade lösenord så måste du se till att alla dina program som behöver ha tillgång till lösenordsinformation stödjer det. PAM (ovan) tillåter dock att du bara pluggar in en shadow-modul utan att du behöver kompilera om de exekverbara filerna. Titta i Shadow-Password HOWTO för mer information om det behövs. Den finns på http://sunsite.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html. Den är ganska gammal nu, och behövs inte för distributioner som stödjer PAM.

6.9 Crack och John the Ripper

Om ditt passwd-program av någon anledning inte tvingar användarna att ha lösenord som är svåra att gissa, så kan det vara lämpligt att köra ett program som försöker knäcka lösenorden för att försäkra dig om att användarnas lösenord är säkra.

Program som knäcker lösenord baseras på en enkel ide. De försöker med alla ord i ordlistan och sedan med variationer av dessa ord. De krypterar var och ett och kollar det mot ditt krypterade lösenord. Om det stämmer så är de inne.

Det finns ett antal program som gör detta... av vilka två av de mest kända är "Crack" och "John the Ripper" http://www.false.com/security/john/index.html. De använder mycket av din CPU-tid, men du kan avgöra om en inkräktare kan använda programmen för att komma in genom att köra dem själv först, och meddela användare med för enkla lösenord. Observera att en inkräktare först måste hitta en säkerhetsläcka för att komma åt din passwd-fil (unix /etc/passwd), men dessa är vanligare än du kanske tror.

6.10 CFS - kryptografiskt filsystem och TCFS - transparent kryptografiskt filsystem

CFS är en metod att kryptera ett helt filsystem och låta användare lagra krypterade filer på dem. Det använder en NFS-server som kör på den lokala maskinen. Rpms finns på http://www.replay.com/redhat/ och mer information om hur det hela fungerar finns på ftp://ftp.research.att.com/dist/mab/

TCFS förbättrar CFS genom att det är mer integrerat med filsystemet, så att det är transparent för alla användare av filsystemet att det är krypterat. Mer information på http://edu-gw.dia.unisa.it/tcfs/

6.11 X11-, SVGA- och displaysäkerhet

X11

Det är viktigt att du säkrar din grafiska display för att hindra attackerare från att göra saker som: fånga upp dina lösenord utan att du vet om det medans du skriver dem, läsa dokument eller information som du läser på din skärm eller till och med använda en läcka för att få superuser-access. Att köra X-applikationer över ett nätverk kan också vara farligt, detta kan "sniffare" använda för att se all din interaktion med det andra systemet.

X har ett antal mekanismer för accesskontroll. Den enklaste av dem är datorbaserad. Du kan använda xhost för att specificera vilka datorer som har tillgång till din display. Detta är inte alls särskilt säkert. Om någon har tillgång till din maskin kan de köra "xhost +sin_maskin" och lätt få tillträde. Dessutom, om du måste tillåta access till en opålitlig maskin så kan alla personer på den maskinen få tillgång till din display.

Om man använder xdm (x display manager) för att logga in, så får man en mycket bättre accessmetod: MIT-MAGIC-COOKIE-1. En 128bitars cookie genereras och lagras i din fil .Xauthority. Om du måste låta en annan dator få tillgång till din display så kan du använda kommandot xauth och informationen i .Xauthority för att ge access till endast den anslutningen. För mer information, se Remote-X-Apps mini-howto på http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html.

Du kan även använda ssh (se ovan) för att få säkra X-anslutningar. Detta har fördelen att det är transparent för slutanvändaren och betyder att ingen okrypterad data flödar över nätverket.

Ta en titt på manualbladet för Xsecurity för mer information om säkerhet i X. Det säkra valet är att använda xdm för att logga in till din konsoll och sedan använda ssh för att köra X-applikationer från andra datorer.

SVGA

SVGAlib-program är vanligtvis SUID-root för att kunna ha tillgång till Linuxmaskinens videohårdvara. Detta gör dem väldigt farliga. Om de kraschar, måste du antagligen starta om din maskin för att få tillbaka en användbar konsoll. Se till att alla SVGA-program som du kör är autentiska och åtminstonde är hyfsat pålitliga. Ännu bättre, kör dem inte alls.

GGI (Generella Grafikgränssnittsprojektet)

Linux GGI-projekt försöker lösa flera av problemen med grafikgränssnitten i Linux. GGI kommer att flytta in en liten del av grafikkoden in i Linuxkärnan, och sedan kontrollera access till grafiksystemet. Detta betyder att GGI kan återställa din konsoll till ett stabilt läge när som helst. http://synergy.caltech.edu/~ggi/


Nästa Föregående Innehållsförteckning