06.08.2013 Views

Brandväggar i publika nätverk

Brandväggar i publika nätverk

Brandväggar i publika nätverk

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Brandväggar</strong> i <strong>publika</strong> <strong>nätverk</strong><br />

"The ultimate security is your understanding of reality"<br />

H. Stanley Judd<br />

GUSTAV STENLUND, JONAS VIS<br />

Master’s Thesis at IMIT/TSLAB, KTH & Columbitech<br />

Supervisor: Mats Persson<br />

Examiner: Johan Montelius<br />

ECS/ICT-2006-136


Abstract<br />

Internet is an important part of many modern companies and opens for communication<br />

opportunities between co-workers and parties. Technologies like VPN (Virtual Private<br />

Network) makes it possible for employees to connect from home, public airports or internet<br />

coffee shops. Corporate networks are usually protected by firewalls guarding the physical<br />

borders of the network. These firewalls have difficulties keeping up with the security threats<br />

introduced by these technologies. With the rapid development in mobile internet technologies,<br />

new threats are introduced all the time forcing new counter actions. To be able to<br />

enforce a security policy for a corporate network, all connected nodes must be protected by<br />

a personal firewall.<br />

In this thesis we presents a general model for a personal firewall consisting of two<br />

cooperating filters. By using two filters; one session filter and one dynamic packet filter<br />

we construct an effective tool for maintaining a distributed security policy. The model is<br />

tested by an implementation for Windows XP consisting of a NDIS Intermediate filter and<br />

a TDI Hook filter. By testing the implementation we show that the model satisfies our<br />

requirements and is practically usable.<br />

iii


iv<br />

Sammanfattning<br />

Internet är en viktig del av varje företags verksamhet och öppnar upp möjligheter för<br />

företagen att kommunicera bättre med medarbetare och andra aktörer. Tekniker som VPN<br />

(virtuellt privat <strong>nätverk</strong>) gör det möjligt för anställda att ansluta sig till företaget hemifrån,<br />

från flygplatser eller internetkaféer. Företags<strong>nätverk</strong> skyddas i regel med brandväggar i<br />

utkanterna men dessa har svårt att skydda mot hot introducerade med de nya teknikerna.<br />

I samband med den mobila utvecklingen introduceras nya hot vilket gör det viktigt att<br />

överväga risker och vidta nödvändiga åtgärder för att skydda sig. För att upprätthålla en<br />

säkerhetspolicy för ett företags<strong>nätverk</strong> måste alla enheter som ansluter sig utrustas med en<br />

personlig brandvägg.<br />

I denna rapport presenterar vi en generell modell för en personlig brandvägg bestående<br />

av två samarbetande filter. Genom att kombinera två filter; ett sessionsfilter och ett dynamiskt<br />

paketfilter konstruerar vi en effektiv lösning för att underlätta att upprätthålla en<br />

distribuerad säkerhetspolicy. Modellen testas genom en implementation för Windows XP<br />

bestående av ett NDIS Intermediate-filter och ett TDI Hook-filter. Genom testning av implementationen<br />

visas att modellen uppfyller uppställda krav och är praktiskt genomförbar.


Innehåll<br />

Innehåll v<br />

Figurer vii<br />

1 Introduktion 1<br />

1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2 Bakgrund 5<br />

2.1 OSI-modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.1.1 Standardmodellen . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.1.2 TCP/IP-modellen . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2 Brandväggstyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.2.1 Paketfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.2.2 Anslutningsorienterat paketfilter . . . . . . . . . . . . . . . . 9<br />

2.2.3 Dynamiskt paketfilter . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2.4 Applikationsproxy . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.5 Deep Packet Inspection . . . . . . . . . . . . . . . . . . . . . 11<br />

2.2.6 Sessionsfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.3 Analys och testning av brandväggar . . . . . . . . . . . . . . . . . . 11<br />

2.3.1 Feltyper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.3.2 Effekter av fel . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.3.3 Tester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Sammanfattning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

3 Modell 15<br />

3.1 Krav för modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

3.2 Sessionsfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.3 Dynamiskt paketfilter . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.4 Kontrollapplikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

4 Fallstudie - Microsoft Windows XP 21<br />

4.1 Operativsystemsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

4.1.1 Drivrutinsmodell . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

4.1.2 Nätverksmodell . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

v


vi INNEHÅLL<br />

4.2 Filtreringstekniker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

4.2.1 Filtrering i applikationslagret . . . . . . . . . . . . . . . . . . 25<br />

4.2.2 Filtrering i kärnan . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

4.3 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

4.3.1 Mål och krav för implementationen . . . . . . . . . . . . . . . 27<br />

4.3.2 Begränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

4.3.3 Arkitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

4.3.4 Paketfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

4.3.5 Sessionsfilter - TDI filter . . . . . . . . . . . . . . . . . . . . . 30<br />

4.3.6 Kontrolltjänst . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

5 Tester 35<br />

5.1 Resultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.1.1 Implementationstester . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.1.2 Penetrationstester . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.1.3 Regeltester . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

5.1.4 Sammanfattning . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

6 Slutsats 39<br />

Litteraturförteckning 41<br />

Appendix 42<br />

A TDI filter 43<br />

A.1 IO till TDI-lagret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

A.2 Ny anslutning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

A.3 Öppna en anslutning med TDI . . . . . . . . . . . . . . . . . . . . . 44<br />

A.3.1 Öppna en Transportadress . . . . . . . . . . . . . . . . . . . . 44<br />

A.3.2 Öppna en anslutningsslutpunkt . . . . . . . . . . . . . . . . . 44<br />

A.3.3 Associera transportadressen med anslutningsslutpunkten . . 46<br />

A.3.4 Göra anslutningen . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

A.4 Skicka och ta emot data med TDI . . . . . . . . . . . . . . . . . . . 46<br />

A.5 Avsluta en anslutning med TDI . . . . . . . . . . . . . . . . . . . . . 47


Figurer<br />

2.1 OSI-modellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2 OSI-modellen matchad mot TCP/IP-modellen . . . . . . . . . . . . . . 7<br />

2.3 Arkitektur för en paketfiltrerande brandvägg . . . . . . . . . . . . . . . 8<br />

2.4 Arkitektur för en anslutningsorienterad brandvägg . . . . . . . . . . . . 9<br />

3.1 Övergripande bild över flödet i modellen. . . . . . . . . . . . . . . . . . 15<br />

3.2 Flödesdiagram över sessionsfiltret. . . . . . . . . . . . . . . . . . . . . . 18<br />

3.3 Flödesschema över paketfiltret. . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.4 Flödesschema över kontrollapplikationen. . . . . . . . . . . . . . . . . . 20<br />

4.1 Abstraktionslager i Windows XP . . . . . . . . . . . . . . . . . . . . . . 22<br />

4.2 Drivrutinsmodellen i Windows XP . . . . . . . . . . . . . . . . . . . . . 23<br />

4.3 Nätverksmodellen i Windows XP . . . . . . . . . . . . . . . . . . . . . . 24<br />

4.4 Arkitektur för implementationen . . . . . . . . . . . . . . . . . . . . . . 28<br />

4.5 Förenklat sekvensdiagram för implementationen . . . . . . . . . . . . . 29<br />

4.6 Komponenter i paketfilter . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

4.7 Komponenter i TDI-filtret . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

4.8 Tillståndsdiagram för en session i TDI-filtret . . . . . . . . . . . . . . . 32<br />

A.1 Create Address Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

A.2 Create Connection Context . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

A.3 Associate Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

A.4 Connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

A.5 Send Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

A.6 Receive Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

A.7 Register Event Receive Function to Receive Data . . . . . . . . . . . . . 49<br />

A.8 Receive Data in Event Receive Function . . . . . . . . . . . . . . . . . . 49<br />

A.9 Disconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

A.10 Disassociate the Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

A.11 Close the Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

vii


Kapitel 1<br />

Introduktion<br />

De flesta företag i dagens samhälle anser att Internet är en viktig del av deras<br />

verksamhet och för att kunna konkurrera med andra företag måste de vara anslutna<br />

till Internet. Men det finns stora risker att ansluta företagsnätet till Internet. När<br />

ett företag ansluter sitt <strong>nätverk</strong> till Internet möjliggör det inte bara för de anställda<br />

att komma åt material på Internet, utan gör det även möjligt för utomstående<br />

att komma åt företagets privata <strong>nätverk</strong>. Behovet av kontroll av tillgänglighet för<br />

datortrafik har därmed drivit fram utvecklingen av kontroll av datorkommunikation.<br />

Ett program speciellt avsett för denna typ av kontroll kallas brandvägg därför att<br />

den kan efterliknas en brandvägg i en bil.<br />

De allra flesta datoranvändare idag har någon gång kommit i kontakt med en<br />

brandvägg. Nästan alla som anslutit sig till Internet via bredband med till exempel<br />

ADSL (Asymmetric Digital Subscriber Line) har ett kombinerat bredbandsmodem<br />

och brandvägg. Alla som använder operativsystemet Windows XP eller Mac OS X<br />

får med en förinstallerad brandvägg. I idealfallet är en brandvägg något användaren<br />

ej behöver känna till, än mindre konfigurera, men det är inte alltid detta fungerar<br />

som tänkt.<br />

De första brandväggarna kom i slutet av 1980-talet som en reaktion på flera<br />

allvarliga säkerhetsincidenter. En av de mest kända säkerhetsincidenterna var den<br />

så kallade Morris-masken som slog till mot Internet i slutet av 1988 (Spafford, 1991).<br />

Programmet utnyttjade en säkerhetslucka i BSD-versioner av UNIX och spreds sig<br />

till tusentals datorer och slog ut större delen av Internet under flera dagar.<br />

Gemensamt för alla datorbrandväggar är att huvudfunktionen är att skydda<br />

ett betrott område, där ett ett område både kan vara ett företags <strong>nätverk</strong> eller en<br />

persondator. Grunden för denna funktion bygger på att man analyserar datortrafik<br />

och jämför denna med en lista av regler. En regel specificerar en viss typ av<br />

kommunikation mellan två eller flera ändpunkter. Ett exempel kan vara då X vill<br />

kommunicera med Y då dessa befinner sig på var sin sida om brandväggen F . I det<br />

enkla fallet kan följande scenario tänkas:<br />

• X försöker kontakta Y<br />

1


2 KAPITEL 1. INTRODUKTION<br />

• Anropet hamnar hos F<br />

• F kontrollerar om det finns en regel som tillåter X att kontakta Y<br />

• Om en sådan regel finns vidarebefordrar F anropet till Y<br />

• Om en sådan regel ej finns kastas anropet alternativt rapporteras till X att<br />

anropet ej genomförts<br />

De första brandväggarna var huvudsakligen anpassade för att filtrera datortrafik<br />

mellan två olika <strong>nätverk</strong>, till exempel ett lokalt <strong>nätverk</strong> på jobbet och det världsomspännande<br />

<strong>nätverk</strong>et Internet. En brandvägg som denna körs normalt på en separat<br />

dator som är ansluten till de båda <strong>nätverk</strong>en. Viktigt är att denna anslutning är den<br />

enda kopplingen mellan dessa <strong>nätverk</strong>. Detta eftersom brandväggen skall fungera<br />

som ett filter för all datortrafik mellan <strong>nätverk</strong>en.<br />

Denna typ av brandväggar installeras normalt i utkanten av det <strong>nätverk</strong> man<br />

vill skydda. Efter att datorer blivit mindre, lättare och mer portabla på senare tid<br />

har det blivit vanligare att företagens anställda tar med sig datorer och andra enheter<br />

utanför kontoret. Genom att göra det möjligt för anställda att ansluta sig till<br />

företagets <strong>nätverk</strong> via en VPN-tunnel (Virtuellt Privat Nätverk) var som helst ifrån<br />

har man i ett slag flyttat gränserna för det <strong>nätverk</strong> man vill skydda. Fördelen med<br />

en VPN-tunnel är att en dator som är ansluten får precis samma kommunikationsmöjligheter<br />

som om den skulle fysiskt befunnit sig innanför brandväggarna på det<br />

<strong>nätverk</strong> den är ansluten till. Denna egenskap gör att en hacker som lyckas ta över<br />

kontrollen av en sådan dator inte endas har kontroll över en anställds dator utan<br />

indirekt en dator inne i det <strong>nätverk</strong> man vill skydda. En bärbar dator som används<br />

av en resande anställd på en flygplats, ett café eller hemma måste därmed även den<br />

skyddas med en brandvägg.<br />

Risken har som sagt ökat de senaste åren i och med <strong>publika</strong> trådlösa <strong>nätverk</strong><br />

och möjligheten att alltid vara uppkopplad hemma, vilket gör det extra viktigt att<br />

ha ett fullgott skydd på de anställdas bärbara datorer och andra enheter för att<br />

skydda företagets <strong>nätverk</strong>. <strong>Brandväggar</strong> delas in i två huvudkategorier:<br />

• Nätverksbrandvägg. Installeras och körs på en dedikerad dator. Denna<br />

skyddar mot angrepp mellan olika <strong>nätverk</strong>.<br />

• Personlig brandvägg. Installeras och körs lokalt på den egna datorn. Denna<br />

skyddar mot lokala angrepp.<br />

Men det är inte bara hoten utifrån som man måste ta hänsyn till och skydda sig<br />

mot utan hoten kommer oftare och oftare på senare tid från insidan vilket gör att<br />

det inte räcker med en traditionell brandvägg. Ett exempel är mailkorrespondens<br />

som idag är vanligt förekommande både privat och affärsmässigt. Med mail kan man<br />

bifoga såväl dokument som exekverbara program eller skript. Trots att användaren<br />

har en brandvägg som skyddar mot angrepp utifrån finns inget som förhindrar att<br />

exekverbara program eller skript kan ta sig ut när de väl kommit in i datorn. Som


1.1. SYFTE 3<br />

en bifogad fil kan därför ett litet exekverbart program eskorteras in i datorn och<br />

därmed inifrån öppna en kommunikationskanal utåt. Ett sådant program kallas<br />

efter grekisk mytologi för en trojansk häst (Wikipedia, 2006e). När väl trojanen<br />

exekveras (t.ex. genom att användaren sätter igång den) kan trojanen installera sig<br />

själv, skicka sig själv vidare i nya mail till adresser i användares adressbok eller<br />

diskret börja kommunicera ut information från användarens dator helt utan att<br />

denne märker något.<br />

Dessa nya hot har drivit fram behov av filtrering av vilka program som får<br />

möjlighet att kommunicera. Man har introducerat ett nytt lager av filtrering för<br />

den personliga brandväggen, ett applikationsfilter. Det räcker inte med att endast<br />

