Сравнение

Исследование на тему: какая ОС безопаснее? Надежные и защищенные операционные системы? Что такое безопасность

Чаще всего в контексте их беспрецедентной безопасности. Некоторые даже утверждают, что Linux - самые безопасные операционные системы из всех представленных на рынке. Это, разумеется, ничем не доказуемая гипербола. Действительно, многие дистрибутивы Linux оказываются на порядок безопаснее и , но большинство из них не дотягивает до стандартов FreeBSD, не говоря уже об OpenBSD, которая зарекомендовала себя как одна из наиболее защищенных пользовательских систем. И это даже если оставить в стороне узкоспециальные ОС типа всевозможных RTOS, IBM i, OpenVMS и TrustedBSD.

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

Если считать Linux символом открытого ПО, а MS Windows - символом закрытого, тогда, конечно, можно сказать, что «Linux - самые безопасные системы из всех», притом что в понятие «все» входит всего две категории продуктов. Но ведь мир устроен далеко не так просто.

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

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

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

Даже если не брать в расчет ОС, в которых не запускаются, к примеру, популярные веб-браузеры (Firefox), почтовые клиенты (Thunderbird) и офисные программы (OpenOffice.org) с графическим интерфейсом WIMP на компьютере с архитектурой Intel x86, среднестатистический дистрибутив Linux ни при каких условиях нельзя назвать самой защищенной операционной системой. И уж во всяком случае, Ubuntu - едва ли не самый распространенная ОС Linux - на это звание претендовать точно не может.

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

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

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

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

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

Рейтинг операционных систем Windows

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

  • Windows 8 (8.1);

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

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

От чего зависит быстрая работа Windows

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

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

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


Windows XP появилась в 2001 году и быстро распространилась. Предшественниками популярной XP были ME и 95. Прежние системы быстро вытеснились с рынка последующими инновациями. XP вариант считается подходящим для старых компьютеров со слабыми ресурсами. До сегодня XP устанавливают на устройства с небольшим объемом оперативной памяти и небольшой тактовой частотой процессора.


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

ОС под номером 7 разработана в 2009 году. Новый вариант быстро понравился пользователям, поэтому набрал популярность и был установлена на компьютеры. Версия 7 стала первой, которая вытеснила XP, предоставив обновленную альтернативу.


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

Наличие обновленного функционала сделало Windows 7 популярной. Использование Windows 7 встречается даже сегодня. Реализованные преимущества программного продукта выносят ОС на третье место рейтинга и дают основание рекомендовать установку производительной Windows 7.

2: Windows 8 (8.1)

Выпуск Windows 8 произошел в 2012 году. Стандартный интерфейс организован под использование передвижных плиток. Кнопка «Пуск» была заменена стартовым экраном. Функционал настройки и группировки кнопок запуска понравился пользователям и расширил перспективы персонализации.


В Windows 8 появился магазин с приложениями и поддержка учетной записи Microsoft для объединения аккаунтов устройств. Windows 8 не получила популярности 7 версии, хоть составила интересую альтернативу. Рекомендуется установка ОС 8 для компьютеров со средним ресурсным запасом, поскольку потребности быстрой работы Windows 8 выше, чем для классической XP.

Выход варианта из первой позиции рейтинга произошел в 2015 году. Новая ОС объединила сильные стороны последних вариантов – 7 и 8. 10 быстро набрала популярности и была установлена вместо старых вариантов. Перспектива бесплатного обновления до 10 стала дополнительным козырем корпорации.


Windows 10 поддерживается устройствами: компьютерами, нетбуками, ноутбуками, планшетами и телефонами. Интерфейс ОС 8, рабочего стола и элементов управления кажется привычным и комфортными. Новизна решений обусловила мгновенную работу повседневных процессов, программ и игр. Разработчики внедрили функционал для подключения устройств на Windows 10 и Xbox One.

Улучшение функций безопасности делает Windows 10 устойчивой к вирусным атакам и вредоносным программам. Добавилась функция использования биометрических сведений и другие специфические функции. Сочетание перечисленных характеристик становится обоснованием уверенной первой позиции в рейтинге.

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.

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

  • Доступность
  • Стадия разработки
  • Защита работы в Сети
  • Безопасность информации
  • Производительность
  • Удобство рабочего стола
  • Документация и поддержка
  • Вердикт

Анонимные операционные системы

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

Ubuntu Privacy Remix (UPR) совмещает анонимность с мощными средствами защиты данных. Он работает только в режиме Live, шифрует ваши данные и защищает их от нежелательного доступа.

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

