Sociálne siete

SecIT.sk na Facebooku SecIT.sk na Google+ SecIT.sk na Twitteri

Podporte nás


V prípade, že Vám obsah nášho portálu niekedy nejakým spôsobom pomohol, či bol pre Vás prínosom prosím podporte jeho chod ľubovoľnou čiastkou. Ďakujeme!

Štítky

Vyhľadávanie

You are here

Domov
Upozornenie: Obsah je licenčne chránený a bez písomných súhlasov autora článku a vlastníka webovej stránky nesmie byť v žiadnej forme ďalej kopírovaný a šírený v pôvodnom, či v akokoľvek upravenom stave.

Modrá obrazovka (Blue Screen Of Death)

V tomto článku se podíváme na to, co se přesně děje, když nastane ona nepopulární modrá obrazovka.

Modrou obrazovku jste určitě už někdy viděli, nebo o ní alespoň slyšeli. Obzvláště ti z Vás, kdo používali operační systémy Windows 9x vědí, jaké to je, když si člověk v klidu dělá na své práci - a najednou BUM... nastane modrá smrt a vše je ztraceno.

Mechanismem modrých smrtí na Windows 9x/Me se zde zabývat nebudu, protože se jedná již o systémy velmi staré a doufám, že i málo používané vzhledem k bezpečnostní situaci, která tam panuje. Povíme si něco o tom, co dělají Windows NT/2000/XP, když nastanou takové okolnosti, kdy se musí objevit modrá obrazovka. Do seznamu jsem neuvedl Windows Vista ani serverové varianty operačního systému, protože s nimi nemám mnoho skušeností. Avšak mechanismus by se měl lišit od toho, který zde popíši, jen v drobnostech.

Okolnosti vzniku

Okolnosti vzniku mohou být různé. Když prostě systém usoudí, že je něco špatně, vyvolá modrou smrt. Důvody mohou být jak velmi závažné (selhání pevného disku, poškození konzistence paměti jádra apod.) tak naprosto banální, které by bylo možné řešit například jen vyvoláním výjimky - nebo přejít úplně bez povšimnutí. Podle mého názoru je dobře, že systém vyvolá modrou smrt i v pípadech, kdy by to nebylo zapotřebí, protože to přispívá k psaní kvalitnějších ovladačů. Včasným vyvoláním modré smrti (a tedy zastavením své činnosti) chce systém předejít možnému poškození hardwarových zařízení.

Průběh

Systém vyvolá modrou smrt pomocí interních funkcí jako je KeBugCheck nebo KeBugCheckEx. Těchto funkcí můžete využít i jako programátoři ovladačů, pokud usoudíte, že za určitých okolností systém prostě nemůže pokračovat v prácí. Další aplikací je záměrné vyvolání mdoré smrti, i když to okolnosti nevyžadují. Některé viry (rootkity) totiž při vypínání počítače normálním způsobem kontrolují, zda jsou stále zapsány v registrech a na pevném disku tak, aby se znovu spustily při dalším startu. Pokud však běh počítače ukončíte modrou smrtí, rootkit moc šancí na ověření toho, že přežije vypnutí stroje, nemá. Ano, i v tomto případě je teoreticky možné, aby rootkit přežil (vysvětlíme si dále v tomto článku), ale implementace takové techniky je velmi netriviální a závisí na hardwaru počítače (zvláště na pevném disku). Krom toho existují ještě drsnější metody, jak se i rootkitu, který by přežil nečekanou modrou smrt, zbavit.

Ale zpět k samotnému procesu vyvolání modré obrazovky. Hned po zavolání příslušných KeBugCheckXXX funkcí systém provede několik kroků k tomu, aby bylo možné zaznamenat informace o selhání na disk. Systém pošle všem procesorům krom aktuálního požadavek na zablokování. Jestli se procesory podařilo zablokovat, už se nekontroluje. Systém se totiž nachází v nedefinovaném stavu, kdy již nelze použít žádných synchronizačních primitiv, protože by mohlo dojít k dalšímu selhání, které by mohlo zamezit provedení dalších operací, které jsou při vyvolávání modré obrazovky žádoucí.Systém si zároveň zajistí naprostou exkluzivitu aktuálního procesoru - aktuálně vykonávaný kód nemůže být přerušen žádným jiným kódem.

Jakmile aktuální vlákno má zaručen exkluzivní přístup k procesoru a k veškerému hardwaru, přepne se monitor do textového režimu a je vypsán známý text o tom, že došlo k selhání systému. Systém pak zapíše informace o chybě a pokud uživatel má zakázán automatický restart při selhání, procesor přejde do vykonávání nekonečného cyklu.
Během vyvolávání modré smrti se dostanou ke slovu i jiné ovladače než hlavní modul jádra, který obsahuje rutiny KeBugCheckXXX. Každý driver může hlavnímu modulu jádra řící, že by rád na chvíli převzal řízení, kdyby nedejbože došlo k selhání systému. Při selhání zavolá hlavní modul jádra příslušnou rutinu ovladače. Rutina ovladače si však nemůže dělat, co chce - popravdě řečeno, nemůže dělat skoro nic. Základní omezení jsou tato:

  • Nelze alokovat paměť - ani stránkovanou ani nestránkovanou
  • Nelze přistupovat k stránkované paměti
  • Nelze použít žádných synchronizačních mechanismů
  • Nelze volat drtivou většinu funkcí jádra

