Ono je to trochu komplikovaný. Přečtete si například od Isaca Assimova knihu Nahé Slunce. Přestože roboti nesmí porušit tři zákony robotiky, stejně dojde nakonec k zavraždění člověka robotem. Chyba v robotech, v zákonech? Nikoliv. Jen komplikovaný způsob jak spojit několik povolených technik a vlastností v zákeřnou a ničivou zbraň. Tohle je stejný. Výše zmíněný bug vlastně vznikl jen kombinací několika nasobě nezávislých vlastností.
Je pravdou, že pointery by se měli kontrolovat, nicméně, právě proto se inicializují na NULL, což má značit, že jsou neplatné. Většinou pak OS provádí zneplatnění první stránky právě proto, aby se předešlo používání neplatných ukazatelů.
Pokud však jiná část systému umožní uživateli mapovat i adresu 0, pak si jen zadělává na další bezpečnostní problém. Je to prostě nestandardní operace (už jen to, že mmap prostě vezme 0 jako číslo, nikoliv jako neplatný ukazatel).
Když se k tomu přídá nějaká optimalizace, dovolující kernelu spouštět kód v user-space bez předchozího průchodu nějakou tou branou, problém je na světě. A můžeme tomu říkat,že chyba tam je dlouho. Není to pravda. Jen doposud nikdo nedokázal sestavit tu správnou situaci, aby uvedená série drobných prohřešků způsobila velký problém. Doposud prostě ještě nikdo nenamýchal ten správný lektvar.
Tohle celé je problém konecepce. Nikdo prostě na začátku neřekl jasně: "NULL znamená neplatný". To je jen uzus, jakýsi folklor, štábní kultura céčkových programátorů. A zatímco jeden si myslí, že NULL je neplatný, druhý si řekne, nula je také adresa, tak proč tam nemapovat. A když si k tomu třetí myslí, že kernel = root (což je omyl!), tak čtvrty to zamýchá, uvaří, a pak se správným zaříkávání vyrobí pěkný exploit.
Tím jsem jen nechtěl říct, že Windows jsou na tom lépe. Microsoft je velká firma, má mnoho týmů a každy pracuje na něčem jiném. Velké firmy mívají problém s koncepcí. Ale z mého pohledu s tím Microsoft má měnší problémy, než Linux a jeho komunita.
Možná to na mobilu ťukal zatímco jste zaslal Vaši reakci, ale teď se dívám, že na jádře 2.6.18(Debian) takový adresář v /proc/ nemám, takže toto řešení se asi týká jen novějších jader.
Windows jsou na tom lépe :D, a co ty pache kritických a nejkritičtějších chyb které opravují díry od verze Windows Vista až po Windows 2000 někdy i starší :D. To nemluvím o nedostatcích které MS nenapravil od dob Windows NT 4.0 případně 95 :D. Windows na tom lépe nejsou což dokazuje i velké množství škodlivého softwaru. Kolik virů a škodlivého softu je na linux, případně ma Mac OS X. Ať někdo nějak tu chybu zneužije a ukáže kolik tuxíků ohromí :D.
Zavirovanost systému je dána jeho počtem kopií a nasazením mezi lammy. Ve Windows je možná mnoho virů, ale jen málo tzv. skutečných virů. Tedy viry, které se nešíří jen díky sociálního inženýrstvý, ale skutečně napadají systém. Kdyby linux byl tak rozšířený jako Windows, tak chyba z roku 2001 je již dávno opravena po tom, co by díky tomu někdo sestřelil polovinu uživatelských stanic.
na serveru nastaveni na hodnotu 4096 zrejme nezpusobi problemy, ale desktopove distribuce nastavuji hodnotu vm.mmap_min_addr = 0 proto, aby fungovalo spravne treba dosemu, wine, a nove i aplikace nabastlene pomoci mono :-(
Chyba byla nalezena a opravena. (tecka)
Neco podobneho se o chybach ve win rozhodne prohlasit neda. Da se na webu najit seznam neopravenych chyb, ktere jsou ve widlich dlouhla leta a umoznuji prave napr lokalni navyseni prav.
Takze ktery OS je pak bezpecnejsi ? Ten ktery zname chyby opravuje (casto v radu jednotek hodin po objeveni) nebo ten, ktery na ne kasle, dokud se nenajde aktivista s dostatecne funkcnim exploitem ? A to mam jeste jiste interni informace z M$ o tom, ze drtivou vetsinu chyb (celkem logicky)objevenych vyvojari nikdo neopravuje, protoze na to nedostane prislusny cas/$$$. A tak se chyby taji, aby se o nich nikdo nedozvedel (coz je vzdy jen otazka casu/konstelace hvezd).
mě se líbí ta část s tím mapováním na adresu 0. Nějak jsem nepochopil, jak je možné, že kernel vůbec má práva spouštět něco v userspace bez změny kontextu. Ale spíš to bude totální nesystémovostí celého jádra linuxu (a Windows na tom nebudou lépe)
Přesně tak. Všichni se spoléhají na to že když je Linux open-source, že to přece ti lidé musí vidět...
No jo, ale kolik uživatetelů linuxu se ve zdrojácích hrabe? :)
Jedna z dlouhe rady lokalne zneuzitelnych chyb...Takovych jeste bude na libovolnem OS libovolneho "vyrobce"...
Mimochodem pokud jedete na nejake distribuci s jadrem 2.6.23 a vyssim, pravdepodobne ten exploit nezabere, protoze na "nulovou" adresu zapis povolen nebude - overte si, zda vam "cat /proc/sys/vm/mmap_min_addr" vrati nenulovou hodnotu - pokud ano, jste i bez patche nejspis v pohode.
Panove Bednar a Novacisko by se mohli obcas obtezovat si rozsirit obzor.
Protiřečíte si - jednak říkáte, že si "platíme" za to, že Linux je zdarma, ale bezprostředně předtím, že Windows [která jsou pochopitelně placená] na tom nebudou lépe. Tak jak to bylo myšleno?
Další nutnou podmínkou je, aby systém měl zakompilovanou podporu pro nějaký méně obvyklý protokol jako je IPX nebo IRDA, v kterých leží původní příčina problému. To za prvé nebudou všechny systémy, za druhé ty co to mají, tak jsou obvykle jednouživatelské systémy typu telefon nebo systémy bez lokálního přístupu. Aspoň mají uživatelé hraček typu Android další způsob, jak si hacknout vlastní stroj. Všechno špatné je k něčemu dobré :)
"ale pokud o nich nevíte a neví o nich ani vaši nepřátelé, nepředstavují problém"
Opravdový problém spočívá v tom, že vy ve skutečnosti nevíte, jestli o nich vaši nepřátelé nevědí :-/...
Na světě jsou tisíce lidí živících se tím, že hledají chyby. Někteří to dělají proto, aby byly chyby opraveny, ale jiní i proto, aby si pomocí nich pomohli k cenným datům. A ti takový problém, pokud ho objeví, skutečně do světa roztrubovat nebudou.