Самая быстрая Windows: рейтинг операционных систем. Какая операционная система считается лучшей Надежная операционная система

09.01.2017, Пн, 14:07, Мск , Текст: Владимир Бахур

По данным CVE Details, самой проблемной ОС по числу уязвимостей оказалась Google Android, далеко обогнав по числу багов прошлогоднего «лидера» Apple Mac OS X, многочисленные версии Linux и оставив далеко позади семейство Microsoft Windows.

ОС Android вышла в лидеры «дырявой» статистики

Согласно базе данных сайта CVE Details, отслеживающего и систематизирующего безопасность различных программных продуктов из-за ошибок кода, семейство Microsoft Windows в прошедшем году продемонстрировало наименьший уровень уязвимости среди операционных систем. «пропустив» вперед Apple Mac OS X, многочисленные версии Linux и «лидера» по числу обнаруженных уязвимостей – Google Android.

Согласно данным статистики CVE Details прошлого года, в «лидерах» по числу обнаруженных багов числились Apple Mac OS X (444 уязвимости) и iOS (387). В 2016 году эти операционные системы сместились в рейтинге топ50 наиболее уязвимого ПО на 11 и 15 места с 215 и 161 обнаруженными уязвимостями, соответственно.

Наиболее «дырявая» ОС 2016 года – Google Android, напротив, в 2015 году имела всего лишь 125 замеченных уязвимостей, увеличив, таким образом, печальные показатели более чем в четыре раза всего лишь за один год.

Наиболее часто в прошедшем году у Android обнаруживались уязвимости, связанные с повышением привилегий (39,8%) и отказа в обслуживании (25%). Также важно отметить, что среди 523 обнаруженных ошибок, 254 имели рейтинг уязвимости CVSS (Common Vulnerability Scoring System) на уровне 9 баллов или выше, что на практике означает очень высокую степень опасности таких багов.

В тройку «абсолютных лидеров» 2016 года по числу уязвимостей также вошли Debian Linux и Ubuntu Linux с 319 и 278 обнаруженными багами, соответственно. Четвертое место досталось мультимедийному плееру Adobe Flash Player с 266 багами, хотя в 2015 году он занимал более высокую третью ступеньку с 329 уязвимостями.

Статистика CVE Details 2016 года

И, напротив, наиболее часто «склоняемые» за баги ОС семейства Windows заняли в этом году далеко не «призовые» места». Так, Windows 10 «набрала» 172 бага, Windows 8.1 – 154, Windows 7 и Windows Vista – 134 и 125 обнаруженных уязвимостей, соответственно.

Среди серверных версий наиболее уязвимой (16 строчка рейтинга) оказалась Windows Server 2012 с ее 156 багами, Windows Server 2008 заняла 22 место с 133 уязвимостями.

Статистика CVE Details по браузерам 2016 года также отметила наиболее уязвимым Google Chrome с его 172 багами. За ним со значительным отставанием следует Microsoft Edge (135), далее Mozilla Firefox (133), Microsoft Internet Explorer (129), и в самом низу списка на 44 позиции Apple Safari(56).

Офисный пакет Microsoft Office занял предпоследнюю, 49 строку рейтинга с 48 обнаруженными за 2016 г. уязвимостями.

Статистика CVE Details 2016 года по вендорам

Срез статистики CVE Details топ50 по компаниям вывел в 2016 году на первое место Adobe с суммарным показателем 1383 багов по всем упомянутым в рейтинге продуктам компании (Flash Player, разновидности Acrobat Reader и Acrobat). Второе место досталось Microsoft с ее 1325 багами, на третье место вышла Google (695 ошибок), четвертое и пятое места достались Apple (611) и Red Hat (596).

Специфика методики учета уязвимостей CVE Details

База данных CVE Details учитывает уязвимости ПО в том случае, если они были официально зарегистрированы в базе данных Common Vulnerabilities and Exposures (CVE) корпорации MITRE – негосударственной некоммерческой организацией из США, управляющей федерально финансируемыми исследованиями при поддержке Минобороны, Федеральным управлением гражданской авиации, Департаментом национальной безопасности, Национальным институтом стандартов и технологий

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

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

Далеко не все оценки CVE равны по степени опасности уязвимостей. Более того, ряд производителей ПО выпускает обновления продуктов без предоставления им рейтингов CVE.

Когда последний раз ваш телевизор внезапно отключался или требовал, чтобы вы срочно загрузили из Web какую-нибудь программную заплатку, исправляющую критическую ошибку? В конце концов, если у вас не совсем уж древний телевизор, то, по сути, он тот же компьютер - с центральным процессором, большим монитором, какой-то аналоговой электроникой для декодирования радиосигналов, парочкой специальных устройств ввода/вывода (пульт, встроенный дисковод для кассет или DVD-дисков) и с программным обеспечением, прописанным в оперативной памяти. Этот риторический вопрос возвращает нас к одной неприятной проблеме, о которой так не любят говорить в компьютерной индустрии. Почему телевизоры, DVD-проигрыватели, MP3-плейеры, сотовые телефоны и другие электронные устройства с программным обеспечением вполне надежны и хорошо защищены, а компьютеры - нет? Конечно, тому есть немало «объяснений»: компьютеры - это гибкие системы, пользователи могут менять программное обеспечение, отрасль информационных технологий еще недостаточно развита и так далее. Но, поскольку мы живем в эпоху, когда подавляющее большинство компьютерных пользователей мало сведущи в технических вопросах, то подобные «объяснения» им не кажутся убедительными.

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

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

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

Почему системы ненадежны?

Современные операционные системы имеют две особенности, из-за которых они теряют как в надежности, так и в защищенности. Во-первых, эти ОС огромны по размеру, а, во-вторых, в них очень плохо обеспечена изоляция ошибок. Ядро Linux имеет свыше 2,5 млн. строк кода, а ядро Windows XP как минимум в два раза больше.