Otázka tedy je, co vlastně taková rutina dělat může. Může komunikovat s hardwarovým zařízením (např. s diskem) přímo pomocí I/O portů. Z toho vyplývá, že by se potenciální rootkit mohl i při modré smrti zapsat na disk a do registrů tak, aby se spustil při dalším startu systému. Je ale zřejmé, že by implementace této techniky vyžadovala obrovzské znalosti jak souborového systému NTFS a formátu registru Windows, tak i dostatečné vědomosti o specifikacích ATA a SATA. Tudíž je tato možnost dosti nereálná. Rutinu lze využít maximálně k otmu, aby byla do Crash dumpu zapsána specifická data.

Jakmile systém shromáždí všechny informace o selhání, je už téměř vše hotovo. Data stačí jen zapsat, aby se na ně uživatel mohl později podívat. Data se zapíší do stránkovacího souboru a stránkovací soubor se označí. Při bootování operační systém zkontroluje, zda se ve stránkovacím souboru nenachází informace o předchozím selhání. Pokud ano, uloží je do adresáře, který je specifikován uživatelem kdesi v hloubi Ovládacích panelů.

Z výše popsaného vyplývá několik věcí:

  • Pokud stránkovací soubor nemáte zapnutý, žádné informace o selhání systému se vám na disk neuloží. Teoreticky by to možné bylo, leč vyžadovalo by to napsat malý interpret souborového systému navíc, což se uatorům Microsoftu z pochopitelných důvodů nechtělo. Tudíž je rozumné nastavit si alespoň minimální velikost stránkovacího souboru.
  • Nemělo by se stávat, aby se vypisované informace do stránkovacího souboru nevešly. Tudíž mějte stránkovací soubor dost velký, aby k tomu nedocházelo. Vše záleží na nastavení v Ovládacíh panelech. Pokud chcete vypisovat jen nejnutnější informace o selhání, stačí vám bohatě 2 MB stránkovací soubor. Pokud při selhání chcete vypisovat obsah celé paměti jádra resp. veškeré fyzické paměti, stránkovací soubor by měl být tak velký, aby tyto informace pojmul.
  • Informace o selhání nenajedete, pokud systém znovu nenastartujete, protože se zapisují do speciálního souboru až při novém startu OS.
  • Pokud k modré smrti dojde v rané fázi bootování, kdy stránkovací soubor ještě neexistuje, tak máte smůlu. Informace o selhání se nikam nezapíší.

 

Zjišťování příčin modrých obrazovek

Modrou obrazovku může způsobit virus, špatně fungující hardware, nebo nesprávně pracující ovladač. To jsou příčiny velmi obecné. Z toho také vyplývá, že zjištění příčiny modré obrazovky může být velmi obtížný úkol. Ale nemožné to není. Pokud se budete držet následujících kroků, určitou šanci na úspěch máte.

  • Podívejte se do Správce zařízení. Zde se můžete dozvědět, jestli nechybí nějaké ovladače hardwaru, nebo jestli nejsou pšatně nainstalované.
  • Podívejte se do Prohlížeče událostí (eventlog), zejména do sekce Systém. Tam aplikace, služby a ovladače mohou zapisovat různá hlášení. Pokud se tam například často objevují hlášení od ovladače disku o tom, že se nepodařilo načíst stránku ze stránkovacího souboru, pevný disk se s vámi loučí.
  • Často jsou modré smrti způsobovány pamětmi RAM. Proto se vyplatí například některý modul dočasně vyndat (pokud máte více modulů) a podívat se, jestli se situace nezlepšila. Můžete také RAMky vyměnit za nové.
  • Na zjišťování příčin BSOD lze použít nástroj WinDBG z balíku "Debugging Tools for Windows", který je volně ke stažení na stránkách Microsoftu. Tento nástroj vám ukáže, jaký ovladač pravděpodobně selhání způsobil a mnoho dalších informací. Leč musíte mít určitý přehled o tom, jak to v jádře funguje a znát trochu principy toku vykonávání instrukcí a jiné příbuzné mechanismy, aby pro vás byl WinDBG opravdu užitečný.

Zjišťovat příčinu modré smrti lze i "on the fly" - tedy přímo při jejím vzniku. Pokud systém nastartujete v režimu ladění (musíte před bootováním Windows stisknout klávesu F8), nezobrazí se při selhání modrá obrazovka. Systém přejde do nekonečné smyčky a čeká, dokud se k němu nepřipojí další počítač s nainstalovaným debuggerem (např. WinDBG).


Podporte nás


Páčil sa Vám tento článok? Ak áno, prosím podporte nás ľubovoľnou čiastkou. Ďakujeme!


ITC manažer Security-portal.cz Soom.cz
Hoax.cz Crypto-world.info