Hackere kan tage kontrol over et system ved at maksimere en tjenestes lagerkapacitet. Så hvordan udfører hackere sådanne bufferoverløbsangreb?

Hvordan angriber hackere systemer ved hjælp af vira og malware? Nogle gange kan det være ransomware; nogle gange kan det være et angreb, der tærer på dine systemkrav. Bufferoverløb er en af ​​disse angrebsmetoder - men hvad er det egentlig? Hvordan fungerer disse angreb?

Hvad er et bufferoverløb?

Så hvad er egentlig en buffer og stak? Bufferen er et felt, hvor nogle inputoplysninger, du giver til din computer, venter, før de når hukommelsen. Genkaldelse af data fra hukommelsen er en systemtrættende operation. Så når der er plads nok i bufferområdet, kalder du dataene direkte herfra. Dette betyder et ydelsesboost for din enhed. Når den tilgængelige plads til bufferen er fuld, bliver det selvfølgelig nødvendigt at skrive den ind i hukommelsen.

Stack er i bund og grund en datastruktur, hvor data push (tilføj) og pop (fjern) operationer finder sted. Begreberne buffer og stak er ret ens; bufferen fungerer dog som en stak, der midlertidigt gemmer indgående data.

instagram viewer

Bufferoverløb kan være et udfordrende emne, men som navnet antyder, opstår det, når der er en overbelastning af data. For eksempel vil du logge ind på et system. Udviklerne kan tildele 250 bytes plads til brugernavnet. Hvis du indtaster 300 bytes data, løber bufferen over. Dette overløb kan påvirke andre data i hukommelsen og forårsage skade.

Dette er fantastisk til hackere. Cyberkriminelle kan kombinere dette rod med forskellige angrebsvektorer, for eksempel for at hacke systemet og logge på som administrator.

For at forstå bufferoverløb vil de vigtigste emner, du skal genkende, være CPU's interne arkitektur, hukommelsesregistre og hvordan hukommelsen behandler data. Her er nogle udtryk om CPU'en, du skal vide om.

Forsamlingskode

Et programmeringssprog på lavt niveau, altså tæt på maskinsprog.

Buffer

En fast størrelse tildelt hukommelsesplads.

Byte kode

En kompilerbar mellemsprog form for kode skrevet på et højt niveau sprog.

Kompiler

Et program, der konverterer programmeringssprog til maskinkode.

Dynge

Dynamisk, variabel hukommelsesplads.

Grundlæggende om hukommelsesteori

Uden at forstå hukommelsesteori kan det være svært at løse problemer med bufferoverløb i praksis. Du kan tænke på det som at prøve at bygge et hus uden at vide, hvordan man laver en mur.

Forestil dig, at du vil køre et bufferoverløb fra en hackers synspunkt. Til det skal du manipulere hukommelsen og få CPU'en til at udføre din kode. Hvis du var en person med ondsindet hensigt, ville dit mål her være at overbelaste hukommelsen og også manipulere sammenhængende hukommelsesområder.

Men først og fremmest skal du fokusere på begreberne heap, stack og tekstsegment.

Mens stakken oprettes, bruger hukommelsen høje hukommelsesadresser. Høje hukommelsesadresser betyder det udvidede hukommelsesområde. Så begynder adresseværdierne at falde. Hukommelsesstakken bruger en metode kaldet LIFO (Last In, First Out) under hukommelsesbrug. Variabler i stakhukommelsen er kun gyldige inden for det område, hvori de er defineret. Hvis de er uden for dette omfang, vil der opstå en fejl.

Stack memory, derimod, fungerer dynamisk og behøver ikke starte ved høje adresser. Der er ingen fastsat grænse for heap-hukommelse; alle grænser er sat af operativsystemet. Det er muligt at ændre heap-hukommelsen dynamisk, og disse grænser kan ændre sig i henhold til brugerens behov under heap-brug. Grænserne for heap-hukommelse afhænger af faktorer, der bestemmes af operativsystemet og hardwaren. Med andre ord tilbyder den en dynamisk brug inden for disse grænser.

Tekstsegmentet indeholder programkoden, og datasegmenterne indeholder globale data. Høj adresseandel stack og heap hukommelse indbyrdes. Systemet tildeler begge hukommelse ved kørsel.

For bedre at forstå bufferoverløb bør du undersøge de generelle dataregistre, som din computerarkitektur bruger til at gemme data. I stedet for at analysere hver post individuelt, fokusere på det væsentlige.

  • ESP (Extended Stack Pointer): Dette register har adressen øverst i stakken.
  • EBP (Extended Base Pointer): Dette holder basismarkøren.
  • EIP (Extended Instruction Pointer): Og dette register indeholder adressen på den næste instruktion, der skal udføres.

Disse tekniske udtryk lyder måske lidt forvirrende, men forestil dig dem alle som små partitioner i hukommelsen.

Hvordan fungerer bufferoverløbsangreb?

Når du tilføjer nye data til en stak, vil disse data blive placeret i toppen. Alle nye data flyttes derefter ned. ESP er i toppen af ​​stakken. Så i dette tilfælde går ESP til en lavere hukommelsesadresse. Forestil dig, at de data, der er tilføjet ovenfor, skubber ESP'en ned.

Når et program begynder at køre, opretter systemet en stakramme med lokale variabler. Hovedformålet med et bufferoverløbsangreb er at få adgang til EIP eller returadressen. En hacker med adgang til denne adresse kan beordre den til at pege på enhver ondsindet kode, de ønsker, som derefter vil påvirke det bredere system.

Med hver ny bit data vokser stakken mod EBP. Det virkelige spørgsmål her er, hvis vi indtaster for mange data, kan vi så skubbe EBP mod EIP? På den måde er den data eller kode, du ønsker, placeret på EIP, og du kan se de resultater, du ønsker. Det eneste, der er tilbage, er at køre det. Når du kører programmet, peger det på din EIP-kode og starter eksekveringen. Som et resultat, hvis du var en hacker, vil du have udført dit første bufferoverløbsangreb.

For at tage eksemplet fra en anden vinkel kan du overveje væsker med forskellige densiteter, kaldet ESP, EBP og EIP, i en beholder. Forestil dig, at ESP'en er placeret i toppen af ​​beholderen, fordi dens tæthed er lavere. Ligesom olivenolie og vand bør de ikke blandes. Den ondsindede kode er altså en anden væske - når du tilføjer den til beholderen, ødelægger den denne balance, fortrænger noget væske og blandes med EIP. Dette vil indikere et bufferoverløb.

Sådan beskyttes mod bufferoverløbsangreb

Så hvordan forhindrer du dette i at ske?

For det første er det vigtigt at anvende god kodningspraksis gennem hele softwareudviklingsprocessen for at minimere sikkerhedssårbarheder. Omhyggeligt skrevet kode kan reducere sandsynligheden for bufferoverløb.

Et andet skridt er at bruge forsvarsmekanismer til at tillade overvågning af hukommelsesregioner, kontrol af grænserne for buffere og detektering af angreb. Endelig skal du regelmæssigt opdatere systemer og anvende patches. Opdateringer, der løser sårbarheder, gør det sværere for angribere at udnytte kendte sårbarheder. Brug af forsvarsværktøjer såsom software og firewall giver også et ekstra lag af sikkerhed.

Tag handling mod bufferoverløb

Bufferoverløbsangreb udgør en betydelig trussel mod din cybersikkerhed, og det er naturligvis vigtigt at tage forholdsregler mod dem. Heldigvis er det muligt at blokere disse angreb og styrke forsvarsmekanismerne. Mange gode sikkerhedsforanstaltninger, som at holde software opdateret for at rette patches, hjælper med at beskytte mod sådanne angreb såvel som andre sårbarheder.