Модель безопасности Linux (Unix-like OS) в сравнение с концептом Windows (NT) и MacOS (а так же iOS)

Модель безопасности Linux (Unix-like OS) в сравнение с концептом Windows (NT) и MacOS (а так же iOS)

https://t.me/w2hack

Intro

Ну, что друзья, сегодня пост о концептуальной модели обеспечения безопасности во всех Unix-like операционных системах, к которым прежде всего можно отнести современные дистрибутивы Linux, семейство дистров от университета Беркли (FreeBSD, OpenBSD, NetBSD), отчасти MacOS с и производные от них деривиативы в виде Solaris, AIX и т.д.

Не секрет, очень распространено мнение, что ОС семейства BSD наиболее защищенные, Linux более стабильна и безопасна чем Windows, с свою очередь Windows полностью дырявая ОС, ну а MacOS это вообще венец творения. В этих словах есть и доля правда и доля устаревшей информации.

Сегодня в статье мы попытаемся взглянуть "техническими глазами" на концепт безопасности популярных конкурирующих ОС.

Рождение UNIX или начало всех начал

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

Unix - это семейство многозадачных и многопользовательских операционных систем, которые основаны на идеях оригинального проекта AT&T Unix, разработанного в 1970-х годах в исследовательском центре Bell Labs легендами того времени - Кеном Томпсоном, Деннисом Ритчи, являющиеся по совместительству идейными авторами и разработчиками языка Си (не путать с С++).

Началось все с того, что в 1965 году компания Bell Telephone Laboratories, объединив собственные труды с фирмой General Electric и проектом MAC Массачусетского научно-технического ВУЗа, обратилась к исследованию новейшей операционной системы, получившей имя Multics. Перед системой Multics были поставлены разнообразные цели, среди которых - обеспечить одновременный доступ к ресурсам ЭВМ множества пользователей, обеспечить необходимую скорость вычислений и хранение данных и дать возможность пользователям при необходимости коллективно использовать данные.

Многие создатели, позднее участвовавшие в разработке ранних версий системы UNIX, приняли участие в работе над системой Multics в организации Bell Laboratories. В попытке усовершенствовать среду программирования, Кен Томпсон, Дэннис Риччи и некоторые другие сотрудники Исследовательского центра по информатике создали на бумаге проект файловой системы, который позднее получил развитие в ранних версиях UNIX.

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

Unix имеет и другие характерные особенности:

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

Когда AT&T разрешила коммерческое лицензирование Unix в 1980-х, множество разработанных проприетарных систем основывались на этом, включая AIXHP-UXIRIXSolarisTru64 UNIXUltrix и Xenix. Растущая несовместимость между системами привела к созданию стандартов взаимодействия, в том числе POSIX и Единой спецификации UNIX.

Между тем в 1983 году Ричардом Столлманом был запущен проект GNU, благодаря которому удалось сделать операционную систему, которую все пользователи компьютера могли свободно использовать, изучать, исправлять, пересобирать. Различные Unix-подобия разрабатывались аналогично GNU, часто с теми же основными компонентами.

Unix-подобная операционная система — операционная система, которая образовалась под влиянием Unix. Термин включает свободные/открытые операционные системы, образованные от Unix компании Bell Labs или эмулирующие его возможности, коммерческие и запатентованные разработки, а также версии, основанные на исходном коде Unix.

Философия Unix или Unix-way развитие

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

Основные постулаты Unix Way:

  • одна задача – одна программа . В Unix не принято делать комбайны для выполнения "сразу всего". Программа делается таким образом, чтобы она могла выполнять одно простое действие, но выполняла его хорошо.
  • есть множество путей решения.Для решений той или иной комплексной задачи каждый может выбирать свой набор простых компонентов для ее решения.
  • все есть файл . Самая замечательная концепция в unix. Так, в Unix все представлено в виде файлов – программы, настройки, системные данные и даже устройства. И с устройствами можно работать как с простыми файлами.
  • pipes (потоки, трубы) В мире Unix - pipes это основной метод связи программ в UNIX-like ОС друг с другом. Каждый раз, когда мы используем символ '|' в командной строке (shell), мы создаём трубу (pipe), которая соединяет стандартный вывод (stdout) одной программы со стандартным вводом (stdin) другой программы.

