Vad är Heap Spraying?

Heap spraying är en hackningsteknik som används för att utnyttja sårbarheter i datorprogram. Den verkar för att få kontroll över ett program genom att dra fördel av en del av dess minne. När väl en del av minnet styrs av hackningskoden kan hackaren ta kontroll över exekveringen av koden genom att implementera ett buffertspill i minnets heaparea. Den vanligaste applikationen för högsprayning är att hacka webbläsare som Internet Explorer®.

En ”hög” är ett dynamiskt minnesblock som datorn tilldelar ett visst program, så kallat eftersom datorn dedikerar en virtuell hög med minne till programmet. Detta kan ses som förvaringsutrymme i en garderob eller skrivbord. Denna minneshög tillhör programmet tills antingen programvaran eller samlingskoden för operativsystemet släpper den. Samlingskoden är helt enkelt en felsäker enhet som tar tillbaka minnet om programmet kraschar eller själva programvaran misslyckas med att släppa minnet efter att den avslutat användningen.

Vid högsprayning försöker en hackare ”spraya” minneshögen med en specifik del av koden. Målet är att placera koden på en specifik position i programmets minneshög, som att kila in en kofot i kanten på en dörrkarm för att ge hävstång för att tvinga dörren att öppnas. Efter att informationen har kilats in i minneshögen genom värmesprayning, kan hackaren svämma över antingen högen eller hela minnesbufferten, vilket genererar fel i systemet. När fel uppstår kan hackaren dra fördel av dem för att exekvera sin egen kod på systemet.

Högsprayning fungerar på grund av den dynamiska tilldelningen av minne i systemet. Datorprogrammet ”äger” i princip hela minnet för tillfället, så hackaren känner redan till den relativa platsen i minnet som datorn har tilldelat programmet. Därför behöver hackaren lite specificitet för att kila in sin kod i sprickorna; han kan spraya koden blint, med vetskapen om att minnesblocket alltid kommer att finnas där så länge som programmet fortsätter att köras. Detta kan jämföras med att försöka plocka ett lås med ögonbindel; uppgiften blir nästan omöjlig om låset rör sig, men så länge det finns kvar på en fast plats – liksom minneshögen i systemet – blir jobbet möjligt.