Свежий номер №18 (395) / Curious Basic
 
Дата публикации: 15.05.2001

Александр Захарченко, az13@mailru.com

[Полную версию статьи читайте на www.softerra.ru/review/security/9151]

Если бы строители строили здания так же,
как программисты пишут программы,
первый залетевший дятел разрушил бы цивилизацию.
Второй закон Вейнберга


Когда Microsoft критикуют за просчеты в обеспечении безопасности операционных систем Windows 9x/NT/2000, то в первую очередь указывают на значительное количество всевозможных дыр в программном обеспечении, позволяющих обойти или разрушить защитные барьеры. Сообщения об этом появляются с удручающей регулярностью и вызывают все меньший резонанс. Дыра так дыра.

Сырость ПО Microsoft нередко относят на счет ее стратегии, предусматривающей монополизацию рынка и удержание его любой ценой. Поскольку система обеспечения безопасности - это самая трудоемкая часть ОС, то в условиях жесткой нехватки времени неизбежно использование упрощенных и недостаточно проверенных алгоритмов, а ошибки превращаются в «особенности реализации конкретной версии». Еще одно следствие: концептуальные недостатки проявляются слишком поздно, и по условиям совместимости их невозможно исправить даже в проектах-потомках.

Впрочем, есть и другое предположение: программы Microsoft могут использоваться для шпионажа, так что обилие ошибок просто играет роль маскхалата. Сообщалось, что под давлением Агентства национальной безопасности (АНБ) США функции безопасности в «экспортном варианте» самого разного ПО специально ослаблялись. Немецкие правительственные организации решили вообще отказаться от продукции Microsoft, подозревая всеобъемлющий шпионаж, и ходили слухи, что так же поступило и российское «государево око». Надо полагать, что все эти структуры перейдут на Unix, вынужденно став самыми продвинутыми пользователями в мире.

«Правду бают али лгут» - окончательного ответа еще нет, и за руку все же никого не поймали. Однако несомненно одно: концептуальные решения, использованные в Windows, основательно облегчают жизнь любителям совать нос в чужие дела.

Рассмотрим, к примеру, две фундаментальные, взаимно дополняющие идеи «окон» - COM и автоматизацию. COM (модель компонентных объектов) определяет стандартный механизм, с помощью которого одна часть ПО предоставляет свои сервисы другой. Это позволяет включать в разрабатываемое приложение использование функций других программ, как если бы был доступен их исходный код. Сами же сервисы могут располагаться где угодно в пределах сетевой досягаемости (DCOM - распределенная COM). Для доступа к ним нужно знать только правила обращения (интерфейс), а поиском и активацией запрошенных функций займется операционная система.

Если приложение выполнено в виде COM-сервера, то его функциями в принципе может воспользоваться любая задача. Вот пример:

Option Explicit
Dim MyWord
set MyWord=CreateObject(“Word.Document”)
MyWord.Content.InsertAfter “Это пример автоматически созданного документа”
MyWord.SaveAs “A1Tst.doc”
set MyWord=Nothing

Эта программка на Visual Basic создаст Word-файл определенного содержания A1Tst.doc в папке «Мои документы» (директория по умолчанию для Word’а). COM-интерфейс Word предоставляет доступ ко всем своим богатейшим возможностям и позволяет запрограммировать обработку разной степени сложности. Аналогичную программу можно реализовать и на других языках (C++, Delphi и т. д.). Собственно, все манипуляции с документом выполняет Word, а наша программа должна знать только необходимые управляющие инструкции.