Одно из исследований, посвященных изучению надежности программного обеспечения, показало, что программы содержат от 6 до 16 ошибок на каждые 1000 строк исполняемого кода. Согласно результатам другого исследования, частота ошибок в программах находится в пределах от 2 до 75 на каждые 1000 строк исполняемого кода , в зависимости от размера модуля. Даже если исходить из самой скромной оценки (6 ошибок на 1000 строк кода), ядро Linux, по всей видимости, содержит примерно 15 тыс. ошибок; Windows XP - как минимум в два раза больше.

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

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

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

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

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

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

Укрепленные операционные системы

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

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

Цели проекта Nooks заключаются в следующем:

  • защитить ядра от ошибок в драйверах;
  • обеспечить автоматическое восстановление в случае сбоя в драйвере;
  • сделать все это путем минимальных изменений в существующих драйверах и ядре.

Защита ядра от некорректных драйверов - не главная цель. Впервые технология Nooks была реализована на Linux, но эти идеи в равной степени применимы к другим унаследованным ядрам.

Изоляция

Основное средство, позволяющее уберечь структуры данных ядра от уничтожения некорректными драйверами - это карта страниц виртуальной памяти. При работе драйвера все внешние для него страницы переводятся в режим «открыты только для чтения», благодаря чему создается отдельный домен упрощенной защиты для каждого драйвера. Таким образом, драйвер может читать структуры данных ядра, которые ему необходимы, но любая попытка напрямую изменить структуры данных ядра вызовет исключение центрального процессора, которое перехватывает менеджер изоляции Nooks. Доступ к частной памяти драйвера, где хранятся стеки, куча, структуры частных данных и копии объектов ядра, разрешен на чтение и на запись.

Посредничество

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

Nooks предоставляет оболочки как для экспортируемых, так и для импортируемых функций. Теперь, когда ядро вызывает функцию драйвера или драйвер вызывает функцию ядра, вызов на самом деле направляется оболочке, которая проверяет корректность параметров и управляет вызовом. Несмотря на то, что суррогаты (stubs) оболочки (на рис. 1 они изображаются как линии, указывающие как внутрь, так и наружу драйвера) генерируются автоматически на основе прототипов функций, тело оболочки разработчикам приходится писать вручную. В целом группа Nooks написала 455 оболочек: 329 для функций, которые ядро экспортирует, и 126 - для функций, которые экспортируют драйверы устройств.

Когда драйвер пытается модифицировать объект ядра, его оболочка копирует объект в домен защиты драйвера, то есть в его частные страницы, открытые для чтения и записи. Затем драйвер меняет копию. Если запрос был выполнен успешно, менеджер изоляции копирует модифицированные объекты обратно в ядро. Таким образом, сбой в работе драйвера или ошибка во время вызова всегда оставляют объекты ядра в корректном состоянии. Операции контроля за импортируемыми объектами специфические для каждого объекта, в силу чего группе Nooks пришлось вручную писать код для контроля 43 классов объектов, которые используют драйверы Linux.

Восстановление

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

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

Одним словом, во время нормальной работы дублирующий драйвер регистрирует взаимодействия между каждым драйвером и ядром, если это взаимодействие может потребоваться для восстановления. После перезапуска драйвера дублирующий драйвер передает перезапущенному драйверу все данные из журнала регистрации, например, повторяя вызов системы управления вводом/выводом (IOCTL) для того, чтобы установить параметры, такие как громкость звука. Ядру ничего не известно о процессе возвращения драйвера в то состояние, в котором находился старый драйвер. Как только этот процесс завершается, драйвер начинает обрабатывать новые запросы.

Ограничения

Несмотря на то, что, согласно экспериментам, Nooks может обнаруживать 99% фатальных ошибок драйвера и 55% не фатальных, он далеко не совершенен. Например, драйверы могут выполнять привилегированные команды, которые они выполнять не должны; они могут записывать данные в некорректные порты ввода/вывода и выполнять бесконечные циклы. Более того, группе Nooks большое количество оболочек пришлось написать вручную, и эти оболочки могут содержать ошибки. Наконец, при данном подходе невозможно запретить драйверам записывать данные в любое место памяти. Тем не менее это потенциально весьма полезный шаг к повышению надежности унаследованных ядер.

Паравиртуальные машины

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

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

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

В частности, в 90-х годах группа разработчиков из университета Карлсруэ создала микроядро L4 . Они смогли запустить слегка модифицированную версию Linux (L4Linux) на L4 в режиме, который можно называть видом виртуальной машины . Позже разработчики выяснили, что вместо того чтобы запускать только одну копию Linux на L4, они могут запускать несколько копий. Как показано на рис. 2 , эта мысль привела к идее использования одной из виртуальных машин Linux для работы прикладных программ, а другой или нескольких - для работы драйверов устройств.

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

Поскольку драйверы устройств работают на аппаратном обеспечении в режиме пользователя, основной вопрос заключается в том, как они будут выполнять ввод/вывод и обрабатывать прерывания. Физический ввод/вывод поддерживается за счет добавления примерно 3 тыс. строк кода к ядру Linux, на котором работают драйверы, благодаря чему драйверы могли использовать сервисы L4 для ввода/вывода вместо того, чтобы делать это самостоятельно. Дополнительные 5 тыс. строк кода поддерживают взаимодействия между тремя изолированными драйверами (диска, сети и шины PCI) и виртуальной машиной, в которой выполняются прикладные программы.

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

Параметры производительности показывают, что накладные расходы при использовании паравиртуализованных машин составляют около 3-8%.

Мультисерверные операционные системы

Первые два подхода предусматривают модификацию унаследованных систем. Следующие два посвящены будущим системам.

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

Мультисерверная архитектура

Для того чтобы лучше понять, в чем состоит идея мультисерверной операционной системы, обратимся к современному примеру. Как показано на рис. 3 , в Minix 3, микроядро обрабатывает прерывания, предоставляет базовые механизмы для управления процессами, реализует взаимодействия между процессами и выполняет планирование процессов. Оно также предоставляет небольшой набор вызовов ядра для авторизованных драйверов и серверов, такие как чтение избранной части адресного пространства конкретного пользователя или запись в авторизованные порты ввода/вывода. Драйвер часов использует то же адресное пространство, что и микроядро, но он планируется как отдельный процесс. Ни один другой драйвер в режиме ядра не работает.