Все это коренным образом отличает Unix и Linux от Windows.

Модель безопасности Unix-like OS

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

Архитектура операционной системы UNIX

1. Управление доступом в системе

На сегодня существует несколько схем управления доступом, называемых моделями доступа. Рассмотрим самые известные из них:

Мандатная модель доступа - объектам и субъектам системы ставится в соответствие метка безопасности или мандат (например, гриф секретности). При этом метка безопасности субъекта описывает его благонадёжность, а метка безопасность объекта — степень закрытости информации. Доступ к объекту разрешён только субъектам с соответствующей или более сильной меткой.

Списки доступа (Accecc Control Lists, ACL) - все субъекты и объекты системы объединяются в таблицу, в строках которой находятся субъекты (активные сущности), а в столбцах — объекты (пассивные сущности), элементы же такой таблицы содержат перечисление прав, которыми субъект обладает в отношении данного объекта. Такая схема называется субъект-объектная модель.

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

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

2. Управление пользователями и группами

В UNIX роль номинального субъекта безопасности играет пользователь. Каждому пользователю выдается входное имя (login). Каждому входному имени соответствует единственное число, идентификатор пользователя (User IDentifier, UID). Это число и есть ярлык субъекта (номинальный субъект), которым система пользуется для определения прав доступа.

Каждый пользователь входит в одну или более групп. Группа — это список пользователей системы, имеющий собственный идентификатор (Group IDentifier, GID). Поскольку группа объединяет нескольких пользователей системы, в терминах политики безопасности она соответствует понятию множественный субъект. Значит, GID — это ярлык множественного субъекта, каковых у номинального субъекта может быть более одного. Таким образом, одному UID соответствует список GID.

Роль действительного (работающего с объектами) субъекта играет процесс. Каждый процесс снабжен единственным UID: это идентификатор запустившего процесс номинального субъекта, т. е. пользователя. Процесс, порожденный некоторым процессом пользователя, наследует его UID.

3. Права доступа к объектам ОС

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

В соответствии с субъект-субъектной моделью каждый файл снабжен ярлыком, в котором хранятся идентификаторы номинальных субъектов, которые вправе распоряжаться доступом к данному файлу. В случае UNIX это идентификатор пользователя-владельца (UID) и идентификатор группы-владельца (GID). Обратите внимание, что файл может принадлежать только одной группе, в то время как пользователь может входить в несколько групп.

На уровне файловой системы в UNIX определяется три вида доступа: чтение (read, r), запись (write, w) и использование (execution, x). Право на чтение из файла дает доступ к содержащейся в нем информации, а право записи — возможность ее изменять. Право использования трактуется по-разному в зависимости от типа файла. В случае обычного файла оно означает возможность исполнения файла, т. е. запуска программы или командного сценария, содержащейся в этом файле. Для каталога использование — это возможность доступа к файлам этого каталога (точнее говоря, к атрибутам этих файлов — имени, правам доступа и т. п.).

Базовые права доступа в UNIX

При каждом файле имеется ярлык, в котором зафиксированы права доступа к нему. Права доступа включают список из девяти пунктов (три тройки): по три вида доступа для трех групп — пользователя-владельца, группы-владельца и всех остальных. Каждый пункт в этом списке может быть либо разрешён, либо запрещён (равен 0 либо 1). Таким образом, для хранения этой информации о правах доступа достаточно 9 бит.

Последовательность проверки прав доступа в UNIX

4. Разделяемые каталоги

Право на запись для каталога трактуется как возможность создания и удаления файлов в нём, а также возможность изменения атрибутов файлов (например, переименование или удаление). При этом субъекту не обязательно иметь права на запись для этих файлов, поскольку и переименование и удаление файла затрагивают только сам каталог.

