/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Buffer overflow
Fra : Mads Chr. Olesen


Dato : 18-08-02 12:36

Hvordan ser et buffer overflow ud i windows, og hvordan løser man det?

---
Mads Chr. Olesen
MadsChrO@Yahoo.com



 
 
Anders Borum (18-08-2002)
Kommentar
Fra : Anders Borum


Dato : 18-08-02 13:00

"Mads Chr. Olesen" <MadsChrO@Yahoo.com> skrev i en meddelelse
news:ajo0mo$md0$1@sunsite.dk...
> Hvordan ser et buffer overflow ud i windows, og hvordan løser man det?

Hej Mads

Det afhænger helt af hvad der ligger i denne buffer og hvordan den bruges.

Hvis der tale om en audio-buffer der får overløb under afspilning, vil det
lyde som om musikken er gået i hak, mens overløb under indspilning vil lave
hakker i optagelsen.

Nogen gange skriver man forkerte steder i hukommelsen når bufferen løber
over og da kan det give /sidefejl/ i windows.

Det ville hjælpe med lidt flere detaljer.

Hilsen Anders



Mads Chr. Olesen (18-08-2002)
Kommentar
Fra : Mads Chr. Olesen


Dato : 18-08-02 13:44

sry, den kom afsted lidt for hurtigt....

Det jeg ville vide var hvordan et buffer overflow over et netværk ser ud -
altså af den farlige slags

Bruger winsock i Visual c++, og min recieve-kode ser nogenlunde sådan her
ud:

recv(m_hSocket, pch, nSize, 0);

Når man så har specificeret sin buffer-længde, hvordan kan bufferen så få
overflow? Det kan den måske ikke?

Buffer overflows er jo meget almindelige, og jeg kan ikke helt få det til at
hænge sammen med at man giver en buffer-længde som parameter...

"Anders Borum" <overflade@fedt.dk> skrev i en meddelelse
news:80M79.6198$ww6.897842@news010.worldonline.dk...
> "Mads Chr. Olesen" <MadsChrO@Yahoo.com> skrev i en meddelelse
> news:ajo0mo$md0$1@sunsite.dk...
> > Hvordan ser et buffer overflow ud i windows, og hvordan løser man det?
>
> Hej Mads
>
> Det afhænger helt af hvad der ligger i denne buffer og hvordan den bruges.
>
> Hvis der tale om en audio-buffer der får overløb under afspilning, vil det
> lyde som om musikken er gået i hak, mens overløb under indspilning vil
lave
> hakker i optagelsen.
>
> Nogen gange skriver man forkerte steder i hukommelsen når bufferen løber
> over og da kan det give /sidefejl/ i windows.
>
> Det ville hjælpe med lidt flere detaljer.
>
> Hilsen Anders
>
>



Anders Borum (18-08-2002)
Kommentar
Fra : Anders Borum


Dato : 18-08-02 14:55

"Mads Chr. Olesen" <MadsChrO@Yahoo.com> skrev i en meddelelse
news:ajo4m7$5m5$1@sunsite.dk...
> sry, den kom afsted lidt for hurtigt....
>
> Det jeg ville vide var hvordan et buffer overflow over et netværk ser ud -
> altså af den farlige slags
>
> Bruger winsock i Visual c++, og min recieve-kode ser nogenlunde sådan her
> ud:
>
> recv(m_hSocket, pch, nSize, 0);
>
> Når man så har specificeret sin buffer-længde, hvordan kan bufferen så få
> overflow? Det kan den måske ikke?

Hej Mads

Det vil ikke forekomme. Der læses højest nSize tegn.

Jeg forestiller mig at overløbet sker når man fortolker de læste data.
Hvis jeg nu ville læse en streng adskilt af mellemrum kunne jeg fristes
til at bruge scanf:
char buffer[120];
sscanf(pch, "%s", buffer);

Så kunne jeg risikere at modtage en lang sekvens af tegn der ikke indeholdt
mellemrum og derfor overskred min buffer på blot 120 tegn. Andre systemkald
har sikkert lignende problemer, når man ikke forestiller sig at der modtages
data fra en bevidst fjendtlig afsender.

Jeg ved ikke hvordan en hacker kan styre dette overløb så præcist at han
får kontrol over maskinen. Får man på en eller anden måde sendt tekst til
kommandofortolkeren eller sørger man for at overskride maskinkode-
instruktioner? Kender nogen en kilde hvor man kan læse nærmere?

Hilsen Anders