Над микроядром находится уровень драйверов устройств . Каждое устройство ввода/вывода имеет свой собственный драйвер, который функционирует как отдельный процесс в своем собственном частном адресном пространстве, защищенном с помощью аппаратного модуля управления памятью (MMU). Этот уровень включает в себя процессы драйверов для диска, терминала (клавиатуры и дисплея), Ethernet, принтера, аудио и так далее. Эти драйверы работают в режиме пользователя и не могут выполнять привилегированные команды или операции чтения и записи на портах ввода/вывода компьютера. Для того чтобы получить эти сервисы, драйверы должны обратиться к ядру. Хотя такая архитектура увеличивает накладные расходы, она значительно повышает надежность.

Над уровнем драйверов устройств находится уровень сервера. Сервер файлов представляет собой программу (4,5 тыс. строк исполняемого кода), которая принимает запросы от пользовательских процессов на системные вызовы Posix, касающиеся файлов, таких как, read, write, lseek и stat, и выполняет их. Кроме того, на этом уровне расположен менеджер процессов, который управляет процессами и памятью и выполняет вызовы Posix и другие системные вызовы, такие как fork, exec и brk.

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

К числу других серверов относятся сетевой сервер, который содержит: полный стек TCP/IP; хранилище данных, простой сервер имен, который используют другие серверы; информационный сервер, который используется при отладке. Наконец, над серверным уровнем расположены пользовательские процессы. Единственное отличие между этой и другими системами Unix заключается в том, что библиотечные процедуры для чтения, записи и других системных вызовов выполняется посредством посылки сообщений серверам. За исключением данного отличия (скрытого в системных библиотеках) это обычные пользовательские процессы, которые могут использовать POSIX API.

Взаимодействия между процессами

Поскольку именно механизм взаимодействия между процессами (Interprocess Communication, IPC) позволяет всем процессам работать вместе, он критически важен в мультисерверной операционной системе. Однако так как все серверы и драйверы в Minix 3 выполняются как физически изолированные процессы, они не могут напрямую вызывать функции друг друга или совместно использовать структуры данных. Вместо этого Minix 3 поддерживает IPC за счет передачи сообщений фиксированной длины на так называемом принципе рандеву (когда и отправитель, и получатель готовы к обмену, система копирует сообщение непосредственно от отправителя к получателю). Кроме того, имеется механизм асинхронных уведомлений о событиях. События, которые не могут быть реализованы, в таблице процессов помечаются как отложенные.

Minix 3 элегантно объединяет прерывания с системой передачи сообщений. Обработчики прерываний используют механизм уведомлений для сигнализации о завершении ввода/вывода. Этот механизм позволяет обработчику устанавливать бит в битовой карте «отложенных прерываний», а затем продолжать работу без блокировки. Когда драйвер готов к получению прерывания, ядро преобразует его в обычное сообщение.

Характеристики надежности

Причин высокой надежности Minix 3 несколько. Во-первых, в ядре выполняется код размером не более 4 тыс. строк, поэтому, исходя из скромной оценки 6 ошибок на 1000 строк, общее число ошибок в ядре, скорее всего, около 24. Сравните это число с 15 тыс. ошибок в Linux и намного большим их количеством в Windows. Поскольку все драйверы устройств, за исключением часов, - это пользовательские процессы, никакой посторонний код никогда не будет работать в режиме ядра. Кроме того, небольшой размер ядра позволяет более эффективно проверить его корректность либо вручную, либо с помощью формальных методов.

Архитектура IPC в Minix 3 не требует поддержки очередей или буферизации сообщений, что избавляет от необходимости управления буфером в ядре. Более того, поскольку IPC - это мощная конструкция, IPC-возможности каждого сервера и драйвера строго ограничены. Для каждого процесса строго определены используемые примитивы IPC, доступные адресаты и уведомления о пользовательских событиях. Пользовательские процессы, например, могут взаимодействовать только по принципу рандеву или посылать сообщения только серверам Posix.

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

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

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

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

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

Параметры производительности

В течение десятилетий разработчики критиковали мультисерверные архитектуры, базирующиеся на принципе микроядер, за их более низкую по сравнению с монолитными архитектурами производительность. Однако различные проекты подтверждают, что модульная архитектура на самом деле может обеспечивать сравнимую производительность. Несмотря на тот факт, что Minix 3 не была оптимизирована по производительности, система работает достаточно быстро. Потери производительности, которые возникают из-за того, что драйверы работают в режиме пользователя, по сравнению с драйверами в режиме ядра составляют менее 10%, и система может создаваться, в том числе ядро, общие драйверы и все серверы (112 компиляций и 11 ссылок), менее чем за 6 с на машине с процессором Athlon/2,2 ГГц.

Тот факт, что мультисерверные архитектуры позволяют поддерживать достаточно надежную Unix-подобную среду при весьма небольших потерях производительности, делает такой подход практически приемлемым. Minix 3 для Pentium можно загрузить бесплатно на условиях лицензии Berkeley с сайта www.minix3.org . Сейчас разрабатываются версии для других архитектур и встроенных систем.

Защита на базе языка

Самый радикальный подход, что весьма неожиданно, предложили в Microsoft Research, отказавшись от операционной системы как единой программы, выполняющейся в режиме ядра, и некоторого набора пользовательских процессов, функционирующих в режиме пользователя. Вместо этого предлагается система, написанная на совершенно новых, обеспечивающих безопасность типов языках, которые избавлены от всех проблем с указателями и других ошибок, связанных с Си и C++. Как и предыдущие два подхода, этот подход был предложен несколько десятилетий назад и был реализован в компьютере Burroughs B5000. Тогда существовал только язык Алгол, и защита поддерживалась не с помощью MMU (которого вообще не было в машине), а благодаря тому, что компилятор Алгол просто не генерировал «опасный» код. Подход, предложенный Microsoft Research, адаптирует эту идею к условиям XXI века.

