Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Особенности обеспечения безопасности ОС Linux (Обзор операционных систем)

Содержание:

Введение

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

Именно распространённость компьютеров и разнообразие их функций раскрывает актуальность рассматриваемой темы. Говоря об информации, обрабатываемой компьютером, мы подразумеваем не только её использование или накопление, но и защиту – будь то неумышленные действия пользователей или действия злоумышленника.

Целью настоящей работы является раскрытие принципов осуществления безопасности операционных систем, работающих под управлением ядра Linux. Для достижения цели выполняются следующие задачи:

  1. обзор понятия защиты операционной системы. Многие наверняка слышали этот термин, а также термины, связанные с ним напрямую, например: утечка информации, конфиденциальные данные и пр. В этой работе приводятся основанные на государственных стандартах определения;
  2. определение рассматриваемого объекта. Многие рядовые пользователи видели интерфейс Windows, слышали о Linux, но подкованный в технических вопросах администратор сети должен сделать выбор в пользу конкретной операционной системы. Поможет это сделать небольшой аналитический обзор;
  3. методы, с помощью которых достигается защита операционной системы. Говоря открыто, обеспечение безопасности – это комплекс мер, снижающий определённые риски. В этой работе рассматриваются конкретные риски и методы воздействия на них.

В качестве предмета настоящей работы выступает совокупность рекомендаций по настройке операционных систем на базе ядра Linux.

Источниками для написания работы и приводимых в работе выводов служат, в первую очередь, учебные пособия для учащихся высших учебных заведений под редакцией таких авторов, как Бакланов В. В., Белов Ю. С., Замятин А. В. и др. Также в список литературы включены публикации отечественных и зарубежных авторов Олифер В. Г. и Олифер Н. А., Бэндл Д., Стюарт Мак-Клар и др. Приводятся ссылки на открытые источники, размещённые в сети интернет, а также используются материалы из конспекта лекций Лихоносова А. Г.

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

Немаловажной особенностью данной работы является использование нормативных устанавливающих документов, таких как ГОСТ Р 50739‑95, ГОСТ Р 51583-2014, группа ГОСТ Р ИСО/МЭК 15408 и др.

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

Обзор операционных систем

Операционная система – совокупный комплекс программного обеспечения, который предоставляет пользователю возможность запускать приложения и управлять ими, а программам – получать доступ к аппаратным ресурсам вычислительной системы [1, p. 3].

Функции, выполняемые операционной системой, можно условно разделить на три сегмента:

  1. управление аппаратными ресурсами;
  2. распределение ресурсов между запущенными приложениями;
  3. формирование среды с данными, необходимыми для исполнения приложений (иначе – информационное окружение).

Сама операционная система подразделяется на два уровня – ядро и системные утилиты[1]. Ядро служит для обеспечения функций, указанных выше, в то время как системные утилиты – это инструменты для управления функциями. Обычно ядро состоит из следующих компонентов:

  • система управления сеансами пользователей регистрирует пользователя в операционной системе в начале работы, выполняет хранение информации, необходимой для быстрого доступа через информационное окружение, поддерживает связь сеанса с устройствами, отвечает за завершение сеанса при окончании работы пользователя с системой;
  • система управления процессами распределяет ресурсы между процессами, обеспечивает защиту памяти процессов от модификации другими процессами, реализует механизмы межпроцессорного взаимодействия;
  • файловая система – система, преобразующая физические данные, хранящиеся на накопителях, в логические (файлы и каталоги). Также в функции этой системы входит обеспечение разграничения прав доступа к файлам и каталогам;
  • система ввода-вывода необходима для связи компонентов ядра с логическими устройствами, поддерживаемыми операционной системой. Операционная система сама по себе «не видит» физические компоненты вычислительной системы – они либо представлены адресом ячейки в оперативной памяти, либо связаны посредством специальной программы – драйвера – с аппаратной частью. Более того, для выполнения некоторых функций ОС может создавать собственные логические устройства, функционирующее только внутри ОС, например, системные часы [1, pp. 13-14].

Операционные системы для серверов принято разделять по типу используемого ядра: так называемые Unix-based ОС и Windows. Первые системы получили своё развитие от операционной системы Unix – многозадачной многопользовательской системы, первая версия которой вышла в конце 1960-х годов. Открытость исходного кода привела к широкому разнообразию дистрибутивов. Самым распространённым видом Unix-подобных систем является Linux, основанная на одноимённом ядре, а также библиотеках и прикладных программах проекта GNU. Семейство Linux-дистрибутивов сильно разнообразно, их можно разделить на несколько типов:

  • deb-based системы, к которым относятся такие представители, как Debian и Ubuntu;
  • RPM-bases системы, в которые входят, например, Red Hat Linux, Fedora и OpenSUSE
  • source-based системы, в которых программное обеспечение собирается не из готовых пакетов для установки, а из исходных кодов – Slackware и Gentoo.

Отличительной особенностью операционных систем, основанных на ядре Linux, является то, что практически всё программное обеспечение, включая саму операционную систему, распространяется по бесплатным лицензиям [2].

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

