12.02.2014 Views

Lectures for 2008 - KTH

Lectures for 2008 - KTH

Lectures for 2008 - KTH

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

KURSKOMPENDIUM NÄTVERKSSÄKERHETSKURS<br />

___________________________________________________________________________<br />

Det finns flera sätt att skydda sig mot buffertöverskrivningsattacker. Man bör till exempel<br />

kontrollera indata och filtrera bort de data som inte är tillåtna. Bufferthanteringen bör vidare<br />

inkludera en kontroll av att det inte skrivs in mer data än vad bufferten klarar av att hantera.<br />

En annan skyddsmekanism är att se till att kompilatorer genererar speciell kod som inför<br />

särskilda kontrollsummor på stacken som kontrolleras för överskrivning innan subrutiner<br />

anropas eller returnerar data. Dessutom bör de minnesareor som används som stackutrymme<br />

märkas så att de inte är exekverbara, alltså att det inte går att köra program från dessa delar av<br />

minnet. Detta är skydd som måste byggas in i operativsystemet. Vissa operativsystem, såsom<br />

Windows Vista och OpenBSD, har dessa skydd. På engelska kallas denna typ av attacker ofta<br />

för buffer overrun, stack overrun, stack smashing eller liknande.<br />

Det finns flera varianter av denna typ av attack. En relativt nyupptäckt variant är missbruk av<br />

<strong>for</strong>matsträngar i utmatningsfunktioner (eng. <strong>for</strong>mat string attack) i vissa programspråk, främst<br />

C. Exempelvis så sker utmaning vanligtvis via funktionen printf enligt nedanstående princip:<br />

printf(”%s\n”, variabel);<br />

Där %s är ett <strong>for</strong>matterings- och datadirektiv till printf-funktionen. Men ibland utelämnar en<br />

slarvig programmerare detta direktiv, med resultatet:<br />

printf(variabel);<br />

Angreppet innebär att man <strong>for</strong>mar indatat på ett speciellt sätt så att en datadriven attack leder<br />

till att man kan lura printf att adressera minnesområden och data som normalt sett inte skulle<br />

använts.<br />

En annan besläktad attack är integer overflows där ett heltal kan fås att tolkas annorlunda av<br />

olika programdelar. I programspråk som C och C++ så definieras heltal som positiva (eng.<br />

unsigned) heltal eller teckesatta (eng. signed) heltal. Genom att manipulera siffervärden kan<br />

man skriva utanför en definierad variabellista, få minnesallokeringsfunktioner att fungera<br />

felaktigt och andra liknande angrepp.<br />

En till variant av bufferöverskrivning är så kallad heap smashing, det anmärkningsvärda med<br />

denna överskrivningsmetod är att den arbetar mot en annan del av arbetsminnet och med<br />

andra metoder, vilket gör de enkla skydd och tester som utförs mot stacksmashing inte är<br />

tillämpbara.<br />

2.4.6 Intrång<br />

Definition 29: Intrång är en metod för att obehörig tillgång till in<strong>for</strong>mation eller IT-resurser<br />

När områden som IT-säkerhet och nätverkssäkerhet är intrång en av de första konsekvenserna<br />

som folk som regel tänker på. Att någon tar sig in i ett system och där utför en eller fler<br />

gärningar.<br />

Dataintrång kan delas upp i förstörande intrång och icke-förstörande intrång. Ett exempel på<br />

ett icke-förstörande intrång är att någon har olovligen kommit över användarnamn och<br />

lösenord för att sedan via nätverket logga in och läsa dokument som personen normalt sett<br />

inte haft tillgång till. Ett exempel på ett förstörande intrång är obehörligen förändrade<br />

webbsidor (eng. defacements) eller att någon raderar filer i det system som denne tagit sig in i.<br />

Copyright (c) 2003-<strong>2008</strong> Robert Malmgren AB. All rights reserved Sid 33 (139)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!