Таким образом, из своего каталога пользователь может удалить любой файл. Часто возникает ситуация, когда каталог нужно использовать совместно — в этом случае необходимо разрешить запись в него либо группе пользователей, либо всем пользователям (например, общесистемный каталог для временных файлов). А если запись в каталог разрешена всем, то любой пользователь сможет удалить в нём любой файл. Для избежания этой проблемы был добавлен специальный атрибут — sticky bit. При установке этого атрибута пользователь, имеющий доступ на запись в этот каталог, может изменять только принадлежащие ему файлы.

5. Делегирование полномочий или замена идентификатора процесса

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

Подмена идентификатора в том случае, если процесс запустит вместо себя при помощи системного вызова exec() программу из файла, в правах доступа которого установлен бит подмены идентификатора пользователя(SUID-бит, обозначается s в символьной записи прав доступа).

6. Суперпользователь или root

Пользователь root (он же суперпользователь) имеет нулевые UID и GID и играет роль доверенного субъекта UNIX. Это значит, что он не подчиняется законам, которые управляют правами доступа, и может по своему усмотрению эти права изменять. Большая часть общезначимых (не принадлежащих конкретным пользователям) компонентов системы доступны для модификации только суперпользователю.

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

Администрирование в UNIX (т. е. управление общезначимыми характеристиками системы) требует привилегий суперпользователя. При работе с повышенными привилегиями, в особенности от имени пользователя rootследует быть очень осторожным: выполнение неверной команды может привести к выходу системы из строя и утрате информации. Поэтому даже администраторы никогда не работают в командной оболочке с правами суперпользователя всё время, а переходят в режим суперпользователя только тогда, когда это действительно необходимо (например, с помощью команды su).

7. Аутентификация пользователей

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

  1. процесс getty ожидает реакции пользователя на одной из терминальных линий, в случае активности пользователя выводит приглашение ввести регистрационные данные пользователя;
  2. после ввода имени пользователя запускается программа login, которая проверяет подлинность данных пользователя. Стандартным механизмом является проверка пароля, заданного для данного пользователя;
  3. убедившись, что пароль введён правильно, login запускает командную оболочку с установленными UID и GID данного пользователя. Таким образом, права доступа любого процесса (действительного субъекта), запущенного пользователем в этом сеансе работы, будут определяться правами номинального субъекта UID+GID.
Регистрация пользователя в системе

При работе регистрации на удалённом компьютере роль getty исполняет сетевой демон, например ssh.

В современных UNIX-системах существуют расширения систем авторизации и аутентификации, позволяющие интегрировать в процесс аутентификации любые дополнительные процедуры. Например, в Linux-системах этот механизм называется подключаемые модули аутентификации (Pluggable Authentication Modules, PAM). Рассмотрение этих средств выходит за рамки данного курса.

Краткий обзор модели безопасности Windows (NT)

Модель безопасности Windows NT содержит следующие компоненты: 

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

Распорядитель локальной безопасности (Local Security Authority, LSA), гарантирующий, что каждый пользователь, регистрирующийся в системе, имеет право доступа к ней. Этот компонент является центральным для всей подсистемы безопасности Windows NT. Он создает маркеры безопасного доступа, управляет локальной политикой безопасности и обеспечивает интерактивный сервис аутентификации пользователей.

Диспетчер бюджетов безопасности (Security Accounts Monitor, SAM) - этот компонент поддерживает базу данных пользовательских бюджетов. База данных SAM содержит информацию обо всех пользовательских и групповых бюджетах. SAM обеспечивает сервис валидизации пользовательских паролей, используемый LSA.