Первые версии Windows не являлись полноценными операционными системами, а по сути представляли собой графический интерфейс для операционной системы MS DOS. Своё же начало эта линейка ведёт отсчёт с середины 1980-х годов, когда вышла в продажу первая версия – Windows 1.0.

Впервые деление на персональные и серверные ОС для Windows началось в 1993 году, когда вышла первая операционная система Windows NT[2] для серверов и корпоративных компьютеров. С этого времени компания Microsoft начала выпуск операционных систем отдельно для персональных компьютеров и/или корпоративных рабочих станций и отдельно для серверного оборудования.

На момент написания работы последней версией персональной операционной системы семейства Windows является Windows 10, а для серверов – Windows 2019 Server[3].

Среди персональных (или, так называемых десктопных) операционных систем явно превалирует Windows. Портал Net Marketshare приводит аналитику использования операционных систем:

Рисунок 1 Статистика использования десктопных ОС
по данным портала Net Marketshare[4]

На графике видно, что популярнейшие на момент написания работы операционные системы Windows 7 и Windows 10 занимают примерно 78% рынка. По данным этого же портала суммарная доля ОС Windows составляет 86%.

Что касается использования операционной системы на серверном оборудовании, то здесь ситуация сильно отличается от того, что мы видим в десктопном сегменте. Аналитическое агентство W3Cook приводит статистику установок различных операционных систем на web-серверах: доля ОС Windows составляет 1,86%, в то время как Linux – 98,14%[5]. Объясняется это достаточно просто: продукт компании Microsoft является коммерческим, в то время как и дистрибутивы Linux, и программное обеспечение для этой ОС в своём большинстве бесплатны.

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

Точкой отсчёта создания ОС Unix принято считать 1969 год – программисты лаборатории Bell Labs компании AT&T для решения задач лаборатории разработали для рабочего компьютера PDP‑7 операционную систему на языке ассемблер. Интересным является тот факт, что изначально широкое распространение этой ОС не планировалось. В силу того, что ассемблерные коды привязаны к архитектуре (у разных производителей процессоров свой набор инструкций), энтузиастами код был переписан на языке Си, что открыло возможности для кроссплатформенного использования.

В середине 1970-х годов студентами калифорнийского университета в Беркли был выпущен свой релиз версии Unix. Причиной отдельной версии ОС являлось то, что в изначальном варианте Unix не было встроенной поддержки сетевого взаимодействия между разными рабочими станциями. Операционная система, разработанная в университете Беркли, получила название BSD (аббревиатура от англ. Berkley Software Distribution). Данный этап по сути задал два различных вектора развития Unix: коммерческие продукты, выпускаемые под лицензией, основанной на пятой редакции выпуска Unix (т. н. System V), и Unix BSD [1, p. 5].

В настоящее время клоны Unix очень широко распространены. Достигается это благодаря нескольким существенным особенностям:

  • системы как правило обладают кроссплатформенностью;
  • полная, а порой избыточная, документация на всё поставляемое программное обеспечение;
  • гибкая система настройки;
  • повсеместно внедряемый графический интерфейс;
  • дополнительные модули для запуска приложений конкурирующих операционных систем [3, p. 4].

Тем не менее, Unix-подобные системы не лишены и недостатков, среди которых, например, сложность администрирования, вызванная такими факторами, как:

  • неочевидное разграничение прав доступа пользователей для доступа к конфиденциальной информации;
  • требуемая квалификация, обуславливающаяся чрезвычайно большим количеством команд и их параметрами;
  • большое разнообразие сборок операционных систем делает управление программами сложной задачей [4, p. 6];
  • неограниченные полномочия администратора, что дополнительно усложняет процесс устранения возможных ошибок [3, p. 5].

Нормативная база

Государственный стандарт ГОСТ Р 53622-2009 «Информационные технологии (ИТ). Информационно-вычислительные системы. Стадии и этапы жизненного цикла, виды и комплектность документов» определяет это понятие следующим образом: «Информационно-вычислительная система (программно-технический комплекс) – это совокупность данных (баз данных) и программ, функционирующих на вычислительных средствах как единое целое для решения определённых задач[6]» [5]. Поэтому любую операционную систему можно рассматривать как часть информационной системы[7][8] [6].

Любая информационная система вместе с находящимися в ней данными должна иметь три важнейших свойства: конфиденциальность, целостность и доступность[9] [7]. При этом в ГОСТ Р ИСО/МЭК 15408-1-2012 «Информационная технология (ИТ). Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 1. Введение и общая модель» под конфиденциальностью понимается защита информации от несанкционированного раскрытия, под целостностью – защита от несанкционированной модификации, а под доступностью – защита от потери возможности её использования[10] [6].

Понятие безопасности информационной системы, а точнее, её защищённости, описано в стандарте ГОСТ Р 50739-95 «Средства вычислительной техники. Защита от несанкционированного доступа к информации. Общие технические требования» и включает в себя выполнение одновременное трёх требований:

  1. однозначно определённые и непротиворечивые правила разграничение доступа;
  2. регистрация событий, имеющих отношение к безопасности;
  3. гарантии того, что выполняются первые два требования[11] [8].

