Og en til i dag… Lett inspirert av Lasse:
You are .*	 You are a wildcard.  You are everything to everybody.  You can't make up your mind as to what you want to be.
Which File Extension are You?

og

You are Amiga OS. Ahead of your time.  You keep a lot of balls in the air.  If only your parents had given you more opportunities to suceed.
Which OS are You?

Found this article valuable? Want to show your appreciation? Here are some options:

a) Click on the banners anywhere on the site to visit my blog's sponsors. They are all hand-picked and are selected based on providing great products and services to the SharePoint community.

b) Donate Bitcoins! I love Bitcoins, and you can donate if you'd like by clicking the button below.

c) Spread the word! Below, you should find links to sharing this article on your favorite social media sites. I'm an attention junkie, so sharing is caring in my book!

Pin It

Hvorfor brannmurer er teite – og når de ikke er det…

Jeg møter stadig vekk mennesker som blir forundret over hvorfor jeg anser brannmurer, antivirus og antispyware som et vesentlig sikkerhetsproblem fremfor noe sikkerhetsøkende tiltak. Derfor tenkte jeg nå å skrive noen artikler om dette slik at jeg kan referere til dette når folk spør, i stedet for å skrive nye artikler gang på gang.

Ettersom disse artiklene skal kunne brukes overfor alle, uansett teknisk nivå er det nødvendig å starte litt enkelt. For de som har basiskunnskapen om hvordan brannmurer fungerer så se på dette som en oppfrisking.

Internett baserer seg på en protokoll, et språk så å si, som heter TCP/IP. Dette er en todelt protokoll, TCP og IP, der TCP er det mest relevante i første omgang. Når man kommuniserer over nett skjer det ved at programmer kobler seg til såkalte porter i TCP. Disse portene, 65535 i tallet, er inngangsportene for trafikk inn til en maskin.

Når man, for eksempel, åpner en webside så kobler nettleseren seg til en port på en server. Normalt er dette port 80; det er så normalt at man ikke trenger å spesifisere det når man åpner en webside. Når du åpner http://www.vg.no/ så åpner du _egentlig_ http://www.vg.no:80/, men ettersom port 80 stort sett alltid er standard slipper man å skrive dette ekslisitt.

Samtidig når du åpner en forbindelse til port 80 på en webserver åpnes det en port på din maskin som webserveren bruker for å sende websiden tilbake til nettleseren. Det er relativt vanlig at disse portnummerene starter på 1025, men andre nummer kan også brukes. Disse portene er også stort sett kun oppe en kort periode mens websiden sendes fra serveren og tilbake til deg som ‘klient’.

Det finnes mange standard porter som brukes for ulike tjenester. For eksempel er utgående epost normalt port 25, inngående epost er port 110, filoverføring med FTP er på port 21 og eventuelt 22, og så videre. Portene under 1025 er stort sett reservert til slike standard porter, og IANA vedlikeholder en liste over disse reserveringene. Dette er forklaringen på hvorfor klienter gjerne bruker port 1025 og oppover når de åpner for midlertidig inngående trafikk.

For at en port skal kunne brukes må det være et program som sier ifra til operativsystemet at det ønsker å lytte på innkommende henvendelser på denne porten. En webserver vil lytte på port 80, en utgående mailserver på port 25 og så videre. Disse ‘serverene’ er altså bare programmer som sier ifra at de ønsker å lytte på en eller flere slike porter, på samme måte som nettleseren sier ifra at den ønsker å lytte på port 1025 eller over når den sender en forespørsel og vil ha svar.

En brannmur har, i sin enkleste form, som funksjon å ‘lytte’ på _alle_ porter, og avvise forespørsler som ikke skal inn på en maskin eller på et nettverk. Dette gjøres på en av to måter. En såkalt hostbasert brannmur vil eksistere på en enkelt maskin og melde fra til operativsystemet at den vil håndtere portforespørsler, mens en hardware brannmur, også kalt en dedikert brannmur, vil gjøre dette på nettverket _før_ en enkelt maskin får muligheten til å se at forespørslene kommer i det hele tatt. Funksjonen er dog i praksis veldig lik, brannmuren vil hindre at trafikk kommer til porter der man ikke ønsker trafikk.

Heri ligger det første, fundamentale problemet med brannmurer. De hindrer altså trafikk inn til porter på maskiner. Men… La oss gjenta for argumentasjonens skyld: porter er kun åpne dersom det er et program som sier ifra at det ønsker å lytte på en gitt port. Hvis man ikke ønsker trafikk inn til en port, hvorfor skal man da ha et program som lytter på den porten? I overført betydning vil en brannmur vil altså være en dørvakt på dører som ikke finnes, eller i allefall ikke skal finnes.

