Что такое руткит linux

Руткиты: внутренняя угроза

Хотя в прошлом и считалось, что вирусы разрабатываются исключительно для работы с ОС Windows, взломщики, специализирующиеся на свободных системах, опровергли это утверждение. Руткит, работающий в системе на основе ядра Linux, делает ее уязвимой к атакам, проводящимся вручную или программно, а для его нейтрализации должны применяться сложные методы диагностики и очистки системы от вредоносного ПО. Системы на основе ядра Linux стали де-факто стандартом в дата-центрах, поэтому администраторам этих систем следует расширять свои познания в области проблем, связанных с руткитами, и методов их разрешения для защиты инфраструктуры. Главной целью этой статьи является информирование системных администраторов и членов команд IT-менеджмента о потенциальной угрозе, а сама статья наверняка окажется полезной для них.

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

Хотя и существует большое количество антивирусных программ, существует другая, более опасная по своей природе категория вредоносного ПО, называемая руткитами. Это ПО создается талантливейшими программистами, к сожалению, со злыми намерениями и доставляет массу проблем пользователям.

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

Руткиты являются небольшими наборами инструментов, утилит и сценариев. Главной целью внедрения их в целевую систему является получение прав администратора, поэтому система может либо использоваться удаленно для сбора секретных данных, либо использоваться для проведения атак в отношении других уязвимых систем, внедрения руткита и получения доступа к ним.

Обычно руткит содержит в своем составе набор сетевых снифферов, инструментов для исследования системного журнала, сценариев для чистки системного журнала, системных утилит для определения IP-адресов, аналога утилиты netstat, утилит для остановки выполняющихся процессов, сценариев для сокрытия кода и своей сжатой копии для репликации.

Чем руткиты отличаются от вирусов

Давайте кратко рассмотрим отличительные признаки обоих.

Вирус Руткит
Чаще всего выполняется как пользовательский процесс Чаще всего выполняется как часть ОС/ядра
Обычно получает доступ к системе с правами пользователя Получает доступ к системе с правами администратора/пользователя root
Не открывает путей для удаленного администрирования Открывает пути для удаленного администрирования — viz., порт, IP, и.т.д.
Не предоставляет возможностей для удаленного доступа Предоставляет возможность удаленного доступа для взломщика
Довольно просто обнаружить и удалить из системы Очень сложно обнаружить и удалить из системы
Предназначен для нарушения работы системы и повреждения данных Предназначен для похищения конфиденциальных данных

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

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

Инфицирование/установка

Зачастую руткит упакован в виде файла самораспаковывающегося архива, данные из которого извлекаются сразу же после попадания в систему. Часто небольшой набор программ для установки, следящих за работой руткита, получающих права администратора и скрывающих свое присутствие в системе, находится также в сжатом виде.

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

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

Если при проектировании локальной сети аспект безопасности недостаточно проработан, получения руткитом административных привилегий на одном из узлов вполне достаточно для его распространения на другие системы в сети. Современные руткиты способны определять наличие соединения с интернетом, получать последнюю версию руткита и копировать ее на все инфицированные машины, а затем пытаться найти в Интернет другие уязвимые или недостаточно хорошо настроенные системы.

Обнаружение

Как говорилось ранее, обнаружение руткита является действительно сложной задачей, которая требует от администраторов дополнительных действий по сравнению с аналогичной задачей для вирусов и троянов. Хотя некоторые руткиты и блокируются при помощи новейших антивирусных инструментов, большинство руткитов неуязвимы для них. Так как руткит становится частью операционной системы, кажущиеся элементарными методы загрузки системы с диска или USB-носителя для восстановления системы очень полезны для загрузки свежей неинфицированной версии операционной системы и использования инструментов для обнаружения руткитов без противодействия с их стороны. Кроме того, многие инструменты для обнаружения руткитов только определяют их наличие, но не могут удалить их, поэтому необходимо ручное вмешательство для очистки системы.

Читайте также:  Как отключить проверку подписи драйверов при установке windows

Инструменты для обнаружения руткитов должны применять новые методы вместо простых проверок файлов или процессов, поскольку руткит в процессе работы может повлиять на эти устаревшие методы и алгоритмы. Лучшим вариантом является снятие снимка различных аспектов работы системы и сравнение его со снимком, снятым программой сразу после установки системы.

