Bastille-Linux
ArticleCategory:
System Administration
AuthorImage:
TranslationInfo:
original in en Frédéric Raynal
fr to en Georges Tarbouriech
en to nl Tom Uijldert
AboutTheAuthor:
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.
Abstract:
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.
ArticleIllustration:
ArticleBody:
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 :)