Qubes OS реализует подход «безопасность через разделение», но на сей раз он противостоит другим альтернативам.

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

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

Доступность

Что нужно сделать, чтобы они заработали?

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

Tails - самый известный дистрибутив, и мы рассчитывали скачать его ISO-файл и записать его на карту USB с помощью какого-нибудь удобного инструмента вроде dd или интерфейса типа ImageWriter. Однако весь процесс с Tails оказался не настолько прост, так как образ нужно менять утилитой Isohybrid. Итак, надо сделать следующее:

isohybrid tails­i386­1.2.3.iso ­h 255 ­s 63
dd if=tails­i386­1.2.3.iso of=/dev/sdc
bs=16M

где /dev/sdc - ваша флэшка.

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

Whonix и Qubes OS запустить будет гораздо сложнее, и вот почему: Whonix идет в виде двух виртуальных машин VirtualBox - одна для Gateway [Шлюз] и одна для Workstation [Рабочая станция]. Суть здесь в том, чтобы изолировать ту среду, где вы работаете, от точки доступа к Интернету. Поэтому первым делом следует запустить и настроить Whonix Gateway на одной ВМ, и затем получить доступ к ней с другой ВМ, где и будет делаться вся работа. Проблем у нас с этим не возникало, однако мы вынуждены признать, что выполнять свою работу в Whonix смогут только продвинутые пользователи.


Нет, это не хамелеон SUSE посинел: это Ubuntu Privacy Remix с крутым Предохранительным Панголином!

После записи ISO Qubes OS на флэшку USB и загрузки с нее мы обнаружили, что здесь нет сессии Live, только режим установки. Qubes OS основана на недавнем релизе Fedora и использует одинаковую с ним программу установки. Однако требования этой ОС удивляют: ей нужно 4 ГБ ОЗУ и 32 ГБ для раздела root, и она предпочитает встроенный видеочип Intel, поскольку у Nvidia и AMD в Qubes OS возникают проблемы. Системе необходимы настолько завышенные ресурсы вследствие ее подхода «Безопасность через изоляцию», который мы будем обсуждать дальше.

И, наконец, Ubuntu Privacy Remix и JonDo Live-DVD оказались исключительно просты в запуске. Их сессии Live были быстрыми и простыми в использовании.

Стадия разработки

Ныне они безопасны и конфиденциальны, но активно ли поддерживаются?

Зтот аспект часто недооценивают, однако он жизненно важен, поскольку постоянным пользователям нужен современный дистрибутив с активной поддержкой. В реальности есть дистрибутивы, обеспечивающие секретность, которые брошены своими разработчиками (например, Privatix) или остаются без поддержки долгие годы (как Liberte). Кое-кто может подумать, что речь идет о новых функциях и отладках, но не будем забывать, что у заброшенных дистрибутивов Linux могут быть проблемы с работой на современном оборудовании, где есть такие вещи, как UEFI и Secure Boot.


JonDo Live-DVD обновлятся поразительно часто.

Tails - один из дистрибутивов безопасности с самой лучшей поддержкой и с очень быстрым темпом разработки. Новые релизы появляются каждые 2-4 месяца, то есть в 2014 г. у Tails было 6 релизов, и он очень оперативно прошел путь от версии 0.23 до 1.2.3.

По сравнению с ним разработчики Ubuntu Privacy Remix (UPR), похоже, не особо спешат, но зато поддерживают разработку на стабильном уровне. UPR появился в декабре 2008 г. и придерживается соответствия релизам Ubuntu. Текущая версия - 12.04r1 (Protected Pangolin [Предохранительный Панголин]), которая поддерживает новое оборудование, тем не менее оставаясь очень легковесным дистрибутивом.

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

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

И у нас остается совершенно безумный по скорости рекордсмен разработки . Это действительно потрясающе, но JonDo может похвастаться журналом изменений, обновляемым каждые 5-10 дней!

Защита работы в Сети

Насколько эффективно они вас защищают от web-угроз?

Выход в Интернет всё усложняет: тут никто не гарантирует вам «абсолютную» безопасность. Но большинство наших дистрибутивов изо всех сил стараются защитить вас по максимуму.

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

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

JonDo Live-DVD ★★★★★

JonDo Live-DVD обеспечивает анонимность в сети с помощью своего IP changerv (он же JonDonym), это Java Anon Proxy, подобный Tor. JonDo включает режим работы в Сети (через JonDoBrowser на базе Firefox) с опциональным псевдонимом, и отправляет запросы через каскад и смешивает потоки данных разных пользователей, чтобы скрыть данные от посторонних.

