30 January, 2008

Min I/O

Et personlig resonnement om bruk og sikring av datamaskiner tilkoblet Internett i hverdagen.

Opprettet: 09.12.2007

Min erfaring med avansert databruk startet vel på slutten av 90-tallet, da en venn anbefalte meg å innstallere Slackware Linux for å bedre systemet mitt slik det kjørte programmer og utførte oppgaver slik jeg selv ville ha det til å utføres. Han oppfattet meg som en avansert databruker med klart definerte forventninger av mine egne systemer, og sa derfor at jeg ville finne mange nye kunnskaper dersom jeg begynte med Linux.

Slik ble det dessverre ikke med det første, fordi jeg hverken hadde erfaring med generell systemutvikling, programmering eller skreddersying av system-oppsett på noen som helst måte, sett bort i fra den vanlige Windows-farsen: "Installér-og-funger". Hvis en virkelig VIL skreddersy sitt eget system for å oppnå hvisse mål med hele prosessen, må en nesten kunne datamaskinen man vil skreddersy ut og inn, 'from scratch' som det heter så fint på gammalnorsk. Dette irriterte meg veldig en god stund.

Etter å ha prøvd et par linux-distribusjoner (såkalte programvare-samlinger), alt fra "Mandrake Linux" (nå kalt Mandriva) til "Debian GNU/Linux", tok jeg meg selv i å alltid falle tilbake på mitt første forsøk på åpen kildekode; "Slackware Linux". Denne 'distroen' tvinger en til å forstå hvordan et OS (Operativ System) basert på POSIX (Portable Operating System Interface)-standarder fungerer...

Ikke noen polerte grafiske brukergrensesnitt for å konfigurere noe som helst, alt foregår på CLI (Command Line Interface), noe som kan få hvem som helst til å ville rive ut sitt eget hår. Men jeg var heldig, mine yngre dager på 80-tallet tvang meg til å leke med MS-DOS p.g.a. tilgjengelige spill på den tiden. Og som mange andre hackere sannsynligvis gjorde for å finne frem til egne konklusjoner, hadde jeg min del av episoder med "prøv-og-feil" og "prøv-og-feil-og-ødelegg". Long-story-short: å tukle med data på grunn-nivå kan gjør MYE skade, men også gi mye positiv erfaring til å benytte ved senere anledninger (faren min delte ikke samme oppfatning ;P i alle fall ikke akkurat i gjerningsøyeblikkene, havarerte mang en harddisk på mine data-eventyr).

Jeg ble veldig fascinert av åpen kildekode miljøet, hvor alle bare kunne laste ned kildekode (programvare-oppskrift) og "koke sammen" (les kompilere) programmer og bruke dem uten noen begrensende brukeravtaler eller proprietære* lisenser som avgrenset hvordan en selv brukte/ga bort både ren kildekode eller modifiserte binære (ferdigkokte/kompilerte) versjoner gjennom nettet til alles felles fordel. De politiske sidene ved det hele kunne ikke interessere meg i det minste, men at kommersielle virksomheter på begynnelsen av 2000-tallet begynte å se på åpen kildekode som en motstridene trussel mot sine egne produkter, viste jo bare at folkene bak virkelig visste hva de holdt på med. Og dette styrket bare min egen innsats i å beherske teknologien.

* Proprietær programvare, også kalt godseid programvare, er en samlebetegnelse på programvare som holdes ufritt av et kommersielt selskap. Også gratis programvare kan gå innunder dette begrepet; at programvaren er gratis, betyr ikke at den nødvendigvis er fri. Det er her mange misforståelser oppstår – særlig på engelsk, der «free» betyr både «gratis» og «fri».

Det tok meg en del år å forstå prinsippene bak UNIX/Linux, delvis fordi systemene egentlig bare ble flittig brukt av universiteter, forskere, professorer og utviklere på 70/80-tallet. Men når jeg selv begynte å fordype meg i både systemutvikling og programmering, fant jeg ut at det ble uendelig mye lettere ettersom jeg la meg i selen for å forstå grunnstenene i databehandling. Og i samme slengen innså jeg også at det vil ta lang tid før "mannen-i-gata" kan bruke slike systemer effektivt i hverdagen, selv om jeg selv bare er hobby-bruker og ivrig fantast, så jeg at det fantes mange andre hobby-brukere med min tankegang på nettet gjennom å lese forumer og oppslag via OSS-prosjekter (OSS=Open Source Software). Så det finnes et uendelig antall andre som også vil ha et system som gjør ting på måter de selv bestemmer eller setter det opp til. Men faktum er at de fleste bare vil ha "noe som bare fungerer", både privat og i jobb. Og at det derfor beror totalt på oss som virkelig orker/gidder å sette oss inn i teorien bak det hele for å få ting til å "bare virke". Jeg liker ikke et så stort ansvar, men føler likevel at jeg med evne til å forstå IT bedre enn gjennomsnittet i alle fall burde gjøre folk oppmerksomme på fallgruvene, og muligens til og med hjelpe andre med å gjøre databruken sin sikrere.

Etterhvert ble jeg også oppmerksom på problemene bak datautvikling; tilrettelegging for nettopp disse sistnevnte brukerne. Til og med nå i det nye årtusenet, et par tiår etter personlige datamaskiner inntok markedet og ble vanlig bruksgjenstand i de fleste hjem, sliter virkelig IT-industrien fremdeles med nettopp den samme probleminnstillingen; tilrettelegging.

Det som egentlig var min personlige grunn til å inntre på åpen kildekode-scenen, var viljen til å "fikse" på ting i systemer, slik at de gjorde ting akkurat slik JEG ville at det skulle gjennomføres. Og dette er egentlig meget vanskelig å oppnå med lukkede/proprietære operativ systemer (les M$ Windows).

For ikke å glemme noe av det viktigste vi burde ta MYE mer hensyn til ift. databruk i hverdagen: nemlig sikkerhet! Nå når alle handler med kredittkort over nettet og egentlig ikke er helt klar over hvor usikkert det er å sende intime person-detaljer på det offentlige nett, er dette kritisk viktig. Hadde bare alle visst hvor enkelt det er for en med "know-how" å snappe opp biter med informasjon fra nettet og misbruke informasjonen på det groveste med hensynsløse kriminelle hensikter, hadde nok folk tatt litt mer ansvar i egne hender. Det var innlysende for meg, at jeg som privat-person måtte sikre hjemmenettverket mot inntrengere og lurendreiere. Men å totalsikre et dataanlegg/nettverk er umulig. Dess mer en sikrer, dess mer begrenser man hvordan man selv kan bruke systemene i ettertid. Å finne mellomtingen er definitivt ikke lett, men er for meg alfa-omega innen datasikring.

En kamerat som utdanner seg innen datasikkerhet ga meg et bra tips: bare tillat tjenester som brukes daglig og kjør whitelisting (unntakslister) slik at funksjonaliteten ikke reduseres. Selv fant jeg diverse artikler online om å bruke en råsikret SPI**(Stateful Packet Inspection)-brannvegg (ved bruk av IPTables/IPChains i Linux) med dedikerte kjeder for hver protokoll (TCP/UDP/ICMP) og egne kjeder for:

IP-spoofing:

I datanettverk, brukes uttrykket IP-spoofing for når pakker blir laget med falsk kilde-adresse for å skjule identiteten av senderen, eller for å gi seg ut for å være fra et annet datasystem enn det som faktisk blir brukt til å sende ut pakken. Vanlig adresse-spoofing benyttes dersom angriperen ikke bryr seg om responsen til mottaker, eller angriper klarer å gjette seg frem til responsen mottaker sender ut til den falske adressen i pakkene. I visse tilfeller, er det mulig for angriper å se disse responsene, eller å rute responsen til sin egen maskin. Det mest vanlige tilfellet av dette er når angriper spoofer fra en adresse på samme LAN eller WAN (angriper sitter på nettverket til samme Internett Leverandør (ISP)). IP-spoofing brukes som regel når det utføres tjenestenekt-angrep mot verter.

Port-scanning:

En port-skanner, er mykvare designet for å "sniffe" et nettverk for verter med åpne kommunikasjons-porter. Dette blir ofte brukt av administratorer/analytikere/hackere for å sjekke sikkerheten på nettverket deres, og av crackere/kriminelle til å kompromittere det. Å port-skanne en vert er å skanne for flere åpne kommunikasjons-porter på samme vert. Å "port-sveipe" er å skanne flere verter om gangen for én spesifik åpen port. Sistnevnte brukes som regel for å finne flere verter med den samme åpne tjenesten for å misbruke tjenesten/porten til å utføre et masseangrep/tjenestenekt-angrep (mer om dette nedenfor).

Tjenestenekt-angrep

Tjenestenekt (Denial-of-Service, DoS) brukes innen Informasjons- og IT-sikkerhet for å beskrive et angrep hvor man hindrer at noen eller noe (f. eks. en person eller et system) får tilgang til informasjon eller ressurser de skal ha tilgang til. Et vellykket tjenestenektsangrep vil således føre til et brudd på tilgjengeligheten til informasjonen/ressursen. Tjenestenektangrep har vokst til å bli et problem på Internett, særlig distribuerte varianter (Distributed DoS, DDoS), hvor flere "slave"-maskiner (f.eks. "zombies") brukes til å angripe en eller flere maskiner via nettverket. Alle disse maskinene samlet vil ha større båndbredde enn offeret, noe som utnyttes til å sende så mye data til offeret at legitim trafikk ikke vil komme igjennom. Et tjenestenektangrep må ikke nødvendigvis utføres via et nettverk. Det er mulig å lage programmer som ikke gjør annet enn å kopiere seg selv (såkalte "Fork Bombs"). Etter kort tid vil prosessoren bli overarbeidet og systemet vil stoppe.

...og dusinvis med andre hacking metoder før pakkene endelig kjøres i kjeden for videresending til det interne LAN-et, og så mot ende-vertene.

** I datasammenheng, er en "SPI"-brannvegg (en hvilken som helst brannvegg som utfører uttrykksfull pakke inspeksjon (SPI)) en brannvegg som holder rede på statusen av nettverksforbindelser (slik som TCP-strømmer, UDP-kommunikasjon eller ICMP-meldinger) som traverserer den. Brannveggen er programmert til å redegjøre legitime pakker for forskjellige typer etablerte forbindelser. Bare pakker som matcher en kjent etablert tilstand vil tillates å traversere gjennom brannveggen; andre vil bli forkastet.

Den endelige løsningen jeg kom med basert på informasjonen fra både kompis og Internett har spart meg for mye hodebry. Har kjørt denne skreddersydde løsningen på mine egne maskiner nå i ca. et halvt år, og den fanger faktisk opp de fleste ondsinnede pakkene som finner veien inn gjennom Internett-aksessen, uten å være altfor nazi angående sikkerhetsnivået slik at det ødelegger for normal funksjonalitet. Mesteparten av loggen består av døde packets (tidsbrudd p.g.a. ulovlig kilde og/eller destinasjon, evt. uetablerte forbindelser mot LAN-verter), men har fått noen SYN-scans fra diverse luringer rundt om i Europa også ;-P men som folka bak ruter-løsningen "IPCop" sier: "The Bad Packets Stops Here!" Kan de ikke nå målrettet vert, kan de ikke gjøre noe skade. Akkurat som partikler i luften som kan gå ned i lungene og gjøre skade innvendig, holdes ute med et luftfilter.

For å snakke litt om sikkerhet i Windows, så har jeg ikke store tilliten til at M$ faktisk sikrer noenting skikkelig i det hele tatt. Det sies at Windows-brannmuren skal stoppe det meste, men da spør jeg: hvorfor henger de fleste WinXP-maskiner seg konstant når de står tilkoblet direkte bredbånds-oppkobling uten avansert program/port-oppsett og protokoll-regelsett? Jeg jobber hos en av Nordens største bedrifts-ISPer, så jeg vet at enkelte privat-ISPer blokkerer for "ulovlige" protokoller (f.eks. P2P, BitTorrent, osv.) og noen kjører brannmur på forespørsel fra kunder. Med god kjennskap til nettverksteori, kan disse sperringene lett forbigås, men jeg forstår at visse ISPer føler seg tvunget til dette p.g.a. rettsforfølging, det er bare unødvendig siden det egentlig ikke sperrer for noe, alle sperringer har svakheter, og svakheter kan alltid utnyttes.

Men native brannmur eller mykvare-basert tredjeparts brannmur for Windows har jeg meget liten tillit til (basert på egen erfaring) og er også en av grunnene til at jeg SJELDEN kjører M$-produkter på egne maskiner. Har jeg alternativer, bruker jeg som regel dem, eller evt. kjører en sentral NAT/brannmur-maskin fra bredbånds-tilkobling til switcher/rutere mellom eventuelle usikrede maskiner i nettverket mitt.

Mitt personlige råd om generell datasikkerhet hos privatpersoner, ville vel vært: bruk helst en dedikert gateway m/brannvegg (les ruter) mellom datamaskiner på det interne LAN-et mot Internett-aksessen for å beskytte mot ondsinnet trafikk. Eller kjør en egen datamaskin som gateway mellom Internett-aksess og internt LAN, som gjør akkurat den samme jobben like godt som et dyrt nettverksdedikert produkt, bare for småpenger. Sørg også for at en eller flere enheter foran datamaskin(ene)*** før Internett-aksessen kjører en form for SPI-brannvegg.

*** Dersom det brukes mer enn èn brannvegg, må alle konfigureres for å tillate/nekte trafikk mellom hverandre

Et alternativt tiltak som kan være lurt, er å spesifisere for brannvegg(ene) hvilke programmer som ikke skal nektes full tilgang til det offentlige nett (Internett), eller evt. åpne spesifiserte porter (som i teorien ikke blir sett på som spesielt sikkert) og la den ytterste (dersom du kjører mer enn én) brannvegg filtrere/droppe uønsket trafikk****.

**** Det siste alternativet anbefales ikke for folk som har vanskelig for å forstå enkel, generell data-/nettverks-sikkerhet.

Innlegget er sammensatt av egne erfaringer og utdrag fra bl.a. www.wikipedia.org

1 kommentarer :

Olti said...

Veldig gjennomført artikkel! Likte godt hvor dypt du går inn på grunnlaget for hvorfor du valgte å fordype deg i nettverks sikkerhet! Kanskje du skulle skrevet noe om de forskjellige typer software / distroer du bruker i sikkerhets sammenheng? Hadde vært morro å bytte tankekart på hvordan hjemme nett er satt opp =)

Post a Comment