Tegnap kaptam egy levelet sghctomától, melyben arról értesített, hogy ígéretéhez híven utánajárt a Google Chrome DLL-ben tárolt template-jeinek, és összehozott egy pöpec cikket a témában, amit a hajtás után elolvashattok.
Körülbelül egy hete nézegettem a Google böngészőjét, a Chrome-ot. Mikor észrevettem, hogy a Themes könyvtárban egy dll file van, rögtön arra gondoltam, hogy ez akár gáz is lehet. Hogy miért? Ha rosszul van megírva a dll betöltése, egy ártalmatlannak tűnő téma kártékony kódot is futtathat. Írtam egy dll-t, ami csupán annyit csinál, hogy betöltéskor (DLL_PROCESS_ATTACH) elindít egy Notepad-et. Kicseréltem az eredeti témát erre a dll-re, és a Notepad annak rendje és módja szerint elindult. A Chrome sem halt bele a dologba, csak megfurcsult:
Ma volt időm újra foglalkozni a dologgal. Az volt a terv, hogy csinálok egy dll-t, ami tartalmaz valami futtatható kódot, és a böngésző is normálisan jelenik meg tőle. A megoldás egyszerű: az eredeti default.dll resource-ait bele kell monyákolni egy saját dll-be. Megcsináltam, a dolog működik is. XP-n. Vista-n nem.
Mi lehet a különbség? Először egy kis minimális bevezető a dll-ekkel kapcsolatban. Egy dll-nek általában van egy DllMain függvénye, ami négy esetben hívódhat meg: ha be- vagy kitöltik a dll-t, ha az adott processz szálat nyit, vagy ha szálat zár be. A lényeg, hogy lehet olyan dll-t írni, ami rögtön betöltődéskor kódot futtat.
Létezik dll, aminek nincs belépési pontja (resource only dll); a Chrome téma file-ja is ilyen. Én ezt a file-t lecseréltem egy olyanra, aminek van belépési pontja, és mikor betöltődött a dll, le is futott a megfelelő kód.
Meg lehet akadályozni, hogy belépési ponttal rendelkező dll DllMain függvénye lefusson, mégpedig a LoadLibraryEx API használatával. Vista-n a Google Chrome chrome.dll-je így is tesz, LoadLibraryEx-szel tölti be a default.dll-t, 0x60 (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE) -at használva harmadik paraméterként.
És itt a bibi. Ez a két flag csak Vista-n érhető el, régebbi verziókon nem. A Chrome-nak van egy függvénye, ami 5.x-es verziójú OS-re egyet, kettőt, vagy hármat ad vissza (x-től függően), 6.x esetén pedig négyet.
Ha ez az érték négy, akkor 0x60-al hívja a LoadLibraryEx-et, ha nem, akkor 0x00-val.
0x00-val a LoadLibraryEx gyakorlatilag ugyanazt csinálja, mint a sima LoadLibrary. Ezért működik a dolog XP-n, és Vista-n ezért nem.
Az, hogy XP-n 0x00-val hívódik a LoadLibraryEx, butaság a Google részéről, mert XP-n létezik egy LOAD_LIBRARY_AS_DATAFILE (0x02) flag, amely bár nem nyújt akkora biztonságot, mint a LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, de használatakor szintén adatként tölti be a dll-t az API, és szintén nem futtatja a DllMain-t.
Szóval szerintem érdemes vigyázni a letölthető Chrome témákkal, akár kártékony kódot is tartalmazhatnak. Ja, és nem, nem vagyok mazochista. Azért OllyDbg-gal csináltam mindezt, mert a vonaton nincs net, nem tudtam lehúzni a Chrome forrását :)
A Google kevéért:
As he promised before, sghctoma wrote a nice article about how is it possible to execute code via special crafted Google Chrome themes. The full post can be found in english at sghctoma's homepage.
bsh · http://asva.info 2008.09.15. 10:01:45
sghctoma 2008.09.15. 10:28:05
@bsh: kösz a gratulációt
btw, írtam a Chromium csapatnak, azt mondták, hogy megpróbálják szigorítani a betöltést, bár a Chrome-ot nem témázhatóra tervezték, tehát a dll-t nem szabadna cserélnie az endjúzernek...
Kixx 2008.09.15. 10:47:48
Ezek szerint nem :)
synapse 2008.09.15. 11:35:32
synapse
tupoljev 2008.09.15. 12:11:14
elvezet volt olvasni
dnet 2008.09.15. 12:58:47
.Andrei (törölt) · http://www.andreiground.com/ 2008.09.15. 14:10:25
törölt-felhasználó (törölt) 2008.09.15. 14:51:07
Itt a lényeg kéremszépen, már talán illő lenne egy 2 éve kiadott rendszert használnia mindenkinek. Munkahelyen/iskolában meg nem kell témázgatni a Chrome-ot meg leginkább semmit.
Az urbanlegendeket meg szintén el lehetne felejteni vele kapcsolatban, ahogy annak idején a 98-ról áttérő tábort, akik fikázták az XP-t rendületlenül.
"bár a Chrome-ot nem témázhatóra tervezték, tehát a dll-t nem szabadna cserélnie az endjúzernek..."
Ez meg a másik. De ilyenkor is a Windows meg a Chrome a szar, nem Pistikében van a bug még véletlenül sem. :DDD
Nekem már nem tetszett, hogy egy téma DLL. Maximum akkor témázok, amikor olvasható fájlokból áll, mint Operában. jpg, gif, png és ini.
ezaz 2008.09.15. 14:54:05
Respect! :-)
buherator · http://buhera.blog.hu 2008.09.15. 15:01:24
0) Had döntsem már el, hogy milyen orendszert használok.
1) A legújabb Ubuntut alig pár hónapja adták ki, akkor lassan arra kéne áttérnie mindenkinek, vagy nem? ;)
2) Milyen urban legendekről beszélsz?
3) Ki fikázta a Chome-ot?
4) Ki fikázta a Windowst?
5) Milyen bejegyzésről írsz egyáltalán?
Startmenu 2008.09.15. 15:16:01
törölt-felhasználó (törölt) 2008.09.15. 15:23:41
0): Ki mondta, hogy nem dönthetsz? A lényeg, hogy a Windows legújabb kiadásán nem működik, ergo: nem tekinthető komoly biztonsági résnek. De lovaskocsival is járhatsz, viszont akkor a következményeit is viselned kell (nem mehetsz fel az autópályára...stb
1): Ne csináljunk már belőle Linux-Windows vitát. Ha Pistike úgy dönt, hogy kernelt fordít, akkor az első kernel panic után a Linux lesz a szar. Egyébként arra meg még hivatalosan Chrome sincs, csak a Chromiumot lehet rá felrakni. A dll probléma ott meg főleg nem érvényesül.
2): Magas erőforrásigény, SuperFetch-csel kapcsolatos tévhitek, UAC-lal kapcsolatos tévhitek, Vista=XP+Aero tévhit,...stb. Semmivel nem nagyobb az erőforrásigény különbség, mint Windows 98 és Windows XP között.
3) és 4): Egyenlőre még senki (kevés komment érkezett), egyébként ezt sghctoma kommentjére válaszoltam.
De bocs, mostanában túl sok helyen fikázták, így kifejtettem a véleményemet magával a biztonsági réssel kapcsolatban hozzátéve pár elővigyázatossági alapszabályt. :)
0x756469 2008.09.15. 15:52:47
/cry bakker...
A leírásból kitünik, hogy gugliék kurára benézték a cuccot, és pont. Ez egy hiba, javítható. Javítva lesz.
Nehogymá eladd nekünk, hogy gugli direkt az MS legelcseszettebb OSára fejlesztett volna.
0x756469 2008.09.15. 15:55:34
FFalatt jó, szexplorert meg nem találom. Csak szólok ;)
sghctoma 2008.09.15. 16:08:38
@penge:
"Itt a lényeg kéremszépen, már talán illő lenne egy 2 éve kiadott rendszert használnia mindenkinek."
mikor letöltöm a Chrome-ot, ott van az oldalon egy szöveg, hogyaszondja: "Windows Vista/XP rendszerhez".. ha van XP-re, akkor működjön rendesen XP-n is.. szerintem..
"Nekem már nem tetszett, hogy egy téma DLL. Maximum akkor témázok, amikor olvasható fájlokból áll, mint Operában. jpg, gif, png és ini."
nekem sem tetszett, ezért születhetett meg az írás :)
de pl. a húgom azt se tudja, mi az a dll, viszont mindent témáz.. és ezzel nincs egyedül.. a net meg tele van Chrome témákkal..
"A lényeg, hogy a Windows legújabb kiadásán nem működik, ergo: nem tekinthető komoly biztonsági résnek."
körülnézek a koliban, kb. annyi Vista-s gépet látok, mint XP-set.. XP kicsit talán több..
"Az urbanlegendeket meg szintén el lehetne felejteni vele kapcsolatban, ahogy annak idején a 98-ról áttérő tábort, akik fikázták az XP-t rendületlenül."
ezzel egyetértek, de mi köze ennek a témához?
"Ez meg a másik. De ilyenkor is a Windows meg a Chrome a szar, nem Pistikében van a bug még véletlenül sem. :DDD"
nem mondtam, hogy szar a Chrome, de ez akkor is bug.. Vista-ra megírták rendesen azt a bizonyos függvényt, XP-re nem, pedig megvan a lehetőség.. bele se kell halni a melóba, egy return 0-t kéne cserélni return 2-re..
@0x756469: IE7 alatt is szétcsúsznak.. de nem mindig.. Chrome-mal sem mindig.. Opera-val nem..
synapse 2008.09.15. 16:33:02
Es ez nem azert van igy, mert nem mukodik a legujabb windowson, hanem azert mert a program alapvetoen nem tamogatja a temazast. Nincs felkeszulve arra, hogy valaki kicsereli ezt a filet, mivel az a chrome szerves resze. Nem csoda, hogy kodot lehet vele futtatni. Egy program nem keszulhet fel arra, hogy a sajat library-jei kompromittalva vannak, ez olyan mintha magat a chrome.exe-t atirnad es csodalkoznal hogy jeeee lefut :D
synapse
sghctoma 2008.09.15. 18:57:22
egy kis megjegyzés: csináltak egy Themes könyvtárat, amibe pakoltak egy png és ico fájlokkal teli dll-t.. teljesen nyilvánvaló volt, hogy az emberek nekiállnak megváltoztatni a témát.. emiatt szerintem gondolniuk kellett volna rá, hogy esetleg kompromittálódhat a dll.. azt gondolom, hogy gondoltak is rá, lévén Vista-n használják azt a két flag-et, amit említettem..
másrészt nekem nagyon úgy tűnik, hogy későbbi feature-nek szeretnék a témázhatóságot.. különben mi értelme lenne a Themes könyvtárnak? illetve ha nem akarnak témázhatóságot, az a 300kB-nyi kép simán belefért volna abba a 8.5MB-os chrome.dll-be :)
ezaz 2008.09.16. 07:47:18
index.hu/politika/belfold/kemsz/
Az NBH gepeire? WTF??! :-)
Andrei · http://www.andrei.hu 2008.09.16. 12:30:18
Abban teljesen egyetértek a schgtomával, hogy azért egy témázhatatlan chrome ne legyen már ilyen módon témázható. Mindamellett még bétakarotin a browsi, tehát nincs veszve semmi. Lassan már ezek a böngészőháborúk is olyanok lesznek, mint a linux-wintosz-mak csaták.
synapse 2008.09.16. 15:10:30
Nincs igazatok, ugyanis ha nem arra lett tervezve akkor miert is keszulne fel ra? Mert o arra nem szamit, hogy kicserelik az egyik komponenset. Attol, hogy vmi okos winpisti rajott hogy jeeee temazhato attol meg a feature nem lesz hivatalos es nem lesz supportalt. Majd egy elkovetkezo verzioban befejezik es bejelentik mint hivatalos feature-t. Akkor majd a program is fel lesz keszitve ra (remelhetoleg).
Mindenesetre ettol meg hulye dolog a temat .dll-ben tarolni, de aztan ki tudja hogy mit fognak kihozni belole...
synapse
sghctoma 2008.09.16. 16:32:43
btw, ma reggelre már javítva volt a dolog a forrásban..
Andrei · http://www.andrei.hu 2008.09.16. 16:48:27
@Sgchtoma: Engem nem győzött meg a Chrome, mert nem vagyok Guglista, ezért megvárom, amíg a teljes forráson átrágod magad. :)
törölt-felhasználó (törölt) 2008.09.16. 17:14:24
Ez itt a baj. Illetve ez még önmagában nem baj, mert saját kárán tanul az ember, de éppen ezért nem tekinthető KOMOLY biztonsági résnek. A komoly biztonsági rés az, ami ha mondjuk felmegyek a blog.hu-ra és rákattintok a bejelentkezésre akkor egy script memória túlcsordulást okoz, ami miatt kifagy a böngésző és bárki hozzáfér a gépemhez.
Az, hogy (és itt most teljesen mindegy, hogy eredetileg témázhatónak tervezték-e) Pistike egy NEM TÁMOGATOTT funkcióval szórakozik, továbbá rendszerkonfigurációs fájlokat manipulál az user error. Az meg, hogy XP-ben és Vistában különbözik a dll futtatási függvény megint részletkérdés. XP-ben UAC sem volt és DEP sem.
De Linuxra is bárki tud guglizni egy pár soros scriptet, ami kinyírja az egész rendszert. (Hogy ezt miért hoztam fel?) Azért, mert ott mégsem nyilvánítják komoly biztonsági résnek, mivel összetett és tudatos felhasználói beavatkozás kell rendszergazdai jogkörben, nem pedig egy kósza kattintás egy hivatkozásra, vagy ilyesmi.
"azért gondolom mégis azt, hogy hibázott a Google, mert nyilvánvalóan eszükbe jutott a kompromittálás lehetősége, tettek is ellene, de kizárólag Vista-n.."
Mert a Vista egy hülyebiztos rendszer, ami miatt pont a "célcsoportnak" nem tetszik, mert nem lehet már úgy buherálni, mint az XP-t, egy rakás beépített védelmi mechanizmus van, amit előtte ki kell kapcsolni.
sghctoma 2008.09.16. 18:12:00
"ezért megvárom, amíg a teljes forráson átrágod magad. :)"
másfél giga, 110 és félezer file.. ennyi időm azért nincs :D
@penge:
"Ez itt a baj. Illetve ez még önmagában nem baj, mert saját kárán tanul az ember, de éppen ezért nem tekinthető KOMOLY biztonsági résnek."
sose mondtam, hogy KOMOLY biztonsági rés.. annyit mondtam, hogy hiba.. ja, és akkor mégsem azért nem komoly, mert Vista-n nem működik? :P
"XP-ben UAC sem volt és DEP sem."
kötekszem: XP SP2-től volt DEP..
"Mert a Vista egy hülyebiztos rendszer ..."
tegyük fel, hogy az.. és? mi köze ennek ahhoz, hogy hogy töltenek be egy dll-t gugliék?
webjuzer 2008.09.22. 00:54:19