Анонимная операционная система JonDo Live-DVD

Стоит отметить, что хотя код JonDo открыт, существуют бесплатный и коммерческий план. Бесплатный может использовать только порты назначения 80 и 443, применяемые для протоколов HTTP и HTTPS (этого достаточно для просмотра сайтов и FTP). Премиальный сервис предлагает дополнительные прокси SOCKS для дополнительной анонимности и большей скорости соединения. В принципе, мы нашли, что JonDo безопаснее, чем Tor, потому что JonDo намного более централизованный и не может включать вредоносные узлы (а в Tor такое иногда случается).

Qubes OS ★★★★

Qubes OS реализует другую концепцию изоляции на базе виртуализации. Система запускает гипервизор Xen с несколькими экземплярами виртуализации измененной Fedora 20 на нем. Qubes OS делится на несколько «доменов», и приложения можно запускать в виде виртуальных машин (AppVMs).


Стандартный способ сделать сетевой трафик анонимным - использование Qubes TorVM, который соединяется с Интернетом и запускает Tor. Другим приложениям можно дать команду использовать «Tor’ифицированное» соединение. Плюс в том, что приложению даже не надо знать о Tor; оно запускается в обычном режиме без всяких дополнений, а весь TCP- и DNS-трафик IPv4 направляется Tor. Минус в том, что все требуется настраивать вручную. Мы также заметили, что эта концепция имеет тенденцию ограничивать, а не предотвращать распространение атак и вредоносного ПО извне домена/AppVM.

Безопасность информации

Насколько сохранны в этих дистрибутивах важные для вас данные?

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

Ubuntu Privacy Remix по части безопасности данных просто сияет. Единственный способ сохранить их - использовать расширенные TrueCrypt-Volumes, сохраняемые только на внешнем USB-носителе (монтируемом с опцией ‘noexec’). У вас нет шансов оставить данные на разделе диска даже случайно или по недосмотру.

«Амнезия» у Whonix слабее других. На стороне Workstation все данные можно хранить постоянно, и способ их хранения зависит только от вас. Можно зашифровать и защитить их с помощью дополнительного пароля или хранить их в изолированном месте. Но в целом безопасностью данных Whonix озабочен мало.

Qubes OS по безопасности данных много лучше, поскольку позволяет изолировать важные данные в отдельном домене/ AppVM без доступа к сети; но опять же, уровень безопасности сильно зависит от способностей пользователя и его дисциплинированности. А JonDo Live-DVD предлагает способ постоянного хранения, и мы сочли его вполне дружелюбным к пользователю. Он готов использовать зашифрованные с помощью LUKS брелки и диски USB и предлагает специальный ассистент для подготовки вашего носителя.

Увы, в Ubuntu Privacy Remix (UPR) вообще нет сетевой функциональности. Ядро системы модифицировано так, что она игнорирует любое сетевое устройство, превращая UPR в идеально изолированную систему, куда нельзя проникнуть через LAN, WLAN, Bluetooth, Infrared и т. д., поэтому здесь нет web-браузера, нет куки, нет никаких троянов и никаких данных, скачанных из Сети, а также никакого обмена сообщениями или удаленных или облачных сервисов.

Анонимная операционная система Ubuntu Privacy Remix

Почти все следы сетевого соединения из UPR устранены, хотя кое-что там осталось - например, команды ifconfig и ifup/ifdown; однако они абсолютно беспомощны, поскольку сетевое оборудование принудительно отключено. Итак, в этом тесте UPR проигрывает, продемонстрировав полнейшую бесполезность для работы в Сети, хоть это и является частью ее дизайна. Однако если вы страдаете паранойей и вам нужна система, которая старается вообще не быть онлайн, UPR станет для вас идеальным решением.

Tails ★★★

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

Кроме него, имеются Vidalia, интерфейс для простой настройки; пред-настроенный web-браузер Firefox, снабженный кнопкой Tor; и расширения HTTPS Everywhere, NoScript и AdBlockPlus.


Среди множества дополнительных функций Tails присутствуют анонимная сеть I2P, интерфейсы для прокси и VPN, виртуальная клавиатура Florence, изоляция приложений через AppArmor, генератор сильных паролей PWGen и KeePassX для управления ими, AirCrackNG для аудита беспроводных сетей, и т. д.

