Sikkerhet
Fra Wikipedia, den frie encyklopedi.
Med datasikkerhet menes gjerne tre ting: Konfidensialitet, integritet og tilgjengelighet.
- Konfidensialitet er evnen til å beskytte data mot innsyn
- Integritet er evnen til å beskytte data mot endring eller sletting
- Tilgjengelighet er at systemet skal holde seg oppe selv om det angripes
Et system er ikke sikrere enn det svakeste ledd, og det svakeste leddet er alltid administratoren av systemet. Med administratoren mener vi deg ;-) Et system må være sikret både mot inntrengere fra innsiden og utsiden. Et svært viktig prinsipp er at alt i utgangspunktet er sperret, og at man åpner for tjenester etter hvert.
| Innholdsfortegnelse |
Fysisk sikring
Et viktig prinsipp ved fysisk sikring er: Har uvedkommende fysisk tilgang til en datamaskin, er den ikke å regne som sikker. Grunnen til det er at hvis en har fysisk tilgang så kan en alltids skaffe seg tilgang til en maskin eller data med skrujern. (Åpne maskin, skru ut disk, montere i medbragt maskin, få full tilgang til å lese og endre data. Et annet alternativ er å boote maskinen med knoppix, noe som også greit kan brukes til å knekke windowsmaskiner). Dersom det er viktig at maskiner er sikre så er det viktig at innbrudd oppdages – monter innbruddsalarm og bevegelsesdetektorer i maskinrommet og ha den på hele tiden når det ikke er noen der.
Likevel er det noen tilpassinger som kan gjøres for å bedre lokal sikkerhet.
BIOS
Sett passord på BIOS, og deaktiver muligheten for oppstart fra andre medier (diskett, CDROM, minnepinne). Forhåpentligvis kan dette virke preventivt og i hvert fall forsinkende på inntrengeren. Dersom kabinettet fysisk er sikret (låsbart kabinett, eller maskinen står i låst skap) vil inntrengeren heller ikke ha muligheter for å fjerne batteriet som holder på opplysningene BIOS har lagret.
Fjern muligheten for lokal omstart med ctrl+alt+del
Rediger /etc/inittab og fjern muligheten for at en person starter om systemet fra konsollet ved hjelp av ctrl+alt+del. Erstatt «/sbin/shutdown -t3 -r now» med «/bin/echo "<ctrl><alt><del> disabled"»
ca:12345:ctrlaltdel:/bin/echo "<ctrl><alt><del> disabled"
Sikre bootloader
Hvem som helst som har fysisk tilgang til maskinen kan enkelt skaffe seg root-tilgang uten å kjenne root-passordet. Dette kan han gjøre blant annet med å boote med lilo-kommandoen linux init=/bin/sh. For å forhindre dette ønsker vi at lilo eller grub spør om passord hver gang vi booter, eller oppgir parametere på boot-kommandolinjen.
Bruker du lilo editerer du /etc/lilo.conf. Her legger du til to tilsvarende linjer som vist under.
password=mittbootpassord restricted
Etter dette kjører du bare /sbin/lilo for å skrive endringene til MBR. Siden passordet er skrevet i klartekst ønsker vi at kun root skal ha tilgang til lilo.conf. Dette endrer vi ved å kjøre en chmod 600 /etc/lilo.conf.
Bruker du grub er fremgangsmåten litt annerledes. Editer /boot/grub/menu.lst (eventuelt /boot/grub/grub.conf på Red Hat- og Fedora-systemer), her tilføyer du en par linjer øverst i filen.
timeout 5 password mittbootpassord
Husk å beskytte den filen også.
Passord
Velg vanskelige passord
Velg passord som ikke er logiske eller innholder ord man finner i ordbøker, bruk store og små bokstaver og spe på med litt tall og spesialtegn. Passordet bør inneholde minst 8 tegn. Bruk shadow-passord og MD5-passord. Passordene vil da bli lagret i en fil som kun root og gruppen shadow har tilgang til. Dette gjør at en ondsinnet person ikke har muligheten til å lese passordfilen og kjøre knekkeprogram mot denne. MD5-hashede passord gir en bedre kryptering og gir deg mulighet for lengre passord enn åtte tegn.
Vanskeliggjøre bruteforcing av passord
Om du legger inn en forsinkelse i /etc/login.defs vanskeliggjør dette prosessen med å gjette passord. Inntrengeren må i eksemplet under vente 20 sekunder for hver gang han taster passordet feil.
FAIL_DELAY 20
Klartekstpassord
Styr unna tjenester som kjører passordautentisering i klartekst, dette gjelder tjenester som blant annet telnet, rlogin, POP3, IMAP og FTP. Benytt heller SSH og SFTP/SCP/rsync over SSH og POP3S og IMAPS. Dette gjelder både hvilke tjenester du tilbyr selv og hvilke du bruker mot andre steder.
Priviligerte kontoer
Root og SU
Bruk root-kontoen minst mulig, all unødig bruk av root-kontoen medfører unødvendig sikkerhetsrisiko. Fjern muligheten for å logge inn med root-konto via ssh, dette gjøres i filen sshd_config. Se etter en linje som sier PermitRootLogin, sett denne til PermitRootLogin no. Bruk heller su – for å bli root etter at du har logget inn som deg selv.
Du kan også begrense hvilke brukere som skal ha tilgang til su (Substitute User) på flere måter. En mulighet er å editere /etc/pam.d/su
auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/Pam_wheel.so group=wheel
Dette vil gjøre at kun medlemmene av fil-gruppen wheel har tilgang til su, samt at vi åpner for utvidet logging.
Den andre muligheten er å endre rettighetene og gruppen til selve filen su.
-rwsr-x--- 1 root wheel 23176 Apr 7 2002 /bin/su
Vi oppnår her at kun root og gruppen wheel har tilgang til å kjøre su-kommandoen. (Merk også at /bin/su har en s i rettighetene sine. I denne posisjonen indikerer den SUID-rettigheter, dvs at programmet alltid kjører med rettighetene til eieren.)
Begrensning av tjenester og tilgang til disse
Kjør færrest mulig tjenester
Ikke kjør flere tjenester enn høyst nødvendig. Antallet potensielle sikkerhetshull øker proporsjonalt med antallet tjenester som kjører. Når det gjelder nettverkstjenester, er tommelfingerregelen at vet du ikke hva en tjeneste gjør, kan den stenges.
Begrens tjenestens rettigheter
Å kjøre dæmoner med utvidede rettigheter er aldri lurt, en dæmon bør aldri kjøre med root-rettigheter om det ikke er høyst nødvendig. Selv vanlige brukerkontoer har ofte flere rettigheter enn slike tjenester trenger. Opprett egne grupper og brukere til dæmonene med kun de nødvendige rettigheter, og gjerne et skall som ikke tillater ordinær login - for eksempel /bin/false eller tilsvarende. Enkelte dæmoner kan også kjøres i et chroot-miljø for økt sikkerhet.
En vanlig feil er å kjøre alle tjenester som brukeren nobody – dette gjør nobody til en svært kraftig bruker, så ikke gå i den fella. Opprett en egen bruker for hver tjeneste, med mindre du vet hva du gjør.
Begrens tilgang til systemet
Ved hjelp av TCP wrappers har du muligheten til å bestemme hvilke IP-adresser, IP-nett eller DNS-domener som skal ha tilgang til systemet. Den beste løsningen er at du nekter tilgang for alle, for så å åpne for de som skal ha tilgang. ALL: ALL@ALL, PARANOID i /etc/hosts.deny vil nekte alle tilkoblinger, du kan så åpne for de som skal ha tilgang til systemet i /etc/hosts.allow. ssh har innebygget TCP-wrapper support.
Brannmur
Sperr alt som ikke skal kunne nås på utsiden i brannmuren. En brannmur er et billig beskyttelseslag om noen skulle prøve seg. Benytt gjerne iptables lokalt på maskinen, og helst også en dedikert brannmur til perimetersikring.
Sikring av logger, partisjoner og data
Filrettigheter
Loggfiler bør tilhøre brukeren root og gruppen root eller adm. Uprivilegerte brukere bør ikke ha leserettigheter til loggfiler dersom dette kan unngås.
Apache lager loggfiler som eies av brukeren Apache kjører som, dette er en svakhet i oppbygningen av Apache. Denne svakheten gjør at en potensiell inntrenger kan slette alle loggfiler til Apache, siden Apache-brukeren har fulle rettigheter over filene.
Kataloger/partisjoner
Alle kataloger der brukerne har skriverettigheter bør ligge på egne partisjoner (som /home og /tmp). Kataloger som inneholder logger bør også ligge på separate partisjoner (som /var). Grunnen til dette er at vanlige brukere dermed ikke kan fylle opp viktige systempartisjoner og gjøre systemet ubrukbart på den måten (full /home hindrer kanskje vanlige brukere, men ikke root, og antaklig ikke de fleste viktige system og programvare-brukerne). Viktige tjenester som kjører som egene brukere bør kanskje ha egen partisjon til filene sine. En bruker bør heller ikke ha lov til å kjøre programmer i /tmp katalogen.
En linje i /etc/fstab lik dette, vil forhindre brukere å kjøre programmer på /tmp-partisjonen.
/dev/hdd4 /tmp ext2 defaults,nosuid,noexec,nodev 0 2
Merk at dette derimot ikke kan garantere at brukere ikke kan eksekvere ting som ligger i /tmp. Binærfiler kan eksekveres ved å for eksempel kjøre /lib/ld-linux.so.2 /tmp/fil – selv om /tmp er montert noexec!.
Kvoter
Kvoter (Quota) bør brukes på alle filsystemer der uprivilegerte brukere har skriverettigheter (foreksempel /home og /tmp). Dette for å forhindre at en bruker fyller opp disken/partisjonen med data. Kvoten kan du kalkulere ut fra antallet brukere delt på den diskplassen du har disponibelt (sett alltid av litt ekstra plass).
Det er tre viktige tommelfinger regler når du bruker kvoter.
- Kvoter bør brukes på alle filsystemer der uprivilegerte brukere har tilgang.
- Kvotene må være små nok til at brukerne ikke spiser all diskplassen.
- Kvotene må være store nok til at brukeren har den plassen han trenger.
Det vanligste er kvoter på brukernivå, men du kan også sette kvoter på gruppenivå.
For å benytte kvoter må du ha kvotestøtte i kjernen, har du ikke det må du kompilere kjernen på nytt med kvote support.
Har du kvotestøtte i kjernen er kvoter en lek. Alt som trengs er noen få endringer i /etc/fstab.
Brukerkvoter:
/dev/hdb5 /home ext2 defaults,usrquota 0 2
Gruppekvoter:
/dev/hdb5 /home ext2 defaults,grpquota 0 2
Både gruppekvoter og brukerkvoter:
/dev/hdb5 /home ext2 defaults,usrquota,grpquota 0 2
Etter du har gjort dette skal vi lage to tomme filer på partisjonen vi har valgt kvoter på.
touch /home/quota.user etterfulgt av en touch /home/quota.group skal gjøre nytten. Da er det bare å starte quota ved hjelp av /etc/init.d/quota start (kan avvike noe i enkelte distribusjoner).
Nå er det bare å sette brukerkvotene ved hjelp av edquota –u <bruker> og gruppekvoter med edquota -g <gruppe>.
Backup
Ha alltid gode backup-rutiner. Når uhellet er ute er det for seint å tenke på dette. Det anbefales at du tar inkrementell backup så ofte som mulig. Backupen bør også lagres på et eksternt medium. Det hjelper deg lite med en backup av systemet på en annen partisjon om disken ryker. En løsning med disker i raid 1 (speil) vil også øke driftsikkerheten betraktelig, ryker en disk kan du gjenoppbygge disken ut fra de data som ligger på speilet.
Herding av systemet ved hjelp av programvare tilegg
Det finnes programvare som herder opertivsystemet ut over de muligheten som Linux kjernen gir.
Security Enhanced Linux
fra NSA (http://www.nsa.gov/selinux/) Dette er kjerne tilegg som detn amerikanske NSA organisasjonen har gitt til OpenSource.
AppArmour
AppArmour på openSUSE.org (http://en.opensuse.org/Apparmor)
Denne artikkelen er en stubb. Du kan hjelpe Linuxguiden ved å utvide den (http://www.linuxguiden.no/index.php?title=Sikkerhet&action=edit).
Overvåking og oppdatering
Overvåk systemet
Hold øye med systemet slik at du kan gripe inn når noe uventet skjer. Du kan overvåke logger ved hjelp av log2mail eller logwatch som installeres automatisk på Red Hat systemer. Brukere som skanner etter åpne porter kan du overvåke ved hjelp av scandetd eller portsentry.
Med en utrangert mobiltelefon og verktøyet gsm-utils kan også systemet selv sende SMS ved feilsituasjoner.
Se avsnittet om vedlikehold for flere verktøy som hjelper til i den daglige systemdriften.
Hold systemet oppdatert
De fleste distribusjoner har programvare for automatisering av sikkerhetsoppdateringer, bruk disse flittig. Ikke vent med å tette sikkerhetshullene til etter at det er for sent.
Aide
Aide er et program som sjekker integriteten på filer. Den holder orden over sha1, md5, rmd160, tiger, atime(Sist gang filen har vært åpnet), ctime(når filen ble laget), mtime(sist filen ble modifisert), størrelse og mer. Dette gjør Aide ved å opprette en database over alle disse verdiene. Aide kjører jevnlig sjekker mot filene på systemet for å se om de har blir tuklet med. Databasen er det lurt å oppbevare på et sikkert sted der ingen har skrivetilgang, f.eks. på en CD. Aide sender også e-post til en spesifisert adresse, der den rapporterer om evt. endringer på filene.
Aide var det verktøyet som oppdaget innbruddene på Debian sin servere i fjor høst.
Når skaden har skjedd
Har du hatt innbrudd, eller mistenker at du har hatt det, er det bare én måte å gjenopprette tilliten til at du har et system du kan stole på: Ta en full re-installasjon av systemet. Det er veldig sannsynlig at inntrengeren har lagt igjen et rootkit eller åpnet systemet slik at han har tilgang til det når han trenger det. Samtidig er systemet endret slik at disse åpningene ikke vises for noen.
Det er imidlertid viktig å huske på at hvis noen først har brutt inn på maskinen din én gang, kan de sannsynligvis gjøre det igjen. Iallfall hvis du setter opp systemet på nøyaktig samme måte. Det er viktig å gjøre undersøkelser for å finne ut hva som har blitt exploitet osv. (Har du f.eks dine egne/andres PHP-sider på maskinen, se etter mulige XSS-hacks som include(file) så gladelig åpner for).

