Citat:
Ocigledno Linuxu nedostaje rigorozniji model razvoja kernela - kad vec pomenuh Microsoft SDL. NULL pointer eskalacije u Kernelu su sramota, ali stvarno - sramota. Znam da BSDovi imaju daleko rigorozniji model razvoja od Linuxa (bas kao i Solaris i Windows, ali oni su komercijalni) i to je dokaz da sama otvorenost koda ne moze biti sinonim za podrazumevenu sigurnost - najvaznija komponenta sigurnosti je metodologija razvoja i njen odnos prema sigurnosnim propustima
Tako je. Ne vidim razlog zasto OSS model ne bi bio rigorozan (prema "cathedral" modelu), gdje, kao kod BSDa postoje raznorazne grupe ljudi vodjene officerima koje imaju razlicite jasno definirane uloge u development cycle-u. Isto kao i kod Windowsa i bilo kojeg closed-source softvera, s tim da ovdje imas pravo vidjet kompletan kod na CVSu, prepravit nesto, nadogradit...ali takvo nesto se rigorozno kontrolira, da se ne bi desilo sta se desilo Debianovim developerima sa njihovim famoznim OpenSSH patchom.
Inace, za sve Linuxase, evo kako to provjereno radi;
http://www.freebsd.org/doc/en_US.ISO8859-1/books/dev-model/
I jos je usput fino profesionalno dokumentirano, kao i sve u tom sistemu :)
Citat:
Resenje protiv toga je vise nego jednostavno - samo je neophodno imati strogu metodologiju i mogucnosti provere koda, i to je ono gde problemi nastaju.
Lepo se ustanovi pravilo da sve funkcije koje su vrata izmedju userland-a i kernel moda MORAJU proveravati validnost pointera i verifikovati da ulazni i izlazni baferi imaju dovolju velicinu za predvidjenu operaciju. Plati se dobar tim koji radi obavezni code-review, u kome se radi fizicki pregled koda kao i stress-testing fuzzing metodom.
Jednostavno u kernel-modu mora vaziti opste pravilo: ne verovati nicemu sto dolazi iz userland-a i sto se moze menjati u userland-u. Znaci bilo kakvi pointeri, baferi, tabele sa pointerima na funkcije/pozive, itd... sve to mora biti provereno na ulazu u kernel mod.
Microsoft je imao tonu ovakvih problema (setimo se Russinovich-a koji je otkrio hrpu bagova u ntdll.dll koji je gatekeeper izmedju usermode API-ja i kernel moda) i posto je to pocelo ozbiljno da im ugrozava ugled OS-a, odlucili su da totalno promene nacin razvoja i da bukvalno raspisu kernel iznova sa SDL metodologijom.
Kao sto rekoh - poenta ovog blama je da je null-pointer eskalacija zvrjala u najkriticnijem delu operativnog sistema (kernel) 8 godina - iako taj Linux kernel koristi GOMILA firmi, gomila ljudi ga navodno pregledava, itd...
Problem je sta je sam Linux od starta pisan po pazaru, i sta sad treba mjeseca i mjeseca da se napravi cjelokupni code audit.
Jos jedan problem lezi u razdvojenom development cycleu kernela i userlanda. Jednostavno userland provajda sve korisnicke servise prema kernelu, i mnogo je lakse nac i ispravit bug ako je razvoj sinkhroniziran. Svi kernel bug-ovi se manifestiraju kroz userland programe i njihovo koristenje sistemskih poziva, I/O streamova i ostalog prema kernelu.
Kad se nesto radi od starta kako treba, onda nije tesko; jedan od tisucu primjera je implementacija strlcpy funkcije na BSDovima koja je copy-safe, automatski nul-terminira i nema buffer overflowa sa njom. Naravno, prominentne Linux glave i dalje imaju svoje misljenje;
Citat:
Drepper argues that strlcpy and strlcat make truncation errors easier for a programmer to ignore and thus can introduce more bugs than they remove
Znaci, gore je ako alociras 5 charova i gurnes "elitesecurity" unutra, i dobijes samo "elite", pa ces to kad tad primjetit negdje u programu i ispravit, nego ako pointer pokazuje na kompletan "elitesecurity" block koji je krivo alociran. Bravo, high-five.
Citat:
No i pored ovoga, mi i dalje cekamo da na nekom hack contest-u windows izdrzi duze od linux-a ;)
Prije cu se kladit na Windowse ako su oba sistema apdejtana do kraja i nemaju nikakav dodatni servisni paket po sebi (web, IRC, im-ovi, ftp, mail...).
Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.
A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.