Hackare kan ta kontroll över ett system genom att maximera en tjänsts lagringskapacitet. Så hur utför hackare sådana buffertspillattacker?
Hur attackerar hackare system med virus och skadlig programvara? Ibland kan det vara ransomware; ibland kan det vara en attack som tär på dina systemkrav. Buffertspill är en av dessa attackmetoder – men vad är det egentligen? Hur fungerar dessa attacker?
Vad är ett buffertspill?
Så vad är egentligen en buffert och stack? Bufferten är ett fält där viss indatainformation du ger till din dator väntar innan den når minnet. Att hämta data från minnet är en systemtröttande operation. Så när det finns tillräckligt med utrymme i buffertområdet anropar du data direkt härifrån. Detta innebär en prestandahöjning för din enhet. När det tillgängliga utrymmet för bufferten är fullt, blir det naturligtvis nödvändigt att skriva in det i minnet.
Stack är i huvudsak en datastruktur där data push (lägg till) och pop (ta bort) operationer äger rum. Begreppen buffert och stack är ganska lika; dock fungerar bufferten som en stack som tillfälligt lagrar inkommande data.
Buffertspill kan vara ett utmanande ämne, men som namnet antyder uppstår det när det finns en överbelastning av data. Du vill till exempel logga in i ett system. Utvecklarna kan tilldela 250 byte utrymme för användarnamnet. Om du anger 300 byte med data svämmar bufferten över. Detta spill kan påverka andra data i minnet och orsaka skada.
Detta är bra för hackare. Cyberkriminella kan kombinera denna röra med olika attackvektorer, till exempel för att hacka systemet och logga in som administratör.
För att förstå buffertspill är de viktigaste ämnena du behöver känna igen CPU: s interna arkitektur, minnesregister och hur minnet behandlar data. Här är några termer om CPU du behöver veta om.
Monteringskod |
Ett programmeringsspråk på låg nivå, dvs nära maskinspråk. |
Buffert |
En fast storlek tilldelat minnesutrymme. |
Bytekod |
En kompilerbar mellanspråksform av kod skriven på ett högnivåspråk. |
Kompilator |
Ett program som konverterar programmeringsspråk till maskinkod. |
Högen |
Dynamiskt, variabelt minnesutrymme. |
Grunderna i minnesteorin
Utan att förstå minnesteorin kan det vara svårt att ta itu med buffertspillproblem i praktiken. Du kan tänka på det som att försöka bygga ett hus utan att veta hur man gör en vägg.
Föreställ dig att du vill köra ett buffertspill ur en hackers synvinkel. För det måste du manipulera minnet och låta CPU köra din kod. Om du var någon med uppsåt, skulle ditt mål här vara att överbelasta minnet och också manipulera angränsande minnesområden.
Men först och främst måste du fokusera på begreppen heap, stack och textsegment.
Medan stacken skapas använder minnet höga minnesadresser. Höga minnesadresser betyder det utökade minnesområdet. Då börjar adressvärdena minska. Minnesstacken använder en metod som kallas LIFO (Last In, First Out) under minnesanvändning. Variabler i stackminnet är endast giltiga inom det omfång där de är definierade. Om de ligger utanför detta omfång kommer ett fel att uppstå.
Stackminne, å andra sidan, fungerar dynamiskt och behöver inte starta på höga adresser. Det finns ingen fastställd gräns för högminne; alla gränser sätts av operativsystemet. Det är möjligt att ändra heapminnet dynamiskt och dessa gränser kan ändras enligt användarens behov under heapanvändning. Gränserna för heapminnet beror på faktorer som bestäms av operativsystemet och hårdvaran. Med andra ord erbjuder den en dynamisk användning inom dessa gränser.
Textsegmentet innehåller programkoden och datasegmenten innehåller globala data. Höga adresser andel stack och heap minne bland dem själva. Systemet allokerar både minne vid körning.
För att bättre förstå buffertspill bör du undersöka de allmänna dataregister som din datorarkitektur använder för att lagra data. Istället för att analysera varje post individuellt, fokusera på det väsentliga.
- ESP (Extended Stack Pointer): Det här registret har adressen överst i stapeln.
- EBP (Extended Base Pointer): Detta håller baspekaren.
- EIP (Extended Instruction Pointer): Och detta register innehåller adressen till nästa instruktion som ska utföras.
Dessa tekniska termer kan låta lite förvirrande, men föreställ dig alla som små partitioner i minnet.
Hur fungerar buffertspillattacker?
När du lägger till ny data till valfri stack kommer denna data att placeras i toppen. All ny data flyttas sedan ner. ESP är överst i stacken. Så i det här fallet går ESP till en lägre minnesadress. Föreställ dig att data som lagts till ovan trycker ned ESP.
När ett program börjar köras skapar systemet en stackram med lokala variabler. Huvudsyftet med en buffertspillsattack är att få tillgång till EIP eller returadress. En hackare med tillgång till den här adressen kan beordra den att peka på vilken skadlig kod de vill ha, vilket sedan kommer att påverka det bredare systemet.
Med varje ny bit data växer stacken mot EBP. Den verkliga frågan här är, om vi anger för mycket data, kan vi driva EBP mot EIP? På så sätt finns den data eller kod du vill ha på EIP: n och du kan se de resultat du vill ha. Allt som återstår är att köra den. När du kör programmet pekar det på din EIP-kod och börjar köras. Som ett resultat, om du var en hacker, har du genomfört din första buffertspillattack.
För att ta exemplet från en annan vinkel kan du överväga vätskor med olika densiteter, kallade ESP, EBP och EIP, i en behållare. Föreställ dig att ESP: n är placerad på toppen av behållaren eftersom dess densitet är lägre. Precis som olivolja och vatten ska de inte blandas. Den skadliga koden är alltså en annan vätska - när du lägger till den i behållaren förstör den balansen, tränger undan lite vätska och blandas med EIP. Detta indikerar ett buffertspill.
Hur man skyddar sig mot buffertspill
Så hur stoppar du detta från att hända?
För det första är det viktigt att anta god kodningspraxis genom hela programvaruutvecklingsprocessen för att minimera säkerhetssårbarheter. Noggrant skriven kod kan minska sannolikheten för buffertspill.
Ett annat steg är att använda försvarsmekanismer för att tillåta övervakning av minnesregioner, kontrollera gränserna för buffertar och upptäcka attacker. Slutligen måste du regelbundet uppdatera system och applicera patchar. Uppdateringar som åtgärdar sårbarheter gör det svårare för angripare att utnyttja kända sårbarheter. Att använda försvarsverktyg som programvara och brandvägg ger också ett extra lager av säkerhet.
Vidta åtgärder mot buffertspill
Buffertspillattacker utgör ett betydande hot mot din cybersäkerhet och att vidta försiktighetsåtgärder mot dem är naturligtvis viktigt. Som tur är går det att blockera dessa attacker och stärka försvarsmekanismerna. Många bra säkerhetsrutiner, som att hålla programvara uppdaterad för att fixa korrigeringar, hjälper till att skydda mot sådana attacker, såväl som andra sårbarheter.