Также ГОСТ Р 51583-2014 «Защита информации. Порядок создания автоматизированных систем в защищенном исполнении. Общие положения» предписывает при создании информационной системы руководствоваться принципом защиты от несанкционированного доступа, а точнее обеспечивать комплексную защиту информации от НСД и несанкционированных и непреднамеренных воздействий на информацию[12] [7].

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

Сама по себе информация не материальна, но она хранится на материальных носителях и с их помощью передаётся. Ввиду этого встаёт вопрос о том, как защитить носители информации и саму информацию от случайных или намеренных воздействий. Под информационной безопасностью в контексте данной работы будет пониматься как раз защищённость информации от обозначенного выше влияния. Под защитой информации будем понимать меры, направленные на обеспечение информационной безопасности [9].

Задачи, которые решает злоумышленник при попытке нарушить периметр безопасности, достаточно разнообразны. А. Г. Лихоносов в интернет‑курсе по дисциплине «Безопасность серверных операционных систем» группирует их по следующим критериям:

  • хищение конфиденциальной информации;
  • урон репутации владельца информации;
  • снижение работоспособности информационной системы;
  • трата ресурсов на устранение последствий;
  • финансовые потери [10].

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

Стоит сказать, что обеспечение безопасности – сложный процесс. Я абсолютно согласен с автором учебного пособия «Защитные механизмы операционной системы Linux» Баклановым В. В., который говорит, что всё, что касается информационной защиты, не должно быть элементарно и предсказуемо [11, p. 7].

Разграничение прав доступа

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

Пользователи и группы

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

Операционные системы на базе ядра Linux поддерживают по истине огромное количество пользователей. Все пользователи для нужд операционной системы пронумерованы, начиная от нуля. Суперпользователю root принадлежит идентификатор 0, системные пользователи имеют идентификаторы от 1 до 100, а все остальные идентификаторы используются для обычных пользователей. Тем не менее, для удобства идентификаторам присваиваются имена (например, 0 – root). Максимальное количество пользователей в системе составляет более четырёх миллиардов (232 различных пользователей).

Обычно система не позволяет добавить пользователей с двумя одинаковыми идентификаторами, однако существуют методы обхода этой меры защиты. Она может быть использована злоумышленниками для получения привилегий путём непосредственного редактирования файла с учётными записями [11, p. 11]. Тем не менее, наличие двух учётных записей с одинаковыми именами недопустимо и воспринимается системой как ошибка [11, p. 18].

В операционных системах семейства Unix существует несколько зарезервированных пользователей, от имени которых выполняются компоненты самой операционной системы: daemon, bin, sys, nobody и др. Помимо этого, в таких ОС существует специальный привилегированный пользователь root, называемый суперпользователем, и для которого не существует никаких ограничений. В своём учебном пособии В. В. Бакланов пишет, что пользователь root – это не право, а возможность не считаться ни с какими правами[13].

Системным пользователям, за исключением пользователя root, обычно не задаются пароли и они не могут работать с командной строкой, у них нет возможности непосредственного входа в систему – именно поэтому они называются «псевдопользователям». Сделано это в целях обеспечения безопасности на уровне операционной системы, так как подобные пользователи зачастую имеют специфичные права, которые могут быть использованы в криминальных целях [11, p. 12].

Элементарной мерой обеспечения безопасности пользователей является назначение пароля. В операционных системах семейства Unix информация о пользователях хранится в специальном файле /etc/passwd, но информация о пароле в целях безопасности как правило находится в другом месте – /etc/shadow [1, p. 74]. При этом пароль хранится не в открытом виде, а в зашифрованном, а расшифровать его невозможно. При прохождении аутентификации система шифрует парольную фразу и сравнивает полученное значение с информацией, хранящейся в файле /etc/shadow [3, p. 8]. Если результат совпадает, то происходит авторизация пользователя[14]. При заведении нового пользователя в системе можно сразу же задать ему пароль, но этот способ не является хорошей практикой, так как пароль сохраняется в истории команд пользователя, что приводит к компрометации. Поэтому после добавления пользователя ему может быть не назначен пароль, а при первом входе его нужно будет сменить [11, p. 15]. Другим аргументом против задания пароля непосредственно при заведении пользователя является то, что утилита useradd в некоторых случаях может не шифровать пароль, а записывать его в файл /etc/shadow в открытом виде [3, p. 7]. Смена пароля осуществляется с помощью программы passwd.

Пользователь всегда принадлежит какой-либо группе, которая задаёт права доступа в операционной системе. Тем не менее, пользователь может состоять в разных группах, что расширяет его права. Также у пользователя всегда есть основная группа, к которой он принадлежит – именно она и задаёт основные привилегии в системе. Количество групп не столь велико, как количество пользователей – не более 65 536. Один пользователь может состоять в неограниченном количестве групп [3, p. 6].

Заведение групп осуществляется с помощью утилиты groupadd. При добавлении пользователя в соответствии с системными настройками если не задана основная группа, то либо заводится группа с тем же именем, что и у создаваемого пользователя, либо та группа, которая определена по умолчанию для новых пользователей в конфигурационных файлах. Информация о группах хранится в файле /etc/group [11, p. 13].