COM и ее конкурент CORBA возникли как промышленные средства разработки сложных распределенных систем. Их появление стало неизбежным в условиях существования проектов в миллионы строк кода. Главное достоинство этих концепций заключается в разбиении проекта на самостоятельные, логически завершенные части, каждая из которых разрабатывается самостоятельно. Это сохраняет управляемость разработкой, и при необходимости внесения изменений не требуется глобальная переделка кода. Все возрастающая сложность Windows, помноженная на желание поддерживать как можно больше быстро изменяющегося оборудования, а также взрывной рост Интернета, мания автоматизации и постоянная гонка за лидерством привели к естественному распространению COM как на саму ОС, так и на все остальные продукты Microsoft (концепции OLE и ActiveX). По этому же пути пошли и остальные разработчики ПО.

Под автоматизацией в Microsoft как раз и понимают предоставление приложениями своих возможностей в распоряжение других программ. Доступ к этим возможностям осуществляется через специальные средства разработки и макроязыки. В идеале все операции, которые можно выполнить в данной программе с помощью меню или командной строки, должны иметь своего программного двойника - примером тому служит MS Office.

За абстрактными описаниями не всегда видны достоинства новых подходов. Но вообразите, например, что нужно разработать систему сбора и анализа экономической информации. Выходные данные требуется представить в форме, понятной специалистам разного уровня, то есть в виде не простыней таблиц, а сводных рисунков, диаграмм, графиков, возможно объединенных в презентацию, и т. д. Сколько времени займет программирование отчетов с нуля? Учтите разнообразие средств мультимедиа, форматов документов и прикиньте, сколько дополнительно потребуется для оформления всего этого специалистов, которые к сути проекта будут иметь весьма отдаленное отношение. А ведь все необходимые «запчасти» уже есть, и не в библиотеках программ, а в готовом виде. Достаточно задействовать COM-интерфейс MS Office - и в вашем распоряжении вся мощь этого пакета. Сокращаются сроки разработки, основное внимание уделяется собственно проектным алгоритмам, а не форматам и согласованию вывода, заказчику же достаются высокопрофессионально оформленные в привычной для него среде материалы, которые можно изменять по своему вкусу. Кроме того, заказчик не будет привязан к какой-либо версии Office и сможет даже безбоязненно обновлять его.

Обычному продвинутому пользователю, далекому от тонких технологий программирования, COM-автоматизация тоже значительно упрощает работу. Многие работают с составными документами (OLE-механизм), в которых сохраняется возможность редактировать многоуровневые вложения объектов (рисунки, таблицы и т. д.) в программах, где они были созданы. При весьма скромных затратах на обучение с помощью макросов и скриптов (сценариев) можно расширить функциональность программ и автоматизировать повторяющиеся действия. В сетевых приложениях появляются обширные возможности объединять мощности произвольного числа компьютеров.

Ядром автоматизации Windows Microsoft выбрала Visual Basic (VB). Это целое семейство программных инструментов. Тут и собственно VB - средство разработки приложений различной степени сложности. Далее - VBA (VB for application) - основное средство автоматизации MS Office, а также любых других приложений, которые пожелают воспользоваться им (например, Corel Draw). Особенности реализации VBA сделали его любимым инструментом вирусописателей. И наконец, VBS (VB script) - фактически макроязык операционной системы и одновременно средство автоматизации HTML (конкурент JavaScript). Его услугами также могут воспользоваться разработчики других приложений 1. Уже по традиции VBS вошел в состав инструментария для разработки вирусов - I love you представляет собой именно такой скрипт.

Подвиды VB уже сливаются, с определенными переделками возможен перенос кода из одной формы в другую, а выпуск VB.NET приближает Рис. 1. Word в роли командного процессора.объединение. В результате программы с «прикрученным» VB приобретают весьма любопытные свойства. Вот Word 2000 обнародует список всех выполняющихся в данном компьютере процессов (см. рис. 1), заодно раскрывая структуру каталогов.

Макрос, который это делает, вы, как обычно, найдете в полной версии статьи на сайте «SoftТерры», и работает он и под Win9x, и под NT.