filtrera trafikflöden baserat på avsändare och mottagare, man måste även filtrera<br />

trafik utefter vilken applikation som vill kommunicera.<br />

Mycket utveckling har skett inom detta område de senaste 20 åren. I dagsläget<br />

finns en uppsjö av brandväggsvarianter, såväl kommersiella som gratis. Nätverksbrandväggar<br />

följer till exempel med de flesta startpaketför bredbandsuppkopplingar.<br />

Desto svårare är det att hitta relevant information om hur brandväggar egentligen<br />

fungerar, hur en brandvägg designas utifrån standarder för kommunikation på internet<br />

samt hur en implementation egentligen skall göras.<br />

1.1 Syfte<br />

Mot denna bakgrund vill vi i denna rapport presentera en generell modell för en<br />

personlig brandvägg baserad på standarder inom datorkommunikation. Modellen<br />

skall rymma de grundfunktioner en personlig brandvägg bör implementera samt<br />

kunna ligga till grund för en implementation. För att testa att modellen är genomförbar<br />

presenterar vi en implementation för operativsystemet Windows XP. Genom<br />

att implementera modellen och testa implementationen kan vi verifiera att modellens<br />

design uppfyller de grundläggande krav (Ingham och Forrest, 2002) vi ställer<br />

upp för vår modell. Som utgångspunkt för denna rapport har vi därför ställt upp<br />

följande egenskaper som en personlig brandvägg bör ha:<br />

• Skydda mot säkerhetsproblem i operativsystem. Dagens operativsystem<br />

är otroligt komplexa och nya buggar upptäcks hela tiden. Genom att<br />

använda sig av en personlig brandvägg skyddar man operativsystem från attacker<br />

utifrån.<br />

• Förhindra åtkomst till information. En av de viktigaste funktionerna hos<br />

brandväggar är att förhindra åtkomst till information. Exempelvis begränsar<br />

många företag vilka webbsidor de anställda kan komma åt.<br />

• Förhindra informationsläckor. Eftersom all information som lämnar ett<br />

system passerar brandväggen kan den användas till att förhindra att känslig<br />

information kommer ut. Ett exempel på detta är hotet från trojaner som<br />

fångar upp exempelvis lösenord och skickar dem vidare.


4 KAPITEL 1. INTRODUKTION<br />

• Upprätthålla en säkerhetspolicy. <strong>Brandväggar</strong> är ett viktigt verktyg för<br />

att upprätthålla och implementera ett företags säkerhetspolicy.<br />

• Underlätta granskning. Om ett system har råkat ut för intrångsförsök är<br />

det sällan brandväggen i sig har tagit skada. Detta gör att logfilerna från<br />

brandväggen kan användas för att kartlägga och granska intrånget eller intrångsförsöket.<br />

Detta gäller framförallt <strong>nätverk</strong>sbrandväggar.<br />

Genom att utgå från tidigare forskning och standarder i <strong>nätverk</strong>skommunikation<br />

i kapitel 2 presenterar vi en modell i kapitel 3 som skall kunna ligga till grund<br />

för en implementation i ett godtyckligt system baserat på dessa standarder. En implementation<br />

som utgår från modellen erhåller indirekt de egenskaper vi i modellen<br />

presenterar. Som test av vår modell presenterar vi slutligen en implementation av<br />

modellen för operativsystemet Windows XP i kapitel 4.


Kapitel 2<br />

Bakgrund<br />

Trots att brandväggar är så vanligt förekommande har forskningen och teorin om<br />

dem varit knapphändig. En stor del av utvecklingen har gjorts på företag utan<br />

att någon tydlig modell eller teori presenterats offentligt. Dock finns det ett antal<br />

artiklar om brandväggar och de flesta teorierna utgår från den så kallade OSImodellen.<br />

Som introduktion presenteras OSI-modellen för att ligga som grund för<br />

en genomgång av brandväggstyper indelade efter vilken nivå av information från<br />

OSI-modellen de olika filtrerar på.<br />

2.1 OSI-modellen<br />

OSI står för Open Systems Interconnect och är en formell standardmodell som ofta<br />

används av forskare och utvecklare när man diskuterar <strong>nätverk</strong> och datasäkerhet.<br />

OSI-modellen är framtagen av ISO (International Standards Organization) för att<br />

definiera en standard för utveckling av <strong>nätverk</strong> och kringliggande system. Modellen<br />

beskriver sju lager som representerar viktiga funktioner som generellt behövs vid<br />

datakommunikation. Som många andra ISO-standarder går det inte att flytta den<br />

formella teorin till en implementation utanför den akademiska världen. Dock är OSImodellen<br />

en viktig verktyg för att kunna förklara och diskutera <strong>nätverk</strong>sdesign.<br />

2.1.1 Standardmodellen<br />

OSI-modellen består som sagt av sju lager där varje lager tillför en nivå av abstraktion.<br />

För att skicka data från en nod till en annan passerar data från lager sju ner<br />

till lager ett vidare till den andra noden där det motsatta sker, från lager ett upp<br />

till lager sju (se figur 2.1). På väg ner genom modellen styckas data normalt upp<br />

i fragment kallade paket, vardera bärande på information från de lager de passerat<br />

genom. Mottagarnoden sätter således ihop fragmenten igen till en dataström allt<br />

eftersom dessa anländer och kan sorteras upp i rätt ordning.<br />

De olika lagren nedifrån:<br />

5


6 KAPITEL 2. BAKGRUND<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

Utgående trafik<br />

Inkommande trafik<br />

Figur 2.1. OSI-modellen<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

1. Det fysiska lagret är ansvarigt för den fysiska kommunikation mellan ändpunkterna.<br />

Det hanterar själva fysiska kodningen och överföringen av data.<br />

2. Datalänklagret hanterar den logiska delen av överföringen mellan två direktanslutna<br />

enheter. Bland annat hanteras hur flera enheter som delar på ett<br />

överföringsmedium skall kommunicera och adressera varandra.<br />

3. Nätverkslagret hanterar adressering för <strong>nätverk</strong> som kan spänna över flera<br />

förbindelser och medium. Denna abstraktion används för att avgöra vilken väg<br />

ett paket behöver ta för att nå sin slutdestination över flera möjliga datalänkar<br />

och vägar över flera mellan liggande noder.<br />

4. Transportlagret introducerar konceptet dataströmmar. Detta lager är ansvarigt<br />

för hantering av sortering av paket, anpassning av överföringshastighet<br />

och säkerställande att informationen når sin ändpunkt.<br />

5. Sessionslagret kontrollerar sessionerna mellan olika datorer. Det sätter upp,<br />

hanterar och avslutar anslutningar mellan en lokala applikation och en fjärrapplikation.<br />

6. Presentationslagret tillhandahåller ett standardiserat gränssnitt mot applikationslagret<br />

för data.<br />

7. Applikationslagret gör det möjligt för användaren att komma åt information<br />

som finns på <strong>nätverk</strong>et. Användargränssnitt och funktioner som inte direkt är<br />

relaterade till <strong>nätverk</strong>soperationer finns i detta lager.<br />

2.1.2 TCP/IP-modellen<br />

OSI-modellen används som sagt mest som en akademisk modell när man vill diskutera<br />

<strong>nätverk</strong> och <strong>nätverk</strong>ssäkerhet men den används ej i någon konkret tillämpning.


2.2. BRANDVÄGGSTYPER 7<br />

Idag är det istället de protokoll som ingår i TCP/IP familjen som är helt dominerande.<br />

De undre lagren av TCP/IP-modellen liknar OSI-modellens, medan lager<br />

5, 6 och 7 i OSI-modellen normalt igår i applikationslagret i TCP/IP-modellen (se<br />

figur 2.2).<br />

OSI-modellen TCP/IP-modellen<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

5. Applikation<br />

4. TCP<br />

3. IP<br />

2. Datalänk<br />

1. Fysisk länk<br />

Inkommande trafik Utgående trafik<br />

Figur 2.2. OSI-modellen matchad mot TCP/IP-modellen<br />

Exempel på implementation av de 5 lagren i TCP/IP-modellen nedifrån:<br />

1. En populär implementation är till exempel standarden 802.11 (trådlöst <strong>nätverk</strong>)<br />

som definierar hur kodning av information till radiovågor skall gå till.<br />

2. En del av standarden 802.11 specificerar även att adressering skall ske med<br />

hjälp av MAC-adresser (Medium Access Control) som även den är en standard.<br />

Ett exempel på en MAC-adress är "00:12:a2:b7:4c:b1".<br />

3. En populär implementation av detta lager är IP-protokollet (Internet Protocol)<br />

som adresserar noder med hjälp av IP-adresser. Ett exempel på en<br />

IP-adress är "192.168.0.1".<br />

4. En populär implementation av detta lager är protokollet TCP (Transport Control<br />

Protocol). Denna implementation introducerar konceptet av en port som<br />

ett identifikationsnummer för ändpunkten för en dataström. En dataström<br />

går alltså mellan var sin port på käll- och destinationsnoden. Ett program<br />

kan ha flera parallella dataströmmar mellan två noder där respektive ström<br />

identifieras av ett portpar.<br />

5. Ett exempel på protokoll i applikationslagret är HTTP (Hypertext Transfer<br />

Protocol), FTP (File Transfer Protocol) och SMTP (Simple Mail Transfer<br />

Protocol).<br />

2.2 Brandväggstyper<br />

Innan vi går in på de olika brandväggstyper som finns ger vi en kort definition av<br />

vad en brandvägg är.


8 KAPITEL 2. BAKGRUND<br />

Brandväggsteknik är en mängd av mekanismer som kan upprätthålla<br />

en <strong>nätverk</strong>sdomäns säkerhetspolicy på inkommande och utgående<br />

kommunikation för <strong>nätverk</strong>sdomänen. Ett brandväggssystem, eller en<br />

brandvägg är en instans av brandväggsteknik (Schuba, 1997).<br />

<strong>Brandväggar</strong> brukar delas in i olika kategorier utifrån från vilka lager i OSImodellen<br />

de använder information från för att klassificera <strong>nätverk</strong>strafik samt hur de<br />

arbetar. Utvecklingen av brandväggar har gått från att endast använda information<br />

från lager tre i OSI modellen till att kombinera information från flera lager.<br />

2.2.1 Paketfilter<br />

Paketfilter kallas den teknik där man filtrerar datortrafik genom att analysera paket<br />

som skickas via <strong>nätverk</strong>et. Filtrering baseras på information man extraherar<br />

från paketet i sig, normalt information från lager tre och fyra från OSI-modellen<br />

(Woodall, 2004).<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

Inkommande trafik Utgående trafik<br />

Trafik filtreras utifrån käll- och<br />

destinationsadress, pakettyp och<br />

portnummer. Okänd trafik är bara<br />

tillåten upp till lager 3 i<br />

<strong>nätverk</strong>sstacken.<br />

Figur 2.3. Arkitektur för en paketfiltrerande brandvägg<br />

Till denna kategori hör exempelvis den första välkända kommersiella produkten<br />

Cisco IOS (Cisco, 2002) som lanserades 1985, vilken kom att kallas den första<br />

generationens brandvägg. Denna paktefiltrerande brandvägg använder sig av protokoll,<br />

käll- och destinationsadress samt port från TCP-protokollet (lager 3 och 4<br />

i OSI-modellen) för att filtrera trafik. Dock dröjde det till 1989 innan den första<br />

vetenskapliga artikeln publicerades av Mogul (1989).<br />

En egenskap hos paketfiltrerande brandväggar är att de har relativt liten påverkan<br />

på <strong>nätverk</strong>sprestandan. Dock saknar denna generation av brandvägg möjlighet<br />

att konfigureras efter vem som initierar trafik. Eftersom nästan all datortrafik baseras<br />

på att information skall skickas i båda riktningarna för att fungera blir de<br />

oerhört svåra, om inte omöjliga, att konfigurera på ett säkert sätt. För att konfigurera<br />

en sådan brandvägg att tillåta noder på ena sidan att få full tillgång till<br />

andra sidan måste man följaktligen tillåta alla trafik i båda riktningarna. En sådan<br />

brandväggskonfiguration fyller inte stor funktion. Ytterligare säkerhetsproblem


2.2. BRANDVÄGGSTYPER 9<br />

som finns med denna typ av paketfiltrerande brandvägg är att de inte håller i vilket<br />

tillstånd en anslutning är i. Utan denna kontroll kan buggar i operativsystemets<br />

implementation lätt utnyttjas för intrångsförsök.<br />

2.2.2 Anslutningsorienterat paketfilter<br />

En vidareutveckling av den första generationens paketfiltrerande brandvägg introducerade<br />

ett koncept av tillstånd för TCP-anslutningar. Detta för att kontrollera<br />

upp- och nerkopplingsfasen för TCP-protokollet och för att säkerställa att denna<br />

genomförts korrekt, att en anslutning är legitim samt att ingen tredje part försöker<br />

genskjuta kommunikationen. För varje anslutning genom brandväggen sparas<br />

information om anslutningens tillstånd i en tillståndstabell. Informationen i tillståndstabellen<br />

brukar oftast bestå av en unik identifierare, tillståndet på anslutningen<br />

(uppkopplad/stänger), sekvensinformation, IP adressen på avsändaren och<br />

mottagaren och de fysiska <strong>nätverk</strong>skortet som paketen inkommer eller går ut på.<br />

1. All paket jämförs mot för<br />

definierade regler utifrån ett eller<br />

flera lågnivå protokoll så som IP,<br />

TCP och ICMP. Filtret stoppar<br />

antigen paketen eller släpper i<br />

genom dem vidare till<br />

<strong>nätverk</strong>sstacken.<br />

Sorterad<br />

regellista<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

3. Om ett paket uppfyller alla<br />

villkor för den virtuella krets<br />

tabellen och regellistan skickas<br />

det vidare upp i <strong>nätverk</strong>sstacken.<br />

2. Transportlagret sparar<br />

information om en<br />

<strong>nätverk</strong>ssession i en<br />

virtuell kretstabell<br />

Figur 2.4. Arkitektur för en anslutningsorienterad brandvägg<br />

Fördelen mot paketfiltrerande brandväggar är att paket måste tillhöra en giltig<br />

anslutning. Varje paket undersöks först mot regellistan och sedan mot tillståndstabellen<br />

för att se om det skall accepteras eller ej. Denna brandväggstyp introducerades<br />

omkring 1989-1990 av Dave Presotto och Howard Trickey på AT&T Bell Labs<br />

och kom att kallas andra generationens brandvägg (Cisco, 2002). Med hjälp av den<br />

nya tekniken med tillståndstabell gjorde man det möjligt att stärka kontrollen av<br />

