» »

Vsebina pomnilnika na grafičnih karticah pronica med aplikacijami

Vsebina pomnilnika na grafičnih karticah pronica med aplikacijami

Slo-Tech - Kombinacija brskalnika Chrome, Nvidiinih grafičnih gonilnikov in igre Diablo III skriva zanimivega hrošča, zaradi katerega velja ob zagonu igre preveriti, kdo je v sobi. Evan Andersen je namreč ob zagonu igre Diablo III na zaslonu uzrl zaslonski posnetek izpred nekaj ur, ko je v načinu brez shranjevanja (incognito mode) gledal pornografske strani. Diablo III mu je med nalaganjem igre kazal prav ta posnetek. Zanimivo je, da hrošč sploh ni nov, a podjetja ne kažejo interesa, da bi ga odpravila.

Razlog se skriva v pomnilniku na grafični kartici, ki ga nobena izmed aplikacij ni počistila. Chrome ga po izhodu ni očistil, temveč le vrnil sistemu kot prostega za uporabo. Nvidiini gonilniki niso poskrbeli, da bi bil pomnilnik pred naslednjo uporabo izpraznjen. In ko je Diablo III zahteval pomnilnik in ga ni pobrisal pred uporabo, je takoj prikazal, kar je bilo pač tam shranjeno. V tem primeru posnetek pornografske strani.

Zanimivo je, da gre za obnašanje, ki ima že precej dolgo brado. Google je že lani aprila lakonično odgovoril, da način brskanja brez shranjevanja ne ponuja garancije za skrivanje brskanja pred uporabniki istega računalnika, zato za Google to ni hrošč. Nvidia ve za pronicanje vsebine pomnilnika med aplikacijami že več let, pa kode še niso popravili, tako da ob dodelitvi novi aplikaciji pomnilnik na grafični kartici še vedno ni počiščen.

35 komentarjev

x800xt ::

Isto ,ko ta kamera aplikacija v windows 8.Bi me enkrat skor kap še dobro , da ni bilo nobenega zraven.:D

Riff ::

ja tud nvidia in ostali niso nedložni

CyberPunk ::

Hehehe, to je pa tako kot T2 TV (vsaj pri Aminotu, ko naslednjic prizges, izbruhne sekundo ali dve bufferja) ali pa iOS naprave, ki v task switcherju kazejo zadnji aktivni screenshot appa (oz. za sekundo na full screen, ko aktiviras app). :D

Furbo ::

Pri ios je vsaj namerno, tole je pa sama zanikrnost, čeprav pri svoji grafi tega še nisem opazil.
Lp,f

m0LN4r ::

Jaz tudi obiskujem to stran na zaslonski sliki, ampak ne s chromom xD ahahaha
IN AMD RTG WE BELIEVE
Sooner or later TM

techfreak :) ::

Naceloma je to znano ze precej casa, prav tako je problem tudi pri dostopu do VRAMa iz virtualk. Sicer imam podobne pomisleke kot so opisani v tem komentarju: https://code.google.com/p/chromium/issu...

@CyberPunk: pri iOS je to namerno, dolocene aplikacije pa imajo ta screen zabluran.

bbf ::

Tudi v I.E.: pri odpiranju novega taba se včasih za trenutek pokaže že zaprt snapšot videa z youtuba, pa tudi že zaprta stran iz foxit pdf reader plugina. na Intel HD 4000 grafiki.

OK.d ::

Tudi pri tvinu se shrani, če prej gledaš pornjake:P
LPOK.d

Thuban ::

zato se uporablja Chrome IN Firefox. En je dober za nekaj, drugi pa za kaj drugega.
I'm sorry, Dave. I'm afraid I can't do that.

Senitel ::

techfreak :) je izjavil:

Naceloma je to znano ze precej casa, prav tako je problem tudi pri dostopu do VRAMa iz virtualk. Sicer imam podobne pomisleke kot so opisani v tem komentarju: https://code.google.com/p/chromium/issu...

@CyberPunk: pri iOS je to namerno, dolocene aplikacije pa imajo ta screen zabluran.

Tistile pomisleki v komentarju niso čisto spot on. Oziroma niso spot on kar se tiče rešitve. V danem primeru je precej malo kar lahko Chrome sam sploh naredi. Težava ni v teksturah, težava je v back bufferju, do katerega pa Chrome niti nima direkt dostopa (ker ni exclusive full screen aplikacija, tako kot igra). Igra pa potem zabluzi ker naredi back buffer flip brez da bi prej naredila clear.
Realno imaš pa čisto isti problem v CPU svetu. Recimo funkcija malloc ne bo inicializirala pomnilnika na 0. Rešuje te zgolj to, da je page size na CPU-jih tipično bistveno manjši kot na GPU-jih in da se v CPU pomnilniku shranjujejo stvari, ki niso takole enostavno vidne. Tule imaš pa podatke o sliki na napravi, ki prikazuje sliko. Če bi vrgel na grafo 4GB wav-file pač nebi bilo očitno, da je ta "garbage" v bistvu zvočni posnetek. Isto ni tak problem na integriranih grafah, ker si delijo ram s CPU svetom (bi blo pa zanimivo pogledat na Iris Pro).
Ampak eko izziv... Naložiš v sistemski ram en 4GB velik bitmap, sprostiš teh 4GB, potem pa v drugi aplikaciji alociraj en dost velik kos rama in glej kolk koliko in kolk velikih kosov onega bitmapa boš dobil...