Det vanligste argumentet jeg hører er at ‘jammen, jeg vet jo ikke alle ting som kjører på maskinen min, jeg vet ikke hvilke programmer som lytter på hvilke porter’. Vel, da er faktisk _det_ problemet ditt, ikke at trafikken kommer inn til disse portene. Vet du ikke hvilke tjenester du eksponerer ut mot internett fordi du ikke vet hvilke programmer som kjører på maskinen din så er du veldig, veldig usikker på internett, og det er ingenting en brannmur kan gjøre for å hjelpe deg.

Det neste argumentet jeg hører ofte er ‘jammen, jeg kan jo få virus eller noen kan ha hacket meg allerede, og da må jeg jo hindre at “hackere” får komme inn på maskinen min’. Hvis du tenker deg om skjønner du hvor håpløst det argumentet er; Er du allerede hacket eller har fått virus så er maskinen din kompromittert, og du har _ingen_ kontroll, enten du har en brannmur eller ikke. For det første er det forferdelig mange måter trafikk kan komme til og fra nettverket ditt uten å bryte de reglene som brannmuren skal overholde, og for det andre så kan du ikke stole på hva en kompromittert maskin forteller deg uansett, nettopp fordi en maskin som andre har, på et tidspunkt, kontrollert like gjerne kan, og faktisk ofte er, satt opp for å lure deg til å tro at det ikke er skadeprogramvare på maskinen.

Dessuten, du får ikke virus, og maskinen din blir ikke hacket, om du bruker enkle forholdsregler. Disse enkle forholdsreglene skal jeg komme tilbake til litt senere, slik jeg også har annonsert tidligere.

Et annet argument er at det kan være sikkerhetsproblemer med disse programmene, og at man derfor må hindre tilgang til portene for å unngå at disse sikkerhetsproblemene utnyttes. Vel, hvis du har et sikkerhetsproblem på en tjeneste som skal være tilgjengelig for andre så vil uansett ikke en brannmur kunne bedre på det problemet; er tjenesten usikker må du enten sikre den ved å oppdatere tjenesten eller fjerne sikkerhetsproblemet, eller du må stanse tjenesten.

En brannmur vil uansett bare slippe gjennom trafikk og ikke nødvendigvis kunne stanse eksplisitte problemer. En brannmur på applikasjonsnivå kan riktignok dette, men det forutsetter likevel at du kjenner til hvilke feil som eksisterer og utvikler eksplisitte regler for å stanse dette. Den diskusjonen får være til en annen artikkel.

Så er det et litt mer fornuftig argument som sier at en dedikert brannmur, altså en som ikke eksisterer på hver enkelt maskin, kan regulere hvilke maskiner som får tilgang til tjenester på en server. For eksempel er det kanskje ønskelig at kun maskiner i et lokalnett skal ha tilgang til en epostserver eller en intranettserver, og at man via en brannmur da kan utelukke alle andre maskiner fra disse tjenestene.

Dette er et litt mer fornuftig argument utifra et informasjonsteknisk perspektiv, men det har lite å gjøre med sikkerhet til den serveren som man skal ‘beskytte’. Alle nogenlunde moderne servertjenester har også bedre måter å regulere hvem som får bruke ressursene, og disse er gjerne mer finkornede og optimaliserte enn en generell brannmur kan bli.

Nå har jeg dog lagt fram en del forklaringer på hvorfor en brannmur _ikke_ har noen funksjon. I motsetning til hva en del av mine meningsmotstandere ønsker å tillegge meg av påstander så er jeg _ikke_ motstander av brannmurer. Brannmurer har praktiske og nyttige funksjoner, det er bare det at disse funksjonene er så sære og sjeldne at det er bortimot aldri at ‘vanlige’ brukere, inkludert langt de fleste bedriftsnettverk, faktisk har behov for en brannmur.

Jeg skal nevne en del av disse funksjonene og tilfellene der brannmurer er forferdelig nyttige. For det første hender det at man har sikkerhetsproblemer man ikke _kan_ rette. For eksempel kan det være at man har gammel programvare eller script som baserer seg på eksistensen av enten de konkrete feilene eller på funksjonalitet som fjernes dersom man oppdaterer komponenter. Dette kan være gamle webscript på en webserver, det kan være dårlig utviklede regnskapsprogrammer eller styringsverktøy, i det hele tatt, det kan finnes programvare som er virksomhetskritisk og som ikke lar seg oppdatere eller som slutter å fungere om man oppdaterer andre komponenter i systemet.