Новые инструменты используют интеллектуальные алгоритмы для обнаружения изменений в состоянии системы, поэтому не требуют исследования системы в начальном состоянии. Существуют различные алгоритмы обнаружения руткитов, такие, как метод на основе сигнатур, использующийся при обнаружении вирусов, или метод на основе установления неприкосновенности, при котором файлы, процессы и модули ядра проверяются на бинарную неизменность. Существует другой эффективный метод, при котором при помощи программы снимается дамп памяти, исследуемый впоследствии в поисках аномалий, сигнатур или изменений, прямо или косвенно связанных с функционированием руткитов.

Существует множество коммерческих и свободных программ для обнаружения руткитов; давайте рассмотрим несколько популярных инструментов.

Компании McAfee и Symantec предлагают продукты, позволяющие защититься от внедрения руткитов и обнаружить некоторые их них. Как бы то ни было, для обнаружения руткитов требуются отдельные специализированные инструменты.

В мире свободных программ известным инструментом, превосходящим большинство других, является chkrootkit . Он позволяет проводить подробные бинарные проверки, проверки модификаций файлов и исследования модулей ядра. Программа отлично работает в широком спектре дистрибутивов Linux и является необходимым инструментом в наборе администратора.

Аналогично, Tripwire является важным инструментом с открытым исходным кодом, который позволяет проводить исчерпывающие проверки MD5-хэшей и обнаруживать аномалии, такие, как открытые соединения для удаленного управления и локальные эксплойты.

Rootkit Hunter является еще одним известным инструментом, являющимся продуманным сценарием, способным обнаружить множество руткитов. Он также может обнаружить некорректные права доступа к файлам и модулям ядра, при этом предоставляя возможность проведения ежедневных проверок. При появлении нового руткита опытный системный администратор может изучить его и разработать сценарий для его обнаружения.

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

Примеры руткитов и причиняемый ими вред

Аналогично вирусам, к сожалению, существует множество руткитов и для Windows и для коммерческих дистрибутивов Red Hat Enterprise Linux, а также и для других свободно распространяемых дистрибутивов Linux. Так как ядро долгое время не претерпевало кардинальных изменений, взломщикам обычно не составляет большого труда разработать руткиты, которые будут распространяться.

Несмотря на то, что существуют сотни опасных для свободных систем руткитов, рассмотрим только некоторые наиболее часто встречающиеся экземпляры.

Начнем с упоминания руткита LRK, так как это один из самых старых и до сих пор активных руткитов (впервые он был обнаружен в 1997 году, но до сих пор встречается на уязвимых системах). Он имеет множество версий и известен тем, что подменяет известные исполняемые файлы, такие, как netstat , linsniffer , inetd , ifconfig , и.т.д.

Knark является руткитом, который очень сложно обнаружить, так как он полностью располагается в ядре. Это очень опасно, так как во время работы он скрывает открытые порты, файлы и процессы от администратора.

Beastkit является относительно новым вариантом руткита, разработанным для дистрибутивов Red Hat, а его опасная модификация с названием Illogic известна тем, что процесс, работающий на порту 901, позволяет взломщику при помощи telnet делать с системой практически все то, что способен делать администратор, имеющий физический доступ к системе.

Стоит упомянуть о руткитах, причинивших значительный ущерб Linux-системам: Sneakin, Kitko, Ajakit и Devil. Все эти руткиты используют сложные техники, такие, как определение ОС и модификация структур ядра в процессе работы, проброс портов для декодирования данных, запись событий от клавиатуры для похищения паролей и незаметная отправка их на адрес электронной почты взломщика, оптимизация действий для сокращения использования ресурсов системы, и.т.д. Эти руткиты также известны высокой скоростью распространения и превращением инфицированных машин в зомби для продолжения распространения.

Как отмечалось ранее, руткиты также дают возможность доступа к системе путем открытия портов, создания процессов уровня ядра, что позволяет злоумышленнику в полной мере удаленно контролировать систему, даже через Интернет.

Существует несколько дружественно настроенных руткитов, которые сотрудничают друг с другом. Если руткит во время внедрения в систему обнаруживает уже присутствующий в ней руткит, он обновляет его для улучшения работы. Известно несколько руткитов, которые работают как шлюзы для доставки вирусов и троянов в локальную сеть; сначала в систему внедряется руткит, резервирует место, устанавливает привилегии пользователя, получает контроль над файловой системой, отключает работающие антивирусные программы, открывает доступ для отправки вирусов и переходит в невидимый режим работы.