TCP-protokollet.<br />

2.2.3 Dynamiskt paketfilter<br />

Nästa tekniska framsteg utgjordes av en anpassning av de tidigare paketfiltrerande<br />

brandväggarna att möjliggöra för dynamisk uppdatering av regellistan under<br />

körning. Konceptet stödjer sig på att praktiskt taget all datorkommunikation är<br />

dubbelriktad. Förenklat kan man se det som att en förfrågan skickas i ena riktningen<br />

och ett svar i den andra. Förbättringen för denna typ av paketfilter ligger i att


10 KAPITEL 2. BAKGRUND<br />

det räcker med att ha en regel för en utgående förfrågan. Då förfrågan skickas iväg<br />

läggs en ny regel till för inkommande trafik från precis den som förfrågan skickats<br />

till i regellistan. När svaret inkommer finns då en regel som tillåter detta att passera.<br />

Hade förfrågan aldrig skett skulle detta svar ej heller tillåtas passera. Då denna teknik<br />

kombineras med tidigare teknik rörande tillstånd för TCP-uppkopplingar samt<br />

ett tillägg för liknande virtuella tillståndstabeller för andra protokoll som UDP och<br />

ICMP har man lagt grunden för dagens paketfiltrerande brandväggar. Denna typ av<br />

paketfiltrerande brandväggar kom att kallas fjärde generationens brandväggar, dynamisk<br />

paketfiltrering (itsecurity.com, 2006) eller SPI (Stateful Packet Inspection).<br />

Check Point Software släppte 1994 den första kommersiella produkten baserad på<br />

denna teknologi och kallade typen för Stateful Mulitlayer Inspection Firewalls. Säkerhetsmässigt<br />

kom denna teknik att innebära ett stort steg framåt. Med hjälp av<br />

brandväggar baserade på denna teknik kan man sätta upp ett skalskydd runt ett<br />

lokalt <strong>nätverk</strong> där man tillåter utgående trafik (initierad av användarna innanför<br />

brandväggen) men ej inkommande trafik (initierad av okända externa aktörer).<br />

2.2.4 Applikationsproxy<br />

En helt annan teknik baserad på filtrering av innehåll i informationsströmmar snarare<br />

än paket är att använda sig av en applikationsproxy. Detta filter opererar som<br />

en proxytjänst i form av en applikation som sköter kommunikationen ut på <strong>nätverk</strong>et.<br />

All trafik tänkt att passera ut på <strong>nätverk</strong>et passerar proxytjänsten. Denna typ<br />

av brandvägg skiljer sig mot de två tidigare på så sätt att man inte har något filter<br />

för TCP/IP stacken, utan låter paketen propagera uppåt i stacken för att sedan<br />

behandlas av en proxytjänst innan det skickas vidare till programmet som skall<br />

ha paketet. För att detta skall fungera krävs en proxytjänst för varje protokoll på<br />

applikationsnivå. Huvudsakligen var det AT&T Bell Labs som utvecklade de första<br />

brandväggarna av denna typ vilken kom att kallas Application Level Gateways eller<br />

Proxy Frewalls.<br />

Det finns många fördelar med en proxybrandvägg bland annat att de kan filtrera<br />

på applikationsprotokoll och att de inte tillåter direkt kommunikation med <strong>nätverk</strong>et<br />

utan allt måste passera genom proxybrandväggen. På denna nivå är det lätt att<br />

införa intelligenta filter som kan filtrera på innehåll i dataströmmen som till exempel<br />

skadliga skript. Tyvärr finns det flera nackdelar med denna typ av filter. I stort sett<br />

måste man skriva en proxytjänst för varje protokoll som man vill använda. Dock<br />

finns det vissa generella proxytjänster som hanterar UDP, RPC och andra vanliga<br />

protokoll. Proxybrandväggar är dessutom beroende av att operativsystemet de körs<br />

på är säkert nog. Paketfiltrerande brandväggar filtrerar trafik innan <strong>nätverk</strong>slagret<br />

och skyddar därmed <strong>nätverk</strong>sstacken från attacker medan proxybrandväggar inte<br />

har något skydd för denna typ av attacker (Cisco, 2002). En annan nackdel är att de<br />

ofta är relativt enkla att ta sig runt inifrån. Moderna operativsystem tillhandahåller<br />

enkla möjligheter att själv öppna anslutningar och man kan därigenom förbigå en<br />

applikationsproxy.


2.3. ANALYS OCH TESTNING AV BRANDVÄGGAR 11<br />

2.2.5 Deep Packet Inspection<br />

En vidareutveckling av paketfiltreringstekniken har introducerat ett begrepp kallat<br />

Deep Packet Inspection. Denna teknik bygger på att undersöka information från protokoll<br />

i applikationslagret i ett paket eller en ström av paket redan på <strong>nätverk</strong>slagret<br />

i OSI-modellen. Genom att analysera information från applikationslagret kan till<br />

exempel skadlig kod rensas bort tidigt, långt innan <strong>nätverk</strong>sstacken börjat behandla<br />

dataströmmen. Tekniker som används för deep packet inspection består oftast<br />

av kombination av statistisk och strängmatchning. Dessa typer av analys kräver<br />

mycket datakraft vilket gör det svårt att utan speciell hårdvara utföra deep packet<br />

inspection i en hastighet som matchar <strong>nätverk</strong>ets. En brandvägg som utför deep packet<br />

inspection måste inte bara hålla reda på tillstånden för <strong>nätverk</strong>sanslutningarna<br />

utan även tillstånden hos de applikationer som använder sig av <strong>nätverk</strong>et. Eftersom<br />

deep packet inspection kräver relativt mycket datorkraft är det inget alternativ än<br />

så länge för personliga brandväggar (Dubrawsky, 2003). Dock kan man tänka sig<br />

att i och med att antalet processorkärnor i dagens persondatorer ökar snabbt, skulle<br />

det kunna vara möjligt att använda sig av en av processorkärnorna till deep packet<br />

inspection utan att påverka prestanda på resten har systemet.<br />

2.2.6 Sessionsfilter<br />

Vid användande av VPN-lösningar då man flyttar ut företagets skalskydd till enskilda<br />

datorer uppkopplade via VPN kan det vara nödvändigt att endast tillåta vissa<br />

applikationer efter strikta regler att kommunicera ut på <strong>nätverk</strong>et. För att företaget<br />

skall kunna ha en säkerhetspolicy och vara säker på att denna efterlevs krävs<br />

ytterligare en typ av filter, nämligen sessionsfilter. Ett filter som detta opererar på<br />

information från sessions-, presentations- och applikationslagret för att begränsa<br />

access utåt. Detta filter är alltså inget filter för att huvudsakligen hindra inkommande<br />

trafik utan snarare ett filter för att hindra utgående trafik baserat på vilken<br />

applikation som vill kommunicera samt hur den vill få access till <strong>nätverk</strong>et.<br />

2.3 Analys och testning av brandväggar<br />

Precis som med forskning kring brandväggar är det först på senare tid som man<br />

gått mer vetenskapligt tillväga för att kontrollera att brandväggar implementerar<br />

en säkerhetspolicy korrekt. Problemet är att det är oerhört komplext att säkerhetställa<br />

en säkerhetspolicy eftersom den är beroende av så många faktorer. Detta är<br />

framförallt svårt när man hanterar stora <strong>nätverk</strong> med flera brandväggar eftersom<br />

man även måste kartlägga hur de olika brandväggarna tillsammans implementerar<br />

säkerhetspolicyn.<br />

Flera artiklar har tagit upp hur man kan gå till väga för att testa brandväggar,<br />

bland annat Schultz (1996), Schuba (1997), Haeni (1997), KhalidAl-Tawil och<br />

Al-Kaltham (1999) samt Kamara m.fl. (2003). Dock riktar alla in sig på <strong>nätverk</strong>sbrandväggar<br />

och hur man ska kontrollera hur de implementerar en säkerhetspolicy


12 KAPITEL 2. BAKGRUND<br />

för ett eller flera <strong>nätverk</strong>. Ingen av dessa behandlar personliga brandväggar. Dock<br />

finns en en websida (Kaddouch, 2006) som försöker skapa ett standardtest bestående<br />

av flera deltester för just personliga brandväggar. Testerna är begränsade till Windows<br />

XP och fokuserar att testa olika tekniker som trojaner och linkande program<br />

använder sig av för att skicka ut information från en dator. Genom att kombinera<br />

testerna från Kaddouch (2006) och bland annat Haeni (1997) får man tester som<br />

både täcker in de mer traditionella testerna för brandväggar med specifika tester<br />

för personliga brandväggar.<br />

2.3.1 Feltyper<br />

En sårbarhet hos en brandvägg definieras som ett fel, en svaghet eller ett felaktigt<br />

antagande som gjorts under design, implementation eller konfiguration, som kan<br />

utnyttjas för att attackera ett betrott <strong>nätverk</strong> som brandväggen antas skydda (Kamara<br />

m.fl., 2003). Kamara m.fl. (2003) delar upp sårbarheterna i kategorier utifrån<br />

orsak och effekt för att bättre kunna analysera sårbarheter hos brandväggar. De<br />

vanligaste sårbarheterna hos brandväggar är:<br />

• Valideringsfel (Validation error): Ett valideringsfel uppkommer när programmetet<br />

interagerar med sin omgivning utan att bekräfta korrektheten hos<br />

de data som programmet får från denna. Det finns tre typer av data från<br />

omgivningen som måste valideras: inmatning, ursprung och mål. Inmatningsvalidering<br />

ser till att indata är som förväntat. Ursprungsvalidering ser till att<br />

ursprunget hos data verkligen är den som det påstås vara. Målvalidering ser<br />

till att informationen går dit den är förutsatt att gå. Detta inkluderar även<br />

att skyddad information inte går till ett mål som inte är betrott.<br />

• Auktoriseringsfel (Authorization error): Ett autentiseringsfel tillåter en<br />

skyddad operation körs utan tillräcklig verifiering av rättigheter har skett.<br />

• Serialiseringsfel/Aliasfel (Serialization/Aliasing error): Ett serialiseringsfel<br />

tillåter att det asynkrona beteendet hos olika systemoperationer utnyttjas<br />

för att göra ett säkerhetsintrång. Ett aliasfel uppkommer då två namn<br />

för samma objekt kan göra att dess innehåll ändras snabbt och oförutsägbart,<br />

och medföra att redan gjorda säkerhetskontroller blir ogiltiga.<br />

• Avgränsningsfel (Boundary checking error): Ett avgränsningsfel uppkommer<br />

då man misslyckas med att kontrollera gränser mellan olika komponenter<br />

eller missar att kontrollera restriktioner. Att inte kontrollera om värden<br />

för tabellstorlekar, filallokeringar eller för andra resurser är orimliga leder till<br />

avgränsningsfel. Ett exempel på detta är buffer overlow som många gånger<br />

utnyttjats för intrångsförsök.<br />

• Domänfel (Domain error): Ett domänfel uppkommer när tänkte gränser<br />

mellan skyddade miljöer har hål som gör att information läcker ut.


2.3. ANALYS OCH TESTNING AV BRANDVÄGGAR 13<br />

• Svag/Inkorrekt design (Weak/Incorrect design error): Ett designfel<br />

som uppkommer kan spåras tillbaka till designfasen av utvecklingen. Till exempel<br />

faller en svag krypteringsalgoritm inom detta område.<br />

2.3.2 Effekter av fel<br />

En sårbarhet kan ge upphov till en eller flera effekter där en effekt är någon av<br />

följande:<br />

• Exekvering av kod (Execution of code): Detta uppkommer när en sårbarhet<br />

kan leda till att kod otillåtet körs. Det inkluderar, men är inte begränsat<br />

till, kod som är skriven av en hacker.<br />

• Förändring av målresurs (Change of target resource): Detta händer<br />

när en sårbarhet som tillåter att tillståndet hos en resurs otillåtet ändras av<br />

en hacker. En resurs kan vara en server, routing tabellen hos en brandvägg<br />

eller någon enhet som ska skyddas av brandväggen.<br />

• Åtkomst till målresurs (Access to target resource): Uppkommer då<br />

en sårbarhet tillåter att en hacker otillåtet får tillgång till en resurs, där en<br />

resurs är en enhet som skyddas av brandväggen. Exempel på denna effekt är<br />

att tillåta en hacker att läsa regellistan för brandväggen, eller att ta reda på<br />

vilka tjänster som finns tillgängliga på en skyddas server.<br />

• Denial of service (DoS): Uppkommer då en sårbarhet utnyttjas för att störa<br />

en tjänst som tillhandahålls till legitima användare. Här innebär en tjänst allt<br />

från att vidarebefordra paket eller adressöversättning till administration.<br />

2.3.3 Tester<br />

Brandväggstester delas in i tre huvudkategorier som är tänkt att testa olika aspekter<br />

Zaugg (2004). Målet är att testa designen, konfiguration och den säkerhetspolicy<br />

som man har satt upp för brandväggen.<br />

• Penetrationstester Målet med penetrationstester är att upptäcka säkerhetsproblem<br />

hos ett <strong>nätverk</strong> genom att utföra attacker mot det. Penetrationstester<br />

består av (1) informations insamling, (2) utforska <strong>nätverk</strong>et och (3) attackera<br />

<strong>nätverk</strong>et. Attackerna utförs genom att köra olika testverktyg som testar<br />

brandväggen för potentiella luckor i säkerheten som kan utnyttjas. Penetrationstester<br />

utförs vanligen av systemadministratörerna själva eller av en tredje<br />

part.<br />

• Implementationstester Implementationstester fokuserar på själva brandväggsmjukvaran<br />

där man försöker hitta buggar i programvaran. Man testar<br />

bland annat att en brandväggsregel motsvarar den funktion brandväggen utför.<br />

Exempelvis om en regel indikerar att man ska blocka ett paket men brandväggen<br />

skickar vidare paketet, står man inför ett implementationsfel.


14 KAPITEL 2. BAKGRUND<br />

• Regeltester Regeltester verifierar om säkerhetspolicyn är korrekt implementerad<br />

av en mängd regler.<br />

2.4 Sammanfattning<br />

De flesta personliga brandväggar fungerar på ett liknande sätt som ett sessionsfilter<br />

men ytterst lite är beskrivet i forskningen vad gäller denna typ av filter. I denna studie<br />

vill vi belysa hur ett sessionsfilter kan fungera. Vi vill även visa att man genom<br />

en kombination av ett paketfilter och ett sessionsfilter effektivt kan upprätthålla en<br />

strikt säkerhetspolicy samt eliminera de svagheter som finns i paketfilter respektive<br />

sessionsfilter. Genom en implementation av en sådan kombination i operativsystemet<br />