Трафик Tor и I2P также разделяются, благодаря специальному I2P Browser, а Pidgin использует более безопасный режим Off-the-Record (OTR).

Whonix ★★★★★

Whonix тоже использует Tor для обеспечения сетевой анонимности и имеет много общих с Tails сторонних инструментов. Итак, отметим отличия. Здесь клиент Tor использует Whonix-Gateway, который обеспечивает лучшую защиту от определения IP и местонахождения на Workstation.

Анонимная операционная система Whonix

Уровень защиты от утечек в протоколе IP и DNS практически такой же, но в Tails есть возможность неправильной настройки, которая может привести к появлению утечки IP, а в Whonix на это шансы отсутствуют. Даже если рабочая станция будет взломана (например, если кто-то сумеет получить доступ root), реальный IP все равно будет не определить. Изоляция прокси-сервера внутри отдельной ВМ (или, возможно, настоящего ПК) отлично работает. Кроме того, Whonix использует “entry guards [охрану входа]” в Tor (случайным образом выбранные оконечные точки), чего в Tails по умолчанию не предусмотрено.

Производительность

Насколько хорошо они работают?

У свежего Tails ядро 3.16.7, и в аварийном режиме по умолчанию грузится Gnome Shell 3.4. Рабочий стол очень легковесный и почти так же быстр, как классический Gnome 2 в предыдущих релизах Tails, но официальные системные требования говорят, что ему нужно не менее 1 ГБ ОЗУ для нормальной работы, что, по нашему мнению, многовато.

Ubuntu Privacy Remix обновлен до пакетов Ubuntu 12.04 LTS, и поэтому имеет множество бэкпортов и современных функций, при этом не очень нагружая ресурсы.
UPR использует классический рабочий стол Gnome 2, который загружается за пару секунд. Мы полагаем, что 512 МБ ОЗУ достаточно, хотя UPR может использовать и больший объем ОЗУ, поскольку система использует ‘ramzswap’ для хранения файла подкачки в ОЗУ.

JonDo Live-DVD способен загружаться даже на очень старых CPU, и его рабочий стол Xfce очень быстрый. Однако вам потребуется 1 ГБ ОЗУ для нормальной работы с приложением JonDo на базе Java и web-браузерами.

Whonix и тут отличается, потому что требует хост, на котором могут работать две гостевых машины VirtualBox одновременно. Ваша ОС хоста и настройка целиком зависят от вас, но понадобится не менее 4 ГБ ОЗУ и 12 ГБ на жестком диске. Плюс чрезвычайно приветствуются SSD и CPU с поддержкой виртуализации оборудования.

Для Qubes OS нужна еще более мощная машина: 64-битный CPU, 4 ГБ ОЗУ и не менее 32 ГБ для раздела root. Так что Qubes OS самый требовательный.

Удобство рабочего стола

Можно ли сохранять анонимность, получая полноценный рабочий стол?

Хотя Tails страдает «амнезией», в нем есть программа установки, которая может создать постоянный раздел как на флэшке USB, с которой вы загружаетесь, так и на другом устройстве хранения USB. Благодаря этому Tails чрезвычайно удобен для постоянной работы в режиме live. Кроме того, он включает широкий выбор программ, от LibreOffice и GIMP до Audacity и Sound Juicer.

У JonDo Live-DVD также имеется очень удобный рабочий стол Xfce live, где налицо
все основные настольные программы; однако основное его преимущество в том, что вы можете установить и IP changer из JonDo, и браузер JonDoFox на любой дистрибутив Linux. Это огромный бонус: вы можете остаться на своем уже настроенном компьютере Linux и спокойно перейти на анонимную работу.

Ubuntu Privacy Remix (UPR) включает только основные аксессуары Gnome 2 и всего лишь несколько приложений рабочего стола (ярчайшие примеры - Scribus
и LibreOffice). Рабочий стол в UPR неудобен до такой степени, что даже изготовление простого экранного снимка превращается в проблему. Сквернее всего то, что дистрибутив совершенно сознательно не предоставляет никаких вариантов изменения. Так что исправить рабочий стол не получится.

Пользователям Gnome рабочий стол в Tails покажется знакомым и простым.

Обе гостевые машины Whonix используют рабочий стол KDE на Debian. Нам очень нравится KDE, но на стороне Gateway он кажется излишним. Работать на Workstation очень удобно. Если не принимать во внимание некоторые незначительные замедления и ограничения из-за виртуализации и системы брандмауэров, то Who-nix Workstation можно использовать как полноценную настольную систему.