Хорошей практикой разграничения прав является выдача только минимальных разрешений, необходимых для выполнения функций (принцип минимальных привилегий). Суть данного принципа изложена в интернет-курсе «Безопасность баз данных» А. Г. Лихоносовым: «Пользователю должно быть явно разрешено выполнение каждого действия в системе. Другими словами, возможность выполнения какого-либо действия в системе по умолчанию должна быть отключена или определена в минимально возможном объёме, определяемом объективными условиями эксплуатации системы»[15] [12]. Используя хорошо продуманную ролевую модель, можно добавлять или ограничивать конкретным пользователям права доступам к имеющимся ресурсам, функциям и данным операционной системы.

Как и в случае с пользователями, в ОС на базе ядра Linux есть специальные зарезервированные имена групп, среди которых:

  • daemon – от имени этой группы и пользователя daemon запускаются сервисы, которым необходима возможность записи файлов на диск;
  • nogroup – используется для процессов, которые не могут создавать файлы на диске, а только читать, обычно применяется вместе с пользователем nobody;
  • adm – позволяет читать файлы аудита из директории /var/log;
  • disk – открывает доступ к дискам /dev/sd и /dev/hd. Так как все файлы в конечном счёте хранятся на диске, то добавление в эту группу по сути делает любого члена группы суперпользователем;
  • wheel – позволяет запускать утилиту sudo для повышения привилегий;
  • shadow – разрешает чтение файла /etc/shadow;
  • staff – разрешает запись в папку /usr/local.

Отдельно стоит отметить случай, когда пользователя необходимо исключить из системы. Представим ситуацию, когда увольняется сотрудник компании, и тогда встаёт вопрос, что делать с самим пользователем, его файлами и каталогами. С одной стороны, можно удалить пользователя из системы с помощью утилиты userdel, при этом удалятся именно сведения об учётной записи из файлов /etc/passwd и /etc/shadow, но каталоги и файлы, созданные пользователем и/или принадлежащие ему, останутся. При заведении нового пользователя в систему есть вероятность, что ему будет назначен тот же идентификатор, который был у удалённого пользователя, и тогда вся его информация окажется в чужих руках. Лучшей практикой является блокирование учётной записи – то есть задание невозможности входа пользователя в систему. Делается это с помощью команды usermod -L some_user [11, p. 21].

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

  1. использовать встроенную утилиту su, и выполнить команду под именем суперпользователя, например: su -c "chattr +i file_name". Утилита chattr доступна только суперпользователю, поэтому её использование требует повышения привилегий в системе. У описанного метода имеется серьёзный недостаток – пароль суперпользователя необходимо передать тому пользователю, который будет выполнять команду, что является по сути добровольной компрометацией;
  2. второй подход связан с использованием специальной утилиты sudo, которая предоставляет пользователям конкретные права. В связанном с утилитой файле /etc/sudoers хранится информация о командах, которые разрешено исполнять пользователю, а сам файл доступен для чтения и редактирования только суперпользователю. Если пользователю в файле разрешено использование утилиты chattr, то введя команду sudo chattr +i file_name желаемый результат будет достигнут без компрометации суперпользователя [3, pp. 12-13].

У второго способа есть ещё одна важная сторона. Использование утилиты su приводит к переназначению прав доступа к файлам и программам таким образом, что пользоваться ими сможет только суперпользователь. Использование утилиты sudo выполняет команду от имени суперпользователя, но в сеансе того пользователя, который утилиту использует, что не изменяет права доступа к затронутым файлам[16].

Подытоживая вышесказанное, при заведении пользователя в систему необходимо:

  1. назначить основную группу в соответствии с планируемой ролевой моделью, в которую будет входить пользователь;
  2. назначить дополнительные группы, если необходимо;
  3. предоставить пользователю возможность самому задать себе пароль для входа либо запретить пользователю вход в систему;
  4. пользователям рекомендуется выдавать строго ограниченные разрешения, чтобы они не имели лишних привилегий в системе, могущих привести к нарушению периметра безопасности;
  5. сами привилегии необходимо устанавливать для групп, указывая их явно в файле /etc/sudoers с помощью утилиты visudo.

Угрозы, связанные с пользователями

Получение привилегий суперпользователя – вожделенный объект посягательств со стороны злоумышленника. При этом возможны ситуации, когда администратор системы компрометирует сам себя, например, посредством социальной инженерии, также допустимы варианты провокации, когда администратор вынужденно выполняет действие, ведущее к компрометации. Поэтому администратору будет разумно принять решение использовать собственную учётную запись с правами обычного пользователя [11, p. 13]. В целях безопасности также учётную запись root в некоторых версиях Unix-подобных систем можно отключать совсем, что гарантирует невозможность запустить сеанс суперпользователя. Однако в этом случае есть и обратная сторона медали, на которой в книге «Защита и безопасность в сетях Linux» заостряет внимание Дэвид Бэндл: «Подлинный администратор системы, использующий другое имя, может оказаться беспомощным в случае блокировки консоли» [13]. Другими словами, есть риск, что администратор может вообще потерять контроль над системой и станет её обычным пользователем.

Помимо получения максимальных привилегий, стоит обратить внимание на необходимость установки пароля каждому пользователю. Так, если в файле /etc/passwd не указан пароль пользователя или ссылка на него в фале /etc/shadow, то такой пользователь сможет беспрепятственно войти в систему.

Следующий компонент уязвимости – создание пользователя с идентификатором UID 0. Если предположить, что в файле /etc/passwd какому-то пользователю соответствует UID 0, то так он автоматически становится ещё одним администратором. При этом количество администраторов может быть любым, главное – различие в именах пользователей [11, p. 18].

Права доступа к файлам и каталогам

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

  1. право на чтение устанавливает или ограничивает возможность чтения содержащихся в файле данных;
  2. право на запись устанавливает или ограничивает возможность модификации содержащихся в файле данных;
  3. право на выполнение устанавливает или ограничивает возможность исполнения программы, содержащейся в файле.

Права доступа можно устанавливать на трёх уровнях:

  1. владелец файла;
  2. группа-владелец файла;
  3. остальные пользователи.

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

Владельца файла можно изменять, однако, перемещать файл другому пользователю нельзя. Данный подход связан с методами обеспечения безопасности, например, чтобы не допустить случайный запуск вредоносной программы [3, p. 12].

Отдельно стоит отметить, что право на запись в файл не требует права на его просмотр, а для выполнения сценария, содержащегося в файле, право на чтение необходимо, так как в этом случае оболочка исполняемого сценария должна прочитать содержащиеся в файле строки. Однако, для выполнения сценария право на запуск не требуется – оболочке необходимо лишь передать тот командный интерпретатор, который сценарий выполнит, например: sh ./some_scenario.sh [11, p. 27].

Права доступа к каталогам несколько отличаются от прав доступа к файлам. Так, право на чтение каталога определяет возможность прочитать список содержащихся в нём файлов, тогда как возможность чтения файлов определяется правами доступа к ним. Другими словами, пользователь может иметь возможность открыть каталог, но не иметь возможности прочитать ни один файл, который в нём содержится. При отсутствии права на запись пользователь не сможет создать или удалить файл в каталоге[17]. Право выполнения разрешает или ограничивает возможность сделать каталог текущим, а также прочитать атрибуты содержащихся в каталоге файлов [1, pp. 75-78].

Проверить наличие или отсутствие привилегий на файл или каталог можно с помощью команды ls -l. В результате будет выведен список файлов и/или каталогов, в том месте, где команда применяется, например:

drwxr-xr-x root root etc

Первый символ указывает на то, что etc – это каталог, дальше следуют привилегии, установленные для пользователя root, группы-владельца (основной группы этого пользователя) и для всех остальных пользователей.

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

Отдельным пунктом в этом разделе отмечу тот факт, что удаление файлов и каталогов в файловой системе ОС на базе ядра Linux происходит навсегда. Другими словами, в подобной ОС нет подобия «Корзины», привычной для Windows пользователей. Это может служить причиной того, что кто-то может случайно удалить важный файл без возможности восстановления. Также этим может пользоваться злоумышленник, удаляя, например, важные данные или файлы аудита.

Для обхода этого пути можно порекомендовать запрет на использование программы rm, которая удаляет файлы с диска, и использовать аналог этой программы, который будет их не удалять, а перемещать в заранее отведённое место. Однако, здесь также стоит следить и за тем регулярной очисткой подобного каталога [3, p. 43].

Угрозы, связанные с правами доступа

Как правило, при заведении нового пользователя в систему для него создаётся корневой каталог в директории /home, например, /home/kirill.elistratov. Таких пользователей в одной и той же системе может быть много, и если они все входят в одну и ту же группу, например, users, то могут беспрепятственно исследовать чужие файлы. Это является явным нарушением безопасности, так как ведёт к открытию информации. Чтобы разграничить права доступа разумно ограничивать доступ к домашним директориям, выдавая разрешения на полный доступ внутри этого каталога лишь его владельцу, а всем остальным доступ запрещать. То есть права доступа к директориям пользователей могут выглядеть таким образом:

drwx------ kirill.elistratov users kirill.elistratov

В приведённом примере указано, что для директории kirill.elistratov, находящейся в каталоге /home, для пользователя kirill.elistratov выданы полные права. При этом группа-владелец этой директории – users, но другие пользователи, входящие в эту группу, ни прочитать содержимое каталога, ни выполнить какой-либо сценарий не смогут. То же самое правило касается и всех остальных пользователей.

При этом владельцем каталога /home должен являться суперпользователь – эта мера необходима, чтобы другие пользователи не смогли создавать файлы и каталоги вне своей домашней директории, а также менять свои привилегии для директорий, содержащихся в каталоге /home [11, p. 40].

Управление ресурсами