Windows XP vill vi visa att det även är praktiskt genomförbart.


Kapitel 3<br />

Modell<br />

Personliga brandväggar som filtrerar utifrån vilket program som försöker använda<br />

<strong>nätverk</strong>et har blivit vanligare. Dock riktar sig de flesta artiklar in sig på <strong>nätverk</strong>sbrandväggar.<br />

Vi vill i den här rapporten framför allt visa hur man kan konstruerar<br />

ett sessionsfilter men även hur man genom att kombinera det med ett dynamiskt<br />

paketfilter kan få ett effektivare filter. Genom att kombinera ett dynamiskt paketfilter<br />

med ett sessionsfilter kombinerar man styrkorna hos båda och undviker deras<br />

respektive nackdelar då de täcker upp varandras svaga sidor.<br />

Den modell för personlig brandvägg som den här rapporten föreslår bygger framför<br />

allt på ett sessionsfilter som placeras mellan transportlagret och sessionslagret i<br />

OSI-modellen. Sessionsfiltret fångar upp alla program som försöker använda <strong>nätverk</strong>et<br />

och kontrollerar att de är tillåtna. För program som tillåts skickas regler ner till<br />

paketfiltret för att öppna upp för den aktuella sessionen. För att samordna de två<br />

filtren är det nödvändigt med en kontrollapplikation. Kort sammanfattat fungerar<br />

brandväggen på följande vis (se figur 3.1):<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

Sessionsfilter<br />

4. Transport<br />

3. Nätverk<br />

Paketfilter<br />

2. Datalänk<br />

1. Fysisk länk<br />

1. Tillåt session?<br />

2. Ja/Nej<br />

3. Ny regel<br />

Kontrollapplikation<br />

Figur 3.1. Övergripande bild över flödet i modellen.<br />

1. Alla applikationer som vill använda <strong>nätverk</strong>et kommer att fångas upp och<br />

15


16 KAPITEL 3. MODELL<br />

stoppas i sessionsfiltret. Sessionsfiltret frågar kontrollapplikationen om programmet<br />

får använda <strong>nätverk</strong>et.<br />

2. Har programmet inte tillåtelse att komma ut på <strong>nätverk</strong>et kommer det inte<br />

längre än så här.<br />

3. Om programmet är tillåtet skickar kontrollapplikationen regler till paketfiltret<br />

som öppnar upp för just den här sessionen och sessionsfiltret får signal från<br />

kontrollapplikationen att det ska tillåta programmet.<br />

Idén med att använda sig av dynamiska regler är att endast tillåta reglerna under<br />

en kort tid när själva anslutningen görs istället för att ha regler som ligger aktiva hela<br />

tiden. Genom att överlåta till kontrollapplikationen att skapa regler till paketfiltret<br />

som är knutna till till en session och ett visst program får man regler som är lätta<br />

att verifiera att de gör det de ska och <strong>nätverk</strong>sadministratörer kan koncentrera<br />

sig på att sätta upp den övergripande säkerhetspolicyn. En kontrollapplikation kan<br />

dessutom enkelt samla information i logfiler att använda vid felsökning.<br />

3.1 Krav för modellen<br />

Målet för vår modell är att den ska klara av de fem huvudfunktioner för brandväggar<br />

som ställdes upp i kapitel 1. Modellen löser dessa fem huvudfunktioner på följande<br />

sätt:<br />

• Skydda mot säkerhetsproblem i operativsystemet. Genom att använda<br />

sig av två filter, ett på vardera sida om operativsystemets <strong>nätverk</strong>sstack,<br />

skyddar man sig mot utnyttjande av buggar i operativsystemet och dess implementation<br />

av <strong>nätverk</strong>sstacken. Oberoende av <strong>nätverk</strong>strafikens riktning måste<br />

den passera ett filter som verifierar dess legitimitet innan den tillåts behandlas<br />

av <strong>nätverk</strong>sstacken.<br />

• Förhindra åtkomst till information. Kontrollapplikationen är den enda<br />

som får öppna för trafik genom paketfiltret och därmed har den ensamrätt<br />

att bestämma över vilka informationsflöden som får passera. Endast i det fall<br />

då trafik initieras inifrån, passerar sessionsfiltret samt följer de regler som<br />

kontrollapplikationen har att gå efter öppnar denne för trafik genom paketfiltret.<br />

Detta gör att ingen information blir åtkomlig utifrån eftersom denna<br />

informationsström är initierad utifrån.<br />

• Förhindra informationsläckor. Precis som ovan gäller att endast i det fall<br />

då trafik initieras inifrån, passerar sessionsfiltret samt följer de regler som kontrollapplikationen<br />

har att gå efter öppnar denne för trafik genom paketfiltret.<br />

Detta gör att kontrollapplikationen kan sköta autentisering baserad på information<br />

från sessions-, presentations- och applikationslagret i OSI-modellen.<br />

Kontrollapplikationen kan alltså agera efter ett strikt regelverk som endast


3.2. SESSIONSFILTER 17<br />

tillåter begränsade informationsflöden för ett begränsat antal applikationer.<br />

På detta sätt kan trojaner och liknande program förhindras skicka ut information<br />

från en infekterad enhet.<br />

• Upprätthålla en säkerhetspolicy. Genom möjligheten att sätta regler för<br />

kontrollapplikationen baserad på information från toppskiktet av OSI-modellen<br />

kan denna modell hjälpa till att garantera att kommunikation endast tillåts<br />

efter strikta regler. På detta sätt kan en implementation av denna modell<br />

hjälpa till att upprätthålla en övergripande säkerhetspolicy för ett stort antal<br />

enheter.<br />

• Underlätta granskning. Eftersom alla program som vill använda <strong>nätverk</strong>et<br />

passerar genom sessionsfiltret och enkelt kan loggas av kontrollapplikationen<br />

kan man på ett lättare sätt spåra och undersöka vad som exempelvis hände<br />

vid ett intrång.<br />

3.2 Sessionsfilter<br />

Sessionsfiltret har två uppgifter, dels att stoppa ej tillåten <strong>nätverk</strong>strafik från att<br />

komma ut på ett tidigt stadium, dels att koppla samman <strong>nätverk</strong>strafik med det<br />

program som gav upphov till den. Att sammankoppla <strong>nätverk</strong>strafik med det som<br />

genererade trafiken är för de flesta operativsystem omöjligt att göra på den nivå som<br />

paketfilter opererar eftersom all <strong>nätverk</strong>strafik hanteras som enskilda paket. Detta<br />

är en av de svagheter som finns med paketfilter och för att komma åt den svagheten<br />

låter man sessionsfiltret utgöra kopplingen mellan program och <strong>nätverk</strong>strafik. Sessionsfiltret<br />

har ingen egen regelhantering utan förlitar sig på kontrollapplikationen<br />

för att avgöra om en <strong>nätverk</strong>sanslutning ska tillåtas eller inte vilket förenklar den<br />

övergripande designen.<br />

Flödesdiagrammet i figur 3.2 visar hur sessionsfiltret fungerar och hur det integrerar<br />

med kontrollapplikationen. Vid två tillfällen skickar sessionsfiltret information<br />

till kontrollapplikationen. När ett program försöker göra en ny anslutning<br />

skickas information om det upp till kontrollapplikationen som svarar om sessionsfiltret<br />

ska tillåta anslutningen eller inte. Även när en anslutning avslutas skickar<br />

sessionsfiltret upp information om detta så att kontrollapplikationen kan ta bort de<br />

regler som hör samman med den session som avslutats.<br />

De nackdelar som finns med ett sessionsfilter är att det inte kan skydda <strong>nätverk</strong>sstacken<br />

från attacker utifrån eftersom det ligger ovanför hela <strong>nätverk</strong>sstacken<br />

och kan inte heller analysera <strong>nätverk</strong>strafiken som den ser ut på <strong>nätverk</strong>et. Oftast<br />

består <strong>nätverk</strong>strafiken på den här nivån av strömmar av data eftersom det är först<br />

längre ner i stacken som data strömmarna blir till paket. Men med hjälp av ett<br />

paketfilter kan man analysera både de protokoll som används för transportlagret<br />

och <strong>nätverk</strong>slagret samt skydda datorn från attacker utifrån.


18 KAPITEL 3. MODELL<br />

Ny session<br />

Fråga<br />

kontrollapplikation<br />

3.3 Dynamiskt paketfilter<br />

Tillåt<br />

session?<br />

Nej<br />

Avsluta<br />

session<br />

Ja<br />

Vänta på data<br />

Avsluta<br />

session?<br />

Ja<br />

Informera tjänst<br />

Figur 3.2. Flödesdiagram över sessionsfiltret.<br />

Ett paketfilter är både enkelt att implementera, ger ett starkt skydd från intrång<br />

utifrån samt kräver lite resurser. Paketfiltret består av två komponenter, en regellista<br />

med regler som kontrollapplikationen har genererat och skickat ner samt en<br />

tillståndsmaskin med en tillståndstabell som där tillstånden för anslutningar genom<br />

paketfiltret sparas. Regellistan är sorterad i prioritetsordning och den första regel<br />

som hittas används. Nya regler läggs till överst i regellistan vilket kan ses som ett<br />

naivt sätt att hantera regler på och garanterar inte att vissa regler alltid gäller<br />

(Hazelhurst, 2001). För vår design är detta är dock inget problem eftersom tanken<br />

är att inte ska finnas några regler som alltid ska gälla, utan man ska börja med<br />

en tom regellista för att sedan lägga till och ta bort regler dynamiskt allt eftersom<br />

olika program använder <strong>nätverk</strong>et.<br />

Genom att använda sig av dynamiska regler som specificerar en viss anslutning<br />

tillsammans med en tillståndsmaskin för <strong>nätverk</strong>sanslutningar ökar man säkerheten<br />

avsevärt i jämförelse med ett traditionellt paketfilter eftersom tiden som ett<br />

regel gäller är relativt kort samt att den gäller bara för kommunikation mellan två<br />

noder. Om man skulle spoofa <strong>nätverk</strong>sadresser för att utnyttja en regel i paketfiltret<br />

kommer tillståndsmaskinen att märka att paketen inte matchar tillståndet<br />

som anslutningen är i och kasta bort dem. Figur 3.3 beskriver flödet för ett paket<br />

genom paketfiltret. Genom att använda en tillståndsmaskin behöver man bara söka<br />

i regellistan när en ny anslutning görs, resten av paketen som hör till anslutningen<br />

matchas mot tillståndet för anslutningen i tillståndstabellen.<br />

Nej


3.4. KONTROLLAPPLIKATION 19<br />

Sök<br />

tillståndstabell<br />

Finns<br />

tillstånd?<br />

ja<br />

Tillåtande<br />

tillstånd?<br />

ja<br />

Uppdatera<br />

tillståndstabellen<br />

3.4 Kontrollapplikation<br />

Nytt paket<br />

nej<br />

Blockera<br />

nej nej<br />

paket<br />

Släpp igenom<br />

paket<br />

Figur 3.3. Flödesschema över paketfiltret.<br />

Sök regellista<br />

Tillåtande<br />

regel?<br />

ja<br />

Lägg till i<br />

tillståndstabellen<br />

Är det program som samordnar de två filtren och hanterar regellistan över program<br />

som får använda <strong>nätverk</strong>et. Kontrollapplikationen verifierar vilket program som<br />

försöker använda <strong>nätverk</strong>et och använder sig av en regellista för att avgöra vilken typ<br />

av <strong>nätverk</strong>saccess programmet får göra. Om programmet är godkänt skickas en regel<br />

ner till paketfiltret för att öppnar upp för aktuella sessionen. När sessionen avslutats<br />

indikerar sessionsfiltret detta till kontrollapplikationen som då tar bort den aktuella<br />

regeln från paketfiltret. Själva flödet för kontrollapplikationen är enkelt och visas i<br />

figur 3.4, dock finns det svårigheter med hur man verifierar en applikationen eller<br />

om den utför kommandon åt någon annan applikation. Eftersom implementationen<br />

av där här funktionen skiljer sig mycket mellan olika operativsystem samt att det<br />

ligger utanför området brandväggar och snarare inom området för antivirus och<br />

antispyware programvara har vi valt att inte beskriva någon specifik teknik för<br />

att verifiera ett program. Generellt sätt kan man dock säga att man bör verifiera<br />

program med någon form av hash-funktion, kontrollera vilka bibliotek programmet<br />

har laddat samt undersöka processträdet för programmet för att kontrollera att<br />

även de program som har startat programmet är betrodda.


20 KAPITEL 3. MODELL<br />

Matcha PID mot<br />

program<br />

verifiera program<br />

Sök regellista regel finns<br />

Förfrågan om ny<br />

anslutning från<br />

sessionfiltret<br />

Nej<br />

Ja<br />

Meddela<br />

sessionsfiltret<br />

att stoppa<br />

anslutningen<br />

Nej<br />

tillåt<br />

anslutning<br />

Figur 3.4. Flödesschema över kontrollapplikationen.<br />

Ja<br />

Skapa regler för<br />

paketfiltret<br />

Skicka regler till<br />

paketfiltret<br />

Meddela<br />

sessionsfiltret att<br />

tillåta<br />

anslutningen


Kapitel 4<br />

Fallstudie - Microsoft Windows XP<br />

Den stora användningen av Windows XP som operativsystem i konsumentdatorer<br />

har drivit fram en stor efterfrågan på säkerhetsprogramvara som brandväggar och<br />

antivirusprogram. Det finns många produkter ute på marknaden att köpa, men lite<br />

finns skrivet om hur de egentligen fungerar. Viktigt är att belysa hur säkerhetsprogram<br />

som dessa fungerar för att kunna använda dem på rätt sätt. Säkerhetsmässigt<br />

brukar man säga att en ökad insyn och förståelse för funktionen bara kan höja den<br />

faktiska säkerheten av ett system. För att testa vår modell har vi implementerat<br />

en personlig brandvägg för Microsofts operativsystem Windows XP. Det finns flera<br />

anledningar att vi valt detta operativsystem bland annat följande:<br />

• Windows XP används som operativsystem i majoriteten av världens konsumentdatorer.<br />

• Windows XP är det operativsystem som i störst utsträckning utsätts för regelbundna<br />

attacker, främst baserade på svagheter i operativsystemet samt att<br />

konsumentanvändare är dåliga att skydda sig mot dessa.<br />

• Det finns få artiklar, om några alls, som presenterar design och implementation<br />

av ett sessionsfilter i Windows XP.<br />

• Det finns få artiklar skrivna om hur en implementation av en kombination av<br />

sessions- och paketfilter i Windows XP kan göras.<br />

