Защита информации в конкретной операционной системе неразрывно связана с задачами, для решения которых применяется данная ОС. Unix-подобные операционные системы, и в частности Linux, изначально использовались в качестве сетевых ОС на серверах локальных вычислительных сетей. И сейчас по статистике проекта Netcraft примерно 89% серверов в сети Интернет работают под управлением таких операционных систем. Среди последних немалую часть составляют различные модификации Linux.
Из-за специфичности областей применения архитектура ОС Linux во многом отлична от архитектуры, например, ОС Windows, а сама система менее знакома массовому пользователю. Ожесточенные споры между поклонниками этих операционных систем вызывает вопрос, что лучше: Linux или Windows? Невозможно также однозначно ответить, какая из систем устойчивее и безопаснее, поскольку области их применения различны и задуманы они были для решения совершенно разных задач.
Что такое Linux?
Linux представляет собой полностью многозадачную многопользовательскую операционную систему. Основной составляющей частью ее является ядро. Именно ядро отличает Linux от других Unix-подобных операционных систем. Несмотря на то что существует множество дистрибутивов иногда с абсолютно различными принципами настройки и процессами начальной загрузки, все они имеют общее ядро. Любой желающий, приложив некоторые усилия, может собрать собственный дистрибутив на основе одного из стандартных ядер. Собственно, ядро системы - это и есть то, что принято называть Linux. Разработчики дистрибутивов нередко вносят в стандартное, также называемое каноническим, ядро какие-то свои изменения, но они по большей части касаются работы специфичного для этих дистрибутивов программного обеспечения. Ядро имеет, как правило, модульную структуру, модули ядра можно задействовать (подгружать) по мере необходимости, чаще всего модулями оформлены драйверы периферийных устройств и файловых систем.
Структура ядра ОС Linux |
Кроме ядра в системе существуют постоянно выполняющиеся в памяти процессы, называемые демонами. Демоны - аналоги резидентов в DOS и служб в Windows. Стартуют в качестве демонов те программы, для работы которых не требуется вмешательства пользователя; обычно это различные серверы. Например, сервер MySQL - mysqld, сервер Apache - httpd.
Неуловимый Джо
К сожалению, очень распространен ряд заблуждений, связанных с безопасностью Linux. Некоторые пользователи убеждены в том, что Linux абсолютно защищена сразу после установки и не требуются никакие дополнительные меры, направленные на увеличение ее безопасности. Как один из вариантов подобного заблуждения бытует мнение, что «вирусов под Linux не бывает». Отсутствие вирусов объясняют особенностями архитектуры системы, которая делает их существование невозможным. Данное мнение не совсем верно: вирусы и другие вредоносные программы под Linux встречаются, хотя и не в таком количестве, как под ОС семейства Windows. Особенностью вредоносных программ под Linux является то, что для начала своих деструктивных действий они требуют прямого вмешательства пользователя. Самопроизвольной активации вируса без участия пользователя (обычная ситуация в Windows, например, в случае вирусов MSBlast, NetSky...) не происходит. Таким образом, малое количество вирусов объясняется слабой распространенностью Linux именно в качестве операционной системы для пользовательского компьютера. Подобная ситуация складывалась с ОС Windows NT 4.0 во времена ее появления. Вирусов под нее было очень мало, и написать серьезный вирус считалось невозможным из-за того, что ее архитектура была недостаточно изучена авторами вирусов да и система тогда еще не приобрела популярности. Аналогичное положение до сих пор сохраняется для системы NetWare, внутренняя архитектура которой мало знакома неспециалистам.
Второе довольно распространенное заблуждение относится не только к системам на базе Linux: многие пользователи почему-то уверены, что именно их сервер никто не станет взламывать. Если ваш сервер или рабочая станция в сети до сих пор не подвергались злонамеренному воздействию, это не значит, что и в будущем никто не предпримет подобных попыток. Даже если на сервере нет никаких важных данных, захваченный сервер можно использовать для рассылки спама или для организации атак на другие серверы.
Есть несколько ставших уже классическими рекомендаций по обеспечению общей безопасности, касающихся не только Linux-серверов, но и практически любого программного обеспечения, от которого требуется безопасность при работе с данными. Рассмотрим эти рекомендации с учетом специфики такой операционной системы, как Linux.
Человеческий фактор
Самый страшный враг пользователя - это он сам. В подтверждение данного высказывания можно привести простой пример. В Linux, как и в любой Unix-подобной системе, существует специальный пользователь root, называемый также суперпользователем. Root имеет практически неограниченные права и может выполнять в системе любые действия. Согласно идеологии Unix, пользователь root предназначен только для внесения изменений в критичные системные настройки и установки программ, которые требуют прав на запись в системные каталоги. К сожалению, достаточно часто root используется для выполнения повседневных операций, например посещения веб-страниц, чтения личной почты. И однажды пользователь, просматривающий веб-форум под учетной записью root, встречает там просьбу помочь отладить программу, состоящую всего из одной строки на языке Perl.
Программа написана в лучших традициях программирования на Perl и выглядит как набор вполне бессмысленных символов (скрипт был опубликован в форуме linux.org.ru, автор неизвестен).
cat «test... test... test...» | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/» -;;s;;$_;see'
Самый распространенный способ отладки подозрительных программ - это, конечно, немедленный их запуск с правами суперпользователя и изучение результатов. В данном случае результатом будет несколько секунд молчаливой работы «винчестера» и гарантированное удаление с него всех данных. Аналогичную, но не настолько разрушительную ситуацию можно представить и в Windows, но администраторские права в этой операционной системе не столь велики, как права root в Linux.
Регулярные обновления
Процедура регулярного обновления всего используемого ПО - одна из важнейших в механизме обеспечения безопасности любой операционной системы. Предположение, что любая программа содержит хотя бы одну ошибку, вполне согласуется с действительностью, но с учетом того, что ошибка обычно не одна. В современных условиях, когда период между обнаружением очередной ошибки в ПО и обнародованием методов ее исправления сильно уменьшился, автоматическое обновление ПО стало особенно необходимым.
Широко известен механизм борьбы с ошибками в ПО Microsoft, например, в ОС Windows - непрерывный выпуск «заплаток», устраняющих ту или иную недоработку. В качестве системы автоматического обновления используется сервис Windows Update.
ОС Linux - яркий пример применения концепции ПО с открытым исходным кодом, поэтому устранение программных недоработок там выглядит совершенно иначе. В какой-то степени его можно назвать эволюцией ПО, так как регулярный выпуск обновлений, «заплаток» и новых версий - это естественный процесс развития для открытого ПО. Система обновлений одновременно исполняет роль и средства отладки, и технической поддержки. Почти каждый дистрибутив Linux имеет свою, специфичную процедуру обновления программного обеспечения. Для пакетно-ориентированных дистрибутивов, таких как RedHat, используется средство обновления apt-get, которое умеет получать из главного хранилища готовых пакетов дистрибутива (иначе называемом репозиторием) пакеты новых версий используемого в системе ПО. Аналогичные утилиты обновления применяются и в других дистрибутивах - репозиторий Sisyphus для отечественного дистрибутива ALT Linux, служба YaST Online Update дистрибутива SuSE. Все эти механизмы в какой-то мере похожи на метод обновления Windows, но гораздо более масштабны, так как затрагивают все системное ПО в целом. Для Linux возможен и другой путь поддержания актуальности используемого ПО - сборка программ из исходных текстов, причем хранилище исходных текстов регулярно обновляется до актуальной версии, а программы систематически подвергаются перекомпиляции. Активнее всего этот подход используется в дистрибутиве Gentoo, при установке целиком компилирующемся из исходников.
Повышение привилегий и контроль целостности
Одной из интересных особенностей системы безопасности Linux и одновременно едва ли не самым большим недостатком является механизм SUID. Флаг SUID в правах доступа к файлу означает, что тот, кто запускает процесс, получает не просто права пользователя, а права владельца файла. Подобный механизм позволяет избежать передачи пользователю пароля root в тех случаях, когда ему необходимо запустить процесс, требующий для корректной работы привилегий суперпользователя, например смены пароля - passwd, создания сокета (комбинация из номера порта и IP-адреса) с номером порта меньше 1024 - rlogin и некоторых других. В стандартной поставке любого дистрибутива Linux таких файлов около полусотни. Достаточно много методов злонамеренного повышения локальных привилегий в Linux основано или на использовании какой-либо недоработки в исполняемом файле, на который установлен флаг SUID, или на создании своего исполняемого файла с таким флагом. Таким образом, появление новых файлов с установленным SUID-флагом или модификация уже существующих SUID-файлов часто является признаком вмешательства в работу системы.
Найти в системе все файлы с установленным флагом SUID можно с помощью команды.
find / -type f -perm -u+s
В современных дистрибутивах, особенно ориентированных на повышенную безопасность, создатели пытаются отойти от механизма создания SUID-файлов. Как замена подобному механизму может использоваться технология sudo. В последнее время все больше дистрибутивов Linux переходят на использование механизма аутентификации PAM - гибко настраиваемой модульной системы проверки прав доступа пользователей.
Кроме файлов с выставленным флагом SUID в Linux существуют и другие специфические опасности, например наборы «троянов», перехватчиков клавиатуры, подмененных системных файлов, используемые злоумышленниками для повышения привилегий в системе. Подобные наборы носят название руткитов (rootkits), и появление таких файлов на жестком диске почти однозначно указывает на попытку взлома сервера. Некоторые руткиты, специализированные под веб-серверы, могут содержать веб-интерфейс для управления захваченным сервером. Для борьбы с руткитами используется специальное ПО, которое, единожды подсчитав контрольные суммы важных системных файлов, далее проверяет их целостность. Как пример подобного ПО под Linux можно назвать Chkrootkit, Samhain, FreeVeracity, Fcheck. Для Windows аналогичные функции может выполнять системная утилита sfc.
Защита сети
ОС Linux изначально была задумана как система с поддержкой работы в сети, в отличие от ОС Windows, которая проектировалась всего лишь как графическая оболочка для рабочей станции. Более того, Linux считается скорее серверной операционной системой, чем системой для рабочих станций. Основное требование к серверу сети - стабильность и надежность в работе. Одним из популярных типов атак на сервер сети является атака типа DDoS (Distributed Denial of Service). При классической DDoS-атаке сервер подвергается многочисленным некорректным запросам на соединение и их обработка занимает все процессорное время или пропускную способность канала. Защита от атак подобного рода осуществляется при помощи правильно настроенного межсетевого экрана, иначе firewall'а. Для Linux существует множество программных решений межсетевых экранов, например iptables или ipchains, которые занимаются обработкой проходящего через сервер сетевого трафика и осуществляют фильтрацию паразитного мусорного трафика, характерного, например, для DDoS-атаки. Подобные программы под Linux позволяют гибко настроить правила обработки, основываясь на следующих параметрах:
- IP-адрес источника пакета.
- IP-адрес назначения пакета.
- Интерфейс, который принял пакет.
- Протокол, по которому осуществляется передача пакета.
- Порт назначения пакета.
Основываясь на данных анализа проходящего пакета, межсетевой экран может произвести над ним некоторый набор действий:
- Пропустить пакет.
- Подсчитать размер пакета.
- Изменить значения полей пакета IP-адресов, портов, ttl.
- Уничтожить без обработки.
Межсетевые экраны под Linux часто используются не только как средство обеспечения безопасности, их широкие возможности по управлению трафиком позволяют организовать с их помощью системы подсчета трафика, сбора статистики, распределения трафика, организовать виртуальные подсети с выходом в Интернет с одного IP-адреса и многое другое.
Неплохой принцип, которым стоит руководствоваться при настройке межсетевого экрана на сервере Linux, - запрещено все, что явно не разрешено. В начале выбираются диапазоны IP-адресов сети, затем интерфейсы сервера, через которые будет проходить обрабатываемый трафик, потом параметры пропускаемого трафика (тип пакетов, порты, размер, значение ttl). Затем выбранный тип трафика явно разрешается, снабжается ограничениями, а остальные пакеты явно запрещаются.
Схема комплексной защиты сети |
Основное отличие межсетевых экранов в Linux от подобных программ под Windows, часто называющихся персональными межсетевыми экранами, - в логике, по которой обрабатывается сетевой трафик. Межсетевые экраны для Windows чаще всего управляют сетевой активностью приложений и осуществляют обработку трафика по критерию доверенности приложения, которое пытается получить доступ к сети. Доверенность приложения нередко вычисляется изощренными методами, включая глубокий контроль компонентов и подгружаемых библиотек. Подобный метод эффективен для предотвращения атак изнутри, например вирусной активности или деятельности троянских программ. Конечно, и под платформу Windows существуют межсетевые экраны, действующие по принципам, аналогичным iptables, но это довольно дорогие программные решения.
Система обнаружения вторжений
Кроме DDoS-атак на сервер могут предприниматься так называемые DoS-атаки. Для атак подобного типа не нужно участие множества компьютеров, в отличие от DDoS эти атаки проходят незаметно, и виден только их конечный результат - неработоспособность сервера, исчезновение данных, нежелательная сетевая активность. Для обнаружения попыток подобных вторжений извне в ОС Linux существует большое количество специализированного ПО. Эти программы объединены под общим названием IDS (Intrusion Detection System - системы обнаружения вторжений). Самой популярной IDS на сегодняшний день считается система Snort.
Snort использует специальный язык правил, которыми дается описание потенциально опасного сетевого трафика. Формат правил похож на формат пакетных межсетевых экранов под Linux. В правилах можно задать реакцию на подозрительное содержимое любой части IP-пакета. Snort обладает модульной архитектурой и может контролировать сетевую активность на любом уровне сетевого интерфейса, начиная с канального и заканчивая прикладным. При обнаружении трафика, подпадающего под заданные правила, snort может разорвать соединение с компьютером, от которого он исходит, заблокировать его IP-адрес и внести запись в журнал.
Защита почтового сервера
Работа в качестве mail-сервера - одно из самых распространенных применений серверов под управлением Linux. Проблема безопасности сообщений электронной почты появилась одновременно с введением достаточно небезопасных протоколов обмена mail-сообщениями, таких как POP3 и SMTP. Во времена их создания мало кто задумывался, что передача такой информации, как имя пользователя, пароль, да и содержания письма в открытом виде является не самой лучшей реализацией схемы обмена информацией. В обоих протоколах не было предусмотрено возможности точной идентификации отправителя и его обратного адреса. Отсюда основные проблемы электронной почты - анонимные спам-сообщения, рассылка вирусов и перехват почтового трафика.
Главным средством реализации почтового сервера на базе Linux является программный пакет Sendmail. Можно сказать, что на сегодняшний момент Sendmail - лучший инструмент для построения системы управления почтовой корреспонденцией. При помощи Sendmail можно организовать практически любую теоретически возможную схему управления почтой. Приятной особенностью его архитектуры является реализованный в нем интерфейс работы с внешними модулями - milter. Благодаря milter появляется возможность отправлять почтовые сообщения на обработку внешним программам, поддерживающим взаимодействие по этому интерфейсу. Такими программами могут быть различные антивирусные пакеты и фильтры содержимого сообщений. Из популярных программных решений, выполненных как модули Sendmail, можно упомянуть из антивирусов, например, антивирусный пакет DrWeb for Unix, а также открытую разработку - антивирус Clamav. Для борьбы с нежелательными сообщениями часто применяется пакет анализа содержимого Spamassassin. Для обеспечения закрытости почтовой переписки существует отечественное криптографическое решение, выполненное также в виде модуля milter к пакету Sendmail, - комплекс «Криптон-почта».
ОБ АВТОРЕ
Сергей Александрович Ермаков - руководитель группы тестирования программного обеспечения фирмы «АНКАД». С ним можно связаться по e-mail: develop@ancud.ru.