Интересно, а зачем этот список вообще нужен редактору Word? Какие еще дополнительные задачи он (и не только он) может решать? Ведь зная, что выполняется, можно с помощью TerminateProcess пинком вышвырнуть защитные программы типа AtGuard 2 (кстати, IAMAPP.EXE тоже является COM-сервером). В NT, конечно, понадобятся права PROCESS_TERMINATE, но уж зато на Win9x никаких проблем не будет, и не спасут никакие пароли, которые бяка-сисадмин или хозяин машины поставят…

Редактор Visual Basic из MS Office представляют собой мощнейший командный процессор с приличными подсказкой и отладчиком. Мы совершенно неожиданно обнаруживаем командную консоль, и с какими возможностями! Я уже писал о проблеме получения списка выполняемых процессов в Windows 9x. И вот те на! Нормального Task Manager таки нету, но все, кто пожелает, могут выполнять его функции. И это лишь полбеды! Благодаря COM обеспечивается доступ ко всем командам извне, то есть любая внешняя программа может запросить сделать за нее то, что она сама не может выполнить, что ей запрещено или чего она не хотела бы делать сама, чтобы не обнаружить себя раньше времени. Так поступают многие почтовые вирусы - не связываясь с паролями, портами и прочими иногда охраняемыми вещами, они просят имеющийся почтовый клиент отправить письма с прицепленным кодом. Поскольку почтовые программы обычно запоминают необходимые данные для авторизации и отправляют письма немедленно, то, пока пользователь заметит неладное, уже будут разосланы десятки и сотни копий.

«Изюминка» VBS-вирусов помещается в десяток строк, и запрограммировать можно все, что угодно. В полной версии статьи вы найдете еще несколько скриптов: один обеспечивает рассылку «ответов» на все непрочитанные сообщения из Рис. 2. AtGuard не спит?папки Входящие Outlook Express (OE) 4/5, другой позволяет отключить систему безопасности Word, сбрасывает подтверждение изменений шаблона Normal и впихивает в него макрос… Дальше, я думаю, все и так ясно.

Еще один приведенный скрипт закачивает с указанного http-адреса и сохраняет файл с помощью Word’а. Самое интересное, что, если компьютер сторожит программа AtGuard, то и поймает она именно Word (рис. 2), а злоумышленник остается в тени.

Что еще можно сделать с применением подобной технологии? Допустим, можно попросить IE просмотреть свой кэш на предмет поиска нужных файлов. Вполне возможно, что, если попросить очень хорошо, то он еще и согласится сам их выслать в заданный адрес, ему ведь в Интернет всегда открыта дорога… Можно генерировать мусорный трафик (DoS и DDoS) чужими руками, да мало ли что еще можно придумать!

Это оборотная сторона COM-автоматизации. Идея, прекрасно подходившая для ограниченных по масштабу локальных сетей, вырвавшись на бесконечность Интернета, превратила Win9x/Me в проходной двор. Сейчас для троянской программы самая тяжелая задача - заинтересовать пользователя. А уж проникнув в систему, чужой код фактически получает полный контроль над компьютером, поскольку, во-первых, для настройки имеющихся функций безопасности от пользователя зачастую требуются специальные знания, а во-вторых, нередко при переустановке приложения оно… восстанавливает установки COM-безопасности по умолчанию (!), распахивая «ворота» настежь. Поэтому не стоит удивляться, если ваша навороченная супербухгалтерия вдруг по собственной инициативе вышлет отчет «на деревню дедушке» или криптографическая система станет раздавать пароли всем любопытствующим. Впрочем, многие этого и не заметят.

Хотя NT/2000 гораздо лучше защищена, не стоит думать, что переход на нее решает все проблемы. Действительно, существует множество security-настроек для COM (DCOM) 3, утилита DCOMCNFG позволяет ограничивать доступность соответствующих приложений в сети, аудит фиксирует, кто и куда лазил, и даже отлавливает истинного злоумышленника. Но в пределах одного компьютера все равно остается некая неопределенность, и если пользователю позволено запускать конкретные приложения, то их COM-функции могут оказаться доступными для троянских программ. Следовательно, на админа ложится дополнительная нагрузка по выяснению того, какие функции предоставляются в общее пользование, сколь они необходимы для работы, а также оценка их потенциальной опасности.

