[python] Ukončení zaneprázdněného threadu

superman feed na centrum.cz
Pátek Duben 25 17:28:28 CEST 2008


Proč by to mělo být bezpečnostní riziko? Je na Vás, jakožto tvůrci 
programu, zda vůbec dovolíte externímu programu sestřelit thread, nebo 
ne. Uvědomte si, že existují něco jako přístupová práva v každém 
operačním systému, a není nutné dovolit sestřelení threadu nikým jiným, 
než si sám přejete. A kromě toho se tu bavíme o sestřelení threadu jiným 
threadem v rámci jednoho procesu.

Neuvolněná paměť v rámci procesu je něco co vzniká naprosto běžně. Staší 
neuvolnit kus paměti. Pokud k paměti nepřistupujete, systém jí brzy 
odswapuje na disk a z fyzické paměti RAM neubírá. Akorát ubírá místo v 
adresovém prostoru procesu (a nikde jinde). Po skončení procesu 
samozřejmě systém uklidí naprosto vše.

Ale je to bezpečnostní chyba, nebo raději řekněme problém pro programy 
co se neumějí vypořádat s nedostatkem paměti - ale je to chyba samotného 
programu. Problém mívají obecně jazyky jako typu Python, Java, C#, Perl, 
a další, které prostě neumí nedostatek paměti nijak rozumně vyřešit, a v 
zásadě pouze krachnou. V jazycích jako je asm, C, C++, Ada, Fortran, a 
další je možné bez problémů situaci, kdy dojde paměť, nebo adresovatelný 
prostor procesu zvládnout a pokračovat v běhu - ba se dokonce zotavit a 
bezpečně jet. Ovšem programátor ten program tak musí napsat.

Nedávno jsem takto prolomil "neprůstřelný" firewall Kerio Personal 
Firewall. Stačilo k tomu zabrat veškerou paměť a počkat několik sekund. 
Uvnitř Kerio firewallu psaném v C++ došlo k pokusu o alokaci bloku 
paměti při další síťovém spojení - alokace se nezdařila, vyhodila 
vnitřní výjimku typu bad_alloc, kterou programátoři Keria neošetřili a 
celý firewall jako program se ukončil, spadl na ústa a připojení k 
internetu najednou byla zcela nachráněné. Jak jednoduché, jak účinné. Už 
vím, jak bych napsal virus, který se dostane na síť při puštěném Kerio 
firewallu (pro objektivitu musím napsat, že by to nejspíš neustála 
naprostá většina firewallů.).

Miloslav Ponkrác


Bystrousak na seznam.cz napsal(a):
> Moc tomu nerozumím, takže se omlouvám, jestli budu plácat nesmysly;
> Není to bezpečnostní chyba? Pokud si něco vezme paměť a OS jí po sestřelení neuvolní, zdá se mi to jako potenciální riziko, které by mohlo být zneužito nějakým škodlivým virem..
>
>   



Další informace o konferenci Python