Новое поколение руткитов известно действиями по установке поддельных SSL-сертификатов и попытками расшифровки HTTP-трафика для получения информации о кредитных картах, которая обычно передается по зашифрованному каналу. Существуют руткиты, компрометирующие системы путем проведения с помощью них атак перехвата с участием человека в отношении других систем, что затрудняет расследование по поиску реального взломщика.

Разработка постоянно совершенствующейся системы безопасности инфраструктуры необходима для остановки распространения и предотвращения ущерба, причиняемого руткитами. Современные системы обнаружения проникновений (IDS) могут эффективно останавливать распространение руткитов на подходе к сетям. Старший IT-менеджмент должен быть проинформирован об этой серьезной опасности и предпринимать решительные шаги по защите подконтрольных сетей.

Читайте также:  Openvpn клиент windows установка

Источник

Что такое руткит linux

LINUX KERNEL ROOTKIT

Ключевые слова: rootkit, linux, драйвер, многопоточность, slab, ядро операционной системы.

Основные задачи программы:

Представлять собой полноценную и используемую практически программу. Иметь возможность встраиваться в ядро операционной системы. Иметь возможность скрывать информацию о себе. Иметь возможность получать информацию о процессах. Иметь возможность сохранять информацию о процессах в файл. Иметь возможность отсылать udp-пакеты на указанный адрес.

Теоретические очновы Руткит Руткит (англ. rootkit, то есть «набор root’а») — набор программных средств (например, исполняемых файлов, скриптов, конфигурационных файлов), для обеспечения:

  • маскировки объектов (процессов, файлов, директорий, драйверов)
  • контроля (событий, происходящих в системе)
  • сбора данных (параметров системы) Термин Rootkit исторически пришёл из мира UNIX, и под этим термином понимается набор утилит или специальный модуль ядра, которые злоумышленник устанавливает на взломанной им компьютерной системе сразу после получения прав суперпользователя. Этот набор, как правило, включает в себя разнообразные утилиты для «заметания следов» вторжения в систему, делает незаметными снифферы, сканеры, кейлоггеры,троянские программы, замещающие основные утилиты UNIX (в случае неядерного руткита). Rootkit позволяет взломщику закрепиться во взломанной системе и скрыть следы своей деятельности путём сокрытия файлов, процессов, а также самого присутствия руткита в системе. В систему руткит может быть установлен различными способами: загрузка посредством эксплойта, после получения шелл-доступа (в таком случае, может использоваться средство типа wget или исходный FTP-клиент для загрузки руткита с удаленного устройства), в исходном коде или ресурсах программного продукта.

По уровню привилегий:

Уровень пользователя (user-mode) – категория основана на перехвате функций библиотек пользовательского режима. Руткиты этой категории получают те же права, что обычное приложение, запущенное на компьютере. Руткиты исполняются в непривилегированном кольце (с точки зрения архитектуры информационной безопасности). Они используют программные расширения (например, для проводника Windows), перехват сообщений, отладчики, эксплуатируют уязвимости в безопасности, а также производят перехваты функций (function hooking) широко используемых API (в памяти каждого отдельного процесса). Они внедряются в другие запущенные процессы и используют их память. Это более распространенный вариант. Легче обнаруживается и устраняется даже стандартными средствами операционной системы. Дёшевы в приобретении. Уровень ядра (kernel-mode) – категория основана на установке в систему драйвера, осуществляющего перехват функций уровня ядра. Руткиты этой категории работают на самом глубинном уровне ОС, получая максимальный уровень доступа на компьютере. После инсталляции такого руткита, возможности атакующего практически безграничны. Руткиты исполняются в привилегированном нулевом кольце (наивысший уровень привилегий ОС). Они могут встраиваться в драйверы устройств, проводить прямую модификацию объектов ядра (DKOM), а также влиять на взаимодействие между пользовательским режимом и режимом ядра. Руткиты уровня ядра обычно более сложны в создании, поэтому встречаются реже. Также их гораздо сложней обнаружить и удалить. Дороги в приобретении.

Основные способы реализации в UNIX и linux

Самый распространенный метод, обеспечивающий функционирование руткита уровня ядра — это перехват системных вызовов путем подмены соответствующей записи в таблице системных вызовов sys_call_table. Детали этого метода заключаются в следующем. При обработке прерывания int 0x80 (или инструкции sysenter) управление передается обработчику системных вызовов, который после предварительных процедур передает управление на адрес, записанный по смещению %eax в sys_call_table. Таким образом, подменив адрес в таблице, мы получаем контроль над системным вызовом. Этот метод имеет свои недостатки: в частности, он легко детектируется антируткитами; таблица вызовов в современных ядрах не экспортируется; и кроме того, перехват некоторых системных вызовов (например, execve()) нетривиален.