4.1 Operativsystemsmodell<br />

Microsoft Windows XP har två abstraktionslager där programkod körs (Wikipedia,<br />

2006a). Den del av operativsystemet som tillhandahåller grundläggande funktionalitet<br />

för program kallas vanligtvis kärna eller kernel (se figur 4.1). Kärnan är<br />

ansvarig för att tillhandahålla ett enkelt gränssnitt för program att komma åt funktionalitet<br />

som till exempel att läsa och skriva till disk. Lagret ovanför kallas normalt<br />

applikationslager eller user space och det är i detta lager som vanliga program körs.<br />

21


22 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

Applikationslager<br />

OSkärna<br />

IOhanterare<br />

Figur 4.1. Abstraktionslager i Windows XP<br />

I själva verket är dessa två lager uppdelade i ytterligare lager, där varje nytt<br />

lager introducerar en ny nivå av abstraktion, men det finns en distinkt skillnad<br />

mellan kärnan och applikationslagret. All programkod som körs i kärnan har högre<br />

prioritet än den som körs i applikationslagret. Dessutom har programkod som körs<br />

i kärnan i stort sett obegränsad access till hela systemet. Dock finns det nackdelar<br />

med kärnan till skillnad från applikationslagret. Skulle någon del av programmet<br />

vara felaktigt eller sluta fungera som det skall är sannolikheten mycket stor att hela<br />

systemet havererar. Normalt är inte heller enkla standardfunktioner tillgängliga<br />

vilket gör det mycket svårare att skriva program.<br />

Programkod som körs i applikationslagret har däremot begränsad access till systemet.<br />

Alla grundfunktioner är normalt tillgängliga genom standardiserade gränssnitt.<br />

Genom denna nivå av abstraktion kan man enkelt skriva ett program som<br />

använder sig av standardgränssnitt för att till exempel läsa och skriva till disk. Programmet<br />

behöver således inte ändras för olika lagringsmedium som till exempel en<br />

hårddisk, en brännbar CD-skiva eller ett minneskort. Ytterligare en skillnad som<br />

har avgörande effekt är att program som körs i applikationslagret normalt delar på<br />

alla resurser. Program som körs i kärnan kan ibland ha ensamrätt till hela systemet<br />

vilket i vissa fall försvårar för utvecklaren. Ett sådant program kan till exempel inte<br />

vänta på att någon annan del av systemet skall bli klar eftersom det har exklusiv<br />

access till alla resurser.<br />

Normalt sköts all kommunikation till och från kärnan i Windows XP av en<br />

del av operativsystemet som kallas IO-hanterare eller Input Output manager. IOhanteraren<br />

är även ansvarig för kommunikationen mellan olika lager i kärnan. Denna<br />

kommunikation är i Windows XP paketbaserad. Den vanligaste typen av kommunikation<br />

sker med datafragment kallade IO-paket eller Input Output Request Packet<br />

(IRP).<br />

4.1.1 Drivrutinsmodell<br />

Drivrutin eller driver kallas en bit programkod som utökar kärnans funktionalitet.<br />

Vid installation av en drivrutin installeras programmet in i kärnan och körs igång.<br />

En tillverkare av till exempel ett <strong>nätverk</strong>skort är normalt sett ansvarig för att


4.1. OPERATIVSYSTEMSMODELL 23<br />

tillhandahålla en drivrutin som styr <strong>nätverk</strong>skortet och ett standardiserat gränssnitt<br />

mot resten av systemet. Kärnan i Windows XP består till stor del av lager ovanpå<br />

lager av drivrutiner som kommunicerar med IO-paket via IO-hanteraren (se fig 4.2).<br />

Applikationslager<br />

Kärna<br />

Hårdvara<br />

TCP/IP-drivrutin<br />

Ethernet-drivrutin<br />

Drivrutin <strong>nätverk</strong>skort<br />

Nätverkskort<br />

Hårdvaruabstraktionslager<br />

Applikation<br />

API<br />

Executive<br />

...<br />

Minneshant.<br />

IO-hanterare<br />

Processhant.<br />

...<br />

Fysisk enhet<br />

Figur 4.2. Drivrutinsmodellen i Windows XP<br />

För kommunikation mellan applikationer och komponenter i kärnan brukar denna<br />

kommunikation gå genom ett applikationsgränssnitt eller Application Programming<br />

Interface (API). Det finns flera sätt för ett sådant gränssnitt att implementera<br />

själva kommunikationen, men det vanligaste är att använda sig av IO-paket. Att<br />

från en komponent i kärnan initiera kommunikation till en applikation i applikationslagret<br />

är svårt varför normalt sett applikationen är den som initierar trafiken.<br />

En vanlig metod är att applikationen förbereder och skickar ner ”tomma” IO-paket<br />

som drivrutinen buffrar upp. När denne är redo att skicka upp information tar den<br />

ett ”tomt” IO-paket ur högen, fyller i information och returnerar till applikationen.<br />

Applikationen som har legat och väntat på att få tillbaka sina IO-paket kan nu läsa<br />

ut informationen, förbereda ett nytt ”tomt” IO-paket och skicka ner det.<br />

4.1.2 Nätverksmodell<br />

Nätverksmodellen i Windows XP består av flertalet lager inuti och utanför kärnan<br />

(se figur 4.3). Denna modell är en anpassning av TCP/IP-modellen (se figur 2.2)<br />

för att passa drivrutinsmodellen i Windows XP.<br />

Applikationer använder sig normalt av något av de gränssnitt (API) som finns<br />

för <strong>nätverk</strong>skommunikation såsom Winsock API för TCP/IP. Lagret där Winsock<br />

finns kallas för API-lagret och där finns olika gränssnitt för att kommunicera över<br />

<strong>nätverk</strong>.


24 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

OSI-modellen XP-modellen<br />

7. Applikation<br />

6. Presentation<br />

5. Session<br />

4. Transport<br />

3. Nätverk<br />

2. Datalänk<br />

1. Fysisk länk<br />

Applikationer och tjänster<br />

Winsock<br />

API<br />

NetBios<br />

API<br />

Servers<br />

TCP/IP IPX/SPX NetBEUI<br />

Drivrutin<br />

<strong>nätverk</strong>skort<br />

TDI<br />

NDIS<br />

HAL<br />

Drivrutin<br />

<strong>nätverk</strong>skort<br />

Nätverkskort Nätverkskort<br />

Figur 4.3. Nätverksmodellen i Windows XP<br />

Applikationslager<br />

Under API-lagret finns ett standardiserat gränssnitt mot alla <strong>nätverk</strong>sprotokoll<br />

implementerade i kärnan kallat TDI-lagret (Transport Driver Interface) (Microsoft,<br />

2006c). TDI är ett gemensamt gränssnitt alla protokoll måste implementera för att<br />

API-lagret ska kunna kommunicera med dem. I det här lagret finns bland annat<br />

TCP/IP-protokollet implementerat.<br />

Protokollen i TDI-lagret kommunicerar i sin tur med nästa lager via ett gränssnitt<br />

kallat NDIS-lagret (Network Driver Interface Specification). NDIS är ett gemensamt<br />

gränssnitt för drivrutiner för <strong>nätverk</strong>skort. Protokollagret får på detta<br />

sätt ett standardiserat gränssnitt att kommunicera mot. NDIS består i sig själv av<br />

flera olika lager. Drivrutiner i NDIS-lagret kommunicerar i sin tur med hårdvaran<br />

via HAL-lagret (Hardware Abstraction Layer). Se DDK-dokumentationen (Driver<br />

Development Kit) från Microsoft för mer information (Microsoft, 2006e).<br />

4.2 Filtreringstekniker<br />

Det finns flera sätt att implementera ett <strong>nätverk</strong>sfilter i Windows XP där alla varianter<br />

har sina fördelar och nackdelar. Huvudsakligen finns det två huvudkategorier<br />

av filter:<br />

• Filter som är implementerade i applikationslagret, det vill säga på samma<br />

nivå som vanliga program körs på.<br />

Kärna<br />

• Filter som är implementerade i kärnan, det vill säga som drivrutiner.<br />

Generellt är det enklare att implementera ett filter i applikationslagret eftersom<br />

det finns fler funktioner och bibliotek tillgängliga samt att fel bara påverkar den


4.2. FILTRERINGSTEKNIKER 25<br />

applikationen som felet uppstod i, inte hela systemet. Att implementera ett filter<br />

i kärnan ställer högre krav på koden. Många funktioner och bibliotek som finns i<br />

applikationslagret finns inte i kärnan. Dessutom orsakar ett fel i en drivrutin med<br />

största sannolikhet att hela systemet havererar. Dock finns det fördelar att implementera<br />

filter i kärnan, bland annat körs de med högre prioritet, de är svåra att<br />

ta bort, man får tillgång till paketen på ett tidigt stadium (vilket gör att de inte<br />

behöver passera hela <strong>nätverk</strong>sstacken) och det är svårt att gå runt ett filter i kärnan.<br />

Nedan följer en genomgång av filtreringstekniker som finns tillgängliga i Windows<br />

XP.<br />

4.2.1 Filtrering i applikationslagret<br />

• Winsock Layered Service Provider (LSP). LSP är en del av Winsock<br />

gränssnittet och gör det möjligt att på ett enkelt sätt filtrera eller implementera<br />

tjänster så som Quality of Service (QoS) för TCP/IP. Dock är det möjligt<br />

att anropa TDI-lagret direkt och på så sätt gå förbi en LSP. Vill man inspektera<br />

alla paket kan man inte förlita sig på Winsock LSP, utan måste använda<br />

andra tekniker.<br />

• Packet Filtering Interface. Detta gränssnitt är en del av det så skallade<br />

IP helper API i Windows XP och gör det möjligt för applikationer att ange<br />

ett antal regler som används av TCP/IP-komponenter för att filtrera paket.<br />

Detta filter är inbyggt i olika TCP/IP-komponenter i kärnan och själva filtret<br />

kallas IP Filter. Filtrering sker på IP-adresser och portnummer. Dock är det<br />

möjligt att gå förbi även denna mekanism genom att exempelvis installera ett<br />

eget protokoll parallellt med TCP/IP protokollet.<br />

• Winsock Replacement DLL (Dynamically Linked Library). Innan det<br />

var möjligt att bygga ut Winsockgränsnittet med en LSP var det ända sättet<br />

att byta ut vissa av DLL-erna mot nya. På detta sätt kunde man filtrera<br />

alla anrop till Winsock och anropa de ursprungliga funktionerna i Winsock<br />

när så behövdes. Det finns flera anledningar till att det här var och är en<br />

dålig idé. En av anledningarna är att gränssnittet mellan DLL-erna är privata<br />

och odokumenterade vilket gör att en uppdatering av operativsystemet kan<br />

medföra att en DLL slutar att fungera.<br />

4.2.2 Filtrering i kärnan<br />

• TDI-Hook (TDI-filter). Genom att lägga sig som ett lager ovanpå protokolldrivrutinen<br />

för TCP/IP kan man filtrera alla IO-paket som passerar. Det<br />

finns två sätt att filtrera IO-paket till TDI-lagret. Antigen kan man använda<br />

sig av IoAttachDeviceXYZ-anrop för att filtrera ovanför TDI eller så kan man<br />

ersätta utvalda funktioner i anropstabellen (Dispatch Table) för TDI så att<br />

alla IO-paket filtreras. Dessa är en relativt drastiska metoder som genskjuter


26 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

alla anrop till TDI-lagret. Båda teknikerna kräver en djup förståelse för TDI<br />

gränssnittet och Windows XP vilket gör dem relativt svåra att implementera.<br />

Implementationen försvåras ytterligare av att det finns lite, om alls någon,<br />

dokumentation om hur man skall gå tillväga. Med ett TDI-filter kan man inte<br />

skydda TCP/IP-stacken från attacker utifrån eftersom filtret installeras ovanför<br />

TCP/IP protokollet. Fördelen är att man kan filtrera på information från<br />

sessions- och applikationsnivån i OSI-modellen (se figur 2.2) samt att ett filter<br />

av denna typ är mycket svårt att avinstallera.<br />

• NDIS Intermediate (NDIS-filter). Denna typ av filter installeras som<br />

en komponent i NDIS-lagret. NDIS tillhandahåller ett inbyggt stöd för denna<br />

typ av filter vilket gör en implementation enkel. Microsoft rekommenderar<br />

att paketfilter implementeras som NDIS-filter och tillhandahåller i sin<br />

DDK-dokumentation ett exempel för att fånga paket kallat Passthru (Microsoft,<br />

2006e). En nackdel är att ett NDIS-filter endast filtrerar på paketnivå.<br />

Det finns alltså ingen information från applikations- eller sessionsnivån i OSImodellen<br />

att filtrera på (se figur 2.2). Det går således inte att filtrera dataströmmar<br />

efter vilken applikation som kommunicerar. Fördelen med NDISfilter<br />

är att man har tillgång till datapaketen så som de ser ut på <strong>nätverk</strong>et<br />

och att filtreringen sker under TCP/IP-stacken.<br />

• NDIS-Hook. På samma sätt som för ett TDI-filter kan man ersätta utvalda<br />

funktioner i anropstabellen för NDIS och på detta sätt filtrera alla anrop till<br />

NDIS. Även denna typ av filter är relativt drastisk och saknar dokumentation<br />

och tydliga exempel. Fördelen med detta filter jämfört med ett NDIS<br />

Intermediate-filter är att de generellt är mycket svåra att avinstallera eller<br />

kringgå. Nackdelen är istället att dokumentationen är knapphändig, de är<br />

svåra att implementera och att NDIS kan sluta fungera vid en eventuell uppgradering.<br />

• Firewall-Hook. Microsoft tillhandahåller ett gränssnitt som kom i och med<br />

Windows 2000 för ett generellt brandväggsfilter inbyggt i <strong>nätverk</strong>sstacken.<br />

Dock avråder Microsoft från att använda det idag eftersom det finns kända<br />

problem med implementationen av detta filter. Filtreringen sker på för hög<br />

nivå i stacken för att fungera som en effektiv brandvägg.<br />

• Filter-Hook. Genom att registrera en filterfunktion i det inbyggda IP Filter<br />

som används av bl.a. IP helper-API kan man utöka IP Filter-funktionaliteten.<br />

TCP/IP-stacken anropar denna funktion på många olika ställen och man kan<br />

på detta sätt implementera ett filter som inte lägger till något nytt lager<br />

till stacken. Fördelar är bland annat att man kan filtrera på datapaketen<br />

direkt från <strong>nätverk</strong>et samt skydda transportlagret av TCP/IP (Jackson, 2005).<br />

En nackdel med denna teknik är att endast ett filter kan vara installerat åt<br />

