Bastille-Linux
ArticleCategory:
System Administration
AuthorImage:
![[Foto van de Auteur]](../../common/images/Frederic_Raynal.png) 
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:
![[Illustratie]](../../common/images/illustration166.jpg) 
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".
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 :)