Hackere kan ta kontroll over et system ved å maksimere en tjenestes lagringskapasitet. Så hvordan utfører hackere slike bufferoverløpsangrep?
Hvordan angriper hackere systemer ved hjelp av virus og skadelig programvare? Noen ganger kan det være løsepengevare; noen ganger kan det være et angrep som bruker systemkravene dine. Bufferoverløp er en av disse angrepsmetodene – men hva er det egentlig? Hvordan fungerer disse angrepene?
Hva er bufferoverløp?
Så hva er egentlig en buffer og stabel? Bufferen er et felt der noe inputinformasjon du gir til datamaskinen venter før de når minnet. Å hente data fra minnet er en systemtrettende operasjon. Så når det er nok plass i bufferområdet, ringer du dataene direkte herfra. Dette betyr et ytelsesløft for enheten din. Selvfølgelig, når plassen som er tilgjengelig for bufferen er full, blir det nødvendig å skrive den inn i minnet.
Stack er i hovedsak en datastruktur der data push (legg til) og pop (fjern) operasjoner finner sted. Konseptene buffer og stack er ganske like; bufferen fungerer imidlertid som en stabel som midlertidig lagrer innkommende data.
Bufferoverløp kan være et utfordrende tema, men som navnet antyder, oppstår det når det er overbelastning av data. For eksempel vil du logge inn på et system. Utviklerne kan tildele 250 byte plass til brukernavnet. Hvis du legger inn 300 byte med data, renner bufferen over. Dette overløpet kan påvirke andre data i minnet og forårsake skade.
Dette er flott for hackere. Nettkriminelle kan kombinere dette rotet med forskjellige angrepsvektorer, for eksempel for å hacke systemet og logge på som administrator.
For å forstå bufferoverløp, vil hovedemnene du må gjenkjenne CPUs interne arkitektur, minneregistre og hvordan minnet behandler data. Her er noen begreper om CPU-en du trenger å vite om.
Monteringskode |
Et programmeringsspråk på lavt nivå, dvs. nær maskinspråk. |
Buffer |
En fast størrelse tildelt minneplass. |
Bytekode |
En kompilerbar mellomspråklig form for kode skrevet på et høynivåspråk. |
Kompilator |
Et program som konverterer programmeringsspråk til maskinkode. |
Heap |
Dynamisk, variabel minneplass. |
Grunnleggende om hukommelsesteori
Uten å forstå minneteori kan det være vanskelig å ta opp problemer med bufferoverløp i praksis. Du kan tenke på det som å prøve å bygge et hus uten å vite hvordan man lager en vegg.
Tenk deg at du vil kjøre et bufferoverløp fra en hackers synspunkt. For det må du manipulere minnet og få CPUen til å kjøre koden din. Hvis du var noen med ondsinnede hensikter, ville målet ditt her være å overbelaste minnet og manipulere sammenhengende minneområder også.
Men først av alt må du fokusere på konseptene heap, stack og tekstsegment.
Mens stabelen opprettes, bruker minnet høye minneadresser. Høye minneadresser betyr det utvidede minneområdet. Da begynner adresseverdiene å synke. Minnestakken bruker en metode kalt LIFO (Last In, First Out) under minnebruk. Variabler i stabelminne er bare gyldige innenfor det omfanget de er definert i. Hvis de er utenfor dette omfanget, vil det oppstå en feil.
Stack-minne, derimot, fungerer dynamisk og trenger ikke å starte på høye adresser. Det er ingen satt grense for haugminne; alle grenser er satt av operativsystemet. Det er mulig å endre heap-minnet dynamisk, og disse grensene kan endres i henhold til brukerens behov under heap-bruk. Begrensningene for heap-minne avhenger av faktorer som bestemmes av operativsystemet og maskinvaren. Med andre ord tilbyr den en dynamisk bruk innenfor disse grensene.
Tekstsegmentet inneholder programkoden og datasegmentene inneholder globale data. Høy adresseandel stack og heap minne blant dem selv. Systemet tildeler både minne ved kjøring.
For bedre å forstå bufferoverløp, bør du undersøke de generelle dataregistrene som datamaskinarkitekturen din bruker til å lagre data. I stedet for å analysere hver post individuelt, fokusere på det viktigste.
- ESP (Extended Stack Pointer): Dette registeret har adressen øverst i stabelen.
- EBP (Extended Base Pointer): Dette holder basispekeren.
- EIP (Extended Instruction Pointer): Og dette registeret inneholder adressen til den neste instruksjonen som skal utføres.
Disse tekniske termene kan høres litt forvirrende ut, men se for deg alle som små partisjoner på minnet.
Hvordan fungerer bufferoverløpsangrep?
Når du legger til nye data til en hvilken som helst stabel, vil disse dataene bli plassert på toppen. Alle nye data flyttes deretter ned. ESP er på toppen av stabelen. Så i dette tilfellet går ESP til en lavere minneadresse. Se for deg at dataene som er lagt til ovenfor, skyver ESP-en ned.
Når et program begynner å kjøre, oppretter systemet en stabelramme med lokale variabler. Hovedformålet med et bufferoverløpsangrep er å få tilgang til EIP eller returadressen. En hacker med tilgang til denne adressen kan beordre den til å peke på hvilken som helst skadelig kode de vil ha, som da vil påvirke det bredere systemet.
Med hver ny bit av data, vokser stabelen mot EBP. Det virkelige spørsmålet her er, hvis vi legger inn for mye data, kan vi presse EBP mot EIP? På den måten er dataene eller koden du ønsker plassert på EIP, og du kan se resultatene du ønsker. Alt som gjenstår er å kjøre den. Når du kjører programmet, peker det på EIP-koden din og starter kjøringen. Som et resultat, hvis du var en hacker, vil du ha utført ditt første bufferoverløpsangrep.
For å ta eksemplet fra en annen vinkel, kan du vurdere væsker med forskjellige tettheter, kalt ESP, EBP og EIP, i en beholder. Tenk deg at ESP er plassert på toppen av beholderen fordi dens tetthet er lavere. Akkurat som olivenolje og vann, bør de ikke blandes. Den ondsinnede koden er altså en annen væske - når du legger den til beholderen, roter den til denne balansen, fortrenger litt væske og blandes med EIP. Dette vil indikere et bufferoverløp.
Slik beskytter du deg mot bufferoverløpsangrep
Så hvordan kan du stoppe dette fra å skje?
For det første er det viktig å ta i bruk god kodingspraksis gjennom hele programvareutviklingsprosessen for å minimere sikkerhetssårbarheter. Nøye skrevet kode kan redusere sannsynligheten for bufferoverløp.
Et annet trinn er å bruke forsvarsmekanismer for å tillate overvåking av minneregioner, sjekke grensene for buffere og oppdage angrep. Til slutt må du regelmessig oppdatere systemer og bruke oppdateringer. Oppdateringer som fikser sårbarheter gjør det vanskeligere for angripere å utnytte kjente sårbarheter. Bruk av forsvarsverktøy som programvare og brannmur gir også et ekstra lag med sikkerhet.
Iverksette tiltak mot bufferoverløp
Bufferoverløpsangrep utgjør en betydelig trussel mot cybersikkerheten din, og det er naturligvis viktig å ta forholdsregler mot dem. Heldigvis er det mulig å blokkere disse angrepene og styrke forsvarsmekanismene. Mange gode sikkerhetsrutiner, som å holde programvare oppdatert for å fikse oppdateringer, bidrar til å beskytte mot slike angrep, så vel som andre sårbarheter.