gången.


4.3. DESIGN 27<br />

4.3 Design<br />

Utgångspunkten för designen är att visa att vår teori fungerar i en implementation.<br />

För att kunna göra detta inom ramen för det här arbetet har vissa praktiska detaljer<br />

utelämnats. Bland annat har inget grafiskt användargränssnitt utvecklas och<br />

program som vill använda <strong>nätverk</strong>et identifieras endast utifrån namnet på deras exekverbara<br />

fil. En praktisk implementation borde göra en utförligare identifikation av<br />

program, vilka bibliotek varje program har laddat, vem som startade programmet<br />

i fråga och så vidare. Med denna implementation vill vi visa ett koncept.<br />

4.3.1 Mål och krav för implementationen<br />

Prototypen skall implementera de grundfunktioner som presenterats i teoridelen<br />

(kapitel 3). Målet med implementationen är att visa att konceptet med två filter<br />

och dynamiska regler fungerar och kan utgöra grunden för en säker personlig brandvägg.<br />

Utöver de grundläggande kraven för funktionalitet har vi ställt upp följande<br />

implementationsspecifika krav:<br />

• Det skall vara svårt för obehöriga att förändra filtrens beteende.<br />

• Det skall vara svårt att kringgå filtren.<br />

• Implementationen måste vara effektiv i bemärkelsen att normal användning<br />

ej skall medföra någon försämring i prestanda för slutanvändaren.<br />

4.3.2 Begränsningar<br />

Eftersom implementationen görs för att visa ett koncept och ej en färdig produkt<br />

har följande begränsningar satts upp:<br />

• Förenklad tillståndshantering En enkelt version av tillståndhantering i<br />

paketfiltret som inte verifierar sekvensnummer och fönsterstorlek i TCP/IPprotokollet.<br />

• Förenklad identifikation av program Program som vill använda <strong>nätverk</strong>et<br />

identifieras endast utifrån namnet på deras exekverbara fil.<br />

• Förenklad kontrolltjänst Inget grafiskt gränssnitt för kontrolltjänsten. Som<br />

följd av begränsningen i identifikation av program har heller inget avancerat<br />

regelverk för access baserat på applikation satts upp.<br />

4.3.3 Arkitektur<br />

Implementationen är precis som modellen uppdelad i två filter och en kontrollapplikation.<br />

Utifrån kraven och informationen om filtreringstekniker i Windows XP<br />

anser vi att båda filtren måste implementeras i kärnan. Genom att installera filtren


28 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

Brandväggstjänst<br />

Applikationer och tjänster<br />

Winsock<br />

API<br />

NetBios<br />

API<br />

Servers<br />

TCP/IP IPX/SPX NetBEUI<br />

Drivrutin<br />

<strong>nätverk</strong>skort<br />

TDI-filter<br />

TDI<br />

NDIS<br />

NDIS-filter<br />

HAL<br />

Drivrutin<br />

<strong>nätverk</strong>skort<br />

Nätverkskort Nätverkskort<br />

Applikationslager<br />

Kärna<br />

Figur 4.4. Arkitektur för implementationen<br />

som drivrutiner i kärnan blir de svåra att kringgå och man får bland annat tillgång<br />

till paketen innan de når TCP/IP stacken (se figur 4.4).<br />

Som paketfilter har vi valt att använda oss av ett NDIS-filter. Filtreringen sker<br />

på en låg nivå mellan <strong>nätverk</strong>skortet och TCP/IP-stacken. Ytterligare en fördel är<br />

att det finns mycket information att tillgå om denna typ av drivrutiner, bland annat<br />

i form av ett exempel i Microsoft DDK (Microsoft, 2006e).<br />

Vårt sessionsfilter har vi valt att lägga mellan transportlagret och applikationslagret<br />

i TCP/IP-modellen. Detta filter har vi valt att implementera som ett TDIfilter.<br />

Genom att ändra anropstabellen för det ursprungliga TDI-lagret att hänvisa<br />

till våra egna funktioner genskjuter vi alla anrop till TDI-lagret. Godkända anrop<br />

vidarebefordras till det ursprungliga TDI-lagret. Det finns dock vissa risker med ett<br />

TDI-filter, bland annat att det är komplicerat att implementera då det inte finns<br />

någon, eller mycket lite dokumentation om hur man gör.<br />

Själva kontrollapplikationen har vi valt att implementera som en tjänst vilket<br />

bland annat innebär att den kan starta utan att en användare behöver start ett<br />

program. All konfiguration och alla regler ligger i registret, som är en databas med<br />

inställningar som finns tillgängligt i Windows, eftersom det inte finns något filsystem<br />

tillgängligt när drivrutinerna laddas under uppstart av operativsystemet.<br />

För att kommunicera med drivrutinerna använder sig kontrolltjänsten av IOCTLmeddelanden<br />

(Input Output Control Codes) som skickas som IO-paket ner till drivrutinerna.<br />

En applikation försöker öppna en anslutning fångas detta anrop i TDI-filtret.<br />

Filtret skickar en förfrågan till brandväggstjänsten som får avgöra huruvida anslut-


4.3. DESIGN 29<br />

ningen är tillåten eller inte. Brandväggstjänsten verifierar i sin tur att det finns<br />

en regel som tillåter applikationen att öppna anslutningen. Ifall anslutningen är<br />

legitim skickar brandväggstjänsten ner en ny regel till NDIS-filtret som öppnar för<br />

kommunikation (se figur 4.5).<br />

Applikation TDI filter Tjänst<br />

TDI_CONNECT<br />

4.3.4 Paketfilter<br />

svc_io_query_service<br />

ALLOW<br />

ValidateProcess()<br />

IOCTL_NDIS_<br />

ADD_RULES<br />

TDI_CONNECT<br />

NDIS filter<br />

Figur 4.5. Förenklat sekvensdiagram för implementationen<br />

Paketfiltret installeras som en NDIS intermediate driver och lägger sig som en integrerad<br />

del av NDIS i <strong>nätverk</strong>smodellen för Windows XP (se figur 4.4). En intermediate<br />

driver är en speciell komponent i NDIS som lägger sig ovanpå varje drivrutin för<br />

<strong>nätverk</strong>skort installerade i NDIS-lagret. Tillgängligt för filtrering finns här hela <strong>nätverk</strong>spaket<br />

precis som de skickas ut på det medium man anslutit sig till. Denna plats<br />

är således utmärkt för filtrering av in- och utgående paketströmmar. Paketfiltret är<br />

konstruerat utifrån grundexemplet Passthru i DDK-dokumentationen (Microsoft,<br />

2006e). Utöver grundkomponenterna läggs några komponenter till enligt figur 4.6.<br />

En enkel och effektiv tillståndshantering för anslutningar har implementerats<br />

efter flödesdiagrammet i figur 3.3. För att utnyttja teknikerna för dynamiska paketfilter<br />

(se 2.2.3) har även UDP-protokollet hanteras som ett anslutningsorienterat<br />

protokoll. En timer har implementerats för att hålla koll på livslängden för tillstånden<br />

i tillståndstabellen. Tillståndshanteringen för TCP kontrollerar uppkopplingsoch<br />

nerkopplingsfaserna för TCP (Wikipedia, 2006d) medan tillståndshanteringen<br />

för UDP är förenklad till att det antingen finns en uppkoppling eller inte. Genom<br />

denna implementation skyddar NDIS-filtret operativsystemets TCP/IP-stack från<br />

hot utifrån. Dessutom agerar paketfiltret som ett extra filter för trafik inifrån. Skulle<br />

en applikation installera en parallell protokollstack för att försöka gå runt TDI-filtret<br />

kommer man inte längre än hit. Alla paket stoppas som ej tillhör en tillåten paketström<br />

som kontrollapplikationen öppnat för genom att skicka ner nya regler. All<br />

trafik som filtret ej känner igen eller ej har någon regel som explicit tillåter den<br />

TDI


30 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

Utgående trafik<br />

Paketfilter<br />

Inkommande trafik<br />

Överliggande protokoll<br />

Regellista<br />

Protocol<br />

Tillståndstabell<br />

Miniport<br />

Timer<br />

Underliggande NDIS-drivrutin<br />

Regelhantering<br />

Figur 4.6. Komponenter i paketfilter<br />

IOCTL<br />

konfiguration<br />

stoppas. För enkelhets skull har detta filter endast implementerats för att hantera<br />

IP-protokoll version 4, men en enkel anpassning skulle göra det kompatibelt med<br />

IP-protokoll version 6.<br />

4.3.5 Sessionsfilter - TDI filter<br />

Sessionsfiltret installeras ovanpå TCP/IP-protokollet som en TDI-Hook. På detta<br />

sätt genskjuter man alla anrop till TDI-lagret och därmed alla normala uppkopplingsförsök<br />

gjorda från applikationslagret. Eftersom detta filter installeras ovanför<br />

TCP/IP-stacken kan vi avbryta anslutningen så tidigt som möjligt och få minimal<br />

inverkan på TCP/IP-stacken. Sessionsfiltrets uppgift är att identifiera och sammankoppla<br />

sessions- och applikationsinformation. Alla normala kommunikationskanaler<br />

öppnas genom att använda ett API som kommunicerar med TDI. Vid denna kommunikation<br />

sker ett IOCTL-anrop till TDI-lagret och detta anrop körs i programmets<br />

egna process. Detta gör att man under ett anrop kan ta reda på vilken process<br />

eller PID (Process Identification Number) man är och därigenom vilket program<br />

som gjort anropet. Ett anslutningsförsök i TDI är alltså förknippat med följande<br />

information:<br />

• Adressinformation gällande anslutningen, t.ex. käll- och destinationsadresser,<br />

portar och protokoll.<br />

• PID för den process som gjort anropet.<br />

Det finns inget väldokumenterat sätt att ta reda på vilken exekverbar fil som en viss<br />

PID tillhör i en drivrutin varvid själva mappningen till vilket program som motsvarar<br />

en PID måste göras i applikationslagret. TDI-filtret måste därför ta hjälp av<br />

kontrolltjänsten för att verifiera att programmet som gör anropet har rättigheter att


4.3. DESIGN 31<br />

öppna en anslutning. Eftersom kontrollapplikationen körs i applikationslagret och<br />

därmed har lägre prioritet än en drivrutin måste denna förfrågan göras asynkront.<br />

För att hantera detta har vi implementerat ett kösystem där en tråd som gör en<br />

förfrågan lägger en semafor i en väntekö för att sedan ligga och vänta på att svar<br />

skall inkomma. För att det inte skall uppstå någon lägre låsning har vi även en<br />

timer som avbryter väntan efter en tid. Dessa system har gjort att TDI-filtret har<br />

relativt många komponenter (se figur 4.7).<br />

IOCTL-anrop till TDI<br />

TDI-filter<br />

Adressobjekt<br />

IRP-kö<br />

Anrop till återkopplingsfunktion<br />

(Callback)<br />

TDI-klient<br />

IO-hanterare<br />

Associerade<br />

objekt<br />

Förfrågningar<br />

som väntar på<br />

svar<br />

TDI-lager<br />

Anslutningar<br />

Timer<br />

Figur 4.7. Komponenter i TDI-filtret<br />

IOCTL<br />

förfrågningar/<br />

svar<br />

Konceptuellt fungerar sessionsfiltret relativt enkelt och är baserat på flödesdiagrammet<br />

i figur 3.2. Vad gäller tillståndshantering för en uppkoppling i TDI-lagret<br />

är denna inte lika lättöverskådlig (se figur 4.8). Konceptuellt fungerar denna som<br />

följande:<br />

1. Öppna två ändpunkter för kommunikation (adresser).<br />

2. Associera dessa.<br />

3. Anslut.<br />

Det finns knapphändig dokumentation om hur anslutningar hanteras i TDI men<br />

för en utförligare beskrivning se appendix A.<br />

4.3.6 Kontrolltjänst<br />

Kontrolltjänsten är ansvarig för att knyta samman sessions- och paketfiltret. Denna<br />

komponent är även ansvarig för den övergripande regelhanteringen. Komplexiteten


32 KAPITEL 4. FALLSTUDIE - MICROSOFT WINDOWS XP<br />

start<br />

ZwCreateFile<br />

En öppen<br />

adress<br />

ZwClose<br />

slut<br />

ZwCreateFile<br />

ZwClose<br />

ZwClose<br />

TDI_SEND<br />

TDI_RECEIVE<br />

Två öppna<br />

adresser<br />

ZwClose<br />

Uppkopplad<br />

TDI_ASSOCIATE_ADDRESS<br />

TDI_DISASSOCIATE_ADDRESS<br />

TDI_DISCONNECT<br />

TDI_CONNECT<br />

TDI_SET_EVENT_HANDLER<br />

Uppkopplad<br />

med<br />

callback<br />

TDI_SEND<br />

TDI_RECEIVE<br />

TDI_EVENT_RECEIVE<br />

Associerade<br />

adresser<br />

Callback<br />

registread<br />

TDI_DISCONNECT<br />

~TDI_SET_EVENT_HANDLER<br />

TDI_CONNECT<br />

ZwClose<br />

~TDI_SET_EVENT_HANDLER<br />

TDI_SET_EVENT_HANDLER<br />

ZwClose<br />

Figur 4.8. Tillståndsdiagram för en session i TDI-filtret<br />

för reglerna för ett sessionsfilter gör att implementationen av regelhantering underlättas<br />

avsevärt då den flyttas till kontrolltjänsten.<br />

För de förfrågningar kontrolltjänsten får från TDI-lagret kan kontrolltjänsten<br />

avgöra huruvida en applikation får upprätta en anslutning eller ej. TDI-lagret skickar<br />

en förfrågan med följande information:<br />

• PID för den process som försöker öppna en anslutning.<br />

• Adressinformation om vilket protokoll och vart processen vill ansluta.<br />

Man kan även ta reda på vilka bibliotek som denna process har laddat och vem<br />

som startat den. Från denna information samt vilken adress den försöker ansluta till<br />

kan man sedan bestämma huruvida en applikation (exekverbara filer och bibliotek)<br />

får genomföra anslutningen eller ej. Möjligt i detta läge är även att fråga användaren<br />

om anslutningen är legitim eller ej. Det är många kommersiella program som<br />

använder sig av denna typ av kontroll, vanligtvis presenteras ett fönster med en<br />

fråga om ett visst program får ansluta eller ej. Den grundläggande funktionaliteten<br />

för tjänsten baseras på flödesdiagrammet i figur 3.4.<br />

I det fall tjänsten beslutat att anslutningsförsöket är legitimt skickar denne ner<br />

en ny regel till NDIS-filtret för att öppna för trafik till denna anslutning. Tjänsten<br />

kommunicerar med de två drivrutinerna med hjälp av IOCTL-meddelanden. För


4.3. DESIGN 33<br />

NDIS filtret används dessa för att lägga till, ta bort och rensa regler från paketfiltret.<br />

NDIS filtret skickar aldrig själv meddelanden till tjänsten utan hanterar en<br />

egen regellista som tjänsten är ansvarig för att uppdatera. IOCTL-meddelanden<br />

till och från TDI-filtret är av två typer. Antigen informerar TDI-filtret tjänsten till<br />

exempel om att en anslutning har avslutats, eller skickar TDI-filtret en förfrågan<br />

om en anslutning får göras. Tjänsten har en egen regellista som består av regler per<br />

program.


Kapitel 5<br />

Tester<br />

För att testa och utvärdera om implementationen och därav modellen uppfyller<br />

de mål och krav som ställts upp för den här rapporten utfördes ett antal tester.<br />

Implementationstester för att utvärdera att implementationen fungerade som det<br />

var tänkt, penetrationstester för att verifiera att implementationen klarar av externa<br />

och interna attacker samt regeltester för att säkerhetsställa att en säkerhetspolicy<br />

implementeras på ett korrekt sätt. Utifrån dessa tester kan man sedan dra slutsatser<br />

om implementationen uppfyller de fem mål som ställdes upp i avsnitt 1.1 och därav<br />

visa om implementationen innehar de egenskaper som beskrivs för modellen.<br />

Implementationstesterna utfördes i två delar. För att upptäcka valideringsfel<br />

och avgränsningsfel i implementationen användes kodanalysverktyg. Koden i NDIS<br />

och TDI drivrutinerna analyserades regelbundet vid kompilering med hjälp av PRE-<br />

Fast for Drivers (Microsoft, 2006b) som är ett verktyg för statisk kodanalys och som<br />

kan upptäcka problem som inte brukar upptäckas av vanliga kompilatorer. Tjänsten<br />

analyserades med hjälp av kodanalysverkyget i Visual Studio 2005 (Microsoft,<br />

2006d). Den andra delen av implementationstester gjordes genom för att testa om<br />

brandväggen verkligen blockerade paket och utförde det som reglerna beskrev. Dessa<br />

tester gjordes med hjälp av enkla program som ping och telnet.<br />

Penetrationstesterna bestod av externa och interna attacker. För de externa penetrationstesterna<br />

användes paketgenererings- och <strong>nätverk</strong>sscanningsverktyg. För<br />

interna penetrationstester (program som försöker ta sig ut) användes program från<br />

en websida med testprogram (Kaddouch, 2006). Dock utfördes inte alla deras tester<br />

utan bara sådana som motsvarade målen för implementationen. Framförallt utlämnades<br />

tester som använder sig av tekniker för att ladda in sig själva i andra program<br />

och liknande. Eftersom endast en enkelt version för att verifiera program har implementerats<br />

kan inte vår implementation upptäcka och stoppa denna typ av interna<br />

attacker. Följande program och tester valdes ut då de motsvarar de mål som vi<br />

ställt upp för implementationen.<br />

• Leak Test v1.2: Programmet försöker kontakta websidan grc.com genom att<br />

döpa om sig till ett program som antagligen är godkänt, Internet Explorer.<br />

35


36 KAPITEL 5. TESTER<br />

• TooLeaky: Tooleaky öppnar standardwebläsaren med följande kommandorad:<br />

iexplore.exe http://grc.com/lt/leaktest.htm?PersonalInfoGoesHere<br />

Fönstret som öppnas är gömt. Om webläsaren är tillåten att anropa servrar<br />

på port 80 kommer den att lyckas skicka information till destinationsadressen<br />

som i det här fallet är GRC.com.<br />

• YALTA: Provar att skicka UDP paket på portar som ofta är tillåtna så som<br />

53 (DNS) och 21(FTP).<br />

• hping: Paketgenerator för TCP/IP-protokollet (Wikipedia, 2006b).<br />

• Nmap: Nätverksscanner för TCP/IP-protokollet (Wikipedia, 2006c).<br />

Regeltesterna gjordes genom att en säkerhetspolicy sattes för brandväggen och<br />

sedan testades om brandväggen implementerade denna genom att testa med ping,<br />

hping, telnet och nmap.<br />

Alla tester utfördes i en virtuell maskin (Microsoft, 2006a) med operativsystemet<br />

Microsoft Windows XP SP2 med alla säkerhetsuppdateringar som fanns tillgängliga<br />

november 2006. Noden som användes för de externa penetrationstesterna använde<br />

sig av operativsystemet Mac OS X 10.4.8.<br />

5.1 Resultat<br />

5.1.1 Implementationstester<br />

Genom att utgå från modellen vid design implementerade vi en brandvägg bestående<br />

av två filter och en kontrollapplikation. Dessa filter har var för sig olika<br />

funktionalitet, olika starka och svaga egenskaper men tillsammans kompletterar de<br />

varandra. För enklare program som ping och telnet kunde deras uppkopplingsförsök<br />

följas redan i TDI-lagret. Då vi skrivit in en tillåtande regel för ett av dessa program<br />

kunde det utan problem kommunicera eftersom tjänsten vid ett uppkopplingsförsök<br />

skickat ner en ny regel till NDIS. Även mer komplicerade program som installerar<br />

en egen <strong>nätverk</strong>sstack parallellt med den inbyggda får problem att kommunicera ut<br />

trafik eftersom NDIS-filtret blockerar trafiken.<br />

5.1.2 Penetrationstester<br />

Vi genomförde en testsvit med olika typer av penetrationstester för utgående trafik<br />

(se tabell 5.1).<br />

För penetrationstester utifrån har vi genomfört tester med bland annat hping<br />

med lyckat resultat. Vid penetrationstesterna innifrån lyckades TooLeaky ta sig ut<br />

vilket beror på att den startar Internet Explorer. Eftersom implementationen inte<br />

undersöker processträdet för varje process fångar vi inte upp denna typ av program.<br />

Dock klarar implementationen de två andra som väntat.


5.1. RESULTAT 37<br />

Test Riktning Resultat Kommentar<br />

Leak Test Ut Stoppad<br />

TooLeaky Ut Passerar Använder sig av Internet Explorer<br />

YALTA Ut Stoppad<br />

hping In Stoppad Specialkonstruerade paket<br />

Nmap In Stoppad Portscanning<br />

5.1.3 Regeltester<br />

Tabell 5.1. Resultat av penetrationstester.<br />

För regeltesterna definierades en säkerhetspolicy som innebar att Internet Explorer<br />

fick kommunicera med servrar med TCP port på 80, samt att systemets DNS<br />

klient får kommunicera med servrar med UDP på port 53. Denna säkerhetspolicy<br />

lades in som två regler för kontrolltjänsten, en för Internet Explorer och en för<br />

DNS klienten. Genom att starta Internet Explorer och gå mot en websida samtidigt<br />

som de olika komponenterna (TDI filtret, NDIS filtret och kontrolltjänsten)<br />

i brandväggen övervakades. Utifrån detta kunde vi se att brandväggen implementerade<br />

säkerhetspolicyn som det var tänkt. Tester gjordes även med nmap för att<br />

verifiera att inga andra portar var öppna.<br />

5.1.4 Sammanfattning<br />

Resultaten från de olika testerna visar att implementationen fungerar som tänkt<br />

samt att den innehar de egenskaper som beskrivs av modellen. Nedan följer en<br />

beskrivning av hur testerna visar att implementationen klarar av dem fem målen<br />

från avsnitt 1.1.<br />

• Säkerhetsproblem i operativsystem. Genom penetrationstesterna har man<br />

visat att implementationen skyddar mot externa och interna attacker vilket<br />

betyder att implementationen skyddar operativsystemet från attacker.<br />

• Förhindra åtkomst till information. Eftersom implementationen klarar<br />

av implementationstesterna samt regeltesterna har vi visat att den klarar av<br />

att förhindra åtkomst till information.<br />

• Förhindra informationsläckor. De interna penetrationstesterna har visat<br />

att implementationen klarar av att förhindra informationsläcker.<br />

• Upprätthålla en säkerhetspolicy. Regeltesterna har visat att implementationen<br />

implementerar en säkerhetspolicy på ett korrekt sätt.<br />

• Granskning. Genom att implementationen spårar alla applikationer och all<br />

<strong>nätverk</strong>strafik är det lätt att följa ett förlopp för till exempel ett intrångsförsök.


Kapitel 6<br />

Slutsats<br />

I denna rapport har vi börjat med att presentera OSI-modellen för att relatera den<br />

till TCP/IP-modellen som är den standard som används på Internet idag. Utifrån<br />

dessa modeller har vi i kapitel 2 presenterat olika brandväggstekniker samt olika<br />

metoder för att testa och analysera dessa. I kapitel 3 har vi sedan utgått från tekniker<br />

presenterade i kapitel 2 för att ta fram en generell modell för en personlig<br />

brandvägg kapabel att filtrera på information från flera lager i OSI-modellen. Fokus<br />

har legat på design av ett sessionsfilter samt kombinationen av detta filter ihop med<br />

ett dynamiskt paketfilter. Genom denna kombination av brandväggstekniker har vi<br />

visat att man kunnat eliminera betydande svagheter hos respektive teknik. På detta<br />

sätt har vi designat en personlig brandvägg som ger ett bättre skydd, från attacker<br />

både inifrån och utifrån. För att testa den teoretiska modellen och visa att den är<br />

praktiskt genomförbar har vi i kapitel 4 konstruerat en prototyp för Microsoft Windows<br />

XP. Nätverksmodellen, drivrutinsmodellen samt olika filtreringstekniker för<br />

Windows XP har presenterats i detta kapitel. Utifrån de tekniker som presenterats<br />

har vi implementerat modellen presenterad i kapitel 3 med hjälp av ett TDI-filter,<br />

ett NDIS-filter och en kontrolltjänst. I kapitel 5 har vi testat prototypen utifrån<br />

tre olika testkategorier: (1) implementationstester, (2) penetrationstester och (3)<br />

regeltester för att verifiera att prototypen stämmer överens med den teoretiska modellen.<br />

Genom tester genomförda i kapitel 5 har vi visat att implementationen och<br />

modellen uppfyller de fem egenskaper vi ställt upp i kapitel 1. I och med detta<br />

har vi uppnått de mål som ställts upp för den här rapporten; att presentera en<br />

generell modell för en personlig brandvägg med följande fem egenskaper: (1) skydda<br />

mot säkerhetsproblem i operativsystem, (2) förhindra åtkomst till information, (3)<br />

förhindra informationsläckor, (4) upprätthålla en säkerhetspolicy och (5) underlätta<br />

granskning.<br />

39


Litteraturförteckning<br />

Cisco. Evolution of the firewall industry, September 2002. URL http://www.cisco.<br />

com/univercd/cc/td/doc/product/iaabu/centri4/user/scf4ch3.htm.<br />

Dubrawsky, Ido. Firewall evolution - deep packet inspection, Juli 2003. URL http:<br />

//www.securityfocus.com/print/infocus/1716.<br />

Haeni, Reto E. Firewall penetration testing. Teknisk rapport, Cyberspace Policy<br />

Institute, 1997.<br />

Hazelhurst, Scott. A proposal for dynamic access lists for tcp/ip packet filering.<br />

Teknisk rapport, School of Computer Science, University of the Witwatersrand,<br />

April 2001.<br />

Ingham, Kenneth och Forrest, Stephanie. A history and survey of network firewalls.<br />

Teknisk rapport, The University of New Mexico Computer Science Department<br />

Technical Report 2002-37, 2002. URL http://www.cs.unm.edu/~treport/tr/<br />

02-12/firewall.pdf.<br />

itsecurity.com. History of the firewall, Augusti 2006. URL http://www.<br />

itsecurity.com/security.htm?s=410.<br />

Jackson, Debbie. Windows xp firewall. Examensarbete, University of Sheffield, May<br />

2005.<br />

Kaddouch, Guillaume. Firewall leak tester, 2006. URL http://www.<br />

firewallleaktester.com/.<br />

Kamara, Seny, Fahmy, Sonia, Schultz, Eugene, Kerschbaum, Florian, och Frantzen,<br />

Michael. Analysis of vulnerabilities in internet firewalls. Journal of Computers<br />

and Security, 22(3):214–232, April 2003.<br />

KhalidAl-Tawil och Al-Kaltham, Ibrahim A. Evaluationandtestingofinternetfirewalls.<br />

INTERNATIONAL JOURNAL OF NETWORK MANAGEMENT, ss 135–<br />

149, 1999.<br />

Microsoft. Microsoft virtual pc 2004, 2006a. URL http://www.microsoft.com/<br />

windows/virtualpc/default.mspx.<br />

41


42 LITTERATURFÖRTECKNING<br />

Microsoft. Prefast for drivers, 2006b. URL http://www.microsoft.com/whdc/<br />

devtools/tools/PREfast.mspx.<br />

Microsoft. Tdi drivers, 2006c. URL http://msdn.microsoft.com/library/<br />

default.asp?url=/library/en-us/NetXP_d/hh/NetXp_d/nettdidriv_<br />

27c4b7c0-7e21-441d-bb08-335d48204a06.xml.asp.<br />

Microsoft. Visual studio team system, 2006d. URL http://msdn2.microsoft.<br />

com/en-us/library/fda2bad5(VS.80).aspx.<br />

Microsoft. Windows Driver Development Kit: Network Devices and Protocols: NDIS<br />

Drivers. Microsoft Corporation, 2006e.<br />

Mogul, Jeffrey C. Simple and flexible datagram access controls for unix-based<br />

gateways, 1989. URL http://www.hpl.hp.com/techreports/Compaq-DEC/<br />

WRL-89-4.html.<br />

Schuba, Christoph L. On the modeling, design, and implementation of firewall<br />

technology. Teknisk rapport, Center for Education and Research in Information<br />

Assurance and Security, 1997.<br />

Schultz, E. Eugene. How to perform effective firewall testing. Computer Security<br />

Journal, 12(1):47–54, 1996.<br />

Spafford, Eugene H. The internet worm incident. Teknisk rapport, Department of<br />

Computer Sciences Purdue University, 1991. URL http://www.funet.fi/pub/<br />

crypt/old/spaf/IWorm2.PS.Z.<br />

Wikipedia. Architecture of windows nt, 11 2006a. URL http://en.wikipedia.<br />

org/wiki/Windows_kernel.<br />

Wikipedia. hping free packet generator, 2006b. URL http://en.wikipedia.org/<br />

wiki/Hping.<br />