Не секрет, что каждая запущенная программа в той или иной степени потребляет ресурсы операционной системы: оперативную память, обращение к дискам, процессорные мощности. Среди угроз, которые несут в себе бесконтрольные процессы, можно назвать запуск опасного сценария, чрезмерное потребление процессорного времени, доступ процесса в чужое пространство. Вообще говоря, процесс – это одновременно и исполняемая программа, и ресурсы, которая та потребляет [11, p. 53].

Процессы можно разделить на три группы:

  1. системные – процессы, запускаемые ядром ОС. Они запускаются при загрузке операционной системы и функционируют в течение всего времени её работы. В силу того, что эти процессы запускаются ядром, они могут обращаться к функциям, недоступным другим процессам;
  2. сервисные службы – некие процессы для обслуживания системы, например, отправления заданий на печать. Службы могут запускаться автоматически после инициализации ядра, могут быть запущены пользователем или при наступлении какого-либо события;
  3. пользовательские – процессы, запускаемые пользователями из исполняемых файлов. Отличие от сервисных служб в том, что пользовательский процесс, как правило, завершается при выходе пользователя из системы [11, p. 55].

Процессорные ресурсы, используемые программами, распределяются с помощью планировщика, включённого в состав ядра ОС. При этом пользователь не может повышать приоритет своих процессов для получения больших вычислительных мощностей. Однако, возможны ситуации, когда пользовательский процесс запрашивает слишком большой объём памяти, что ведёт к замедлению работы любых других процессов. Подобное проявление возможно как случайно, так и намеренно – например, злоумышленником, желающим привести компьютер в бездействие. Поэтому администратору системы будет разумно задать ограничение на максимальный размер файла для пользователей, а также на максимальное количество одновременно запускаемых процессов. Делается это с помощью команды ulimit с параметрами:

  • -f задаёт максимальный размер файла;
  • -u задаёт максимальное количество одновременных процессов для пользователя, запускаемых со всех терминалов;
  • -n задаёт ограничение на количество одновременно открываемых одним процессом файлов [11, pp. 56-59].

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

Отслеживание ресурсов

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

Для отслеживания меняющихся во времени процессов удобно использовать программу watch. В ней, например, можно указать интервал в секундах, через который программа будет производить наблюдения, и выполняемую команду. К примеру, если нужно отслеживать изменения в каталоге /var/upload, то можно использовать следующую команду: watch -d ls -l /var/upload/.

Планировщик заданий

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

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

Ограничение использования программы crontab делается с помощью создания файла cron.allow в каталоге /etc. В этом файле должны быть построчно перечислены все пользователи, которым разрешено добавление заданий в планировщик. Таким простым способом соблюдается основное правило информационной безопасности: должно быть запрещено всё, что явно не разрешено[18].

Отдельно стоит отметить, что наличие пустого файла cron.allow в каталоге /etc запрещает любым пользователям использовать планировщик заданий, даже если существует файл cron.deny и он не пустой [11, p. 76].

Сетевая безопасность

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

Когда злоумышленник выбирает целью атаки какой-либо удалённый компьютер, он начинает поиск уязвимостей с самого простого: проверить доступность узла с помощью так называемого эхо-запроса, просканировать сеть на наличие узлов, имеющих выход в Интернет, проверить открытые порты на каждом узле и. т. п. По мнению авторов книги «Секреты хакеров. Безопасность сетей – готовые решения», самым простым способом является фильтрация ICMP-пакетов, с помощью которых прослушивается сеть предприятия. Здесь можно пойти двумя путями:

  1. полностью отключить возможность обмена пакетами по протоколу ICMP;
  2. заблокировать все сообщения, которые не нужны в работе, а необходимые для диагностики сообщения оставить, например: ECHO_REPLY, HOST_UNREACHABLE и TIME_EXCEEDED.

Можно разрешить обмен сообщениями по протоколу ICMP только с несколькими IP-адресами, например, принадлежащими Интернет-провайдеру [14].

Например, сайт компании Microsoft не обменивается сообщениями по ICMP-протоколу при выполнении команды ping (см. Рисунок 2).

Стоит добавить, что полностью открытый протокол ICMP предоставляет злоумышленнику возможность реализации так называемой DDoS-атаки[19].

Существуют и более сложные методы сканирования сети. Одним из них является, например, использование утилиты nmap, которая использует в своей работе особенности в реализации стека протоколов TCP/IP. Её реализация строится на попытках установки соединения либо по поиску открытых портов по определённым алгоритмам по протоколам TCP и UPD, а также посредством сканирования открытых портов RPC. Программа способна сканировать как отдельный узел, так и целую сеть. Эту программу можно использовать в целях профилактики, запуская её на сканирование с компьютера, который непосредственно хотим проверить, а также из внутренней сети и из внешней. Подобный механизм даст понимание о том, как увидит вашу сеть потенциальный злоумышленник [13, p. 300].

Рисунок Недоступность сайта компании Microsoft для ICMP-пакетов