Qubes OS совершенно иной: в установке он прост, но потом может начать работать очень медленно. Его рабочий стол KDE вполне интуитивный, но взаимодействие между доменами требует дополнительных навыков. Например, копирование и предоставление распределенного доступа к файлам с одного домена или AppVM на другой требует собственной логики, и использование буфера обмена ограничено.

Документация и поддержка

Есть ли подсказки и как получить ответы на вопросы?

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

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

Ubuntu Privacy Remix обладает симпатичным и компактным сайтом, хотя там не так уж много материалов; правда, количество ресурсов соответствует его набору функций. Вы найдете здесь полезные руководства how-to и инструкции по созданию персональной сборки UPR
(с индивидуальным набором программ).

Почти вся документация Whonix располагается в специальном и весьма подробном портале wiki. Мы нашли его всесторонним и более детальным, чем ресурсы, предлагаемые Tails - в Whonix больше статей, больше опций поддержки и очень активный форум.

В проекте Qubes OS тоже есть портал wiki с базовыми и расширенными статьями. Архитектура ОС объясняется очень подробно, и имеются обучающие слайды и пользовательская документация. В Qubes OS масса дополнительных функций, таких, как работа с non-Linux AppVM, и она освещается в подробном руководстве. Имеется также очень полезный
уголок разработчика, оснащенный всем необходимым для создания индивидуальных решений.

JonDo предлагает подсказки, FAQ, портал wiki и форум. Хотя он выглядит вполне завершенным, пристальный осмотр выдает немало слабостей. FAQ короткий, а wiki очень мала. На самом деле рассматривается всего несколько тем, и это огорчает.

Вердикт

Java Anon Proxy - стартап 2007 г., и за ним стояло много лет солидной исследовательской работы. И мы видим плоды этой работы, поскольку JonDo Live-DVD явно превосходит экс-короля анонимного web-доступа, Tails. Оба проекта - отличного качества, со сбалансированными функциями и активной разработкой. Трудно сказать, обеспечивает Tor идеальную анонимность или же нет, но технически возможно выделить пользователя Tor через скомпрометированный узел, или сопоставив трафик и поведение пользователя с другой информацией, или даже посредством корреляционных синхронных атак.

Однако выбор узлов JonDo менее случайный, чем в Tor, и мы не уверены в степени его надежности. Оба решения изрядно замедляют скорость Интернет, и каскад прокси JonDo, похоже, даже медленнее, чем цепь узлов Tor. Однако скорость соединения - не главный приоритет, поскольку вы получаете хорошо проверенную и поддерживаемую анонимность. Другие участники четко определяют цену расширенной безопасности и конфиденциальности. Whonix заставляет использовать виртуальную машину (что всегда медленнее компьютера-хоста), поддержка 3D очень слабая или ее нет вовсе, и требуются дополнительное время и усилия на первичную установку. Но, проделав это единожды, вы сможете настроить Whonix на свое усмотрение, подобно любому дистрибутиву на Debian.

Qubes OS ладит только с весьма продвинутым оборудованием (даже на нем он медленнее, чем виртуализованный Who-nix), зато обеспечивает достойную анонимность, хотя его основная цель - изолировать разные сегменты, чтобы один сегмент, даже будучи скомпрометированным, не повлек за собой сбой других сегментов. Кроме того, вам придется разузнавать, как программные домены общаются между собой. У Ubuntu Privacy Remix подход нетрадиционный, но он тоже обеспечивает анонимность. Сайт проекта показывает, как вы можете создать свою редакцию UPR и использовать его в качестве идеально изолированной системы, не оставляющей следов на компьютере. UPR может также определять виртуальные среды и удалять свои ISO из их настроек, но все это исключительно локально, без какого-либо соединения с внешним миром.

Рассмотрите также…

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

Дистрибутивов анонимности сушествует куда больше, чем мы рассказали. И Privatix, и Liberte уже давно не обновлялись, однако ими по-прежнему можно пользоваться, и они готовы к работе в Сети на большинстве машин. Есть также и другие проекты, например, IprediaOS, Polippix и Mandragora, которые не вошли в Сравнение, но тем не менее достойны упоминания. По сути, не так уж трудно превратить ваш существующий дистрибутив Linux в цифровую крепость. Почти все инструменты анонимности в Linux - с открытым кодом, включая интерфейсы Tor, расширения и методы шифрования.

Сайт www.сайт выражает огромную благодарность специалисту журнала LinuxFormat Александру Толстому за этот обзор лучших анонимных дистрибутивов.