Wikipedia. Nmap free security scanner, 2006c. URL http://en.wikipedia.org/<br />

wiki/Nmap.<br />

Wikipedia. Transmission control protocol, 2006d. URL http://en.wikipedia.<br />

org/wiki/Transmission_Control_Protocol.<br />

Wikipedia. Trojan horse, 10 2006e. URL http://en.wikipedia.org/wiki/<br />

Trojan_horse_%28computing%29.<br />

Woodall, Stephen. Firewall design principles. Course project, April<br />

2004. URL http://www4.ncsu.edu/~kksivara/sfwr4c03/projects/<br />

SteWoodall-Project.pdf.<br />

Zaugg, Gerhard. Firewall testing. Examensarbete, Swiss Federal Institute of Technology<br />

Zurich, 2004.


Bilaga A<br />

TDI filter<br />

Detta appendix beskriver mer i detalj hur TDI filtret fungerar och hur TDI fungerar<br />

allmänt genom att visa hur en anslutning kan göras med TDI. För att bättre förklara<br />

hur TDI filtret fungerar och vilka funktioner som finns kommer vi att gå i genom<br />

processen att göra en anslutning, skickar data och slutligen stänger anslutning med<br />

hjälp av TDI. Innan vi går in på detaljer ger vi först en kort överblick.<br />

A.1 IO till TDI-lagret<br />

Varje protokoll som implementerar ett TDI-interface sätter upp en eller flera enheter<br />

som API lagret kommunicerar med (se figur 4.3). TCP/IP-protokollet sätter upp<br />

följande enheter:<br />

• \Device\Tcp<br />

• \Device\Udp<br />

• \Device\RawIp<br />

• \Device\IP<br />

De första två används för TCP respektive UDP trafik, medan RawIp kan användas<br />

för att skicka råa IP paket. Dock kan man bara använda denna device om man<br />

är administratör på datorn. Denna begränsning har gjort att man varit tvungen<br />

att implementera den fjärde enheten som användas bland annat för att skicka t.ex.<br />

ICMP-meddelanden med programmet Ping utan att man behöver vara administratör.<br />

Dock används den troligtvis till fler funktioner men det saknas helt dokumentation<br />

för denna enhet från Microsoft, troligtvis för att den endast är tänkt att<br />

användas internt av Microsoft.<br />

A.2 Ny anslutning<br />

Beroende på om en applikation vill öppna en ny anslutning eller skicka data hanteras<br />

det på olika sätt. När en applikation vill öppna en ny anslutning sker förenklat det<br />

43


44 BILAGA A. TDI FILTER<br />

förlopp som visas i figur 4.5. En applikation använder sig i vanliga fall av Winsock<br />

som fungerar som en TDI klient och gör alla TDI anrop som behövs för att göra en<br />

anslutning. Det som visas i figuren är endast det avslutande anropet för att göra<br />

själva anslutningen till fjärrnoden. För en mer detaljerad beskrivning av hur man<br />

gör en anslutning TDI och hur TDI filtret hanterar det, se appendix A.<br />

I första steget får TDI filtret TDI_CONNECT anropet från applikation och skickar<br />

den en förfrågan till tjänsten genom att anropa svc_io_query_service med information<br />

om vilket process id, protokoll, destinations adress och destinations port.<br />

Tjänsten mappar process id till namnet på den exekverbara filen och söker sedan<br />

i sin regellista efter matchande regler. Om det inte finns någon regel som matchar<br />

namnet på processen eller det finns en regel som matchar namnet, men den anslutningen<br />

som applikationen vill göra inte tillåts, svara tjänsten med BLOCK. TDI<br />

filtret svarat då till applikationen med STATUS_REMOTE_NOT_LISTENING vilket innebär<br />

att anslutningen avbryts. Om anslutningen tillåts som i figuren skickar tjänsten<br />

en regel till NDIS filtret som matchar den aktuella anslutningen och svarar sedan<br />

till TDI filtret med ALLOW. TDI filtret skickar då vidare TDI_CONNECT anropet till<br />

det ursprungliga anropet och returnerar senare svaret till applikationen.<br />

A.3 Öppna en anslutning med TDI<br />

För att göra en anslutning med TDI måste följande steg utföras:<br />

• Öppna en transport adress<br />

• Öppna en anslutningsslutpunkt<br />

• Associera transport adressen med anslutningsslutpunkten<br />

• Göra anslutningen<br />

A.3.1 Öppna en Transportadress<br />

Första steget är att skapa ett objekt som representerar en transportadress. Transportadressen<br />

är den IP adress och port som kommer att användes på den lokala<br />

noden. Det är möjligt att specificera en lokal adress och port och används bland<br />

annat när en process vill vänta på anslutningar på en viss port. Figur A.1.<br />

A.3.2 Öppna en anslutningsslutpunkt<br />

Nästa steg är att skapa en anslutningsslutpunkt som definierar en klients sida av<br />

en <strong>nätverk</strong>s anslutning. Denna anslutningsslutpunkt sätts upp är den inte aktiv och<br />

ingen I/O kan utföras på denna innan man har associerat en transportadress med<br />

den. Figur A.2.


A.3. ÖPPNA EN ANSLUTNING MED TDI 45<br />

TDI Client<br />

ExtendedAttributes->EaNameLength = TDI_TRANSPORT_ADDRESS_LENGTH<br />

Possibly specify local address to use<br />

irp1<br />

Dispatch Create<br />

Handler<br />

Create Address<br />

Object<br />

Set completion<br />

routine:<br />

Complete_Address_<br />

Object<br />

IoCallDriver(... irp1)<br />

ZwCreateFile(... ExtendedAttributes ...)<br />

Transport Data Interface<br />

Complete<br />

Address Object<br />

Create irp2 & set<br />

completion<br />

function:<br />

Complete_Query_<br />

Local_Address<br />

irp1<br />

irp1<br />

IoCallDriver(... irp2)<br />

Original TDI Driver<br />

Object List<br />

Address Object<br />

Complete Query<br />

Local Address<br />

Save Address Object<br />

in Object List<br />

irp2<br />

Figur A.1. Create Address Object<br />

TDI Client<br />

ExtendedAttributes->EaNameLength = TDI_CONNECTION_CONTEXT_LENGTH<br />

Dispatch Create<br />

Handler<br />

irp<br />

ZwCreateFile(... ExtendedAttributes ...)<br />

Transport Data Interface<br />

Create Connection<br />

Context<br />

Save Connection Object<br />

in Object List<br />

IoCallDriver(... irp)<br />

Original TDI Driver<br />

Object List<br />

Address Object<br />

Connection Object<br />

Figur A.2. Create Connection Context<br />

User Space<br />

Kernel Space<br />

User Space<br />

Kernel Space


46 BILAGA A. TDI FILTER<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_ASSOCIATE_ADDRESS ...)<br />

TdiBuildAssociateAddress(irp ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Associate Address<br />

1. Verify Address and<br />

Connection objects<br />

2. Save associated Address<br />

Object in Object List<br />

3. Associate objects<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

2x<br />

Object List<br />

Address Object<br />

Connection Object -> Address Object<br />

Original TDI Driver<br />

Verify Objects<br />

Associate Objects<br />

Associate List<br />

Address Object -> Connection Object<br />

Figur A.3. Associate Address<br />

User Space<br />

Kernel Space<br />

A.3.3 Associera transportadressen med anslutningsslutpunkten<br />

Som sagts tidigare behöver vi först associera en transportadress med en anslutningsslutpunkt<br />

innan vi kan skicka data över anslutningen. Associationen görs genom ett<br />

TDI_ASSOCIATE_ADDRESS IOCTL anrop. En anslutningsslutpunkt kan endast vara<br />

associerat med en transportadress, medan en transportadress kan ha associationer<br />

till många olika anslutningsslutpunkter. Ett exempel är när flera klienter är ansluta<br />

till en server socket.<br />

A.3.4 Göra anslutningen<br />

För att göra själva anslutningen skickas ett TDI_CONNECT IOCTL anrop som gör att<br />

själva anslutningen. I det här steget skickas även själva adressen till den fjärrnod<br />

som man vill ansluta till<br />

A.4 Skicka och ta emot data med TDI<br />

Ä client can disable an already registered event handler by making a subsequent<br />

TDI_SET_EVENT_HANDLER request in which the EventType member specifies the type<br />

of handler but the EventHandler and EventContext members are NULL."<br />

Åhen a kernel-mode client makes a TDI_SEND request, it asks the underlying TDI<br />

transport driver to transmit a normal or expedited TSDU on a specified connection


A.5. AVSLUTA EN ANSLUTNING MED TDI 47<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_CONNECT ...)<br />

Specify remote address to connect to<br />

TdiBuildConnect(irp ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Connect<br />

1. Find related Connection<br />

Object and Address Object<br />

2. Query Service<br />

3. Save connection in<br />

Connection List<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Object List<br />

Address Object<br />

Connection Object -> Address Object<br />

Find Object<br />

Original TDI Driver<br />

Save Connection<br />

Query Service<br />

Connection List<br />

Pid, Protocol, IP:Port -> IP:Port<br />

Figur A.4. Connect<br />

Service<br />

Investigate<br />

Permissions<br />

User Space<br />

Kernel Space<br />

endpoint to its remote-node peer."<br />

Åhen a kernel-mode client makes a TDI_SET_EVENT_HANDLER request, it asks<br />

the underlying TDI transport driver to call the specified ClientEventXxx routine<br />

whenever the corresponding network event occurs."<br />

A.5 Avsluta en anslutning med TDI<br />

Disconnect<br />

Åhen a kernel-mode client makes a TDI_DISCONNECT request, it asks the underlying<br />

TDI transport driver to make a disconnect indication to the remote node,<br />

to acknowledge a disconnect indication from the remote node for an established<br />

endpoint-to-endpoint connection, or to reject an offered connection by a remotenode<br />

peer."<br />

Disassociate the Handles<br />

Åhen a kernel-mode client makes a TDI_DISASSOCIATE_ADDRESS request, it asks<br />

the underlying TDI transport driver to break an established association between a<br />

particular local-node address and a connection endpoint."<br />

Close the Handles<br />

"TdiDispatchClose runs when the I/O manager is releasing its last reference<br />

to the handle of the file object representing an address, connection endpoint, or<br />

control channel. Such a file object is deallocated when this last reference to the file<br />

handle has been released."


48 BILAGA A. TDI FILTER<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_SEND ...)<br />

TdiBuildSend(irp ... dataBuffer ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Send<br />

Verify a valid connection<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Original TDI Driver<br />

Connection List<br />

Pid, Protocol, IP:Port -> IP:Port<br />

Verify Connection<br />

Figur A.5. Send Data<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_RECEIVE ...)<br />

TdiBuildReceive(irp ... dataBuffer ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Receive<br />

Verify a valid connection<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Original TDI Driver<br />

Connection List<br />

Pid, Protocol, IP:Port -> IP:Port<br />

Verify Connection<br />

Figur A.6. Receive Data<br />

User Space<br />

Kernel Space<br />

User Space<br />

Kernel Space<br />

Åhen the I/O manager is closing the last handle to an open file object that represents<br />

an address, connection endpoint, or control channel, it calls TdiDispatchCleanup.<br />

In other words, the I/O manager always submits an IRP_MJ_CLEANUP request to a<br />

transport before it submits an IRP_MJ_CLOSE request for a particular file object."


A.5. AVSLUTA EN ANSLUTNING MED TDI 49<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_SET_EVENT_HANDLER ...)<br />

TdiBuildSetEventHandler(irp ... TDI_EVENT_RECEIVE ... clientEventHandler, clientContext)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

Verify Address Object<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Object List<br />

1 - Address Object<br />

2 - Connection Object, -> Address Object<br />

Original TDI Driver<br />

TDI Set Event Handler<br />

1. Verify a valid Address Object<br />

2. Save clientEventHandler and<br />

clientContext in new context of<br />

a modified irp<br />

3. Replace event handler in irp<br />

with: TDI_Event_Receive<br />

IoCallDriver(... modified irp)<br />

Figur A.7. Register Event Receive Function to Receive Data<br />

TDI Client<br />

NTSTATUS clientEventHandler(clientContext ... irp){<br />

handle irp...<br />

}<br />

clientEventHandler(clientContext ... irp)<br />

TDI Event Receive<br />

1. Verify a valid connection<br />

2. Call clientEventHandler with<br />

clientContext earlier saved in<br />

context of modified irp<br />

context + irp<br />

clientContext + irp<br />

Transport Data Interface<br />

Original TDI Driver<br />

Associate List<br />

Address Object -> Connection Object<br />

Verify Connection<br />

Connection List<br />

Pid, Protocol, IP:Port -> IP:Port<br />

Figur A.8. Receive Data in Event Receive Function<br />

User Space<br />

Kernel Space<br />

User Space<br />

Kernel Space


50 BILAGA A. TDI FILTER<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_DISCONNECT ...)<br />

TdiBuildDisconnect(irp ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Disconnect<br />

1. Find & remove connection<br />

from Connection List<br />

2. Inform Service<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Original TDI Driver<br />

Connection List<br />

Pid, Protocol, IP:Port -> IP:Port<br />

Find & Remove<br />

Connection<br />

Inform Service<br />

Figur A.9. Disconnect<br />

TDI Client<br />

irp = TdiBuildInternalDeviceControlIrp(TDI_DISASSOCIATE_ADDRESS ...)<br />

TdiBuildDisassociateAddress(irp ...)<br />

irp<br />

Dispatch Internal<br />

Device Control Handler<br />

TDI Disassociate Address<br />

1. Find & remove related<br />

Address Object<br />

3. Disassociate objects<br />

IoCallDriver(... irp)<br />

IoCallDriver(... irp)<br />

Transport Data Interface<br />

Object List<br />

Address Object<br />

Connection Object -> Address Object<br />

Original TDI Driver<br />

Find Object<br />

Disassociate<br />

Objects<br />

Associate List<br />

Address Object -> Connection Object<br />

Figur A.10. Disassociate the Handles<br />

Service<br />

Update<br />

connection<br />

states<br />

User Space<br />

Kernel Space<br />

User Space<br />

Kernel Space


A.5. AVSLUTA EN ANSLUTNING MED TDI 51<br />

TDI Client<br />

Closes handle to Address Object and Connection Context separately.<br />

irp<br />

Dispatch Close Handler<br />

Remove object from Object List<br />

IoCallDriver(... irp)<br />

ZwClose(handle)<br />

Transport Data Interface<br />

Original TDI Driver<br />

Find & Remove<br />

Object<br />

Object List<br />

Address Object<br />

Connection Object<br />

Figur A.11. Close the Handles<br />

User Space<br />

Kernel Space

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!