Общее описание

Эта система, получившая название Singularity, практически полностью написана на Sing#, новом языке, гарантирующим безопасность типов. Этот язык основан на C#, но дополнен примитивами передачи сообщений, семантика которых определяется формальными, описанными средствами языка контрактами. Поскольку язык жестко ограничивает системные и пользовательские процессы, все процессы могут работать вместе в едином виртуальном адресном пространстве. Это увеличивает как безопасность (поскольку компилятор не позволит одному процессу менять данные другого процесса), так и эффективность (поскольку это избавляет от перехватов вызовов ядра (kernel trap) и переключений контекста.

Более того, архитектура Singularity является гибкой, поскольку каждый процесс - это замкнутая сущность и поэтому она может иметь свой собственный код, структуры данных, структуру памяти, систему времени исполнения, библиотеки и сборщик мусора. MMU поддерживается, но он только распределяет страницы, а не устанавливает отдельный защищенный домен для каждого процесса.

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

Микроядро

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

Хотя большая часть микроядра написана на Sing#, отдельные компоненты созданы на C#, C++ или assembler и должны быть надежными, поскольку проверить их корректность невозможно. К надежному коду относятся уровень аппаратной абстракции и сборщик мусора. Уровень аппаратной абстракции скрывает низкоуровневое аппаратное обеспечение от системы, инкапсулируя такие концепции, как порты ввода/вывода, линии запросов на прерывания, каналы прямого доступа к памяти и таймеры для того, чтобы предоставить остальной части операционной системы интероперабельные абстракции.

Взаимодействие между процессами

Пользовательские процессы получают системные сервисы, посылая строго типизированные сообщения микроядру по двунаправленным каналам точка-точка. Фактически эти каналы используются для всех взаимодействий между процессами. В отличие от других систем передачи сообщений, имеющих библиотеку с функциями send и receive, Sing# полностью поддерживает каналы на уровне языка, в том числе формальные спецификации типизации и протоколов. Для того чтобы прояснить это, рассмотрим спецификацию канала.

