Convert to GutenPalm
or to PalmDoc |
![[Foto van de Auteur]](../../common/images/Frederic_Raynal.png)
door
Over de auteur:
Frédéric Raynal is bezig aan een scriptie over het tatoeëren met computerplaatjes bij het INRIA (Institut National de Recherche en Informatique et Automatique). Hij werkt ook mee aan de ontwikkeling van Bastille-Linux.
Inhoud:
|
Bastille-Linux
Kort:
Bastille-Linux versie 1.1, begin Juni uitgebracht, is geen nieuwe Linux distributie maar een verzameling scripts die erop is gericht je systeem beter te beveiligen. De benadering van de auteur is zeer leerzaam en we kunnen dan ook een hoop te weten komen door deze scripts te installeren.
Inleiding
Op het gebied van beveiliging is Linux beter dan andere operating systemen. Desalniettemin verschilt iedere distributie van Linux op dit punt. Bastille-Linux geeft je de mogelijkheid je systeem te beveiligen. Het is van origine gemaakt voor RedHat maar de nieuwste versie werkt ook met andere distributies.
Het project wordt geleid door Jon Lasser (coördinator) en Jay Beale (ontwikkelaar). Een heel scala aan verdere ontwikkelaars, software ontwerpers en bèta-testers is bij dit project betrokken.
Laat om te beginnen één ding duidelijk zijn: Bastille-Linux is geen nieuwe Linux distributie! Het is een verzameling scripts, geschreven in Perl, met het doel Linux beter te beveiligen.
Met beveiliging bedoelen we hier computer beveiliging: hoe voorkom ik dat allerlei sujetten inbreken op mijn machine? Bastille-Linux geeft je een deel van het antwoord door middel van het wijzigen van de installatie van je Linux distributie.
Een primaire taak van de systeembeheerder is om de behoeften van je gebruikers te kennen. Niet alleen om ze die faciliteiten te kunnen bieden maar ook om de ongebruikte faciliteiten af te kunnen sluiten, om zo bijvoorbeeld netwerk beveiligingslekken te voorkomen. Een mentor van mij had de volgende filosofie: hoe minder je doet, des te beter :-] Uiteraard had hij het over de complexiteit van algoritmen maar dit geldt ook voor netwerkbeheer. Een overvloed aan faciliteiten maakt een systeem kwetsbaar doordat er meer mogelijkheden zijn voor inbraak. Om de kwetsbaarheid te verminderen moet je alleen datgene installeren wat je nodig hebt.
Bastille-Linux probeert het inbraakrisico te verkleinen. Hiertoe hebben de ontwerpers een zeer leerzame benadering bedacht: ze leggen stap voor stap uit wat je hiervoor moet doen.
Presentatie
Ten tijde van het schrijven van dit artikel is Bastille-Linux versie 1.1.0 uitgekomen (eerste helft van Juni).
Nog afgezien van de bruikbaarheid van dit pakket is het ook nog eens erg leerzaam. De scripts stellen gedetailleerde en relevante vragen. De ontwikkelaars proberen hier de gebruiker "op te voeden". Ze geven uitleg bij het waarom van de vragen en de mogelijke antwoorden. Hierdoor wordt Bastille-Linux een zeer gebruiksvriendelijk hulpmiddel.
Voor de wat meer ervaren gebruiker is de broncode, in Perl geschreven, een voorbeeld van duidelijkheid (Jazeker, dat is mogelijk ;-) : het commentaar geeft precies aan hoe alles in zijn werk gaat.
Hieronder een aantal kenmerken van versie 1.1.0:
- De scripts werken nu ook voor systemen die al in gebruik zijn.
- Er is nu ook een undo mogelijkheid: iedere wijziging door Bastille-Linux in een bestand heeft een reservekopie zodat de originele instelling kan worden hersteld.
- In eerste instantie was Bastille-Linux alleen bruikbaar voor RedHat en Mandrake; nu niet meer. Iedere module bevat nu de juiste bestandspaden voor de distributie waarop je dit pakket uitvoert.
Bastille-Linux heeft verschillende modules. Laten we zeggen 4 algemene modules en verder nog modules voor speciale doeleinden (voor programma's als sendmail, FTP... of zoals boot en andere ongebruikte achtergrondprogramma's).
De algemene modules worden gebruikt voor:
- Installatie van firewalls
- Bijwerken van systeemprogramma's
- Audit programma's en SUID
- Uitschakelen en beperken van ongebruikte faciliteiten.
De andere modules werken op zeer bepaalde onderdelen. Sommige zijn speciaal bedoeld voor het afdichten van slecht geconfigureerde pakketten die beveiligingslekken hebben (sendmail of FTP bijvoorbeeld). Anderen veranderen de configuratie van een aantal faciliteiten zodanig dat ze wat restrictiever zijn (PAM, syslog...).
Sommige beveiligingsfuncties heeft men uitgebreid en bieden nu meerdere beveiligingsniveaus (da's tegen de principes van mijn mentor maar je moet toch een keer emanciperen :-) Je moet iedere faciliteit en ieder potentieel beveiligingslek zo veel mogelijk afdichten. Als een beveiliging dan faalt dan is er wellicht nog een andere die het systeem blijft beveiligen.
Installatie
Eerdere versies van Bastille-Linux werkten alleen op nieuwe installaties. Dat is niet meer zo. Hier moeten we echter aan toevoegen dat de dingen die Bastille doet op een reeds gebruikt systeem bijna waardeloos zijn. Het is dus aan te raden, vanwege de beveiliging, om Bastille-Linux op een net geïnstalleerd systeem te gebruiken. Je bent gewaarschuwd. Laten we dan nu serieus aan de slag gaan: de installatie!
Bastille-Linux is verpakt in .tgz formaat, te verkrijgen bij bastille-linux.sourceforge.net. Dit archief is slechts 134 Kb. Zodra je het hebt opgehaald kun je het uitpakken ($ tar xzf Bastille-1.1.0.tgz
).
Vier scripts besturen Bastille-Linux:
- InteractiveBastille.pl: dit script stelt diverse vragen om vast te stellen wat er op het systeem moet worden gedaan. Het maakt vervolgens een config bestand aan met daarin de gegeven antwoorden.
- AutomatedBastille.pl: installeert een standaard configuratie met de optie om een firewall te installeren via een meegeleverd configuratiescript. Dit script wordt niet meer onderhouden.
- BackEnd.pl: deze gaat over de veranderingen in het systeem. Zijn parameters worden afgeleid uit de antwoorden die je hiervoor hebt gegeven.
- Undo.pl: wanneer je BackEnd.pl uitvoert worden een aantal systeembestanden (/etc/syslog.conf, /etc/inetd.conf, /etc/hosts.*, ...) gewijzigd. Om de originele configuratie te kunnen herstellen in geval van problemen worden reservekopieën in /root/Bastille/undo geplaatst.
Om te installeren moet je gebruiker root zijn omdat de scripts configuratiebestanden wijzigen. Voer allereerst het script InteractiveBastille.pl uit. Beantwoord vervolgens de vragen die je krijgt voorgeschoteld (zie verderop voor meer informatie). Voer als laatste BackEnd.pl uit en klaar is kees! In root/Bastille/undo kun je de veranderingen bekijken.
Nog wat opmerkingen voor je begint.
- Je moet de scripts vanuit de directory /root/Bastille uitvoeren ... dit zal in latere versies worden veranderd, waarna je het vanuit elke directory uit kunt voeren (wellicht is dat al zo tegen de tijd dat je dit leest).
- Twee modules geven je de gelegenheid nieuwe gebruikers aan te maken ... zodra je shadow passwords op je systeem hebt geïnstalleerd. Dit is de standaard installatie. Maar controleer voor de zekerheid of het bestand /etc/passwd inderdaad geen wachtwoorden bevat, dat het bestand /etc/shadow alleen toegankelijk is voor gebruiker root en dat hierin inderdaad alle wachtwoorden staan!
- Bastille-Linux kan nog niet goed omgaan met verbanden tussen modules, zoals de kernel configuratie dit wel kan (hieraan wordt gewerkt voor een latere versie). Kijk dus uit met de antwoorden die je geeft en denk na over de gevolgen. Je kunt bijvoorbeeld de module IPChains poort 2049 laten sluiten en NFS actief laten in de configuratie van MiscellaneousDaemons. NFS maakt echter gebruik van diezelfde poort.
Stap voor stap
Laten we de vragen die Bastille-Linux stelt eens onder de loep nemen om wat meer begrip te kweken. De letter tussen spekhaken ([]) geeft aan wat het standaard antwoord is als geen antwoord wordt gegeven (N->No, Y->Yes).
IPChains
Deze module configureert een firewall. Ook al is deze module niet absoluut noodzakelijk voor de beveiliging, je kunt er dan altijd nog het IP-verkeer van en naar de machine mee in de gaten houden. Dit is niet voldoende. Je moet ook nog de daemons herconfigureren (de verschillende beveiligingsniveaus hebben hun nut).
Het script zit doordacht in elkaar. Het houdt rekening met 2 netwerkkoppelingen: één die met de buitenwereld praat en een ander die contact onderhoud met het lokale netwerk. Het doel hier is om vast te stellen welke netwerkfaciliteiten beschikbaar moeten zijn en de rest af te sluiten. Standaard wordt alle toegang vanuit de buitenwereld afgesloten. Vervolgens maakt het script regels aan om bepaalde faciliteiten wel beschikbaar te stellen. Maar alleen expliciet aangegeven faciliteiten.
Het script doet de instellingen voor de protocollen TCP, UDP en ICMP. Het geeft een overzicht van faciliteiten die je in de gaten moet houden of af moet sluiten voor ieder protocol. Het gaat te ver om hier de benadering van Bastille-Linux met betrekking tot het installeren van een firewall te bespreken maar je kunt een hoop opsteken uit het lezen van het script en bijbehorend commentaar. Om dit script te kunnen gebruiken is een minimale hoeveelheid kennis vereist.
PatchDownload
Updates (verbeteringen of aanpassingen) zijn belangrijk om de integriteit van je systeem te blijven waarborgen. De laatste maanden is het bijvoorbeeld duidelijk geworden dat programma's als bind en piranha problemen geven met de beveiliging. Ze waren snel verholpen: door de vrij te verkrijgen broncode hebben sommigen meteen verbeteringen aangebracht.
Helaas werkt dit script niet zo goed. Het is nogal complex omdat je vast moet stellen welke pakketten er geïnstalleerd zijn en welke daarvan aangepast moeten worden. Vervolgens moet je de aanpassing van het Net halen en controleren of het niet is veranderd (hetzij door hackers, hetzij door het versturen zelf) voordat je het gaat installeren. Dit alles hangt af van de distributie die je hebt.
Momenteel beveelt Jay Beale aan deze stap handmatig uit te voeren en zeker niet te negeren. Een wat bruikbaarder versie van deze module wordt nu ontwikkeld en zou binnenkort uit moeten komen.
FilePermissions
Deze module is gebaseerd op een artikel van de SANS-groep. Doel is om vast te stellen welke programma's alleen door gebruiker root gebruikt mogen worden (of door een lid van de groep root), welke een SUID-bit nodig hebben, enz.
AccountSecurity
Inbraakpogingen beginnen meestal met het kraken van een account van een systeemgebruiker. Een paar eenvoudige aanpassingen maakt dit moeilijker en geven de mogelijkheid inbraken te detecteren.
- Would you like to set up a second UID 0 account [N] ?
Door dit te doen wordt een tweede root gebruiker aangemaakt op je systeem. In dat geval moet je root niet meer gebruiken. Hiermee creëer je twee mogelijkheden een wachtwoord te kraken ... maar je kunt tevens zien wie van root gebruik maakt via de bestanden in /var/log.
- May we take strong steps to disallow the dangerous r-protocols? [Y]
Zoals hierboven reeds beschreven zijn de r-programma's zeer gevaarlijk omdat ze snel gebruikerswachtwoorden vrijgeven over het netwerk. De protocollen versturen wachtwoorden in leesbare tekst! In een dergelijk netwerk is een sniffer (afluisterprogramma) een interessante mogelijkheid...
Bastille-Linux beperkt het gebruik van deze protocollen via PAM (Pluggable Authentication Modules), verwijdert de executie-rechten van de programma's en voorkomt het opstarten van de servers in tcp_wrapper (rlogind, rexecd, rshd). Deze worden via /etc/inetd.conf ingesteld waar je ze alleen als commentaar in op moet nemen.
- Would you like to enforce password aging? [Y]
Wachtwoorden moeten dan om de 180 dagen worden veranderd. Gebruikers die dit niet doen worden gedeactiveerd.
- Would you like to create a non-root user account? [N]
Maak zo min mogelijk gebruik van gebruiker root. Een commando zoals $ rm -rf /
bijvoorbeeld heeft rampzalige gevolgen wanneer je gebruiker root bent. Als normale gebruiker heeft dit al veel minder gevolgen. Alleen systeembeheer taken hoor je als root uit te voeren.
- Would you like to restrict the use of cron to administrative accounts? [Y]
cron voert automatisch periodieke taken uit. Als systeembeheerder kun je dit bijvoorbeeld gebruiken om regelmatig de integriteit van bestanden te onderzoeken of de bestanden in /var/log af te grazen. Om dit voor iedere gebruiker toe te laten is wat teveel van het goede. Als alternatief maakt Bastille-Linux een bestand /etc/cron.allow aan waarin de gebruikers staan die hiervan gebruik mogen maken.
BootSecurity
Het gaat hier om de fysieke beveiliging van de machine. Dit om beveiligingslekken van eerdere versies tegen te gaan. Eenieder met fysieke toegang tot de console van de machine kon alle toegangsrechten verkrijgen (als root dus). Door LILO in single mode uit te voeren (LILO: linux single) kon men een gloednieuwe shell verkrijgen als gebruiker root ;-P
Dit is uiteraard niet voldoende. Voor fysieke beveiliging moet ook de BIOS met een wachtwoord beveiligd zijn, de harde schijf mag het enige apparaat zijn waarvan je op kunt starten en de doos moet worden afgesloten om te voorkomen dat iemand er zijn eigen schijf bij kan zetten... Dit is natuurlijk licht paranoïde en dit hoef je niet te doen zonder zeer gegronde redenen.
Er zijn software-matige alternatieven die een goed compromis vormen vergeleken met het bovenstaande:
- Would you like to password-protect the LILO prompt? [N]
Door dit te gebruiken kunnen gebruikers die niet geautoriseerd zijn het systeem ook niet opstarten.
- Would you like to reduce the LILO delay time to zero? [N]
Hiermee heeft men niet meer de mogelijkheid extra parameters op te geven tijdens opstarten. Als er meerdere operating systemen op draaien kun je dit beter niet doen want dan kun je in het vervolg alleen het standaard operating systeem opstarten!
- Do you ever boot Linux from the hard drive? [Y]
Als je één van de vorige vragen bevestigend hebt beantwoord en LILO is op je schijf geïnstalleerd dan moet je op deze vraag ook met Ja antwoorden om de wijzigingen op LILO naar disk te schrijven.
- Would you like to write the LILO changes to a boot floppy? [N]
Als je een boot-floppy hebt, als reserve dan wel omdat je daar vanaf opstart, dan moet je het ook daar wegschrijven.
- Would you like to disable CTRL-ALT-DELETE rebooting? [N]
Dit om te voorkomen dat iemand zomaar de machine kan herstarten. Dit is echter nutteloos zodra iemand toegang heeft tot de stekker ;-)
- Would you like to password protect single-user mode? [Y]
Zoals we al hebben kunnen zien lijkt het een goed idee om te voorkomen dat mensen als root op de machine kunnen komen.
SecureInetd
Doel van deze module is om overbodige faciliteiten af te sluiten of te beperken. Hackers zijn tamelijk bedreven in het vinden van beveiligingslekken in ieder geautoriseerd programma dus je moet zowel het programma als zijn rechten beperken.
Een foutje in de DNS van RedHat 6.0 bijvoorbeeld zorgt ervoor dat je root kunt worden vanaf een andere machine. De faciliteit afsluiten of beperken in zijn rechten vrijwaart je van dit soort ongemakken.
Een aantal protocollen, zoals de hiervoor genoemde r-protocols, maar ook ftp of telnet zijn behoorlijk gevoelig voor dit soort dingen. Andere faciliteiten staan het toe informatie op te vragen (finger en inetd bijvoorbeeld) over de machine, de gebruikers erop enz... Veel van deze faciliteiten staan onder besturing van tcp_wrapper, die bepaalt wie er wel en geen toegang heeft tot deze faciliteiten (via de bestanden /etc/hosts.{allow deny}). Pas wanneer deze heeft bepaald dat iemand toegang heeft tot de faciliteit, wordt het verzoek doorgespeeld aan het betreffende programma.
Dit gedeelte is nog wat rechttoe rechtaan maar zal verbeteren in volgende versies.
- Would you like to modify inetd.conf and /etc/hosts.allow to optimize use of Wrappers? [Y]
Bastille-Linux installeert deze twee bestanden. Het kan nuttig zijn om ze eens te bekijken zodat je betere parameters mee kunt geven om ze meer op je behoeften af te stemmen.
- Would you like to set sshd to accept connections only from a small list of IP addresses? [N]
sshd is een achtergrondproces dat beveiligde verbindingen toelaat (het uitwisselen van sleutels, versleutelen van wachtwoorden en data, ...). Het is een volwaardige vervanger voor telnet, rlogin, rsh, rcp en ftp. Ook aardig om te noemen is de ssh-versie onder BSD-licentie: openSSH. Meer hierover verderop.
- Would you like to make "Authorized Use" banners? [Y]
Eenieder die probeert verbinding te leggen met je machine krijgt dan een waarschuwingsbericht met de vraag of zij dit wel mag. Het bericht zelf staat in het bestand /etc/motd.
Voordat we verder gaan nog even de opmerking dat het netwerk uitgaat van een client- server model. Je moet dus weten of je de client of de server bent voor iedere faciliteit. Het stoppen van de web server bijvoorbeeld betekent niet dat je het web niet meer op kan. Je bladerprogramma is een client.
DisableUserTools
Deze kleine module is van primair belang voor een server. Meestal zal een hacker verbinding leggen met een systeem als een normale gebruiker. Vervolgens zal hij een aantal programma's opnieuw compileren om van zwakke plekken in het systeem te kunnen profiteren. Deze module sluit de C-compiler af voor gebruik, behalve voor root.
Nog een schepje erbovenop is om de compiler in zijn geheel te verwijderen. Dit kan je doen als de machine niet wordt gebruikt voor compilaties.
ConfigureMiscPAM
Doel van deze module is het risico van DOS-aanvallen (Denial Of Service) te verminderen. Dergelijke aanvallen maken de machine onbruikbaar door hem te overbelasten (door bijvoorbeeld de schijf vol te schrijven met core bestanden, "ping of death" enz.).
PAM is de afkorting voor "Pluggable Authentication Module". Dit is een bibliotheek die de systeembeheerder in staat stelt groepen gebruikers te selecteren voor het gebruik van iedere faciliteit met daarbij behorende toegangsrechten, de hulpmiddelen die ze daarbij mogen gebruiken, enzovoorts.
-
Would you like to put limits on system resource usage? [Y]
Het bestand /etc/security/limits.conf bevat de grenzen voor gebruik van het systeem. Bastille-Linux wijzigt dit als volgt:
- core bestanden gelimiteerd tot 0
- iedere gebruiker mag maximaal 150 processen hebben
- maximale grootte van een bestand is 40 Mb
Al deze waarden kunnen naderhand rechtstreeks worden gewijzigd in het bestand.
- Should we restrict console access to a small group of user accounts? [N]
Onder RedHat 6.0/6.1 hebben gebruikers die via het console werken bepaalde privileges zoals het activeren van de CD-ROM. Je kunt de toegang beperken tot een bepaalde groep gebruikers die je vertrouwt. Bij deze vraag kun je die gebruikers identificeren als je gebruik wilt maken van deze mogelijkheid.
Logging
syslog is het belangrijkste hulpmiddel om uit te vinden of er wordt ingebroken. Dit achtergrondproces houdt bij wat er gebeurd op het systeem en legt dit vast. Je kunt hier instellen hoeveel informatie hij vastlegt.
Het is opvallend hoe snel je een probleem detecteert via de /var/log-bestanden als je weinig faciliteiten hebt draaien. Als je daarentegen veel -nutteloze- faciliteiten hebt draaien worden de bestanden in /var/log heel snel heel groot en dus navenant moeilijker te overzien (je hebt dan scripts-op-maat nodig om één en ander te bekijken).
Deze module voegt additionele controles toe aan het bestand /etc/syslog.conf.
- Would you like to add additional logging? [Y]
Bastille-Linux maakt het bestand /var/log/kernel aan voor de mededelingen van de kernel en het vastleggen van ernstige problemen (mededelingen van de firewall behoren bijvoorbeeld tot deze categorie). Een deel van deze informatie wordt naar 2 beeldschermen doorgestuurd (tty7 en tty8). Een nieuw bestand met de naam /var/log/loginlog legt vast wie er allemaal wanneer verbinding maakt met het systeem.
- Would you like to set up process accounting? [N]
Onder Linux is er de mogelijkheid om vast te leggen welke commando's er allemaal uit worden gevoerd, wanneer en door wie. Als het direct nut heeft deze activiteiten vast te leggen dan zal het bestand enorm hard gaan groeien. Het gebruikt natuurlijk een hoop systeemcapaciteit dus is het beter dit niet te doen, tenzij je het echt nodig hebt.
MiscellaneousDaemons
Met nog steeds de minimalisering in gedachte zal deze module alleen dié faciliteiten opstarten die je echt nodig hebt. Standaard is bijna iedere faciliteit nutteloos en dus gedeactiveerd. Je kunt een faciliteit weer activeren middels het chkconfig commando.
Faciliteit |
Beschrijving |
apmd |
Voor het beheer van batterijen van laptops |
NFS en Samba |
Voor het delen van schijfruimte ... Hoewel zeer nuttig in heterogene netwerken vormen ze ook een groot beveiligingsrisico |
atd |
Alles wat atd kan kan cron ook |
PCMCIA faciliteiten |
Voor als je PCMCIA apparaten hebt. Normaal op laptops maar zeldzaam op werkstations |
dhcpd |
Server voor het verstrekken van tijdelijke IP-adressen. Een dergelijke faciliteit wordt meestal door ISP's "geboden" of in een lokaal netwerk. |
gpm |
Bestuurt de muis in console mode (tekst invoer). Nutteloze faciliteit, of je moet erg veel in console mode doen. |
news server |
Slechts weinigen hebben dit op hun machine nodig ... dit is de taak van een ISP. |
routed |
Idem als voor de news server, het is iets voor de ISP. Het heeft te maken met DNS. |
|
NIS |
Zeer nuttig op een lokaal netwerk ... maar een bron van beveiligingsproblemen! |
snmpd |
Server voor netwerkbeheer (statistiek, beheer, gebruikers, ....) |
sendmail |
Dit hoeft niet als achtergrondproces te draaien om mail te kunnen uitwisselen. Als je verder je email van een ISP krijgt via POP of IMAP dan is sendmail overbodig en bovendien een groot beveiligingsrisico... |
Sendmail
Zoals reeds eerder vermeld is sendmail een faciliteit voor het afhandelen van email. Het verleden van dit programma is bezaaid met beveiligingsproblemen doordat het als mailserver vele taken moet verrichten met de daarbij behorende extra rechten (namen vinden, syslog informatie enz.). Afgezien van deze zwakheden stelt sendmail je in staat informatie op te vragen over een specifieke gebruiker op een bepaalde machine. De commando's EXPN en VRFY bijvoorbeeld vertellen iemand welke gebruikers op een systeem bestaan.
Zoals gezegd hoeft sendmail niet als achtergrondproces te draaien om email te kunnen versturen of ontvangen. Voor thuisgebruikers is het waarschijnlijk nutteloos omdat je een willekeurige mail client kunt gebruiken (netscape, rmail, pine, mutt enz.) voor het versturen van je mail. Voor het ontvangen van je email kun je regelmatig sendmail opstarten om je postbus leeg te halen.
- Do you want to leave sendmail running in daemon mode? [Y]
We hebben net gezien dat dit niet veel nut heeft en zelfs gevaarlijk is, dus is het beter deze te deactiveren.
- Would you like to run sendmail via cron to process the queue? [N]
Met deze keuze wordt sendmail iedere 15 minuten opgestart. Je kunt dit interval veranderen in het bestand /etc/sysconfig/sendmail.
- Would you like to disable the VRFY and EXPN sendmail commands? [Y]
Deze commando's zijn zeer nuttig voor hackers of spammers.
RemoteAccess
Het is vaak handig om verbinding te kunnen leggen met een andere machine. We hebben ook gezien dat de r-commando's dit mogelijk maken op een onveilige manier. Bastille-Linux beveelt aan om ssh op te halen. Deze software versleutelt de data (en daarmee ook de wachtwoorden) die over de lijn gaat.
Je kunt software gebruiken waarvan de sessie sleutel beperkt is tot maximaal 128 bit. Eerst even uitleg over de sessie sleutel. Dit is de sleutel die wordt gebruikt voor het coderen van de data. Hij wordt stap voor stap opgebouwd door de client en de server door een sleutel uitwisselingsprotocol te gebruiken (meestal Diffie-Hellman). Er wordt een sleutel opgebouwd met behulp van gedeelten van de sleutels van iedere deelnemer aan de verbinding. Vervolgens wordt de opgebouwde sleutel gebruikt voor het coderen van de data volgens een symmetrisch algoritme (wat wil zeggen dat dezelfde sleutel wordt gebruikt voor het coderen en voor het weer decoderen van de data). DES bijvoorbeeld, veelal gebruikt voor het coderen van Unix wachtwoorden, is een voorbeeld van zo'n symmetrisch algoritme met een sleutel van 56 bit.
Is 128 bit echter genoeg voor het beschermen en beveiligen van de data? Jazeker! Ook al heeft DES tegenwoordig het stempel "niet al te veilig", voor een beetje serieuze aanval op het algoritme heeft de doorsnee gebruiker niet genoeg rekenkracht tot zijn beschikking. Het is echter een misvatting om te denken dat een twee keer zo lange sleutel ook twee keer zo moeilijk is om te kraken. De moeilijkheidsgraad groeit exponentieel met de lengte. Voor een sleutel met lengte k, zijn er 2^k mogelijke sleutelwaarden (en dus 2^2k mogelijkheden voor een sleutel met lengte 2k). Dus, vermenigvuldiging van de sleutelgrootte met 2, geeft
extra mogelijkheden! Als je de moeite bekijkt die je moet doen om DES te kraken (56bit), dan kun je verwachten dat 128 bit welhaast onkraakbaar is (zolang het algoritme om te coderen tenminste geen zwakke plekken bevat). Vanuit de kraker gezien verschuift de moeilijkheidsgraad alleen maar van "onmogelijk" naar "nog onmogelijker".
Vier pakketten bieden gelijksoortige mogelijkheden:
- ssh 1.2.x: een client-server systeem voor gecodeerde verbindingen.
- ssh 2.x: zelfde als bovenstaande maar met minder zwaktes en meer mogelijkheden.
- OpenSSH: een soortgelijke versie maar dan onder BSD licentie.
- ssf: net als ssh maar dan toegestaan door de franse wet (dit moest vermeld worden!).
Ook de volgende modules zijn faciliteiten. De aanpak zal wellicht verrassend zijn: om te beginnen beperken we de rechten van deze programma's, om ze vervolgens af te sluiten. Ook al lijkt het tegenstrijdig, dat is niet zo. Ze kunnen namelijk opnieuw op worden gestart. Hetzij per ongeluk, hetzij door verdachte gebruikers... het is dan beter om op voorhan de rechten van deze programma's te beperken.
DNS
DNS (Domain Name Server) legt het verband tussen een IP-adres en een machine (en omgekeerd). Het adres 198.186.203.36 bijvoorbeeld, is het adres van www.bastille-linux.org. De primaire functie van deze server is BIND. Recentelijk is er een DOS-achtige (Denial Of Service) aanval uitgevonden die gebruik maakt van BIND. Je kunt dit tegen gaan door DNS toegang te geven tot een beperkt aantal directories (je kunt de root directory veranderen -normaal gesproken is dat "/" - met het commando chroot, voordat je het commando uitvoert).
Laten we eerst nog wat technische details bekijken voordat we doorgaan met uitleg over het gedrag van Bastille-Linux. Het achtergrondproces die dit alles regelt heet named. Hij wordt geconfigureerd via het bestand /etc/named.conf.
- Would you like to chroot named and set it to run as a non-root user? [N]
Hiervoor maakt Bastille-Linux een nieuwe gebruiker dns aan, zonder shell en met zijn eigen directory /home/dns. Hier bouw je een compleet systeem op met de gebruikelijke paden (/usr, /etc, /var ...). Vervolgens moet je de configuratiebestanden en de bibliotheken kopiëren die het achtergrondproces gebruikt. Er moet nog meer worden veranderd (controleer het script DNS.pm bijvoorbeeld in verband met syslog). DNS heeft nu zijn eigen omgeving :)
- Would you like to deactivate named, at least for now? [Y]
De doorsnee gebruiker heeft dit niet nodig op zijn machine omdat de ISP deze faciliteit reeds aanlevert. De DNS-HOWTO beschrijft de installatie van een cache maar zelfs dat kan (beveiligings-) problemen geven.
Apache
Apache is de meest gebruikte web server op het Internet. Deze is alleen bruikbaar in twee gevallen:
- Om zelf een site te hebben: hiervoor heb je een publiek IP-adres nodig. ISP's hebben hier meestal de beschikking over maar dat geldt niet voor hun abonnees.
- Om je eigen web-pagina's te bekijken/controleren: in dat geval kun je gewoon de server opstarten ($ /etc/rc.d/init.d/httpd start) wanneer je 'm nodig hebt.
Het configuratiebestand hiervoor staat in /etc/httpd/conf.
- Would you like to deactivate the Apache web server? [Y]
Omdat we het niet nodig hebben en om te minimaliseren, deactiveren we hem.
- Would you like to bind the web server to listen only to the localhost? [N]
Het is mogelijk het achtergrondproces alleen naar een bepaald adres te laten luisteren. De suggestie van Bastille-Linux is hier het adres van localhost, oftewel 127.0.0.1. Hiermee heb je dan een server waarmee je je eigen web-pagina's kan testen. Deze kun je dan opvragen via:
http://localhost/.
Dit betekent dat apache de loopback (lo) koppeling gebruikt.
- Would you like to bind the webserver to a particular interface? [N]
Met een bevestigend antwoord wordt het vorige antwoord nutteloos. Daar gaven we als koppeling loopback op en hier geven we weer een andere koppeling (Ethernet bijvoorbeeld) met een daarbij behorend ander IP-adres.
- Would you like to deactivate the following of symbolic links? [Y]
Dit moet je doen. Net als je DNS in een beperkte omgeving laat werken, gebeurt dit dan ook met Apache (oftewel /home/httpd). Als bijvoorbeeld één van de gebruikers een verwijzing naar root in zijn pagina's heeft opgenomen dan kan iedereen alle bestanden bekijken... zoals configuratiebestanden als passwd enz.
- Would you like to deactivate server-side includes? [Y]
In de bewoordingen van Jay Beale; "als je niet weet wat het is, dan heb je het ook niet nodig!". Het lijkt me voldoende hier te stellen dat dit zó kan worden geconfigureerd dat iedere gebruiker een programma op deze machine kan uitvoeren.
- Would you like to disable CGI-scripts, at least for now? [Y]
Het maken van een CGI-script (Common Gateway Interface) is niet zo moeilijk... maar betekent dat je voorzichtig moet zijn (het voorkomen van het vollopen van de stack bijvoorbeeld die een core-dump tot gevolg heeft). Veel beveiligingsproblemen komen voort uit fouten in een dergelijk script.
- Would you like to disable indexes? [N]
Zonder het bestand index.html in een directory laat Apache alle bestanden in die directory zien. Dit is niet zo'n groot probleem als het toestaan van het lezen van symbolische links... maar bedenk eens wat er gebeurt als een directory gevoelige data bevat.
Een web server kan, net als iedere andere server, een uitnodiging betekenen voor eenieder om eens op je machine langs te komen, ook diegene die kwaad in de zin hebben. Zoals bijvoorbeeld bij een bank, waar de namen van de klanten te lezen zijn (wellicht ook hun wachtwoorden)... ga maar eens naar www.kitetoa.com, de moeite waard :-) (noot van vertaler: Helaas alleen in het Frans).
Printing
Slechts één vraag, zul je vanaf deze machine afdrukken? Als het antwoord ontkennend is dan wordt het achtergrondproces lpd afgesloten en het SUID-bit ervan verwijderd (voor zowel lpd alsook lprm).
FTP
Vanuit beveiligingsoogpunt kan FTP een bron van problemen zijn. Wanneer bijvoorbeeld een verbinding wordt gelegd worden wachtwoorden in leesbaar formaat uitgewisseld. Hetzelfde geldt voor de data die over de lijn gaat, wat problematisch is als het vertrouwelijke gegevens zijn (financiële of medische gegevens...).
Recentelijk heeft men tevens lekken gevonden in de beveiliging van wu-ftpd. Als je deze server moet gebruiken, geeft Bastille-Linux je de mogelijkheid om de rechten hiervan te beperken.
Het bestand dat de toegang voor FTP regelt is /etc/ftpaccess
- Would you like to disable user privileges on the FTP daemon? [N]
Eén van de problemen van FTP is het toestaan van anonieme toegang (je weet wel, een gebruiker met een email adres als wachtwoord... meestal een verzonnen adres ;-) Een ander probleem is het opsturen van bestanden (bijvoorbeeld om zo de schijf te vullen of programma's er naar toe te sturen die de server kunnen kraken). Vele aanvallen maken gebruik van deze mogelijkheid. Een andere bron van problemen is het feit dat transacties niet worden gecodeerd.
- Would you like to disable anonymous download? [N]
Hiermee sluit je de mogelijkheid af om verbinding met het systeem te leggen via de gebruiker anonymous.
Nog wat raadgevingen
Zoals reeds gezegd is Bastille-Linux een zeer leerzaam hulpmiddel. De gestelde vragen en het commentaar zijn educatief. Als het geheel je niet duidelijk is dan zijn er vele verwijzingen naar materiaal waarmee je het juiste antwoord kan vinden. De beste mogelijkheid om iets te weten te komen is door de betreffende faciliteit daadwerkelijk te gebruiken.
Om dat te doen maak je eerst een reservekopie van het bestand met de vragen. Verander vervolgens het bestand Questions.txt. Iedere module begint met het woord FILE...hou alleen datgene wat je nodig hebt.
/root/Bastille >> cp Questions.txt Questions.txt-orig
/root/Bastille >> emacs Questions.txt BackEnd.pl &
/root/Bastille >> ../InteractiveBastille
Uiteraard zijn de maatregelen die je met Bastille-Linux treft niet voldoende voor het beveiligen van je systeem:
- Geen enkel systeem is 100% veilig.
- Er zijn nog meer maatregelen nodig om het werk van Bastille-Linux af te ronden.
Maatregelen waaraan je kunt denken zijn log file analyzers, poortaftasters (portsentry, snort, snplog enz.), de inzet van de www.openwall.com kernel patch (met een stack die je niet kunt uitvoeren, beperking van de rechten op /tmp en /proc, enz.).
Het is een lange en moeilijke weg om systemen te beveiligen. Je moet op de hoogte blijven van de laatste beveiligingslekken (zoals bijvoorbeeld via een mailing list als bugtraq van de site securityfocus).
Afsluiting
Bastille-Linux helpt bij het beveiligen van een welbekende distributie. Een vraag die zich daarbij opdringt: "waarom deze dan gebruiken?". Uiteraard heeft RedHat (of Mandrake - ze lijken veel op elkaar) een aantal leuke mogelijkheden. Dit artikel heeft niet tot doel een distributie af te kraken of op te hemelen. Eén van de geneugten van vrije software is tenslotte de keuzevrijheid. Dit artikel heeft meerdere doeleinden. Allereerst om te laten zien waar een systeembeheerder allemaal rekening mee moet houden in zijn permanente strijd tegen individuen die graag voor de kick zijn netwerk slopen. Tevens stelt dit hulpmiddel je in staat om eens goed onder de motorkap van Linux te kijken. Als zodanig is het een uitstekende introductie voor nieuwelingen, maar zeker ook voor de meer ervaren gebruikers.
Het geheel is gebaseerd op twee basisconcepten, te weten minimaliseren en diepte. Minder faciliteiten die draaien betekent minder beveiligingsrisico. Meerdere beveiligingsmechanismen voor al deze faciliteiten zijn beter dan één mechanisme... maar deze medaille heeft ook een andere kant. Een slecht geconfigureerde beveiliging kan zich namelijk tegen je keren.
Referenties
- http://bastille-linux.sourceforge.net : Bastille-Linux officiële site
- Bastille-Linux: een overzicht op www.SecurityFocus.com. Jay Beale, een belangrijk Bastille-Linux ontwikkelaar, presenteert de software en installatie. Heeft me veel geholpen met het schrijven van dit artikel ;-)
- http://www.sans.org : de site van de SANS groep (Jay Beale werkt met hen samen). Een schat aan informatie over computerbeveiliging.
- http://www.securityfocus.com/frames/?content=/vdb/stats.html: een boeiende studie over bedrijfssystemen en hun fouten. Op de eerste plaats staat daar een bekende operating systeem familie, daarna komt Linux.
- www.kitetoa.com : een site die web servers test... en boeiende dingen ontdekt. Grappig en zielig tegelijk (voor op heterdaad betrapte systeembeheerders) -alleen in het Frans-
- http://www.ssh.com : secured shell; ssh officiële site. Vrij te gebruiken voor evaluatie of niet-commerciëel gebruik, of voor universiteiten.
- http://www.openssh.org : idem aan ssh ... maar nu onder BSD licentie :)
Talkback voor dit artikel
Elk artikel heeft zijn eigen talkback pagina. Daar kan je commentaar geven of commentaar van anderen lezen:
2001-08-17, generated by lfparser version 2.17