К тому же чем больше ограничений для пользователей вводит системный администратор, тем больше работы он делает вместо них, одновременно ухудшая личные взаимоотношения. Вообще хоть какая-то дисциплина в сети поддерживается ныне в очень редких местах, в основном там, где есть финансовые риски. В прочих же сетках пользователи то и дело норовят притащить какую-нибудь, весьма полезную, по их мнению, гадость. Но стоит ограничить свободу юзеров - и все нарекания за несделанную работу лягут опять же на заботящегося о безопасности админа, ведь тот же Office шагу без COM-автоматизации не ступит, и ее отключение возвращает подобные программы на уровень начала 1990-х годов.

Основная же угроза безопасности заключается в компьютерах больших боссов, которым урезать приоритет весьма накладно. Вот и получается, что проникший в систему троянский код, не выходя за скромные полномочия пользователя, может найти себе союзника среди используемых программ. В итоге, если какое-либо злонамеренное действие потенциально может выполнить зарегистрировавшийся пользователь, то оно доступно и «засланному казачку» (к тому же времени у него поболе и по сторонам оглядываться не нужно). Комбинированные атаки с использованием «пятой колонны» могут стать очень эффективным оружием - достаточно посмотреть хронику VBS-вирусов.

Вроде бы пока еще можно отключить VBS через «Установка и удаление программ® Установка Windows» - но, допустим, в моей версии Win98SE все его хозяйство остается на диске, записи из Реестра не удаляются и .vbs-файлы продолжают Рис. 3. Неполный список COM-серверов.исполнятся. Разве что убить WINDOWS\WScript.exe и WINDOWS\COMMAND\CScript.exe, так для скриптов в HTML существуют отдельные движки, и отключать их становится все проблематичней, поскольку ActiveX-технологии прочно укрепились на Web-страницах.

Получается, что устанавливаемая программа может в любой момент притащить с собой Script ActiveX Control от Microsoft или еще что-нибудь очень активное и нужное для нее. И - не Basic’ом единым - в системе возникает еще один потенциальный «черный ход». А если он окажется действующим, то авторы просто сошлются на ошибки реализации или посоветуют улучшить защиту… Мол, на то и хакеры, чтобы админ не дремал, а уж с COM-автоматизацией от Microsoft ему точно спать не придется (рис. 3).

Напоследок хочу посоветовать читателям книгу нобелевского лауреата по физике Ричарда Фейнмана «Surely You’re Joking, Mr. Feynman!» («Вы, конечно, шутите, мистер Фейнман!») 4. Почитайте главы об обеспечении безопасности внутри «Манхэттенского проекта», а потом посмотрите на Windows. Может, это уже генетические особенности?

P. S. В рамках рекламной кампании Windows XP Microsoft объявила о «войне с враждебным кодом» (war on hostile code). «Вы не должны заботиться о безопасности, так как система уже ее обеспечивает», - заявил менеджер центра по безопасности Стив Липнер (Steve Lipner). Чудесно, значит, теперь компьютер зазевавшегося юзера можно будет взломать с помощью стопроцентно безопасного кода…

[i39540]


1 (обратно к тексту) - Подробнее на www.softerra.ru/review/technologies/microsoft/6210.
2 (обратно к тексту) - Подробнее на www.softerra.ru/review/security/5737.
3 (обратно к тексту) - Подробнее на http://msdn.microsoft.com/library/psdk/com/security_2fw3.htm.
4 (обратно к тексту) - Фрагменты перевода доступны в библиотеке Мошкова.


Александр Захарченко
az13@mailru.com
 


<< Сновальная машина
Все материалы номера
Музыку, музыку! Все кувырком… >>