contract C1 {

In message Request(int x) requires x > 0;

Out message Reply(int y);

Out message Error();

Request? -> Pending;

State Pending: one {

Reply! -> Start;

Error! -> Stopped;

State Stopped: ;

Этот контракт утверждает, что канал принимает три сообщения: Request, Reply и Error. Первый имеет в качестве параметра положительное целое, второй - целое, а третий параметров не имеет. Когда для доступа к серверу используется канал, сообщения Request передаются от клиента к серверу, а другие два сообщения пересылаются иным путем. Машина состояний описывает протокол для канала.

В состоянии Start клиент посылает сообщение Request, переводя канал в состояние Pending. Сервер может в ответ послать либо сообщение Reply, либо сообщение Error. Сообщение Reply переводит канал обратно в состояние Start, в котором взаимодействие может продолжаться. Сообщение Error переводит канал в состояние Stopped, завершая взаимодействие по каналу.

Куча

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

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

Файловая система

Singularity поддерживает единое иерархическое пространство имен для всех сервисов. Корневой сервер имен использует вершину дерева, но другие серверы имен могут монтироваться на своих собственных узлах. В частности, файловая система, которая представляет собой всего лишь процесс, монтируется на /fs, поэтому, например, имя /fs/users/linda/foo может быть файлом пользователя. Файлы реализуются как B-деревья, в которых номера блоков служат ключами. Когда пользовательский процесс запрашивает файл, файловая система отдает драйверу диска команду поместить запрашиваемые блоки в кучу. Владение затем передается так, как описано выше.

Проверка

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

  • компилятор проверяет безопасность типов, владение объектами, протоколы каналов и так далее;
  • компилятор генерирует Microsoft Intermediate Language, переносимый JVM-подобный байт-код, который может проверять верификатор;
  • MSIL компилируется в код x86 для базового компьютера, который может добавлять в код проверки времени исполнения (однако существующий компилятор этого не делает).

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

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

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

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

Три из четырех исследовательских проектов - паравиртуализация на базе L4, Minix 3 и Singularity - используют микроядра. Пока не известно, какой из этих подходов в перспективе получит широкое распространение (если это не будет какое-то иное решение). Тем не менее интересно отметить, что микроядра, долгое время считавшиеся неприемлемыми из-за их более низкой производительности по сравнению с монолитными ядрами, могут снова вернуться в операционные системы из-за их потенциально более высокой надежности, что многие считают важнее производительности. Колесо истории повернулось.

Эндрю Таненбаум ([email protected]) - профессор информатики Vrije Universiteit (Амстердам, Голландия). Джоррит Хердер ([email protected]) - аспирант отделения компьютерных систем факультета информатики Vrije Universiteit. Хербер Бос ([email protected])- доцент отделения компьютерных систем факультета информатики Vrije Universiteit.

Литература
  1. V. Basili, B. Perricone, Software Errors and Complexity: An Empirical Investigation, Comm. ACM, Jan. 1984.
  2. T. Ostrand, E. Weyuker, The Distribution of Faults in a Large Industrial Software System, Proc. Int?l Symp. Software Testing and Analysis, ACM Press, 2002.
  3. A. Chou et al., An Empirical Study of Operating System Errors, Proc. 18th ACM Symp. Operating System Principles, ACM Press, 2001.
  4. M. Swift, B. Bershad, H. Levy, Improving the Reliability of Commodity Operating Systems, ACM Trans. Computer Systems, vol. 23, 2005.
  5. M. Swift et al., Recovering Device Drivers, Proc. 6th Symp. Operating System Design and Implementation, ACM Press, 2003.
  6. R. Goldberg, Architecture of Virtual Machines, Proc. Workshop Virtual Computer Systems, ACM Press, 1973.
  7. J. LeVasseur et al., Unmodified Device Driver Reuse and Improved System Dependability via Virtual Machines, Proc. 6th Symp. Operating System Design and Implementation, 2004.
  8. J. Liedtke, On Microkernel Construction, Proc. 15th ACM Symp. Operating System Principles, ACM Press, 1995.
  9. H. Hartig et al., The Performance of Microkernel-Based Systems, Proc. 16th ACM Symp. Operating System Principles, ACM Press, 1997.
  10. J.N. Herder et al., Modular System Programming in MINIX 3, Usenix; www.usenix.org/publications/login/2006-04/openpdfs/herder.pdf .

Andrew Tanenbaum, Jorrit Herder, Herbert Bos, Can We Make Operating Systems Reliable and Secure?, IEEE Computer, May, 2006. IEEE Computer Society, 2006, All rights reserved. Reprinted with permission.

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

Что такое безопасность?

Нельзя говорить о безопасности устройства, не определив, что мы, собственно, имеем в виду. Физическую безопасность данных? Защиту от методов низкоуровневого анализа с извлечением микросхемы памяти или же просто защиту от любопытных, которые не знают пароля и не умеют обманывать сканер отпечатков пальцев? Передача данных в облако - плюс это или минус с точки зрения безопасности? А в какое облако, кому и куда, каких именно данных, знает ли об этом пользователь и может ли отключить? А насколько вероятно на той или иной платформе подхватить троянца и расстаться не только с паролями, но и с деньгами на счете?

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

Сегодня мы коротко опишем основные достоинства и проблемы во всех современных мобильных ОС, которые имеют хоть какое-то распространение. В список входят Google Android, Apple iOS и Windows 10 Mobile (увы, но Windows Phone 8.1 назвать современной уже нельзя). Бонусом пойдут BlackBerry 10, Sailfish и Samsung Tizen.

Старички: BlackBerry 10

Прежде чем приступать к описанию актуальных платформ, скажем пару слов о BlackBerry 10, которая уже сошла с дистанции. Почему BlackBerry 10? В свое время система активно продвигалась как «самая безопасная» мобильная ОС. В чем-то это было действительно так, что-то, как всегда, преувеличили, что-то было актуальным три года назад, но безнадежно устарело сегодня. В целом нам нравился подход компании BlackBerry к безопасности; впрочем, не обошлось и без провалов.

  • Микроядерная архитектура и система доверенной загрузки - это действительно безопасно. Прав суперпользователя за все время существования системы не получил никто (между прочим, пытались неоднократно, в том числе в серьезных конторах - BlackBerry далеко не всегда была аутсайдером).
  • Также невозможно обойти пароль на разблокирование устройства: спустя десять неудачных попыток данные в устройстве полностью уничтожаются.
  • Нет никаких встроенных облачных сервисов и нет целенаправленной слежки за пользователем. Данные не передаются на сторону, если только пользователь не решит установить облачное приложение самостоятельно (опционально поддерживаются такие службы, как OneDrive, Box.com, Dropbox).
  • Образцовая реализация корпоративных политик безопасности и удаленного контроля через BES (BlackBerry Enterprise Services).
  • Надежное (но опциональное) шифрование как встроенного накопителя, так и карт памяти.
  • Облачных резервных копий нет совсем, а локальные шифруются с помощью безопасного ключа, привязанного к BlackBerry ID.
  • Данные по умолчанию не шифруются. Впрочем, компания может активировать шифрование на устройствах сотрудников.
  • Шифрование данных блочное, одноранговое; отсутствует понятие классов защиты и что-либо, хотя бы отдаленно напоминающее Keychain в iOS. Например, данные приложения Wallet можно извлечь из резервной копии.
  • В учетную запись BlackBerry ID можно зайти просто с логином и паролем; двухфакторная аутентификация не поддерживается. Сегодня такой подход совершенно неприемлем. Кстати, если известен пароль от BlackBerry ID, можно извлечь ключ, с помощью которого расшифруется созданный привязанным к данной учетке бэкап.
  • Защита от сброса к заводским настройкам и защита от кражи очень слабая. Она обходится простой заменой приложения BlackBerry Protect при сборке автозагрузчика или (до BB 10.3.3) понижением версии прошивки.
  • Отсутствует рандомизация MAC-адреса, что позволяет отслеживать конкретное устройство с помощью точек доступа Wi-Fi.

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

В целом при грамотной настройке (а пользователи, выбравшие BlackBerry 10, как правило, настраивают свои устройства вполне грамотно) система способна обеспечить как приемлемый уровень безопасности, так и высокий уровень приватности. Впрочем, «опытные пользователи» могут свести все преимущества на нет, установив на смартфон взломанную версию Google Play Services и получив все прелести присмотра «Большого Брата».

Экзотика: Tizen и Sailfish

Tizen и Sailfish - явные аутсайдеры рынка. Аутсайдеры даже в большей степени, чем Windows 10 Mobile или BlackBerry 10, доля которой упала ниже отметки 0,1%. Их безопасность - это безопасность «неуловимого Джо»; о ней мало что известно лишь потому, что они мало кому интересны.

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

  • Если не проводились серьезные независимые исследования, то говорить о безопасности платформы нельзя. Критические уязвимости вскроются не раньше, чем платформа получит распространение. Но будет поздно.
  • Зловредного ПО нет лишь из-за слабой распространенности платформы. Тоже в каком-то роде защита.
  • Механизмы безопасности недостаточны, отсутствуют или описаны лишь на бумаге.
  • Любые сертификации говорят лишь о том, что устройство прошло сертификацию, но ровным счетом ничего не говорят о фактическом уровне безопасности.

Jolla Sailfish

С Sailfish ситуация неоднозначная. С одной стороны, система как бы жива: на ее основе время от времени анонсируются какие-то устройства, и даже «Почта России» приобрела большую партию устройств с запредельно высоким ценником. С другой - пользователям предлагают заплатить стоимость крепкого середнячка на Android за модель под управлением Sailfish, обладающую характеристиками китайского дешевого смартфона трехлетней (!) давности. Такой подход сработает в единственном случае: если модели на Sailfish будут закупаться за бюджетные деньги, после чего раздаваться государственным служащим нижнего звена. Разумеется, о какой-то там безопасности при таком подходе думать участникам сделки совсем не интересно.

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

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





Samsung Tizen

Несколько особняком от остальных «экзотических» платформ стоит Samsung Tizen. В отличие от Ubuntu Touch и Sailfish, Tizen - вполне распространенная система. Под ее управлением работают десятки моделей умных телевизоров Samsung, а также умные часы и несколько бюджетных смартфонов (Samsung Z1–Z4).

Как только Tizen получила заметное распространение, за систему взялись независимые исследователи. Результат неутешителен: в первые же месяцы было найдено более сорока критических уязвимостей. Процитируем слова Амихая Нейдермана, который провел исследование безопасности Tizen:

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

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


Apple iOS

Apple мы будем хвалить. Да, это закрытая экосистема, и да, ценник несопоставим с техническими возможностями, но тем не менее устройства под управлением iOS были и остаются самыми безопасными из распространенных коммерческих решений. В основном это касается текущих моделей поколений iPhone 6s и 7 (и, пожалуй, SE).

Более старые устройства обладают меньшим запасом прочности. Для стареньких iPhone 5c, 5s и 6 уже есть способы разблокирования загрузчика и атаки на пароль устройства (за подробностями можно обратиться к разработчикам - компании Cellebrite). Но даже для этих устаревших устройств взлом загрузчика - дело трудоемкое и весьма недешевое (в Cellebrite просят за услугу несколько тысяч долларов). Думаю, мой или твой телефон никто таким способом ломать не станет.

Итак, что мы имеем на сегодняшний день. Начнем с физической безопасности.

  1. Все iPhone и iPad iOS 8.0 и выше (а в настоящий момент актуальна iOS 10.3.2, которая еще более безопасна) применяют настолько стойкие методы защиты, что даже их производитель как официально, так и фактически отказывается извлекать информацию из заблокированных устройств. Независимые исследования (в том числе в лаборатории «Элкомсофт») подтверждают заявления Apple.
  2. В iOS предусмотрена (и действительно работает) система защиты данных в случае кражи или потери устройства. Доступны механизмы удаленного стирания данных и блокировки устройства. Украденное устройство невозможно будет разблокировать и перепродать, если злоумышленнику неизвестны как пароль на устройство, так и отдельный пароль от учетной записи Apple ID владельца. (Впрочем, китайским умельцам доступно все, и вмешательство в аппаратную часть устройства способно обойти эту защиту... для iPhone 5s и более старых устройств.)
  3. Многоуровневое шифрование данных «из коробки» идеально спроектировано и реализовано. Раздел данных шифруется всегда; используется блочный шифр с ключами, уникальными для каждого отдельного блока, при этом при удалении файла соответствующие ключи удаляются - а значит, восстановить удаленные данные в принципе невозможно. Ключи защищены выделенным сопроцессором, входящим в систему Secure Enclave, и вытащить их оттуда нельзя даже с jailbreak (мы пробовали). Данные при включении остаются зашифрованными, пока ты не введешь правильный пароль. Более того, некоторые данные (например, пароли к веб-сайтам, скачанная на устройство электронная почта) дополнительно шифруются в защищенном хранилище Keychain, причем часть из них невозможно извлечь даже с джейлбрейком.
  4. Ты не можешь просто воткнуть в компьютер iPhone и скачать с него данные (кроме фотографий). В iOS предусмотрена возможность установления доверительных отношений с компьютерами. При этом создается пара криптографических ключей, позволяющих доверенному компьютеру делать с телефона резервные копии. Но даже эту возможность можно ограничить с помощью корпоративной политики безопасности или фирменным приложением Apple Configurator. Безопасность бэкапов обеспечивается возможностью установить сложный пароль (пароль требуется исключительно для восстановления данных из резервной копии, поэтому в режиме повседневного использования мешаться не будет).
  5. Разблокировка iPhone сделана на достаточно безопасном уровне. Для разблокировки можно использовать как стандартный PIN-код из четырех цифр, так и более сложный пароль. Единственный дополнительный способ разблокирования устройства - отпечаток пальца. При этом реализация механизма такова, что у злоумышленника будет очень мало возможностей им воспользоваться. Данные отпечатка зашифрованы и будут удалены из оперативной памяти устройства после выключения или перезагрузки; через некоторое время, если устройство ни разу не разблокировалось; после пяти неудачных попыток; через некоторое время, если пользователь ни разу не вводил пароль для разблокировки устройства.

    В iOS есть опция, позволяющая автоматически удалять данные после десяти неудачных попыток входа. В отличие от BlackBerry 10, эта опция контролируется на уровне операционной системы; для старых версий iOS (вплоть до iOS 8.2) существуют способы ее обойти.

Что у нас со слежкой за пользователем и с утечками?

В iOS есть отключаемая синхронизация с облаком через собственный сервис Apple iCloud. В частности, в iCloud обычно сохраняются:

  • резервные копии данных устройства;
  • синхронизированные данные - журнал звонков, заметки, календари, пароли в iCloud Keychain;
  • пароли и история посещения ресурсов в браузере Safari;
  • фотографии и данные приложений.

Все виды облачной синхронизации в iOS можно отключить, просто выключив iCloud и деактивировав iCloud Drive. После этого никакие данные не будут передаваться на серверы Apple. Несмотря на то что некоторые механизмы работают не слишком интуитивно (как пример - для выключения синхронизации звонков нужно отключать iCloud Drive, вообще-то предназначенный для синхронизации файлов и фотографий), полное выключение облачных сервисов синхронизацию полностью же отключает.

В iOS предусмотрен механизм для предотвращения слежки (система может представлять внешнему миру случайные идентификаторы модулей Wi-Fi и Bluetooth вместо фиксированных настоящих).

Хорошо, а как обстоят дела со зловредами? В iOS практически исключена возможность установки зловредного ПО. Единичные случаи были (через приложения, собранные с использованием взломанных инструментов для разработки), но они быстро локализовались и исправлялись. Даже тогда большого вреда причинить эти приложения не смогли: в iOS каждое приложение надежно изолировано как от самой системы, так и от других приложений с помощью песочницы.

Нужно отметить, что в iOS давным-давно был реализован гранулярный контроль за разрешениями приложений. Ты можешь по отдельности разрешить или запретить каждому приложению такие вещи, как возможность работы в фоновом режиме (в «чистом» Android такой возможности нет!), доступ к местоположению, уведомлениям и тому подобное. Наличие этих настроек позволяет эффективно ограничивать слежку со стороны приложений, которые сделали такую слежку своим основным бизнесом (это касается как приложений класса Facebook, так и игр наподобие Angry Birds).

Наконец, Apple регулярно обновляет iOS даже на старых устройствах, практически моментально (в сравнении с Android) исправляя найденные уязвимости. При этом обновления прилетают одновременно всем пользователям (снова «в отличие от»).

Что интересно, iOS начиная с 9-й версии защищена и от атак класса man in the middle с перехватом и подменой сертификата. И если в лаборатории «Элкомсофт» удалось отреверсить протокол бэкапов iCloud в 8-й версии системы, то в более новых ОС этого сделать не вышло по техническим причинам. С одной стороны, получаем гарантию безопасности передаваемых данных; с другой - у нас нет возможности достоверно убедиться в том, что на серверы не будет отправлена «лишняя» информация.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

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

Windows

На данный момент существует три актуальных версии ОС данной корпорации – 7, 8, 10. Windows XP уже вышла из моды — сейчас ее устанавливают преимущественно на старые компьютеры. Новейшая версия – Windows 10, но не самая популярная версия от компании. Виндоус 7-ой версии прочно держится в рейтинге самых используемых систем: 52% персональных компьютеров в мире обслуживаются ей.

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

Многие пользователи сравнивают «операционки» по интерфейсу. Windows не проигрывает своим конкурентам – большой выбор тем для визуализации данных, анимация окон и полупрозрачность создает приятный контраст. Более новые версии Windows сохранили элементы самых первых систем от данного производителя, что манит пользователя.

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

Linux


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

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

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

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

MacOS


Рабочий стол MacOS

Сама «операционка» произошла вместе с появлением первых продуктов от Apple, соответственно, используется на этих устройствах. Сейчас самой последней редакцией MacOS является 10 версия.

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

Большинство пользователей уверены, что MacOS – самая удобная и привлекательная операционная система, судя по пользовательскому интерфейсу. Производитель уделяет данному компоненту очень много внимания, и неудивительно их превосходство в данном компоненте над своими конкурентами. Разработчиками применяется огромный набор технологий, которые направлены на гармонизацию и улучшение вида элементов управления. Интересно, что компания регулярно требует от разработчиков постороннего ПО использования максимально похожего на стандартный «маковский» стиль оформления приложений, чтобы пользователи работали в новой программе так же, как и в знакомой до этого.

DOS


Рабочий стол FreeDOS

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

Впрочем, DOS остается нужным для многих пользователей. ПО DOS является оптимальным вариантом для тех пользователей, кто желает использовать старые компьютеры с новыми приложениями. Для этого разработчики запустили FreeDOS и DJGPP, в состав которого вошло несколько программ, популярных сегодня – файловый менеджер, текстовый редактор, веб-браузер, почтовый клиент и т.п. Иными словами, продукция DOS все еще пригодна для работы на старых ПК.

Безопасность и надежность

В общем, конкуренцию за звание лучшей группы ОС ведут Windows, Linux и MacOS – DOS уже перестал соревноваться с более современными наработками. В области надежности и безопасности работы, наиболее оптимальной является продукция Linux и Apple. Самым лучшим дистрибутивом в этом компоненте у Linux является Ubuntu. Эксперты считают, что системы c Linux ядром предпочтительно используют в качестве хранителя особо важной информации, поскольку защита от посторонних проникновений к хранящейся в системе информации очень сильна. К слову, пользователям самим необходимо быть очень внимательными при назначении паролей и длинных путей к своим нужным файлам – в противном случае можно их лишиться.

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

Самая игровая система

Как было упомянуто выше, в плане количества программ разных направлений лидирует Windows, и в игровом компоненте этот разработчик является несомненным лидером. Для Linux тоже выпускается достаточно много игровых приложений, поскольку эти «операционки» также достаточно популярны в мире, например здесь можно найти всеми любимый Steam. Но в итоге, в совокупном объеме игровых приложений, Windows даст фору и Linux, и MacOS вместе взятым. Система сама имеет достаточно хорошие характеристики для бесперебойной и безошибочной работы игровых приложений на любом компьютере, но, правда, получается это редко.

Если смотреть по дистрибутивам Windows, то пока пользователи очень осторожно называют Windows 7 наиболее предпочтительной для игр, несмотря на то, что вышло уже три новых версии системы! Конечно, «семерка» является проверенной системой, и поэтому ей и отдается большее предпочтение от пользователей. Но это ненадолго – уже через год-полтора весь мир заговорит о том, что восьмая и десятая версии Windows гораздо лучше седьмой именно в игровом плане.

Самая простая ОС

Если брать в расчет все имеющиеся в мире операционные системы и выбирать из них наиболее простую – абсолютным чемпионом здесь будут системы DOS. Но если говорить именно о трех гигантах выпуска ОС в нынешнее время, то в простоте опять же всех опередит Windows. Простота бывает разной – банальность разработки, удобство использования и т.п. Нам больше интересно то, в каких системах пользователям удобнее работать. И большинство из них считает, что Windows является самой простой «операционкой», причем начиная еще от самых первых ее версий.

Действительно, Windows – самая простая система при использовании, но очень сложна при разработке. MacOS занимает второе место по удобству использования, как отмечается экспертами. Linux же являются самыми сложными системами, но если один раз привыкнуть, вы никогда больше не вернетесь обратно, например на семейство Windows.

Для слабых ПК

Конечно, тут стоит отдать предпочтение DOS! Однако DOS найти довольно непросто сейчас, поэтому, для слабых ПК больше всего подойдут дистрибутивы Линукс, с легковесным окружением рабочего стола (LXDE, OpenBox, MATE, Xfce).

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

Минус в том, что XP больше не поддерживается производителем, и устанавливая данную систему, вы рискуете нахватать множество вирусов и троянов.

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

Доступность установки ПО

И снова бесспорным лидером здесь является Windows! Все-таки, продукция от этого разработчика появилась на рынке самой первой, и поэтому реализуется она моментально. Сейчас только ленивый не занимается разработкой программ и приложений для Windows, а это значит, что ПО всегда будет доступным для этих ОС. Но важно помнить: в силу невысокой степени защиты ОС Windows, необходимо быть предельно внимательными при установке ПО на компьютер. Конечно, необходимо пользоваться лицензионным софтом, и если такового не имеется, то знайте: вы идете на риск, устанавливая нежелательное программы на свой ПК, при низком уровне защиты.

Какую систему выбрать в итоге

В последнее время разработчики систем отлично потрудились над улучшением версий ОС. Конечно, минимальную долю рынка и популярность будет занимать MacOS, поскольку является относительно новым продуктом. По характеристикам он не уступает Windows и Linux. Если этот продукт будет пользоваться в дальнейшем большим спросом, то вскоре MacOS может стать лидером продаж.

Linux – отличная система для офисных ПК и для компьютеров, которые используются для программирования и администрирования. Они имеют высокую производительность, максимально безопасны и надежны в использовании, но они слишком узкопрофильные, потому эти «операционки» не имеют широкого применения.

Windows – безоговорочный победитель почти по всем параметрам среди своих конкурентов, и популярность продукта объяснима. Для современных компьютеров именно Windows будет оптимальной ОС, версию каждый выбирает самостоятельно. От пользователя зависит то, какую ОС устанавливать – если компьютер нужен для работы – лучше поставить Linux, если для игр – Windows. Необходимо определить все параметры, которые вы хотите получать в большей мере от ОС – и в таком случае вы сможете сделать правильный и осознанный выбор!

По данным Роскомстата, Windows имеет 84% популярности среди российских пользователей персональных компьютеров. Linux опережает MacOS на 3% — 9% против 6%. Ситуация изменится при наличии серьезных оснований для привлекательности среди пользователей, и разработчики систем ведут непрерывную работу в этой сфере.

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

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

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

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

Большинство из них используют для обеспечения анонимности программное обеспечение Tor, которое обеспечивает действительно высокий уровень анонимности, в отличие от VPN провайдеров, которые все еще знают ваш реальный IP адрес.

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

Прежде чем рассматривать самые безопасные linux дистрибутивы, давайте поговорим о том, как обеспечивается анонимность Tor. Tor или The Onion Router это стандартный протокол шифрования, разработанный в ВМС США.

Программное обеспечение Tor работает с несколькими узлами, это и обеспечивает высокую надежность и анонимность. Данные при прохождении через случайный узел каждый раз перешифровываются и становятся полностью расшифрованными только на последнем узле. Разработчики Tor также отвечают за создание дистрибутива Tails, который рекомендует использовать Эдвард Сноуден.

Теперь вернемся к VPN. Обычно, это платные сервисы, найти хороший, бесплатный VPN очень сложно. Качество обслуживания VPN зависит от провайдера, но как правило, скорость работы серверов VPN намного быстрее, чем Tor.

1. Tails - анонимный LiveCD

Если вы хотите остаться неизвестным в интернете, Tails - отличный выбор. Его основная цель - следить, чтобы вы не оставили никаких цифровых следов во время веб-серфинга. Это один из наиболее часто используемых для обеспечения анонимности дистрибутивов, и единственный, где все интернет-соединения направляются через Tor.

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

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

2. JonDo Live-DVD

JonDo Live-DVD - это коммерческое решение для анонимности в сети. Оно работает похожим образом на Tor, ваши данные тоже передаются через ряд смешанных серверов JonDonym. На каждом узле данные перешифровываются. Это отличная альтернатива для Tails, особенно если вы ищете что-то с менее ограниченным пользовательским интерфейсом.

Как и Tails, дистрибутив основан на Debian, а также включает в себя набор инструментов для обеспечения анонимности и наиболее часто используемые приложения.

JonDo Live-DVD это платный сервис, для коммерческого использования. Он ориентирован на использование в фирмах, а также быстрее чем Tails и тоже не поддерживает сохранение файлов.

Если вам нужно что-то совершенно другое, вам будет интересен Whonix. Здесь используется совсем другой подход. Это не LiveCD. Whonix работает в виртуальной машине VirtualBox, система изолирована от вашей основной системы, тем самым уменьшается риск подхватить вирусы или засветить свои данные в сети.

Whonix состоит из двух частей. Whonix Gatway выступает в качестве шлюза Tor, вторая - Whonix Workstation является полностью изолированной от сети и направляет все свои сетевые соединения через шлюз Tor.

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

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

4. Qubes OS

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

Здесь совсем иной подход к анонимности. Идея Qubes - безопасность путем разделения. Это значит, что ваша цифровая жизнь будет разделена между изолированными виртуальными машинами. Любое приложение запускается в отдельной виртуальной среде.

Нужно отметить, что Qubes поставляется по умолчанию с флагманским ноутбуком от Purism. Этот ноутбук считается самым безопасным устройством для пользователей. И это правда, учитывая мощное программное обеспечения этого дистрибутива.

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

5. UPR (Ubuntu Privacy Remix)

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

Уже судя по имени, можно сказать, что он основан на Ubuntu. Дистрибутив предлагает безопасный серфинг в интернете и использование шифрованных флешек, для эффективной защиты ваших данных от несанкционированного доступа. Дистрибутив поставляется с предустановленными инструментами для шифрования, такими как GnuPG и TrueCrypt. UPR предназначен только для безопасного серфинга в интернете, а не для анонимности. Он отлично подойдет, если вы хотите установить систему на свой компьютер, а не использовать LiveCD. Если нужна еще и анонимность можно установить Tor или подключить VPN.

Выводы

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