Другим распространенным механизмом в kernel-mode руткитах является патчинг VFS (Virtual Filesystem Switch). Этот подход применяется в рутките adore-ng. Он основан на подмене адреса какой-либо из функций-обработчиков для текущей файловой системы.

Как и в Windows, широко используется сплайсинг — замена первых байтов кода системного вызова на инструкцию jmp, осуществляющую переход на адрес обработчика руткита. В коде перехвата обеспечивается выполнение проверок, возврат байтов, вызов оригинального кода системного вызова и повторная установка перехвата. Данный метод также легко детектируется.

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

Руткиты для и против DRM.

Руткитами по сути является большинство программных средств защиты от копирования(и средств обхода этих защит — например, эмуляторы CD- и DVD-приводов). В 2005 году корпорация Sony BMG встраивала в свои аудиодиски защиту на основе руткита, который устанавливался без ведома пользователя.

В реализации программы используется выделение памяти с помощью slab allocator. Что же то такое? Распределение slab – это механизм управления памятью, предназначенный для более эффективного распределения памяти и устранения значительной фрагментации. Основой этого алгоритма является сохранение выделенной памяти, содержащей объект определенного типа, и повторное использование этой памяти при следующем выделении для объекта того же типа. Этот метод был впервые введен в SunOS Джефом Бонвиком и сейчас широко используется во многих операционных системах Unix, включая FreeBSD и Linux.

Фундаментальная идея способа распределения slab основывается на результатах наблюдений, показывающих, что некоторые объекты данных ядра часто создаются и уничтожаются после того, как перестают быть нужными. Таким образом, при каждом выделении памяти для объектов такого типа затрачивается некоторое время для нахождения наиболее подходящего места для этого объекта. Кроме того, освобождения памяти после уничтожения объекта способствует фрагментации памяти, которая создает дополнительную нагрузку на ядро для реорганизации памяти.

В случае же распределением slab, при использовании программистом определенных системных вызовов, участки памяти, подходящие для размещения объектов данных определенного типа и размера, заранее предопределены. Распределитель slab хранит информацию о размещении этих участков, известных также как кэши. Таким образом, если поступает запрос на выделение памяти для объекта данных определенного размера, он может мгновенно удовлетворить запрос уже выделенным слотом. Однако, уничтожение объектов не освобождает память, а только открывает слот, который помещается в список свободных слотов распределителем slab. Следующий вызов для выделения памяти того же размера вернет слот памяти, не используемый в данный момент. Этот процесс устраняет необходимость в поиске подходящего участка памяти и значительно снижает фрагментацию памяти. В этом контексте slab – это одна или более смежных страниц в памяти, содержащих заранее выделенные участки памяти. Понимание распределения slab требует определения следующих терминов: Кэш: кэш представляет собой небольшой объём очень быстрой памяти. Здесь мы используем кэш как память для хранения таких объектов, как семафоры, дескрипторы процессов, объекты файлов и т. д. Каждый кэш способен хранить только один тип объектов. Slab: slab представляет собой непрерывный участок памяти, обычно составленный из нескольких физических смежных страниц. Кэш состоит из одного или более slab’ов.

Читайте также:  Не пингуется по имени только по ip linux

Когда программа создает кэш, она выделяет ряд объектов в него. Их количество зависит от размера связанных slab’ов. Slab может находиться в одном из следующих состояний: пустой – все объекты в slab’e помечены как свободные частично занятый – slab содержит как используемые, так и пустые объекты заполненный – все объекты в slab’е помечены как используемые Изначально система помечает каждый slab как «пустой». Когда процесс обращается за новым объектом ядра, система делает попытку найти свободное место для этого объекта в частично занятом slab’е в кэше для этого типа объектов. Если такого места не находится, система выделяет новый slab из смежных физических страниц и передает их в кэш. Новый объект размещается в этом slab’е, а это местоположение помечается как «частично занятое». Основное преимущество алгоритма slab заключается в том, что память выделяется точно в том объёме, в котором требуется. Таким образом, отсутствует внутренняя фрагментация памяти. Распределение происходит быстро, поскольку система создает объекты заранее и легко выделяет их из slab’а. Функциональное описание программы руткита.

Словесное описание модулей, функций, классов и переменных, используемых в программе, блок — схемы основных функций драйвера.

Программа rootkit работает в пространстве ядра, перехватывает системные вызовы, генерирует и отправляет udp пакеты, сохраняет информацию в файл, скрывает своё присутствие. Для того чтобы воспользоваться готовыми модулями, функциями, структурами и переменными необходимо подключить соответствующие библиотеки. Функция выделения памяти – позволяет динамически выделить память под переменные определённого типажа, принимает параметрами имя структуры, её размер, смещение и флаги, возвращает указатель на выделенную память. Макрос лицензии – позволяет указывать лицензию на продукт, необходим для использования некоторых функций, принимает параметром строку с лицензией. Директивы препроцессора позволяют создавать глобальные переменные, узнавать архитектуру системы(i386 или amd64), поиска таблицы системных вызовов по адресу в стеке. Функция нахождения таблицы системных вызовов ищет её среди множества соответствующих адресов в системе, возвращает адрес таблицы, либо NULL, если ничего не нашла. Функция сохранения копии оригинальной таблицы вызовов – сохраняет оригинальную таблицу системных вызовов перед её модификацией, это может пригодиться при выгрузке драйвера. Макрос получения передаваемых драйверу параметров – в программе используется для получения времени таймаута между отправками пакетов и записью в дамп и имени процесса. Структура описывающая перехваченный процесс, содержит поле имени процесса, имени команды, pid процесса и двусвязный список. Структура контекста потока – содержит флаг остановки и информацию о дампе. Функция записи в файл записывает перехваченную информацию о процессах в файл. Функция потока сохранения обеспечивает сохранение информации в файл, мьютексную блокировку/разблокировку файла. Функция потока генерации и отправки udp пакетов генерирует и отправляет пакет на хост. Функция инициализации драйвера описывает инициализацию драйвера, создание потоков, его сокрытие. Функция обхода защиты от записи в таблицу системных вызовов помогает осуществлять запись в таблиц системных вызовов, по – сути конструктор. Функция удаления элементов драйвера из ядра подчищает память, сливает потоки, возвращает оригинальную таблицу системных вызовов и её защиту, по – сути деструктор. Функция создания кеш – памяти – создаёт объект в кеше. Функция выделения памяти для кеша выделяет память определенного размера в кеше. Функция высвобождения памяти кеша – высвобождает ранее выделенную память. Функция удаления объекта кеша – удаляет ранее созданный объект в кеше. Макрос загрузки модуля в ядро берёт в себя конструктор и загружает в ядро. Макрос выгрузки модуля из ядра берёт в себя деструктор и выгружает драйвер его.

Инструкция пользователю linux — системы.

Хорошей инструкцией пользователю в этом случае будет не запускать подозрительные исполняемые файлы от root’а, а если хочется поэкспериментировать, то порядок такой:

Перейти в директорию с файлами rootkit.c и Makefile.

Выполнить от root команду make, для того, чтобы собрался драйвер.

Выполнить от root команду insmod rootkit.ko dump_timeout= proc_name=

Попробовать выгрузить драйвер. Или хотя бы найти его в ядре.

Инструкция системному администратору linux – системы или инженеру/аналитику DLP системы.

Перейти в директорию с файлами rootkit.c и Makefile на целевой машине.

Выполнить от root команду make, для того, чтобы собрался драйвер.

Выполнить от root команду insmod rootkit.ko dump_timeout= proc_name=

Запустить на своей машине скипт на scapy см Приложение Д.

Экспериментальный запуск программы.

Рисунок 4. Сборка драйвера утилитой make.

Рисунок 5. Загрузка драйвера в ядро утилитой insmod.

Рисунок 6. Попытки обнаружить драйвер – руткит.

Рисунок 7. Прием пакетов на сервере.

Рисунок 8. Прием пакетов на сервер.

В данной работе представлен многопоточный ядерный руткит, пересылающий информацию по сети. Рассмотрен пример реализации. Подобные программы часто используют как с целью скрытия вредоносного программного обеспечения, так и в целях защиты и контроля утечки данных. Отличием данного руткита от большинства других является распараллеливание задач, связанных с отправкой и дампингом данных. Также активное использование быстрой кеш – памяти, с использованием слабового аллокатора.

Источник

Оцените статью