LightBit ::

Senitel je izjavil:

Naložiš v sistemski ram en 4GB velik bitmap, sprostiš teh 4GB, potem pa v drugi aplikaciji alociraj en dost velik kos rama in glej kolk koliko in kolk velikih kosov onega bitmapa boš dobil...

OS počisti pomnilnik preden ga da procesu (vsaj Linux). Tako da je to mogoče le, če narediš malloc() v isti procesu.

techfreak :) ::

@LightBit: ni tisto samo pri calloc? Pri malloc moras sam inicializirat memory, ker drugace dobis "random" vrednosti ven (vsaj kolikor vem).

Senitel ::

@LightBit: Imaš prav, zadeva je odvisna od OS (in moram ponovno preverit kako je s tem na Windowsih...). Linux in MacOS pa inicializirata memory.

M.B. ::

Podatki v VRAMU zgleda tudi preživijo reboot, kar je problem če dleaš kaj na live CDju z varnimi distribucijami aka TAILS in potem rebootaš v normalni OS.
Everyone started out as a newbie.
Sadly only a handful ever progress past that point.

LightBit ::

@M.B.: To se mi je že zgodilo.

damjanster ::

Temu se pa lahko reče Pr0n aided debugging ;-)

ender ::

@M.B.: jaz sem se kakšnih 10-15 letn nazaj igral z Linuxom na Via Eden 5000 plošči, pa mi je bilo zabavno kako sem lahko računalnik ugasnil za pol ure, in ko sem ga prižgal, me je ob zagonu X pričakala rahlo popačena slika zadnje stvari, ki je bila v grafičnem načinu preden se je stvar ugasnila.
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

WizmoTo ::

techfreak :) je izjavil:

@LightBit: ni tisto samo pri calloc? Pri malloc moras sam inicializirat memory, ker drugace dobis "random" vrednosti ven (vsaj kolikor vem).


Po C standardu je vsebina pri mallocu nedefinirana, ampak zaradi varnosti(ker bi lahko prebral kaj je v ramu) počisti vsebino že OS. Tako, da v praksi ni razlike med malloc in calloc, oz. se je mallocu bolje izogniti, ker ne profitiraš nič na performansah napram callocu (če naknadno še sam čistiš, kar ponavadi tudi delaš, je celo počasnejše vse skupaj, ker v bistvu dvakrat 2x inicializiraš).

Dr_M ::

In kdaj bosta google in Blizzard tole popravila?
The reason why most of society hates conservatives and
loves liberals is because conservatives hurt you with
the truth and liberals comfort you with lies.

ales85 ::

Zakaj bi morala pa to popraviti Google in Blizzard? Če velja za RAM, da ga OS počisti, preden ga da v uporabo aplikaciji, potem bi moralo enako veljati za VRAM. Torej, bi ga moral počistiti gonilnik grafične kartice. Na ta način mora tudi delovanje urediti samo pisec gonilnika, ne pa vsi uporabniki.

Dr_M ::

Se pravi, mora nvidia popravljat sranje drugih?
The reason why most of society hates conservatives and
loves liberals is because conservatives hurt you with
the truth and liberals comfort you with lies.

win64 ::

To, da se pomnilnik ne sprazni pred uporabo je težava aplikaciji.
To, da pomnilnik ni spraznjen po sprostitvi je težava operacijskega sistema oziroma gonilnika. Čeprav bi za občutljive podatke po mojem mnenju morala poskrbeti tudi aplikacija(izbrišeš podatke iz pomnilnika preden ga sprostiš).

Senitel ::

Tukaj je problem, da je back buffer v bistvu shared resource med vsemi aplikacijami, ki prikazujejo zadeve na zaslonu in da do tega lahko dobiš (read) dostop.
Če hočeš dejansko to zaščitit bi aplikacije morale svoje slike zakriptat z HDCP (ideja malo na hitro).

win64 ::

Ker ne poznam toliko z delom na VRAM bo lahko to vprašanje lahko tudi čudno izpadlo.

Recimo, da je triple buffering vklopljen in aplikacija pred izhodom zrenderira 3 prazne slike. Ali ni to dovolj?

D3m ::

Dr_M je izjavil:

Se pravi, mora nvidia popravljat sranje drugih?


Nope. Malenkost mora popraviti svoj shit.
|HP ProBook|R5 3500U|
|Lenovo A10|Mediatek MT8121|

Dr_M ::