Jeg har ett veldig konkret eksempel på dette. I en webadresse er det mulig å logge på en beskyttet tjeneste ved å skrive brukernavn og passord på formen http://brukernavn:passord@tjeneste.example.com/. Det vil si det _har_ vært mulig, inntil Microsoft fjernet denne funksjonalitetet for et par år siden. Likevel finnes det programvare som, på tross av idiotien i slik, baserer innlogging til tjenester på brukernavn og passord i klartekst i webadressen. Om man da oppdaterer wininet.dll, komponenten som håndterer slike adresser i Windows, så vil programvare som baserer seg på funksjonaliteten slutte å fungere. Man må da enten skrive programvaren på nytt eller leve med feilen.

Riktignok er ikke dette et problem som faktisk løses med en brannmur, men det er et eksempel på hvordan feil kan være uløsbare, i allefall på kort sikt.

Det er gjerne slik at sikkerhetsproblemer i programvare tettes ganske raskt av programvareleverandøren. Likevel er det alltid et behov å teste slike oppdateringer mot eksisterende konfigurasjoner for å unngå problemer som eksempelet med eldre og dårlig designet programvare som nevnt over. Det kan også være at man må teste oppdateringer mot enorme mengder med forskjellige systemer, for eksempel i driftsmiljøer med hundrevis av maskiner. I disse tilfellene kan tiden det tar fra et sikkerhetshull blir annonsert og til man har mulighet til å legge inn oppdateringene være lengre enn tiden det tar før noen har publisert skadeprogramvare som kan utnytte feilene. En brannmur vil da kunne stanse angrep dersom man konfigurerer den riktig.

Dette er noen eksempler på hvor og når brannmurer er veldig nyttige. Jeg har dog også uttalt at brannmurer kan være og stort sett er sikkerhetsreduserende tiltak, altså at de senker sikkerheten i nettverket og på maskiner fremfor å øke den. Det mest åpenbare og enkelt forklarte eksempelet på dette er der hvor brannmurer brukes i stedet for sikring av tjenester, altså at man setter opp en brannmur for å unngå å bruke annen sikkerhet. Brannmuren blir en sovepute. Dette er dessverre veldig vanlig, både blant hjemmebrukere som tror det å lære seg skikkelig sikkerhet er for komplisert og uinteressant, og blant bedrifter der nettverksansvarlig kanskje ikke er helt oppdatert eller kanskje bare er en ‘vanlig’ ansatt som mer eller mindre tilfeldigvis blir tildelt rollen som nettverksansvarlig.

Til dette er det bare å si: Idioter! Jo, du har et valg om du er hjemmebruker; det er ikke noe overnaturlig eller vekttallskrevende studie å lære seg grunnleggende sikkerhet nok til å fikse en hjemmemaskin. Jo, du har et valg om du er nettverksansvarlig på jobben, og det er å si nei eller kreve opplæring eller at sikkerheten settes ut til eksterne selskaper. Hvem tror du får skylda når nettverket blir hacket, regnskapet deres blir korrupt, kundedatabasen selges til konkurrentene dine og kundene dine blir utsatt for videre angrep som følge av innbrudd hos dere? Jo, du! Just say no.

Det er også engang slik at programvare er utrolig komplekse vesen men tusenvis om ikke millioner av programlinjer. Så kompleks programvare inneholder feil. Jo mer kompleks, jo større sannsynlighet for feil.

Når man da introduserer _mer_ programvare på en maskin eller i et nettverk øker du nødvendigvis sannsynligheten for at det er kompromitterbare feil. Jo mer programvare, jo større sannsynlighet for kritiske feil.

Sistnevnte er også et argument mot ‘flere lag, mer sikkerhet’. Det skal bare én alvorlig nok feil til ett sted i tiraden av sikkerhetslag før hele sikkerheten er kompromittert. Dette også er en litt mer avansert diskusjon som overlates til senere artikler og diskusjoner i relevante fora.

Så, til konklusjonen. Brannmurer er nyttige dyr. I noen tilfeller absolutt nødvendige for å ivareta sikkerheten. Lær deg hvorfor du trenger en brannmur, og du vil, med nær 100% sannsynlighet, ikke ha behov for noen brannmur.

Jeg avslutter med å referere en god venn og høyt sertifisert sikkerhetsekspert: “Sett opp en brannmur og lær deg hvorfor den er der. Når du har lært det så tar du brannmuren vekk.”

Pin It