Добавлен: 22.04.2023
Просмотров: 160
Скачиваний: 2
Также ГОСТ Р 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].
Существуют ситуации, когда обычному пользователю необходимы привилегии, обычно доступные только суперпользователю, например, изменение атрибутов файла. Для этой цели можно пойти двумя путями:
- использовать встроенную утилиту su, и выполнить команду под именем суперпользователя, например: su -c "chattr +i file_name". Утилита chattr доступна только суперпользователю, поэтому её использование требует повышения привилегий в системе. У описанного метода имеется серьёзный недостаток – пароль суперпользователя необходимо передать тому пользователю, который будет выполнять команду, что является по сути добровольной компрометацией;
- второй подход связан с использованием специальной утилиты sudo, которая предоставляет пользователям конкретные права. В связанном с утилитой файле /etc/sudoers хранится информация о командах, которые разрешено исполнять пользователю, а сам файл доступен для чтения и редактирования только суперпользователю. Если пользователю в файле разрешено использование утилиты chattr, то введя команду sudo chattr +i file_name желаемый результат будет достигнут без компрометации суперпользователя [3, pp. 12-13].
У второго способа есть ещё одна важная сторона. Использование утилиты su приводит к переназначению прав доступа к файлам и программам таким образом, что пользоваться ими сможет только суперпользователь. Использование утилиты sudo выполняет команду от имени суперпользователя, но в сеансе того пользователя, который утилиту использует, что не изменяет права доступа к затронутым файлам[16].
Подытоживая вышесказанное, при заведении пользователя в систему необходимо:
- назначить основную группу в соответствии с планируемой ролевой моделью, в которую будет входить пользователь;
- назначить дополнительные группы, если необходимо;
- предоставить пользователю возможность самому задать себе пароль для входа либо запретить пользователю вход в систему;
- пользователям рекомендуется выдавать строго ограниченные разрешения, чтобы они не имели лишних привилегий в системе, могущих привести к нарушению периметра безопасности;
- сами привилегии необходимо устанавливать для групп, указывая их явно в файле /etc/sudoers с помощью утилиты visudo.
Угрозы, связанные с пользователями
Получение привилегий суперпользователя – вожделенный объект посягательств со стороны злоумышленника. При этом возможны ситуации, когда администратор системы компрометирует сам себя, например, посредством социальной инженерии, также допустимы варианты провокации, когда администратор вынужденно выполняет действие, ведущее к компрометации. Поэтому администратору будет разумно принять решение использовать собственную учётную запись с правами обычного пользователя [11, p. 13]. В целях безопасности также учётную запись root в некоторых версиях Unix-подобных систем можно отключать совсем, что гарантирует невозможность запустить сеанс суперпользователя. Однако в этом случае есть и обратная сторона медали, на которой в книге «Защита и безопасность в сетях Linux» заостряет внимание Дэвид Бэндл: «Подлинный администратор системы, использующий другое имя, может оказаться беспомощным в случае блокировки консоли» [13]. Другими словами, есть риск, что администратор может вообще потерять контроль над системой и станет её обычным пользователем.
Помимо получения максимальных привилегий, стоит обратить внимание на необходимость установки пароля каждому пользователю. Так, если в файле /etc/passwd не указан пароль пользователя или ссылка на него в фале /etc/shadow, то такой пользователь сможет беспрепятственно войти в систему.
Следующий компонент уязвимости – создание пользователя с идентификатором UID 0. Если предположить, что в файле /etc/passwd какому-то пользователю соответствует UID 0, то так он автоматически становится ещё одним администратором. При этом количество администраторов может быть любым, главное – различие в именах пользователей [11, p. 18].