Монитор безопасности (Security Reference Monitor) - компонент системы безопасности, ответственный за проверку наличия у пользователей прав доступа к объектам и осуществления действий, которые они пытаются выполнить. Монитор безопасности принудительным образом устанавливает проверку прав доступа к объектам и устанавливает политику аудита заданную LSA. Монитор безопасности предоставляет сервис процессам, которые работают как в режиме ядра, так и в режиме пользователя. Это гарантирует, что все пользователи и процессы, пытающиеся получить доступ к объекту и выполнить над ним некоторые действия, обладают соответствующими правами доступа. Кроме того, монитор безопасности генерирует сообщения аудита в тех случаях, когда это необходимо. 

Ключевой особенностью системы безопасности Windows NT является управление доступом к объектам. Модель безопасности поддерживает информацию защиты для каждого пользователя, группы и объекта. Она может идентифицировать попытки доступа, осуществленные непосредственно пользователем, а также способна выявлять непрямые попытки доступа, предпринятые не самим пользователем, а программой или иным процессом, действующими от лица пользователя. Windows NT отслеживает все попытки доступа и позволяет управлять доступом как к объектам, которые пользователи могут просматривать с помощью пользовательского интерфейса (например, файлам и принтерам), так и к абстрактным объектам, которые с помощью пользовательского интерфейса просмотреть нельзя (к ним относятся, например, процессы и именованные каналы). 

Администратор системы присваивает пользователям и группам права доступа (permissions), с помощью которых можно предоставить или отклонить пользовательский доступ к объектам. Возможность избирательного присвоения прав доступа по усмотрению владельца объекта (или пользователя, уполномоченного изменять права доступа), называется избирательным контролем доступа (discretionary access control). 

Система безопасности идентифицирует пользователей с помощью идентификатора безопасности (security ID, SID). Уникальность идентификаторов безопасности гарантирована, и существование двух идентичных SID полностью исключено. Когда пользователь регистрируется в системе, Windows NT создает маркер безопасности доступа (security access token). В состав маркера безопасного доступа входят SID пользователя, SID всех групп, к которым этот пользователь принадлежит, а также дополнительная информация о пользователе и его группах. Кроме того, любой процесс, работающий от имени пользователя, получает копию его маркера безопасного доступа. Когда пользователь пытается получить доступ к объекту, Windows NT ссылается на содержащийся в маркере безопасного доступа SID. Идентификаторы безопасности (SID) сравниваются со списком контроля доступа к объекту, чтобы гарантировать, что пользователь имеет достаточные права. 

Небольшое сравнение на примере повышения привилегий

Модель привилегий пользователей, применяемая в большинстве UNIX, является одноуровневой и допускает существование только двух типов пользователей: обычные пользователи и суперпользователь (он же root или администратор). В NT же, напротив, используется иерархическая схема, причем, помимо root'а в ней имеется еще один суперпользователь, - система. Что это означает? А то, что в NT, в отличии от UNIX, каждый пользователь получает минимум необходимых ему прав и никогда не повышает уровень своих привилегий без особой необходимости.

Отсутствие системного пользователя в UNIX приводит к невозможности выполнения целого ряда действий иначе, чем временным повышением привилегий запущенной программы до root'a. Взять хотя бы классическую задачу смены пароля. Пользователи могут (и должны!) периодически менять свои пароли. Но ведь в UNIX (как впрочем и в NT) пароли всех пользователей хранятся в одном файле, причем, используемая модель привилегий не позволяет назначать различным частям файла различные права доступа. Но ведь должен пользователь как-то изменять свой пароль, верно? В UNIX эта задача решается так: утилите, ответственной за смену пароля, присваивается специальный атрибут, позволяющий ей при необходимости получать права root'а, что она, собственно, и делает.

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

Более подробно можно почитать тут

Несколько слов про MacOS

В MacOS используется ядро XNU, основанное на микроядре Mach и содержащее программный код, разработанный компанией Apple, а также код из ОС NeXTSTEP и FreeBSD. В итоге можно сказать, что системная архитектура Mac OS X, впрочем, как и NextStep/OpenStep, основана на операционной системе UNIX.

