Сергей Яремчук
Защищаем Windows-системы с помощью CORE FORCE
Несмотря на все заявления разработчиков, Windows так и не стала сверхзащищенной системой, способной противостоять современным угрозам. И вряд ли ктото уверен, что традиционно используемые средства защиты способны полноценно защитить компьютер от неизвестных 0-day-атак. Только комплексный подход способен решить эту проблему.
В UNIX-подобных операционных системах давно известны решения, позволяющие остановить неизвестную атаку путем принудительного ограничения рабочего пространства приложения, глобально через chroot или более тонко RSBAC, LIDS и пр. В последнем случае поступают очень просто. Запускают приложение и наблюдают, к каким файлам происходит обращение и какой режим – чтение/запись – требуется. Затем в результате создается профиль приложения, который и описывается в виде правил, контролируемых на уровне ядра. Если приложение попробует выйти за указанные рамки, то такое действие в зависимости от настроек может быть запрещено. Безотказно в UNIX действуют и утилиты контроля целостности. Стоит только измениться какому-то важному файлу, как администратор будет оповещен. Но для Windows реализовать такую вроде бы довольно простую систему как-то не решались. Причин здесь, вероятно, много, и сказать, какая из них является решающей довольно трудно. В UNIX и Windows не только разные архитектуры, но и строение файловой системы. Так, в UNIX все исполняемые файлы согласно стандарта файловой системы традиционно собраны в одном месте (/bin, /sbin и пр.), статические конфигурационные – в другом, а растущие журналы – в третьем, пользователи также ограничены своим рабочим пространством. Это все довольно легко описать при помощи простых правил. В Windows все несколько сложнее. Файлы раскиданы по разным каталогам, настройки могут сохраняться не только в разные ветки реестра, но и в индивидуальных конфигурационных файлах. Все это порождает некий бардак, так как программа должна иметь доступ во множество мест, что отследить гораздо труднее, да и пользователь традиционно имеет самые высокие права в системе. Также не вызывает сомнений, что UNIX-пользователь, подготовлен на порядок лучше пользователя Windows, который обычно полностью полагается на работу мастеров, часто не вникая в подробности. Поэтому последний скорее всего не будет в восторге от того, что придется описывать поведение для каждой устанавливаемой им программы. А если их десятки? Но должен же быть выход?
Подход CORE FORCE
Вероятно, разработчиков CORE FORCE [1] эти и другие проблемы не смогли остановить, и была создана система, которая при правильной настройке способна решить задачу по защите персонального компьютера от вирусов, известных и неизвестных уязвимостей, шпионских программ, червей, троянских программ и прочих подарков, которыми традиционно богат сегодняшний Интернет. CORE FORCE представляет собой несколько нетрадиционное решение по обеспечению безопасности персональных компьютеров, работающих под управлением Windows 2000 и XP.
Это узловая система предотвращения атак (host-based Intrusion Prevention System – H-IPS) с интегрированным сетевым экраном. Контролируется четыре основных параметра: входящие и исходящие сетевые пакеты, доступ к файловой системе и реестру, целостность исполняемых файлов. Эти возможности могут быть сконфигурированы как на системном, так и прикладном уровнях для специфических программ (почтовых клиентов, веб-браузеров, видео- и аудиопроигрывателей и пр.). Каждому приложению можно дать доступ к определенным частям файловой системы и реестра, со строгим ограничением прав, только на чтение или возможность модификации объектов. Также определяется разрешенная конкретному приложению сетевая активность.
CORE FORCE бесплатен как для некоммерческого, так и для коммерческого использования. Распространяется по лицензии Apache 2.0 (http://www.apache.org/licenses/LICENSE2.0). Все профили безопасности, доступные в сообществе CORE FORCE или поданные зарегистрированными пользователями, распространяются по Creative Commons лицензии (http://creativecommons.org/licenses/by-ncsa/2.5), гарантирующей, что все могут пользоваться этими профилями и создавать на их основе свои.
Принцип работы CORE FORCE
CORE FORCE состоит из нескольких модулей, контролирующих определенные компоненты на предмет имеющихся разрешений. В настоящее время доступны три таких модуля, работающих в режиме ядра контролирующих сетевых соединений, защищающих файловую систему и реестр (рис. 1). Кроме того, имеются два дополнительных модуля Policy Developer и Force Repository, работающих в пространстве пользователя. Первый обеспечивает пользовательский интерфейс для настройки профилей защиты программ, запускаемых на компьютере. Работающий в виде системного сервиса LocalCPA.exe модуль Force Repository предназначен для хранения конфигураций обо всех разрешениях для всех профилей безопасности, обеспечивает поддержание базы в целостности, обновление ее через Policy Developer, импорт и экспорт профилей безопасности.
Рисунок 1. Взаимодействие модулей CORE FORCE
Централизованное управление загрузкой в память базы данных, которая содержит все разрешения, обеспечивает диспетчер (dispant.sys), также работающий в пространстве ядра. Кроме того, диспетчер обеспечивает API, позволяя подключить при необходимости любые другие модули контроля. Диспетчер играет роль посредника между модулями защиты, выполняющимися в пространстве ядра, и модулями, работающими в пространстве пользователя.
Например, сетевой модуль получает сведения о попытке получения доступа программой, запрос на подтверждение этого действия отсылается диспетчеру. Если в базе данных диспетчера записано, что такое действие необходимо запретить или разрешить, ответ отсылается обратно. Если решение принимает пользователь, то диспетчер связывается с Policy Developer и ожидает ответа. Диспетчер минимизирует использование памяти, загружая только необходимые в данный момент разрешения для текущего уровня безопасности. Хранение разрешений на том же уровне, на котором работают модули защиты, позволяет минимизировать потери на переключение контекста из режима ядра в режим пользователя. Кроме того, диспетчер переводит переменные в свои фактические величины, т.е. например, расшифровывает полный путь к файлу.
Модуль межсетевого экрана фильтрует сетевые пакеты, основываясь на инструкциях, соединяет программу с соответствующим текущему профилю безопасности набором правил, которые загружаются во время запуска программы.
В качестве фильтра пакетов используется порт OpenBSD Packet Filter (PF). Реализация CORE FORCE включает два драйвера. Основную функциональность берет на себя miniport driver (croxy.sys), использующий стандарт NDIS (Network Driver Interface Specification) API для связи драйверов сетевых карт с приложениями операционной системы. Этот драйвер, располагаясь внизу сетевого стека, контролирует все входящие и исходящие сетевые пакеты, защищая в том числе и стек операционной системы.
Другой драйвер (tdifilter.sys, TDI – Transport Dispatch Interface) работает на более высоком транспортном уровне, помогая NDIS отслеживать сетевые связи каждого процесса, синхронизировать запросы для разрешенных пользовательских соединений. Драйвера, защищающие файловую систему и реестр, имеют аналогичное функциональное назначение для своих типов объектов. Располагаются в alpha2.sys и alpha2r.sys. Из-за своей позиции в операционной системе они могут перехватывать системные вызовы процессов, пытающихся получить доступ к любому файлу или объекту реестра, а также вызовы, которые были сделаны компонентами ядра.
Организация профилей безопасности
Описание работы будет неполным без рассказа об организации профилей безопасности. Действительно, установка всех разрешений для большого количества приложений при неправильном подходе может свести на нет все усилия. Пользователь может просто запутаться и либо забросить настройку системы, либо настроить ее неправильно. В CORE FORCE конфигурация разрешений сделана таким образом, чтобы обеспечить максимальную гибкость и возможность их повторного использования. Так, для установки разрешений, которые могут быть применены к любой программе, можно использовать 2 комплекта: системный и индивидуальный. Если конкретной программе не указаны разрешения, то будет использоваться встроенный, т.е. системный набор разрешений. Такие наборы разрешений группируются в профили безопасности, позволяющие программе нормально работать, но в то же время иметь доступ только к разрешенным объектам. Но в разных условиях (доверенная сеть, Интернет, запуск непонятной утилиты) могут потребоваться различные разрешения, как более жесткие блокирующие, всякую подозрительную деятельность, так и легкие, не отвлекающие при работе.
Для более гибкой их организации каждый профиль безопасности имеет набор уровней безопасности: High, Medium, Medium-Low, Low и Custom.
Каждый сконфигурирован с таким расчетом, чтобы обеспечить необходимый баланс. Пользователю в большинстве случаев достаточно просто выбрать необходимый уровень, не вникая в подробности, а просто почитав описание (рис. 2). Гибкости этой схеме добавляет то, что уровень безопасности выставляется не один на всех, а используется более индивидуальный подход. То есть можно системный уровень выбрать одним, программам же выставить другие уровни. И теперь при открытии документа Acrobat Reader не будет каждый раз запрашиваться разрешение, а почтовый клиент для отправки и приема почты будет использовать только указанные сервера и спрашивать подтверждение на большинство потенциально опасных операций (запись в реестр, например).
Рисунок 2. Выбор уровня безопасности
Кирпичиками, на которых строятся профили безопасности, являются разрешения. Разрешения применяются к сетевым ресурсам, файлам, реестру, обеспечивая полноценную основу для защиты программ. Если запрос подходит под правило, то к объекту могут быть применены различные действия block или no (блокировать), pass или yes (разрешить), ask (спросить подтверждение), inherit (наследовать системные настройки). Не говоря уже об опциях запроса. Здесь и протокол, TCP-флаг, IP-адрес и порт источника/приемника, сетевой интерфейс, каталог, файл, ветка реестра и пр., которым необходимо разрешить определенные действия: получение списка файлов, чтение, запись, удаление или выполнение. Дополнительно можно включать журналирование определенных событий и еще много других полезных опций.
Поэтому конфигурирование при помощи разрешений является несколько непрактичным. Ведь если программа не должна писать в системную область, то в Windows придется описывать довольно много объектов. А если то же самое затем придется делать и для другой программы? Проще сгруппировать все разрешения, предназначенные для определенных целей в некий блок, который затем можно многократно использовать. И если придется изменять некие параметры (добавить каталоги, указать правила фильтрации и т. п.), то это необходимо будет сделать только в одном месте. Такие блоки называются «политики» (policies).
Теперь при создании нового профиля безопасности достаточно собрать подходящие политики и указать уровень безопасности, для которого они должны применяться. CORE FORCE уже имеет некоторое количество встроенных политик, предназначенных для самых разнообразных операций. Конечно же, их можно создавать и самому, как самостоятельно, так и используя уже имеющиеся и связывая их через Assigned Policies. При создании политике желательно дать название, которое будет описывать его функциональное назначение. Например, такие имена говорят сами за себя «Network. Send and receive mails» или «Cannot execute from temp (confirmation required)».
Разрешения конфигурируются только в политиках, если две политики (разрешения) назначены на один и тот же объект, последний аннулирует предыдущий, то есть фактически политики прилагаются в порядке объявления. Например, если в одной политике запрещен доступ к каталогу, а в последующем разрешен, то в итоге доступ будет все-таки разрешен. Именно поэтому в некоторых политиках (чаще в сетевых) доступ сначала запрещается для всего (Protocol – Any, Address – Any, Direction – Any и т. д.). А в последующих правилах разрешения ослабляются, открывая доступ к тому, что действительно необходимо. Для файлов чаще проще поступить наоборот, т.е. сначала все разрешить, а потом запретить доступ к системным каталогам. При необходимости очередность разрешений в политике можно изменять при помощи стрелок. В отдельном пункте «Permissions» можно указать свои параметры, которые будут иметь более высокий приоритет перед всеми остальными вне зависимости от выставленного уровня безопасности. Разрешения можно копировать в другие профили.
Естественно, созданные политики могут многократно использоваться для описания профилей безопасности различных программ. Такие многократно используемые политики создаются и сохраняются в отдельной вкладке «Shared Policies». Итак, текущая конфигурация безопасности приложения и системы будет определена исходя из настроек трех уровней: Security Profile (Program/System) – Security Levels – Policies.
Как видите, создание профиля безопасности хоть и максимально продумано, но обычный пользователь вряд ли будет этим заниматься. Поэтому одной из задач проекта было создание общества экспертов, в обязанность которых будет входить и разработка готовых профилей безопасности. Сейчас в репозитории проекта можно найти около сотни профилей для наиболее популярных программ (ICQ, IE, GPG, Mozilla Firefox и Thunderbird, FlashGet и другие). Каждый из них включает имя профиля (часто название программы), ник разработчика, рейтинг, дату последнего изменения и краткое описание. В Policy Developer реализован импорт и экспорт профилей безопасности посредством удобных для восприятия человеком XML-файлов с расширением CFX.
Например, политика, запрещающая модификацию системных файлов, выглядит так.
<Policy Name="General. Don’t modify the Operating System">
<Documentation>This policy denies to write and delete files and folder inside the windows and programs folder.</Documentation>
<Permissions>
<FileSystem>
<Permission Delete="No" Log="Failed" Recursive="Yes" Write="No">
<PredefinedFolder Name=»ProgramFiles»/>
</Permission>
<Permission Delete="No" Log="Failed" Recursive="Yes" Write="No">
<PredefinedFolder Name="Windows"/>
</Permission>
</FileSystem>
</Permissions>
</Policy>
А сетевая политика, разрешающая исходящие соединения по протоколу SMB, выглядит так.
<Policy Name="Network. Outgoing SMB">
<Documentation>This policy enables outgoing SMB connections.</Documentation>
<Permissions>
<Firewall>
<Rule Direction="Both">
<Allow Stateful="No"/>
<UDP>
<Source Port="netbios-ns"/>
<Target Port="netbios-ns"/>
</UDP>
</Rule>
<Rule Direction=»Outgoing»>
<Allow/>
<TCP>
<Target Port="smb"/>
</TCP>
</Rule>
<Rule Direction="Outgoing">
<Allow/>
<TCP>
<Target Port="netbios-ssn"/>
</TCP>
</Rule>
</Firewall>
</Permissions>
</Policy>
Более сложные политики занимают несколько экранов, но на общей читаемости это не сказывается, всегда можно понять принцип его работы. Для удобства переноса между компьютерами используются переменные, как общесистемные вроде [ProgramFiles], так и устанавливаемые пользователем. Например, моя локальная сеть выглядит так.
<Alias Confidential="Yes" Name="Local Network">
<Address>
<Single Value="192.168.1.0"/>
</Address>
</Alias>
После переноса в новую систему достаточно только изменить значение переменных на актуальные для текущего компьютера. Для программ, еще не имеющих подготовленный профиль безопасности, предусмотрен режим обучения.
Совместимость и системные требования
Компьютер Celeron 633 с 256 ОЗУ и установленным Windows XP SP2 заметно притормаживает при работе с CORE FORCE. Поэтому предложенные разработчиками минимальные системные требования – Pentium III 800 и 128 ОЗУ, – можно считать, выбраны обоснованно. Но это еще не все неприятности. CORE FORCE вмешивается в работу сетевых и системных сервисов, что не может нравиться антивирусным программам и межсетевым экранам. На странице проекта [4] имеется список совместимости (и несовместимости тоже) таких программ. В последний попали такие продукты, как Norton Antivirus 2004, Sophos Anti-Virus 5.05 и Panda Titanium 2006 Anti-Virus + Antispyware v5.0.1.00 (на сайте указано, что не работает в Windows 2000 SP4, зато работает с Windows XP SP2). Разработчики обещают постепенно устранить проблемы. Список совместимых программ немного больше: AVG Anti-Virus (на сайте указана версия 7.0.334, у меня более старая 6.0.754 работала также без проблем), Kaspersky Anti-Virus Personal v5.0.388, BitDefender Free Edition v8, MCAFEE VirusScan 2006 v10, Sophos Anti-Virus v5.05, NODE32 v2.5, eTrust EZ Antivirus v7.0.8.1, F-Prot Antivirus v3.16c и Trend Micro PC-Cillin Internet Security 2005 v12.0 и 2006 v14.0.
Как видите, в списках одни антивирусы. Но у меня после установки CORE FORCE намертво завис Outpost версий 2.5 и 3.0. Возможно, и случайность, но нормально работать он начал только после полной очистки системы от следов CORE FORCE. И еще один неприятный момент, о котором написано на сайте, и эксперименты это подтвердили. CORE FORCE игнорирует работу с PPPoE, в том числе и ADSL. Сетевой модуль защиты просто не видит это соединение, хотя соответствующий драйвер во вкладке «Свойства» просматривается, но модули защиты файлов и реестра по-прежнему работают. В текущей версии 0.70.105 не предусмотрена какая-либо защита настроек или привязки к конкретному пользователю, поэтому защитить систему от действий пользователя, обладающего какими-либо правами в системе, при помощи CORE FORCE не получится. Такие возможности планируются в будущих релизах. Хотя сочетание системных настроек и CORE FORCE на порядок поднимает общую защищенность компьютера.
Установка CORE FORCE
Установка является стандартной для Windows. Скачиваем исполняемый файл размером 8,72 Мб и запускаем. В процессе установки программа автоматически скачивает пакет Windows Installer [3], если нет соединения с Интернетом, либо планируется применение CORE FORCE на нескольких компьютерах, этот пакет необходимо скачать и установить самостоятельно. В процессе установки появится сообщение о кратковременном отключении соединений с Интернетом и просьбе закрыть все соединения. В моем случае соединение с Интернетом так и не восстановилось (вероятно, из-за проблем с Outpost).
Если установка производилась в Windows XP, то появится еще одно сообщение (рис. 3) о том, что нет сертифицированной подписи на ПО. Здесь подтверждаем установку. В процессе установки будет проведен поиск известных программе утилит и сравнение сигнатур, в результате пользователю будет выведен результат (рис. 4). Ответ «No» говорит, что такая программа не найдена, «Yes» – программа найдена и контрольная сумма совпадает с имеющейся в базе данных. Но, скорее всего, вы получите ответ «Yes, but signature is invalid», говорящий о том, что программа найдена, а контрольная сумма не совпадает. Это не означает наличие вируса или чего-нибудь еще. Скорее всего дело в другой версии утилиты. Обновить сигнатуры для всех найденных программ можно, поставив галочку в «Update unrecognized signatures to match those found on your computer». Следующим шагом программа запросит указать сетевые настройки (Local Network, Broadcast, DNS), которые можно затем отредактировать, зайдя в Aliases. После перезагрузки в трее появится еще один значок, по щелчку на нем можно активировать, деактивировать CORE FORCE и вызвать Policy Developer для настройки. А во вкладке «Свойства сетевого соединения» появится новый драйвер «Сore Force Network Driver».
Рисунок 3. Во время установки необходимо подтвердить неподписанный драйвер
Рисунок 4. Программа установки ищет известные программы
В особо тяжелых случаях система после установки CORE FORCE может не захотеть загружаться. Для устранения этого необходимо перейти в Safe Mode, нажав при загрузке, и воспользоваться Core Force Recovery Console (RecoveryConsole.exe), который поможет деактивировать драйвера и отключить автоматический старт CORE FORCE при загрузке.
Работа с CORE FORCE
Окно Policy Developer, показанное на рис. 5, визуально разделено на две части. В левой части, состоящей из двух вкладок General и Shared Policies, выбираются профили безопасности, политики, разрешения, добавляются и убираются новые программы в список контроля. В правой части производятся просмотр и настройка соответствующих параметров.
Рисунок 5. Окно настройки Policy Developer
Если выбран режим настройки разрешений, то правое окно будет состоять из трех вкладок: Firewall, File System и Registry, в которых выставляются разрешения для соответствующих модулей. В каждой вкладке доступны два режима просмотра. Например, для межсетевого экрана разрешения можно просматривать в виде правил PF либо их расшифровку. Пункт «System – Aliases» покажет все переменные, известные программе (отдельно сетевые и файловые). Здесь же по двойному щелчку их можно редактировать.
Например, на рис. 6 показан процесс настройки одной из сетевых переменных. В качестве параметра можно ввести значение, имеющее смысл (IP-адрес компьютера или сети, сетевую маску, имя) или Any, означающее любое. Если выставить галочку в «Confidential (Don’t save content on export)», то при экспорте настроек эта переменная не будет выводиться в результирующий файл. Отследить текущие события можно, зайдя в Activity Monitor, имеющую две вкладки Logs и Processes. Для удобства отбора определенных событий можно воспользоваться фильтром. Кроме того, все программы, доступные из Policy Developer, также имеют свой Activity Monitor, показывающий события, относящиеся к конкретной программе.
Рисунок 6. Настройка сетевой переменной
Для примера настроим правила для почтового клиента Mozilla Thunderbird. Выбираем в левом окне в разделе Programs Mozilla Thunderbird. Если его нет в списке найденных программ, например, она устанавливалась позже, сначала прописываем ее. Для этого нажимаем на панели инструментов «Create» либо щелкаем правой кнопкой, и появляется меню «Add new program…».
Запускается мастер, помогающий добавить новую программу в список. Первым шагом указываем на исполняемый файл (рис. 7).
Рисунок 7. Выбор исполняемого файла добавляемой программы
Далее мастер предлагает два варианта действий: найти профиль безопасности на сайте CORE FORCE (Search in CORE FORCE Community (recommended)) или создать его самому (Add new program configuration) (рис. 8). При выборе первого пункта будет произведен поиск на сайте, в результате чего может быть предложено несколько вариантов профилей. В нашем случае их два, с одинаковым рейтингом (рис. 9).
Рисунок 8. Выбор вариантов создания профиля безопасности
Рисунок 9. Некоторые приложения имеют несколько вариантов профилей
Если готового профиля нет, то выбираем самостоятельное создание профиля безопасности. При этом будет предложен запуск Learning Wizard с тремя вариантами использования программы (рис. 10).
Рисунок 10. Выбор уровня исследования программы мастером самообучения
Итак, после закачки профиля переходим к настройке в основном окне программы. Выбираем Mozilla Thunderbird в Programs и заходим в Launch Control (рис. 11).
Рисунок 11. Установка контрольной суммы
Контрольная сумма в установленном профиле не совпадает с нашей, т.к. профиль безопасности создавался для версии 1.0.2, я использую более новую 1.0.7. Нажатием на «Add Signature» добавляем новую контрольную сумму в базу. Для контроля настроек выбираем пункт «Permissions». Если зайти во вкладки «File System» и «Registry», то можно обнаружить, что разрешения запрещают записывать, удалять, выполнять, а в некоторых случаях и читать файлы в основных системных каталогах.
Правила фильтрации сетевых пакетов смотрим в Firewall. Разрешения, установленные по умолчанию, показаны на рис. 12.
Рисунок 12. Правила фильтрации для Mozilla Thunderbird
Все, что подсвечено серым цветом, изменять нельзя, если какое-либо из них вас не устраивает, то его можно переопределить, добавив новое правило и поместив ниже. Теперь если правило требует подтверждение действия пользователя, то ему будет выведено соответствующее сообщение (рис. 13, 14, 15).
Рисунок 13. Запрос при изменении сигнатуры Mozilla Firefox
Рисунок 14. Запрос на подтверждение изменения ветки реестра
Рисунок 15. Подтверждение сетевой активности программы
Пользователь может его однократно подтвердить (Allow) или запретить (Deny). Выбрав «Add a permanent rule in System» (здесь могут быть варианты, но сводятся они к одному и тому же), можно создать новое разрешение на основе вашего ответа. В этом случае при совпадении запроса CORE FORCE следующий раз не будет вас беспокоить.
Все настройки в пределах одной статьи описать невозможно. На сайте проекта найдете несколько пошаговых руководств, описывающих создание разрешений для простейших приложений, которые помогут во всем разобраться.
Вывод
В последнее время явно наметилось оживление «альтернативных» приложений, защищающих Windows, в которых разработчики смотрят на проблему со стороны приложения, а не конкретной уязвимости. Очевидно, рабочую среду приложения проще предугадать, чем сигнатуру неизвестного вируса. Создание сообщества CORE FORCE только упрощает эту процедуру, а пользователю теперь нет необходимости в каждодневном обновлении системы и антивирусных баз. CORE FORCE – яркий пример того, как можно защитить систему, не зная ничего об угрозе.
Ссылки:
- Сайт программы CORE FORCE – http://force.coresecurity.com.
- Яремчук С. Проактивные системы защиты, или Есть ли жизнь без антивируса? – Журнал «Системный администратор», №7, 2005 г. – 9-13 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=07.2005;a=04).
- Пакет Windows Installer – http://www.installengine.com/cert02/isengine/isscript.msi.
- Known Issues & Compatibility List – http://force.coresecurity.com/index.php?module=articles.