Дополнительной мерой осуществления безопасности является запрет на подключение суперпользователя по протоколу ssh, то есть даже администратор не сможет выполнить удалённое подключение к терминалу под правами суперпользователя – ему потребуется зайти под своей отдельной учётной записью, а затем переключиться на пользователя root [13, p. 276]. Для этого необходимо скорректировать файл /etc/ssh/sshd_config так, чтобы значение переменной PermitRootLogin принимало значение no, и перезапустить службу sshd.

Ещё одной мерой по обеспечению сетевой безопасности, о которой уже вскользь упоминалось – отключение службы telnet. Опасность кроется в том, что протокол, используемый службой, не шифрует проходящий трафик, и помимо прочего его назначение – предоставлять доступ к удалённой системе. В современном мире существуют гораздо более удачные способы реализации удалённого подключения, такие как служба Secure Shell (SSH) [13, p. 136].

Аудит

Операционная система настроена таким образом, что она сама фиксирует многие значимые события в файлах аудита. Подобные события, выполняемые пользователями и программами, записываются в специальные файлы, которые, как правило, имеют расширение .log. Хотя операционной системе наличие подобного постфикса без надобности, это обусловлено удобством для пользователя. Основная часть файлов аудита расположена в каталоге /var/log. В основном, это текстовые файлы, в которые происходит запись построчно и последовательно. Запуск системы аудита, а точнее – сервисной службы syslogd, – происходит автоматически и работает до остановки системы. Эта служба сама не записывает никакие сообщения в файлы аудита, а только следит, чтобы это делали соответствующие программы [11, p. 105].

Ниже перечислены основные файлы аудита:

  • cron – содержит информацию о фактах выполнениях периодических заданий планировщика задач (crontab);
  • debug – содержит отладочную информацию ядра операционной системы, а также системных и прикладных программ;
  • faillog – содержит информацию о неудачных попытках входа в систему;
  • lastlog – содержит информацию о последних входах в систему;
  • secure – содержит информацию о попытках получения пользователями полномочий root;
  • utmp – содержит информацию о текущих сеансах;
  • wtmp – содержит информацию о всех регистрациях пользователей в системе [3, p. 60].

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

Для злоумышленника файлы аудита представляют интерес. Так, автор учебного пособия «Защитные механизмы операционной системы Linux» приводит следующие способы нейтрализации системы аудита:

  1. удаление журнальных файлов;
  2. завершение службы syslogd;
  3. перенаправление службы вывода результата работы службы syslogd в устройство /dev/null;
  4. модификация службы syslogd таким образом, чтобы она перестала регистрировать события [11, p. 106].

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

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

  • используют ли пользователи программу su для повышения своих привилегий в системе;
  • осуществляются ли попытки сканирования системы на предмет наличия открытых портов. Как правило, стандартные службы используют одни и те же порты, поэтому по наличию открытого порта злоумышленник легко может догадаться, какие службы на компьютере запущены;
  • проводит ли кто-то попытку подключения к службе, не используя её;
  • пробует ли кто-то узнать версию операционной системы [13, pp. 276-277].

Такие программы, как last, who, w и lastlog, используют файлы аудита для вывода запрашиваемых сведений. Более того, файлы utmp, wtmp и lastlog записываются в бинарном формате, что не даёт возможности их прямого чтения через редактор, поэтому их чтение возможно только с помощью указанных утилит [13, p. 284].

Дополнительные меры

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

Проверка установленных пакетов позволяет понять, какие модификации были внесены после установки системы. В разных системах это делается по-разному, в ОС rpm-based существуют две команды:

  • rpm -qa – выводит список установленных пакетов в изначальном состоянии системы;
  • rpm -Va – выводит список установленных пакетов на текущий момент.

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

Проверка файла /etc/passwd на наличие пользователя с идентификатором пользователя или группы равным нулю позволит выявить, не пробует ли кто-то получить себе права суперпользователя. Делается это с помощью команды grep ":0:" /etc/passwd.

Также стоит убедиться, нет ли пользователей в системе с пустым паролем, так как это может стать дырой в безопасности. Для этого необходимо подвергнуть проверке файл /etc/shadow с помощью команды awk -F: ' { print $2 ":" $1 } ' /etc/shadow | grep "V - | sed "s/://g" [13, pp. 286-288].

Регулярная проверка компьютера – да и всей сети в целом – с помощью сканера позволит, во-первых, понять, как видит сеть злоумышленник, а также не появилось ли каких-то дополнительных служб и открытых портов, которых раньше не было. Для этой цели можно использовать уже ранее упоминавшуюся программу nmap [13, p. 300].

Заключение

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

Список литературы

x

1.

Синицын С.В., Батаев А.В., Налютин Н.Ю. Операционные системы. Учебник. 3-е изд. Москва: Издательский центр "Академия", 2013. 304 с.

2.

Рейтинг серверных операционных систем 2016 [Электронный ресурс] // Рейтинги и обзоры: [сайт]. [2016]. URL: https:/​/​tagline.ru/​server-operating-systems-rating/ (дата обращения: 25.2.2019).

3.

Бакланов В.В. Администрирование и безопасность операционных систем Linux. Учебное пособие. Екатеринбург: ГОУ ВПО "Уральский государственный технический университет", 2005. 93 с.

4.