Основа системы — POSIX-совместимая операционная система Darwin, являющаяся свободным программным обеспечением. Все возможности Unix в macOS доступны через консоль.

Darwin – это то, что дополняет микроядро до полноценной системы. Возможно, наиболее понятным (хотя и несколько грубым) определением будет следующее: Mach – это ядро, системный уровень; Darwin – это оболочка для пользователя со всеми его приложениями.

Такая структура устройства системы пошла с 4.4BSD Lite – первой свободно-распространяемой в исходных кодах *nix-системой, очищенной от кода AT&T – первоначально, UNIX был детищем этой компании, и вышел из ее исследовательских лабораторий.

Основами macOS являются:

  • Подсистема с открытым кодом — Darwin (ядро Mach и набор утилит BSD).
  • Среда программирования Core Foundation (Carbon API, Cocoa API и Java API).
  • Графическая среда Aqua (QuickTime, Quartz Extreme и OpenGL).
  • Технологии Core Image, Core Animation, CoreAudio и CoreData.

«Песочница» и защита на уровне ядра

«Песочница» (Sandbox) представлена еще в Mac OS X Lion 10.7. Это изолированная среда для приложений, которые могут навредить системе. OS X также держит в «песочнице» приложения вроде Mac App Store, Messages, Calendar, Contacts, Dictionary, FontBook, PhotoBooth, Quick Look Previews, Notes, Reminders, GameCenter, Mail и FaceTime, так что ничто потенциально вредное не просочится.

Имеется также защита в реальном времени на уровне ядра: встроенная в процессор функция XD (выполнить/отключить), которая «создает мощную преграду между используемой для данных памятью и памятью для исполняемых инструкций».

Address Space Layout Randomization (ASLR) также используется для памяти, используемой ядром, путем случайного выстраивания местоположения ключевых областей данных каждой программы. Этот метод защищает от некоторых атак (например, переполнения буфера), усложняя задачу злоумышленнику, вынужденному подбирать адреса для целеуказания.

Apple ввела рандомизацию для системных библиотек еще в Mac OS X Leopard 10.5 и расширил ее на всю систему, начиная с Mountain Lion 10.8 в июле 2012 года.

Однако не смотря на это число угроз, направленных против Mac OS X, в частности, растет, как и количество пользователей Mac. Для тех, кто считает, что под Мак нет вирусов статья ниже, линк привел.

Линк на статью тут

Немного про iOS

Принцип безопасности заложен в саму основу iOS. Поскольку любые данные пользователя имеют высокий приоритет, Apple постарались спроектировать операционную систему так, чтобы предоставить наивысший уровень безопасности для пользовательской информации. В iPhone, iPad и iPod touch действует несколько уровней безопасности. Низкоуровневые аппаратные функции защищают устройство от вредоносного ПО, когда как высокоуровневые функции iOS обеспечивают безопасный доступ к пользовательским данным и корпоративной информации, а также предотвращают несанкционированное использование устройства.Благодаря тесной взаимосвязи программного и аппаратного обеспечения в устройствах под управлением iOS, каждый шаг, начиная от нагрузки системы и заканчивая установкой приложений, анализируется с точки зрения безопасности и эффективности использования ресурсов. Целостность системы безопасности напрямую зависит от целостности и надежности ядра iOS – XNU.

Подписание кода приложений

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

Почему на iPhone не нужен антивирус!?

К примеру, Лаборатория Касперского не предлагает свой антивирус для iOS. Это может показаться странным, но на самом деле все объясняется очень просто: Apple в принципе не допускает в магазин App Store антивирусы, утверждая, что «компания Apple изначально проектировала платформу iOS как защищенную» и что ее операционная система не нуждается в антивирусе.

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

Очевидно, вышесказанное распространяется только на устройства iOS без джейлбрейка .

Миф о невероятной безопасности macOS


Всем хороших выходных и отличного настроения! Берегите себя, свои данные и своих близких. И по прежнему все свежие посты и новости читай в нашем @w2hack паблике!

Report Page