Dobre 4 leta nazaj sem sel iz amd na nvidio in na dveh compih v tem casu nisem dozivel cesa takega, kot opisuje novica. Res pa je, da ne uporabljam chrome in ne igram diablo 3. Ziher delam neki narobe.

Se enkrat, zakaj bi morala nvidia popravlajt sranje za drugimi?
The reason why most of society hates conservatives and
loves liberals is because conservatives hurt you with
the truth and liberals comfort you with lies.

SuperVeloce ::

Ker tudi sama dela "sranje"? Driver ima svoje naloge in tukaj spada tudi kontrola nad bufferjem... Oni so prvi v vrsti, ki bi morali za takšne stvari skrbeti, magari popravljati napake drugih, pa če se tebi to še tako čudno zdi
Main: i7 4790 + 212evo, h87m pro4, XFX rx480 GTR black, 4x8GB 1600CL8, 850evo

D3m ::

Dr_M je izjavil:

Dobre 4 leta nazaj sem sel iz amd na nvidio in na dveh compih v tem casu nisem dozivel cesa takega, kot opisuje novica. Res pa je, da ne uporabljam chrome in ne igram diablo 3. Ziher delam neki narobe.

Se enkrat, zakaj bi morala nvidia popravlajt sranje za drugimi?


Dajmo si naliti čistega vina. Nvidi ni perfektna, kot si nekateri predstavljajo.
|HP ProBook|R5 3500U|
|Lenovo A10|Mediatek MT8121|

Napajalc ::

Ah, veš da je z Nvidio vse ok, to je software kriv, AMD kartice so pa bugaste ker tega ne delajo.
011011100111010101100010

Matako ::

Joj no, boste pa un pornjak še enkrat pogledali ne.
/\/\.K.

D3m ::

Ne. Vedno se pogleda naslednjega...boljšega.
|HP ProBook|R5 3500U|
|Lenovo A10|Mediatek MT8121|

Zgodovina sprememb…

  • spremenil: D3m ()

Senitel ::

WizmoTo je izjavil:

Po C standardu je vsebina pri mallocu nedefinirana, ampak zaradi varnosti(ker bi lahko prebral kaj je v ramu) počisti vsebino že OS. Tako, da v praksi ni razlike med malloc in calloc, oz. se je mallocu bolje izogniti, ker ne profitiraš nič na performansah napram callocu (če naknadno še sam čistiš, kar ponavadi tudi delaš, je celo počasnejše vse skupaj, ker v bistvu dvakrat 2x inicializiraš).

Sem preveril še na Windowsih. V tem primeru OS ne počisti vsebine, dobiš "garbage".
Tako da ideja, da je to splošno rešeno v OS-ih, ne drži.

win64 je izjavil:

Ker ne poznam toliko z delom na VRAM bo lahko to vprašanje lahko tudi čudno izpadlo.

Recimo, da je triple buffering vklopljen in aplikacija pred izhodom zrenderira 3 prazne slike. Ali ni to dovolj?

Če aplikacija naredi clear in potem flip je seveda dovolj. Še vedno imaš pa lahko zlonamerno aplikacijo, ki pred clear zadeve pobere iz pomnilnika.
Ne moreš pa zahtevat od API-ja, da je prva akcija vedno clear (ali da se clear izvede kar implicitno), ker je uporaba prejšnje slike povsem legalen in uporaben use case.

LightBit ::

Senitel je izjavil:

WizmoTo je izjavil:

Po C standardu je vsebina pri mallocu nedefinirana, ampak zaradi varnosti(ker bi lahko prebral kaj je v ramu) počisti vsebino že OS. Tako, da v praksi ni razlike med malloc in calloc, oz. se je mallocu bolje izogniti, ker ne profitiraš nič na performansah napram callocu (če naknadno še sam čistiš, kar ponavadi tudi delaš, je celo počasnejše vse skupaj, ker v bistvu dvakrat 2x inicializiraš).

Sem preveril še na Windowsih. V tem primeru OS ne počisti vsebine, dobiš "garbage".
Tako da ideja, da je to splošno rešeno v OS-ih, ne drži.

Microsoft je spet črna ovca.
Program seveda mora v vsakem primeru pričakovati "garbage". Tudi na Linux-u lahko dobiš "garbage", samo ne od drugega procesa.

ender ::

Saj na Windowsih tudi ni od drugega procesa - to bi bila varnostna luknja.
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

LightBit ::

Senitel tako pravi. Govorimo seveda o že sproščenem pomnilniku.
Seveda je to varnostna luknja.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vsebina pomnilnika na grafičnih karticah pronica med aplikacijami

Oddelek: Novice / Varnost
357524 (3345) LightBit
»

Prenosnik ne dela dovolj hitro kot bi moral

Oddelek: Pomoč in nasveti
13996 (715) zlobann
»

Chrome Web Store predstavljen, Chrome 9 novosti

Oddelek: Novice / Brskalniki
418811 (7004) PARTyZAN

Več podobnih tem