Igor V. Rafienko (18-08-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 18-08-02 16:00

[ Anders Borum ]

> Jeg ved ikke hvordan en hacker kan styre dette overløb så præcist at
> han får kontrol over maskinen. Får man på en eller anden måde sendt
> tekst til kommandofortolkeren eller sørger man for at overskride
> maskinkode- instruktioner? Kender nogen en kilde hvor man kan læse
> nærmere?


For et lite eksempel som illustrerer hovedideen kan du lese:

<URL:news:clcm-19990818-0004@plethora.net>





ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Anders Borum (18-08-2002)
Kommentar
Fra : Anders Borum


Dato : 18-08-02 16:31

"Igor V. Rafienko" <igorr@ifi.uio.no> skrev i en meddelelse
news:xjvptwgcivz.fsf@vestavind.ifi.uio.no...
[klip]
> For et lite eksempel som illustrerer hovedideen kan du lese:
>
> <URL:news:clcm-19990818-0004@plethora.net>

Hej Igor

Den er slettet eller udgået fra min nyhedsserver hos Tiscali.
Hvorledes finder jeg den på DejaNews?

Anders



Igor V. Rafienko (18-08-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 18-08-02 17:52

[ Anders Borum ]

[ snip ]

> > <URL:news:clcm-19990818-0004@plethora.net>
>
> Den er slettet eller udgået fra min nyhedsserver hos Tiscali.
> Hvorledes finder jeg den på DejaNews?


Advanced Group Search -> Message-Id -> ...

Evt.

<URL:http://groups.google.com/groups?as_q=&num=10&as_scoring=r&hl=en&ie=ISO-8859-1&c2coff=1&btnG=Google+Search&as_epq=&as_oq=&as_eq=&as_ugroup=&as_usubject=&as_uauthors=&as_umsgid=clcm-19990818-0004%40plethora.net&lr=&as_drrb=q&as_qdr=&as_mind=12&as_minm=5&as_miny=1981&as_maxd=18&as_maxm=8&as_maxy=2002&safe=images>





ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Bjarke Dahl Ebert (18-08-2002)
Kommentar
Fra : Bjarke Dahl Ebert


Dato : 18-08-02 18:40

"Mads Chr. Olesen" <MadsChrO@Yahoo.com> wrote in message
news:ajo0mo$md0$1@sunsite.dk...

> Hvordan ser et buffer overflow ud i windows,

Uha, det var et ret generelt spørgsmål :)

Jeg mener at det normalt kaldes "buffer overrun", og det er et ret
almindeligt sikkerhedshul i software til både Windows og Unix.
Under Windows vil det ofte ytre sig ved at der popper et vindue op med noget
i retning af "Access Violation" og "The memory could not be read/written".
Men lige så ofte vil der ikke være noget at se. Et program kan have et
"slumrende buffer overrun sikkerhedshul", som ikke viser sig ved normal brug
af programmet. Først når en ondsindet person sender bevidst manipuleret og
tilrettelagt data med henblik på at udnytte sikkerhedshullet, sker der
mærkelige ting.

Problemet skyldes som regel at man har et array, også kaldet en buffer, af
fast størrelse, og programmøren glemmer at checke at man ikke skriver ud
over den plads i hukommelsen som er afsat til denne buffer.

Eksempel i C:

void someFunction(struct UserData* data)
{
char buf[80];
/* ... */
strcpy(buf, data->str); /* UPS! */
}

Problemet skyldes at læsning/skrivning til sådan en buffer, buf[80], ikke
bliver checket for "overrun" i C og C++, som er (blandt) de mest populære
sprog til Windows-programmering, fordi programmet så vil køre langsommere.
Når en cracker opdager ovenstående sikkerhedshul i et program (det kan man
opdage uden at have sourcekoden til programmet), så laver han en specielt
sammensat UserData besked og sender til programmet. Enten over nettet, i en
email, eller lægger det på en hjemmeside - mulighederne er utallige, og
afhænger af hvad slags program der er tale om. Når så denne UserData bliver
kopieret ind i 'buf', og fylder meget mere end de 80 bytes der er afsat, så
kan der ske hvadsomhelst - programmets C-stak bliver overskrevet med noget
som crackeren bestemmer over.

Mange crackere synes det er sejt at sammenbrygge sådan en UserData, der gør
lige hvad de vil have. Det er det måske også... "lidt"... . Men det
ændrer ikke ved at crackeren bør få skudt knæskallerne af og/eller hænges op
i nosserne . Det er *ikke* en undskyldning at man vil "bevise" at
systemerne er usikre - det *ved* vi godt!
Samme straf er passende til firmaer der har så travlt, at de udgiver
programmer med ovenstående problem.

> og hvordan løser man det?

Som programmør: Passer på med ting som strcpy, memcpy, sprintf, og andre
"farlige funktioner", hvor man kan komme til at kopiere eller skrive ting
ind et sted hvor der ikke er plads til det. Hvis man programmerer i C++, bør
man bruge de mere højniveau-ting som std::vector, og std::string, der er en
hel del sikrere i brug.

Som bruger: vi har nok desværre tabt. Der er ikke meget vi kan stille op.
Det vigtigste er at holde kritiske programmer (browser, email-klient, osv.)
opdateret med nyeste sikkerhedspatches.

Mvh. Bjarke






Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste