Скалы, в своем загадочном бдении,
оставались неподвижными и жесткими,
год за годом истаивая под атаками
несомого ветром песка. Однажды
Спутник станет песком.
Ф. Херберт "Дети Дюны"
С каждым днем объемы и ценность обрабатываемыми персональными компьютерами данных непрерывно растут и одним из главных критериев оценки той или иной системы прежде всего является надежность.
Как и за все в этом мире за надежность приходится платить. В данном случае ресурсами системы, удобством использования и совместимостью с ранее выпущенным программным обеспечением. Для многих пользователей это неприемлемо. Поэтом очень немногие отваживаются установить WindowsNT на домашний (и даже офисный) компьютеры.
Впрочем, с появлением на рынке дешевых и достаточно высоко производительных микропроцессоров Clerion можно надеяться на изменение ситуации, но все же сегодня наиболее распространенной была и остается "домашняя" система WINDOWS 98.
В отличие от своей предшественницы WINDWOS 95, последняя обладает значительно улучшенной подсистемой безопасности. Удивительно, но это практически не афишируется фирмой MiroSoft, и более чем поверхностно освещается в документации и MSDN.
Самым главным достижением Windows 98 бесспорно является новая архитектура работы с жесткими дисками. Наконец-то драйвер последних полностью 32-битный и ни каким образом не обращается к BIOS. Трудно сказать в каких целях это было сделано - безопасности или производительности. По видимому разработчиками все же двигало последнее, но как бы то ни было предложенное ими решение заметно снизило уязвимость системы перед загрузочными и Stealth-вирусами.
Почему? Давайте рассмотрим как функционировали предыдущие версии этой операционной системы:
Прикладная программа ---int 0x21---> Операционная сист ---int 0x13--->
Вирус\DOS-драйвер.sys ---CALL far---> BIOS (BASIS I\O) ---IO 0x170--->
ЖЕСТКИЙ ДИСК
В очень упрощенном виде это показано на рисунке. Не смотря на то, что дисковые драйвера поздних версий windows были 32-битыми и могли не обращаться к BIOS-у, сервис MS-DOS int 0x21 оставался полностью 16-битным и обращался к собственным драйверам, которые в свою очередь стучались не иначе как в дисковый сервис int 0x13.
Т.е. когда DOS-приложение скажем открывало файл на диске, то вызывался обработчик int 0x13, который мог быть перехвачен не только установленными драйверами (резидентами) но и в том числе и вирусами. Поэтому последние были активны в любом DOS-окне на протяжении всего сеанса работы. Перехват int 0x13 позволял им маскировать свое присутствие на компьютере, если пользователь не предпринимал дополнительных мер.
Впервые решение этой проблемы было найдено Евгением Сусликовым. Написанная им утилита восстанавливала оригинальный обработчик int 0x13 и не позволяла его перехватывать. Приблизительно в то же время KPNC предложил более универсальное решение - драйвер, который самостоятельно обрабатывал обращения к жестким дискам, минуя BIOS. На 386+ машинах была возможность "затенить" BIOS прописав свой код на место оригинально.
Но ни одна из этих программ не получила широкого распространения, а тем временем компьютерный мир страдал от OneHalf-а и многих других не менее коварных вирусов (обе перечисленные программы легко блокировали последнего). MiroSoft же безмолвствовала и ничего кроме создания не снискавшего популярности MicoSoft Anti-Virus так и не предпринимала.
Наконец, в Window 98 этот недостаток был устранен. Сравните этот рисунок с прежней схемой вызовов:
Прикладная программа ---int 0x21---> Операционная сист ---int 0x0D--->
Защищенный 32 -режим ---VxD серв---> Дисковый 32-драйв ---IO 0x170--->
Виртуализт портов I\O ---IO 0x170---> ЖЕСТКИЙ ДИСК
Windows 98 даже в ироничном плане уже больше нельзя назвать графической настойкой над MS-DOS. Сегодня это уже самостоятельная операционная система, а MS-DOS не более чем один из ее сервисов. Дисковые функции int 0x21 теперь стучаться не в собственные, а в win32 драйвера.
С одной стороны это дает массу преимуществ (выигрыш в скорости, например), но и "отсекает" _ВСЕ_ MS-DOS драйвера для гибких и жестких дисков. Следовательно 800.com уже откажется функционировать в новой среде, (строго говоря он-то не откажется, а просто не получит управления, но от этого суть дела не измениться).
Однако возникшие неудобства с лихвой компенсируются невосприимчивостью к Stealth-вирусам, берущим на себя обработку int 13h. Они просто не получают управления, и механизм "маскировки" не срабатывает. Однако, отформатировать диск или записать "мусор" а FAT они все же могут. Разработчики Windows 98 действовали не самым согласованным образом и не закрыли приложениям доступ к BIOS-у.
win98 содержит явное улучшение - в ней все порты виртуализированы, т.е. перехватываются ядром, которые полностью контролирует доступ к аппаратуре и теоретически блокирует несанкционированные попытки доступа (например форматирование диска, запись в нулевую дорожку). К сожалению данный код реализован на "зачаточном" уровне и реально никакой защиты не обеспечивает. Более того, предоставляет BIOS-у бесконтрольный доступ к аппаратуре. Т.е. вирус, обратившись к BIOS может в обход всех систем безопасности что угодно сделать с вашим жестким диском.
Однако, это не относиться к win32 вирусам, которые в большинстве случаев не могут получить прямого доступа к аппаратуре в обход подсистемы безопасности. Это кардинально отличается от win95 в которых прикладные программы могли обойти защиту, поскольку напрямую могли обращаться к оборудованию. При этом они "видели" физические порты, не защищенные никаким виртуализатором.
Может показаться странным как прикладные программы могли получить доступ к аппаратуре из третьего кольца? Действительно в правильно спроектированной системе это невозможно. К сожалению winodws содержит ряд ошибок, которые до сих пор позволяют приложениям "всплывать" на более высокие уровни, вплоть до нулевого. Почему MicroSoft, бучи прекрасно осведомленной о последних не предпринимает никаких попыток исправить последние?
С первого взгляда позиция компании совершенно не понятна, но если задуматься, то станет очевидно, что в widows 9x любое приложение может вполне легально получить необходимый уровень привилегий, например, установив новый драйвер в системе. К чему же тогда пользоваться недокументированными возможностями и ошибками операционной системы, когда есть удобные и задокументированные способы?
Впрочем, написание драйвером под windows требует изрядной квалификации и в общем случае недоступно для рядового злоумышленника. Кроме того порча жесткого диска не самое худшее, что может случиться с компьютером. До недавнего для вирусы, портящие оборудования существовали лишь в воображении пользователей, или легендах, доставшихся нам с тех "античных" времен, когда выключением развертки можно было повредить монитор, а неправильной парковой испортить жесткий диск.
Казалось сегодня производители аппаратного обеспечения надежно защищают его от разрушительного программного воздействия. До какого-то момента так оно и было, но очередной виток технического прогресса породил те же проблемы, что и десятилетие назад.
"Первой ласточкой" была программно-перепрограммируемая BIOS (в просторечии именуемая "флеш-BIOS"). При ее созлании никто не думал о безопасности и даже не пытался защитить процесс прошивки, скажем паролем, более того, этот процесс был максимально облегчен и хорошо задокументирован.
Вирусописатели получали то, о чем раньше не могли и мечтать. Возможность "залезть" в BIOS и получать управление до загрузки системы. При этом грамотно спроектированный вирус никоим образом не мог быть обнаружен, а тем более удален из системы. Впрочем, все же это возможно только теоретически - слишком отличаются между собой чипсеты разных производителей (а каждый день появляются все новые). Никакой вирус не смог бы поддерживать хотя бы основные конфигурации, без риска вступить в конфликт с оборудованием, приводящий к неработоспособности всего компьютера.
Поэтому вирусописатели на время забыли о "флеш" пока одному из них не пришла в голову неожиданная мысль просто уничтожить содержимое BIOS. При этом компьютер откажется загружаться и единственное, что можно будет сделать - заменить флеш-микросхему, а то и всю материнсую плату, если последняя жестко припаяна к ней.
Конечно, "нормальная" операционная система не должна предоставлять доступа к оборудованию.