original in en Michael Jastremski
en to nl Lisa Saarloos
Michael Jastremski is al jaren bezig met Unix. Zijn website is
te vinden op
http://westphila.net/mike.
Hij is Andrew
Dit artikel gaat in op manieren voor de systeembeheerder om hun systeem veiliger te maken tegen indringers. Het behandelt verschillende manieren om de veiligheid van een Linux systeem te vergroten.
Het op grote schaal inbreken op computers aangesloten op het internet wordt steeds meer de praktijk van alledag. Linux-en FreeBSD-servers zijn steeds vaker het doelwit van aanvallen die gebaseerd zijn op buffer overflows in programma's als imapd en BIND. Elke dag komen kwetsbaarheden van alle soorten en grootten onder de aandacht van bijna 20.000 geabonneerden op de BUGTRAQ mailing list (indien u van plan bent zich in te schrijven op een mailinglist over beveiliging, dit is de lijst die u zoekt).
De kans is groot dat 1 van die 19.305 geabonneerden een for()-lus gaat schrijven en met een beetje logisch nadenken in staat is door een knip-en-plak exploit toegang te krijgen tot zoveel machines als mogelijk is..
Vroeger of later zal de for()-lus in staat zijn het adres van de computer te achterhalen. U kunt zich maar beter vooraf voldoende beschermen.
Ondanks wat sommige 'experts' denken is het installeren en onderhouden van een goed beveiligde computer niet een snelle wetenschap. Gezonde systeembeheer-praktijken zijn een noodzakelijk verweer tegen de gevaren van een wereldwijd netwerk. Dit artikel beschrijft enkele van de voorzorgsmaatregelen die ik normaal gesproken neem als ik een op een netwerk aangesloten RedHat Linux systeem configureer. Hoewel dit artikel er naar streeft richtlijnen te geven voor het beveiligen van uw computer tegen de kwaadwillendheid van andere gebruikers is dit artikel niet bedoeld als een volledige gids.
Hierna volgen enkele stappen die u hopelijk helpen om te voorkomen dat uw systeem slachtoffer wordt van fouten in uw netwerksoftware die het mogelijk maken in te breken. WAARSCHUWING: als u niet precies weet wat u doet, doe het dan niet. Enkele van deze stappen gaan uit van een bepaalde mate van begrip aan uw kant. Garantie geldt niet in Alaska, Hawaii & Puerto Rico. Enige aanbevolen literatuur vind u aan het einde van dit artikel..
1. Verwijder alle overbodige netwerkservices van uw systeem. Hoe minder manieren om contact te leggen met uw systeem, hoe moeilijker het wordt voor een inbreker om op uw systeem binnen te komen. Plaats een comment-teken (#) voor alles wat u niet nodig hebt in /etc/inetd.conf. Geen telnet nodig? Schakel het uit. Hetzelfde geldt voor ftpd, rshd, gopher, chargen, echo, pop3d en consorten. Vergeet niet 'killall -HUP inetd' te typen wanneer u klaar bent met het bewerken van /etc/inetd.conf om inetd zijn configuratie-bestand opnieuw te laten inlezen. Vergeet ook niet te kijken in /etc/rc.d/init.d directory. Sommige netwerkprogramma's (BIND, de printer daemon) zijn op zichzelf staande programma's die in deze scripts worden opgestart in plaats van vanuit inetd.conf.
2. Installeer SSH. SSH is een vervanging van de meeste Berkeley 'r' commando's. Zie de homepage van SSH op http://www.ssh.org . SSH (Secure Shell) is een programma waarmee u in kunt loggen op een andere machine op het netwerk, om programma's uit te voeren en om bestanden te kunnen verplaatsen. Het voorziet in een strikte authentificatie en een veilige communicatie over een onveilig netwerk.
Het programma heeft nog vele andere mogelijkheden. Download SSH van http://www.ssh.com/.
3.Gebruik vipw - een programma om op een veilige manier uw passwd te bewerken - om non-login accounts te blokkeren. Let er op dat onder Redhat Linux elke gebruiker die niet zou mogen inloggen wel een geldige shell heeft (/bin/sh), wat niet de bedoeling kan zijn. Let er ook op dat geen enkel account een leeg password-veld heeft. Het volgende is een voorbeeld van hoe het systeem-gedeelte van een gezond passwd bestand er uit ziet.
daemon:*:2:2:daemon:/sbin:/bin/sync adm:*:3:4:adm:/var/adm:/bin/sync lp:*:4:7:lp:/var/spool/lpd:/bin/sync sync:*:5:0:sync:/sbin:/bin/sync shutdown:*:6:0:shutdown:/bin:/sync halt:*:7:0:halt:/sbin:/bin:/sync mail:*:8:12:mail:/var/spool/mail:/bin/sync news:*:9:13:news:/var/spool/news:/bin/sync uucp:*:10:14:uucp:/var/spool/uucp:/bin/sync operator:*:11:0:operator:/root:/bin/sync games:*:12:100:games:/usr/games:/bin/sync gopher:*:13:30:gopher:/usr/lib/gopher-data:/bin/sync ftp:*:14:50:FTP User:/home/ftp:/bin/sync nobody:*:99:99:Nobody:/:/bin/sync
4. Haal de 's' bits weg bij programma's met als eigenaar root die die privileges niet nodig hebben. Dit kan met de opdracht 'chmod a-s' gevolgd door de bestanden waarbij dit het geval is.
Zulke programma's zijn, onder andere:
Ik heb een asterisk (*) geplaatst naast elk programma die ik persoonlijk zeker zou uitschakelen. Onthoud dat uw systeem sommige "suid root" programma's nodig heeft om goed te kunnen functioneren, dus wees voorzichtig.
Een ander alternatief is het aanmaken van een speciale groep 'suidexec', en plaats alleen de gebruikers die u volkomen vertrouwt in deze groep. chgrp(1) de uit te schakelen suid-programma(s) naar de suidexec groep en haal de permissies weg die het mogelijk maken voor iedereen de file uit te voeren.
# find / -user root -perm "-u+s" */bin/ping */bin/mount -- alleen root kan bestandssystemen mounten */bin/umount -- het zelfde geldt hier /bin/su -- rommel hier niet mee! /bin/login /sbin/pwdb_chkpwd */sbin/cardctl -- PCMCIA card control utility */usr/bin/rcp -- Gebruik in plaats hiervan SSH */usr/bin/rlogin -- ditto */usr/bin/rsh -- " */usr/bin/at -- Gebruik cron, of schakel ze allebei uit */usr/bin/lpq -- installeer LPRNG */usr/bin/lpr -- " */usr/bin/lprm -- " */usr/bin/mh/inc */usr/bin/mh/msgchk /usr/bin/passwd -- rommel hier niet mee! */usr/bin/suidperl -- elke nieuwe versie van suidperl lijkt wel een buffer -- overflow te hebben */usr/bin/sperl5.003 -- gebruik deze alleen als u deze echt nodig heeft /usr/bin/procmail -- */usr/bin/chfn */usr/bin/chsh */usr/bin/newgrp */usr/bin/crontab */usr/X11R6/bin/dga -- heel veel buffer overflows, ook in X11 */usr/X11R6/bin/xterm -- " */usr/X11R6/bin/XF86_SVGA -- " */usr/sbin/usernetctl /usr/sbin/sendmail */usr/sbin/traceroute -- u kunt vast wel accepteren dat u eens in de zoveel -- tijd uw root password moet intypen
5. Installeer de laatste versie van sendmail indien u die wilt gebruiken op uw systeem. Haal de broncode op op ftp://ftp.sendmail.org/pub/sendmail. Pak de broncode uit en lees de instructies. Installeer smrsh (inbegrepen bij sendmail) indien u nog wat tijd kan vrijmaken. Dit programma speelt in op wat gebruikers bezig houdt als het gaat om sendmail en het versturen van E-mail aan andere programma's. Bewerk sendmail.cf en zet de 'PrivacyOptions' op 'goaway':
O PrivacyOptions=goaway
Indien u niet van plan bent internet E-mail te ontvangen, ACTIVEER DAN NIET SENDMAIL IN ONTVANGENDE MODUS (sendmail -bd)!. Is dit het geval, schakel /etc/rc.d/ini.d/sendmail.init uit en geef de opdracht 'killall -TERM sendmail'. U bent nog steeds in staat om uitgaande mail te versturen.
6. Werk BIND bij tot de laatste (stabiele) versie als u dit gebruikt. De meest recente versie van BIND Upgrade BIND is te vinden op http://www.isc.org . Gebruikt u het niet, schakel het dan uit.
7. Bouw een nieuwe kernel. Dit doe ik gewoonlijk alleen al om alle overbodige opties van een standaard installatie uit de kernel te verwijderen. HINT: Kies alle firewalling opties, ook al gaat u uw systeem niet als zodanig gebruiken.
CONFIG_FIREWALL=y CONFIG_NET_ALIAS=y CONFIG_INET=y # CONFIG_IP_FORWARD is not set # CONFIG_IP_MULTICAST is not set CONFIG_SYN_COOKIES=y CONFIG_RST_COOKIES=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_VERBOSE=y # CONFIG_IP_MASQUERADE is not set # CONFIG_IP_TRANSPARENT_PROXY is not set CONFIG_IP_ALWAYS_DEFRAG=y CONFIG_IP_ACCT=y # CONFIG_IP_ROUTER is not set # CONFIG_NET_IPIP is not set CONFIG_IP_ALIAS=m
8. Installeer patches: Elk bekend probleem met hun software kan gevonden worden op de RedHat website, specifiek de Errata pagina's ( zie http://www.redhat.com/support/docs/errata.html om een overzicht te zien welke patches van toepassing zijn op uw systeem. RedHat is over het algemeen erg netjes met het actueel houden van hun website. Ze geven ook links naar de benodigde RPM-bestanden en installatie-instructies.
9. Configureer tcp_wrappers: Tcp_wrappers is een methode voor het uitoefenen van controle op welke computers toegestaan wordt te "praten" met uw computer. Dit pakket, geschreven door beveiligingsdeskundige Wietse Venema, staat als het ware tussen de programma's die gestart kunnen worden vanuit inetd en de buitenwereld in en bepaald aan de hand van een aantal configuratiebestanden of het een netwerktransactie moet toestaan of moet weigeren. Bijvoorbeeld, om telnet & ftp toe te staan vanaf uw ISP, maar de rest te weigeren zet u het volgende in /etc/hosts.allow:
in.ftpd : .dialup.uw-isp.com : allow all : all : deny
SSH, sendmail en andere softwarepakketten kunnen gecompileerd worden met tcp_wrapper ondersteuning. Zie 'man 1 tcpd' voor meer informatie.