Кроме того, обладание этими кодами дает возможность внедрять вредоносные программы на самый глубокий уровень операционной системы, по сути делая их частью Windows. В частности, становится возможным создание нового поколения вирусов-невидимок, контролирующих взаимодействие с антивирусами и межсетевыми экранами для сокрытия своего присутствия.
«Лаборатория Касперского»
о последствиях утечки исходных
кодов операционной
системы Windows.
13.02.2
Знакомимся с арсеналом хокеров |
Однажды в одной из моих исследовательских сетей (honeynet) возникло подозрение на возможный взлом системы. Межсетевой экран зафиксировал несколько исходящих TCP-соединений, система обнаружения атак идентифицировала в одном из соединений признаки приглашения интерпретатора командной строки, а в системных журналах взломанного сервера появилась запись об остановке антивирусной программы. Немного подождав, я сделал резервную копию сервера, установил обновление, устраняющее использованную взломщиком лазейку, после чего загрузил сервер и снова подключил его к Internet. Через некоторое время в мой почтовый ящик поступило сообщение от антивирусной программы, в котором говорилось, что на сервере был обнаружен вирус. Каково же было мое удивление, когда при попытке скопировать указанный антивирусом файл я его не обнаружил! Так началось мое знакомство с rootkit для Windows.
Что такое rootkit?
Термин rootkit пришел из мира UNIX и изначально им обозначался набор инструментов, необходимый злоумышленнику после того, как он получил права суперпользователя (root) в атакуемой системе. В процессе развития rootkit претерпели ряд изменений, и их основной задачей стало сокрытие деятельности взломщика от администратора системы. Сначала появились специальным образом модифицированные системные утилиты, такие как ls и netstat, которые фильтровали полученную от ядра операционной системы информацию и не отображали папки, файлы и открытые порты, используемые взломщиком. Затем rootkit начали внедряться в само ядро операционной системы, подменяя основные системные функции.
Таким образом, rootkit можно определить как программу или набор программ, основной целью которых является сокрытие действий злоумышленника в пораженной системе. Современные rootkit работают на уровне ядра, в связи с чем их часто называют «троянскими программами уровня ядра» (Kernel Level Trojan, KLT).
Что умеет rootkit?
Первые rootkit для Windows появились в конце прошлого века. Большинство из них могут прятать от пользователя файлы, папки и разделы реестра, скрывать запущенные программы, системные службы, драйверы и соединения. Злоумышленник имеет возможность создавать файлы и разделы реестра, запускать программы, работать с сетью, и эта активность не будет обнаружена администратором. Некоторые из них позволяют скрывать от подсистемы аудита операционной системы действия указанных процессов.
Кроме того, rootkit могут маскировать сетевую активность путем модификации стека протоколов TCP/IP. Так, например rootkit Hacker Defender перехватывает вызовы Winsock и может обрабатывать сетевой трафик до того, как он будет передан приложению. С точки зрения администратора, это выглядит следующим образом. Предположим, злоумышленнику удалось запустить Hacker Defender на сервере, где установлен Internet Information Server. Межсетевой экран ограничивает доступ к серверу только 80-м и 443-м портами. Пользователи Internet работают с Web-сервером, и никаких нареканий с их стороны не возникает. В то же время с сервером может работать и злоумышленник, используя тот же TCP-порт № 80.
Для организации сетевого взаимодействия клиентская часть «троянской» программы посылает специальным образом сформированный запрос на 80-й порт, который распознается серверной частью rootkit и передается интерпретатору командной строки. Стандартные же запросы HTTP передаются непосредственно серверу IIS.
Как это работает?
В мире Windows реализовать идею c подменой системных файлов оказалось довольно сложно. Это связано с рядом факторов, например с отсутствием исходных кодов системы, недостаточным описанием ее устройства и наличием встроенных средств контроля целостности.
Создатели rootkit для Windows пошли другим путем. Вместо модификации модулей операционной системы на жестком диске они модифицируют код этих модулей и прикладных программ в памяти системы, перехватывают системные вызовы или модифицируют данные, которыми оперирует ядро системы. Описание этих механизмов требует отдельной статьи (и не одной).
Желающим более тщательно разобраться в принципах работы rootkit можно посоветовать обратиться к источникам, указанным во врезке «Rootkit: дополнительные материалы»
Однако следует понимать, что для использования этих механизмов, т. е. для установки rootkit, злоумышленник должен получить в системе привилегии администратора.
В настоящее время существует довольно большое количество общедоступных утилит набора rootkit, различающихся как по методам работы, так и по реализуемым функциям. Рассмотрим наиболее популярные и развивающиеся проекты.
NT rootkit — классический KLT для Windows. Поддерживает скрытие файлов и папок, запущенных процессов, разделов реестра. Имеется встроенный «троянский» компонент и программа-шпион для клавиатуры. Для сетевого взаимодействия утилита использует собственный стек TCP/IP.
Hacker Defender — наиболее полный по функциональным возможностям rootkit. Данная программа имеет возможность скрывать файлы, папки, процессы, разделы реестра, системные службы и открытые соединения. Имеет встроенную «троянскую» программу, использующую серверные порты, открытые другими приложениями, например IIS.
Vanquish — rootkit, использующий механизм внедрения DLL в память других процессов. Скрывает папки, файлы, разделы реестра, системные службы. Внедряется в механизм аутентификации Windows (msgina.dll) и сохраняет использованные для входа в систему имена и пароли.
Fu — программа нового поколения. В отличие от большинства других rootkit, манипулирует непосредственно памятью ядра, что осложняет ее обнаружение. На момент написания статьи ее функции ограничивались только скрытием процессов.
AFX rootkit — распространенный rootkit уровня пользователя (user-level rootkit). Позволяет скрывать файлы, папки, разделы реестра и сетевые соединения. Имеет утилиту с графическим интерфейсом для генерации новых дистрибутивов.
И это только вершина айсберга. Большинство rootkit доступны в исходных кодах, что позволяет создавать собственные версии. Как правило, новый rootkit (или модификация старого) публикуется уже после неоднократного использования и занесения в антивирусные базы.
Что делать?
Обычно у специалиста в области безопасности, ознакомившегося с возможностями современных rootkit, сильно портится настроение и даже опускаются руки. Однако как в деле обеспечения безопасности, так и в деле ее нарушения не существует «волшебных решений» и «больших красных кнопок», позволяющих на 100% решить любую задачу. Rootkit не являются неуязвимыми. Существует ряд способов защиты от подобных угроз, а также методы их обнаружения в системе.
Правило № 1. Знай своего врага
Прежде чем приступить к дальнейшему изложению, хотелось бы посоветовать читателю самостоятельно ознакомиться с возможностями современных rootkit. Сделать это можно, загрузив соответствующий дистрибутив с сервера www.rootkit.com. Работа с rootkit поможет понять, насколько эффективны используемые в вашей сети средства защиты от этой угрозы. Естественно, не стоит экспериментировать с rootkit на рабочих серверах. Оптимальным в данном случае будет использование виртуальных машин.
Правило № 2. Профилактика — лучший способ лечения
Лучший способ защиты — не дать злоумышленнику получить необходимые для установки rootkit привилегии. Минимизация полномочий пользователей и служб, защита административных учетных записей, отключение неиспользуемых сетевых служб, фильтрация трафика, своевременная установка оперативных обновлений наряду с выполнением других стандартных рекомендаций повышения уровня защиты операционных систем может свести вероятность установки в систему rootkit к минимуму. Однако не всегда хватает времени и возможностей предотвратить взлом, поэтому необходимо соблюдать третье правило.
Правило № 3. Будь готов
Если злоумышленник получил доступ в систему, очень важно своевременно обнаружить этот факт. Быстрая реакция на компрометацию сервера может максимально смягчить последствия взлома. Рассмотрим основные средства защиты, которые могут быть использованы для поиска rootkit.
Система аудита
Своевременно обнаружить взлом может помочь система аудита операционной системы. Хотя она не в состоянии зарегистрировать действия злоумышленника, скрытые rootkit, события, предшествующие установке подобного «обновления» системы, вполне может обнаружить.
Дело в том, что атака обычно осуществляется в несколько этапов. Сначала злоумышленник получает доступ к системе, используя одну из лазеек, после чего подготавливает ее для установки rootkit, загружает необходимые файлы и устанавливает программу. При этом происходит модификация файлов и папок, а также разделов реестра.
Таким образом, контролируя попытки записи на диск и важнейшие разделы реестра, мы можем обнаружить rootkit до того, как он будет запущен и станет невидимым для системы аудита. К важнейшим разделам реестра можно отнести разделы, управляющие автоматической загрузкой приложений, раздел HKLMSystemCurrentControlSet. Большинство rootkit при установке создают системную службу и драйвер, что приводит к модификации этих разделов реестра.
С файловой системой дело обстоит несколько сложнее. Несмотря на распространенное заблуждение, rootkit может находиться в любой папке файловой системы, а не только в папке Windows. Соответственно, необходимо контролировать модификацию всех дисков файловой системы, что приведет к заполнению журналов аудита и усложнит их анализ. Упрощает задачу то обстоятельство, что на серверах, которые являются типичной целью атакующих, довольно редко происходит создание новых файлов (если, конечно, сервер не используется в качестве файл-сервера), и можно четко выделить файлы и папки, подлежащие изменению в процессе работы.
Естественно события из журналов аудита должны своевременно обрабатываться и сохраняться для дальнейшего анализа. В Windows не существует встроенной системы сбора и анализа журналов аудита, что приводит к необходимости обращаться к решениям независимых производителей либо строить подобную систему самостоятельно.
Однако принципиально rootkit может внедриться в систему, не оставляя следов, регистрируемых системой аудита. Например, rootkit может быть встроен в программный код, исполняемый непосредственно во время взлома системы, так называемый shellcode. Все остальные действия злоумышленника будут происходить уже под прикрытием rootkit. Или rootkit может быть установлен в систему до настройки политики аудита или системы обнаружения атак.
Антивирусные системы
К сожалению, прекрасно зарекомендовавшие себя в деле борьбы с массовыми вирусами и сетевыми «червями» антивирусные системы в случае применения злоумышленником rootkit практически бесполезны. Некоторые из них работают в контексте пользователя и rootkit способны ввести их в заблуждение. Другие антивирусы устанавливают системный драйвер и, работая в режиме мониторинга, имеют возможность обнаружить активность rootkit, особенно если тот производит дисковые операции.
Однако ситуация усложняется тем, что большинство rootkit доступно в исходных кодах, и злоумышленник может без труда создать собственную модификацию rootkit, которая не будет обнаруживаться антивирусами. Кроме того, существует достаточное количество утилит, позволяющих скрывать исполняемые файлы от антивирусных систем.
Системы обнаружения атак
Системы обнаружения атак могут использоваться для защиты от rootkit на нескольких этапах. Дисковые операции и модификации реестра, предшествующие установке в систему rootkit, могут быть своевременно выявлены системой обнаружения атак уровня узла (HIDS). Если система обнаружения атак отслеживает трафик сервера, то она в состоянии выявить сетевое взаимодействие rootkit. Например HIDS Real Secure Server Sensor не смогла обнаружить установку rootkit Hacker Defender через лазейку в службе LSASS, описанную в уведомлении MS04-011, но моментально отреагировала на попытку злоумышленника соединиться с «троянским» модулем. Сетевые системы обнаружения атак (NIDS) позволяют выявлять сетевое взаимодействие rootkit, например предупреждать об обнаружении в трафике признаков приглашения интерпретатора командной строки. Кроме того, они позволяют зафиксировать и в ряде случаев разорвать сетевые соединения, нехарактерные для данного узла (см. «Брандмауэры для локальной сети», Windows & .NET Magazine/RE, 2004, № 3.).
Однако современные «троянские» программы используют стеганографические и криптографические механизмы для сокрытия сетевой активности. Что сможет сделать сетевая система обнаружения атак, когда в ответ на запрос пользователя Web-сервер вернет изображение JPEG, внутри которого будет содержаться зашифрованный ответ «троянской» программы? Или в том случае, если канал управления «троянской» программой использует ICMP эхо-запросы и эхо-ответы, аналогичные посылаемым утилитой ping?
Сканеры уязвимых мест
Сканеры слабых мест обычно разделяют на две группы: локальные и сетевые. Локальные сканеры устанавливаются на проверяемом компьютере и имеют полный доступ к системе. Сетевые сканеры обследуют компьютер по сети и предоставляют информацию о защищенности системы от сетевых атак.
Локальные сканеры, кроме собственно поиска ошибок в настройках системы безопасности, обычно реализуют функции контроля целостности файлов и разделов реестра. Однако современные rootkit позволяют обойти большинство подобных систем. В лучшем случае система контроля целостности сообщит о модификации, но не сможет указать на причину или последствия изменения. Существуют специализированные сканеры, позволяющие обнаруживать некоторые модификации rootkit.
Утилита PatchFinder (http://www.rootkit.com/project.php?id=15) использует механизм анализа пути исполнения (Execution Path Analysis, EPA) для поиска установленных в системе rootkit.
VICE (http://www.rootkit.com/vault/ fuzen_op/VICE_Bin.zip) — относительно новая утилита, предназначенная для обнаружения rootkit уровня пользователя.
RKdetector (http://3wdesign.es/security/) — использует комбинацию различных методов для поиска установленных в систему rootkit уровня ядра.
Klister (http://www.rootkit.com/project.php?id=14) — позволяет обнаруживать процессы, скрытые большинством современных rootkit, включая Fu и PHIDE.
Сетевые сканеры имеют перед локальными определенное преимущество, поскольку на них не распространяется действие rootkit. Так, при сканировании портов по сети вполне можно обнаружить серверный порт, открытый «троянской» программой, в то время как локально он будет невидим. Это позволяет задействовать метод обнаружения аномалий для поиска rootkit.
Мы сканируем удаленную систему по сети, после чего сравниваем эти результаты с данными, полученными на локальном узле. И в случае обнаружения расхождений делаем вывод о наличии в системе rootkit.
Богатые возможности удаленного управления Windows позволяют совместить все перечисленные функции в одной программе. Например, можно перечислить установленные в системе службы с использованием интерфейса WMI, работающего в контексте пользователя, и посредством системного компонента Service Controller, функционирующего в режиме ядра. Если в системе установлен rootkit, то результаты этих двух операций будут отличаться, поскольку rootkit сумеет скрыть системную службу от WMI, но не от Service Controller. Это связано с тем, что для того, чтобы запустить службу, SC должен знать о ней.
Подобный подход реализован в утилите rkdetect, которая представляет собой сценарий на языке Visual Basic Script и позволяет обнаруживать службы, скрытые rootkit (см. листинг 1).
Исходный код сценария rkdetect.vbs
Использовать утилиту довольно просто. Сканирование должно происходить по сети с незараженной rootkit машины от имени учетной записи пользователя, имеющего привилегии администратора в сканируемой системе. В одной папке со сценарием должна находиться утилита sc.exe, входящая в стандартную поставку Windows Server 2003.
Перед запуском необходимо перейти в папку, в которой находится сценарий, после чего запустить утилиту, указав имя или IP-адрес сканируемого компьютера.
cscript rkdetect.vbs
Эксперименты показали, что утилита пока неплохо справляется с обнаружением системных служб, замаскированных распространенными «троянскими» программами уровня ядра, такими как Hacker Defender и Vanquish. Получить текущую версию утилиты можно по адресу http://www.security.nnov.ru/files/rkdetect.zip.
Системы расследования инцидентов (Forensic systems)
Подобные системы позволяют обнаруживать rootkit, поскольку большинство из них не используют функции операционной системы для работы с диском. Обычно они представляют собой загрузочный компакт-диск со специализированной редакцией операционной системы и дополнительными утилитами. Однако большинство из них довольно дорого стоят и весьма неудобны в применении хотя бы потому, что требуют перезагрузки системы.
Правило № 4. Не останавливаться на достигнутом
В противостоянии методов защиты и нападения последние всегда идут немного впереди. Так происходит и в случае с rootkit: специалистам по защите приходится решать задачи, которые поставили перед ними хакеры, выпустив очередную версию KLT или освоив новую технику «обмана» средств защиты. Соответственно, следует отслеживать новинки рынка не только в области средств защиты, но и в области средств нападения, чтобы иметь представление об актуальных угрозах безопасности сети.
К сожалению, производители средств защиты уделяют проблеме rootkit довольно мало внимания. Производители антивирусных систем и систем обнаружения атак регулярно добавляют в базы данных своих продуктов сигнатуры новых rootkit, однако, как уже говорилось, этого не всегда достаточно для их обнаружения.
Большинство утилит, обнаруживающих rootkit, характеризуются термином PoC (Proof of concept, демонстрация возможностей), т. е. мало подходят для применения в работающих сетях. Скорее всего, это связано с самой природой root-kit. Взломанная система с установленным на ней (или, лучше сказать, «в ней») rootkit может работать годами, выполняя свои функции, пока ее взлом не будет выявлен. А необнаруженная проблема проблемой не считается.
Гордейчик Сергей (gordey@infosec.ru) — преподаватель учебного центра «Информзащита», автор курса «Повышение защищенности систем на основе Microsoft Windows Server 2003», MCSE, MCT
Rootkit: дополнительные материалы
- Hoglund G. A REAL NT Rootkit, patching the NT Kernel // Phrack Magazine, Vol. 9, Issue 55 (http://www.phrack.org/show.php?p=55&a=5). Одна из первых публикаций о rootkit для Windows, написанная автором программы NT rootkit.
- Crazylord. Playing with Windows /dev/(k)mem // Phrack Magazine, vol. 0x0b, Issue 0x3b (http://www.phrack.org/show.php?p=59&a=16). Статья содержит описание методов прямой работы с памятью ядра системы. Подобный подход используется утилитой PHIDE.
- Xshadow. Advanced DLL injection (http://www.rootkit.com/newsread.php?newsid=53). Статья посвящена обсуждению метода DLL Injection, используемого рядом rootkit.
- Сервер www.rootkit.com, целиком посвященный rootkit. Содержит исходные коды, статьи и тематические форумы.