Дугалл Д. Различия между UNIX и Linux. Рязань: Рязанский государственный радиотехнический университет, 2008.

5.

ГОСТ Р 53622-2009. Информационные технологии (ИТ). Информационно-вычислительные системы. Стадии и этапы жизненного цикла, виды и комплектность документов. 2009.

6.

ГОСТ Р ИСО/МЭК 15408-1-2012. Информационная технология (ИТ). Ме-тоды и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 1. Введение и общая модель.

7.

ГОСТ Р 51583-2014. Защита информации. Порядок создания автоматизированных систем в защищенном исполнении. Общие положения. 2014.

8.

ГОСТ Р 50739-95. Средства вычислительной техники. Защита от несанкционированного доступа к информации. Общие технические требования.

9.

Безбогов А.А., Яковлев А.В., Мартемьянов Ю.Ф. Безопасность операционных систем. Москва: Издательство Машиностроение-1, 2007. 220 с.

10.

Лихоносов А.Г. Интернет-курс по дисциплине "Безопасность серверных операционных систем" // MegaCampus 2.0. 2010. URL: http:/​/​e-biblio.ru/​book/​bib/​01_informatika/​bezopasnost_servernyx_os/​sg.html

11.

Бакланов В.В. Защитные механизмы операционной системы Linux. Учебное пособие. Екатеринбург: Уральский федеральный университет имени первого Президента России Б. Н. Ельцина, 2011. 354 с.

12.

Лихоносов А.Г. Интернет-курс по дисциплине "Безопасность баз данных" // MegaCampus 2.0. 2011. URL: http:/​/​e-biblio.ru/​book/​bib/​01_informatika/​b_baz_dan/​sg.html (дата обращения: 28.12.2018).

13.

Бэндл Д. Защита и безопасность в сетях Linux. Санкт-Петербург: Питер, 2002.

14.

Мак-Клар С., Скембрей Д., Курц Д. Секреты хакеров. Безопасность сетей - готовые решения. 3-е-е изд. Москва: Издательский дом "Вильяме", 2002.

15.

Олифер Н.А., Олифер В.Г. Сетевые операционные системы. 2-е изд. Санкт-Петербург: Питер, 2009.

x

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

  2. Несмотря на то, что Windows NT в 1993-м году вышла впервые, она имела порядковый номер Windows NT 3.1. Сделано это было для того, чтобы соответствовать последней на то время версии персональной ОС Windows 3.1.

  3. По данным блога компании Microsoft https://habr.com/ru/company/microsoft/blog/.

  4. https://netmarketshare.com/

  5. Архивная ссылка: https://web.archive.org/web/20150806093859/http://www.w3cook.com/os/summary/

  6. ГОСТ Р 53622-2009 «Информационные технологии (ИТ). Информационно-вычислительные системы. Стадии и этапы жизненного цикла, виды и комплектность документов», глава 3 «Термины и определения», п. 3.5.

  7. ГОСТ Р ИСО/МЭК 15408-1-2012 «Информационная технология (ИТ). Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 1. Введение и общая модель», глава 5 «Краткий обзор», раздел 5.2 «Объект оценки».

  8. Там же, п.п. 5.2.2.

  9. ГОСТ Р 51583-2014 «Защита информации. Порядок создания автоматизированных систем в защищенном исполнении. Общие положения», глава 7 «Содержание и порядок выполнения работ по защите информации о создаваемой автоматизированной системе в защищенном исполнении», п. 7.4.

  10. ГОСТ Р ИСО/МЭК 15408-1-2012 «Информационная технология (ИТ). Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. Часть 1. Введение и общая модель», введение.

  11. ГОСТ Р 50739-95 «Средства вычислительной техники. Защита от несанкционированного доступа к информации. Общие технические требования», глава 4 «Технические требования».

  12. ГОСТ Р 51583-2014 «Защита информации. Порядок создания автоматизированных систем в защищенном исполнении. Общие положения», глава 5 «Общие положения», пункт 5.3.

  13. Бакланов В.В. Администрирование и безопасность операционных систем Linux. Учебное пособие, стр. 6.

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

  15. Лихоносов А. Г. Интернет-курс по дисциплине «Безопасность баз данных».

  16. Стоит заметить, что sudo – это программа, которая может отсутствовать в системе. Поэтому в некоторых случаях её, возможно, нужно будет предварительно установить.

  17. Стоит иметь в виду, что наличие права на запись в каталоге даёт возможность пользователю удалить файл, на который нет вообще никаких прав. Это связано с тем, что такой файл не модифицируется, меняется содержимое каталога [1, p. 78].

  18. По мнению автора учебного пособия «Защитные механизмы операционной системы Linux» Бакланова В. В., стр. 76, абз. 2.

  19. DDoS-атаки (англ. Distributed Denial of Service – распределённая атака типа «отказ в обслуживании». Суть заключается в посылке множественных бессмысленных запросов на какой-либо узел, в результате чего сервер сначала начинает работать медленней, а затем и вовсе наступает его отказ. Происходит это из-за того, что сервер вынужден одновременно обрабатывать, как правило, миллионы запросов.