Lectures for 2008 - KTH
Lectures for 2008 - KTH
Lectures for 2008 - KTH
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)