Функции безопасности OpenBSD

Материал из Викиреальностя
Перейти к: навигация, поиск

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

Содержание

[править] API и изменения сборки

Ошибки и уязвимости часто вызываются ошибкой программиста. Основная причина — неправильное употребление строковых функций strcpy и strcat в языке программирования C. Есть две общих альтернативы, strncpy и strncat, но они гораздо сложнее для программиста[1][2]. Однако создателями OpenBSD были разработаны компромиссные функции strlcpy и strlcat.[3] Эти функции предназначены для того, чтобы программист намеренно оставил буферы незавершенными или переполненными.[4] Их одобрили в NetBSD и FreeBSD, но в стандартную библиотеку GNU C они не были добавлены.[5]

В OpenBSD компоновщик был изменен, чтобы выдавать предупреждение при нахождении небезопасных функций.[6] К API, ориентированным на безопасность, также относятся issetugid[7] и arc4random.

[править] Защита памяти

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

ProPolice — расширение компилятора GCC, разработанное Хироаки Это, чтобы защитить приложения от атак «переполнение стека».[8] Это делается через несколько операций: локальные переменные стека переупорядочиваются, чтобы поместить буферы после указателей, защитив их от повреждения в случае его переполнения; указатели от аргументов функций также помещаются перед локальными буферами; после них помещаются значения «канареек», определяемые на этапе исполнения, которые могут иногда использоваться для обнаружения переполнения буфера (в случае переполнения их значения изменяются в ходе перезаписи). ProPolice определяет, защищать ли или не защищать буфер на основе автоматической эвристики, которая снижает производительность защиты. Расширение было интегрировано в OpenBSD GCC в декабре 2002 года и сначала было доступно для OpenBSD 3.3[9], в следующей версии операционной системы оно было применено в её ядре.[10] ProPolice работает на всех поддерживаемых архитектурах и включен по умолчанию, поэтому любой скомпилированный код C будет защищен без вмешательства пользователя.[11]

В мае 2004 года OpenBSD на платформе SPARC получил дальнейшую защиту стека в виде StackGhost, использующая для этого возможности данной архитектуры.[12] Поддержка SPARC64 была добавлена в марте 2005 года.

В OpenBSD 3.4 также была включёна W^X (W для X) — схема управления памятью, которая гарантирует, что память является или перезаписываемой, или исполнимой, но никогда не имеет оба этих свойства, что обеспечивает дополнительный уровень защиты от переполнения буфера. В то время как данную систему относительно просто реализовать на x86-64-подобной платформе, так как у неё есть аппаратная поддержка бита NX, OpenBSD является одной из нескольких ОС, поддерживающей это для универсальной платформы i386.[13]

Во время цикла разработки версии 3.8 были внесены изменения в функции управления памятью функции malloc. В традиционных UNIX-системах malloc выделяет больше памяти, расширяя сегмент данных UNIX, но на практике это мешает реализовать надёжную защиту. В OpenBSD реализация malloc использует системный вызов mmap, который был изменен так, чтобы он возвращал случайные адреса памяти и гарантировал, что различные области не отображаются друг с другом. Кроме того, выделение маленьких блоков в совместно используемых областях теперь рандомизировано, и функция free была изменена, чтобы возвратить память ядру вместо её оставления во время процесса. Эти функции делают ошибки трудноиспользуемыми и легкообнаруживаемыми: вместо повреждения памяти это приводит к отказу сегментации и прерыванию процесса.

[править] Криптография и рандомизация

Одна из целей проекта OpenBSD — интеграция криптографических средств и программного обеспечения в базовую операционную систему. С этой целью в неё включены низкоуровневые функции, такие как генератор сильных псевдослучайных чисел,[14] криптографические хеш-функции и поддержка аппаратных криптографических средств (OpenBSD Cryptographic Framework). Эти возможности используются везде, включая алгоритм хеширования пароля bcrypt[15], основанный на блочном алгоритме Брюса Шнайера Blowfish, который использует ресурсы центрального процессора для составления расписания ключей, тем самым, делая брутфорс бесполезным.

Чтобы защитить уязвимую информацию, такую как пароли на диске, OpenBSD поддерживает шифрование раздела подкачки. Область подкачки разделена на множество маленьких областей, которым присвоен свой отдельный ключ шифрования: как только данные в области становятся уже не нужными, OpenBSD надежно удаляет их, отбрасывая ключ шифрования.[16] Эта опция активирована по умолчанию в OpenBSD 3.9 и более новых линиях.

Сетевой стек интенсивно использует рандомизацию для повышения безопасности и уменьшенич предсказуемости различных значений, которые могут быть полезны для атакующего, включая порядковые номера TCP, метки времени и эфемерные исходные порты.[17] Много функций, чтобы увеличить сетевую упругость и доступность, включая контрмеры для проблем с ICMP и программным обеспечением для избыточности, таких как CARP и pfsync, также включены. OpenBSD является первым проектом, где текстовый демон Telnet отключён в пользу зашифрованного демона SSH.

[править] X11

В OpenBSD-версии X Window System (названная Xenocara) есть некоторые дополнения безопасности. Сервер и некоторые приложения по умолчанию исправлены, чтобы использовать разделение полномочий, а OpenBSD обеспечивает «апертурный» драйвер, чтобы ограничить доступ X к памяти.[18] Однако после работы над уязвимостями X Тео де Раадт заявил, что апертурный драйвер — это «лучшее, что мы можем сделать» и что X «нарушает все модели безопасности, о которых Вы услышите в университетском классе».[19] Он продолжал ругать разработчиков X из-за того, что они слишком медленно решают проблему 10-летней давности. 29 ноября 2006 года был разработан драйвер VESA, который разрешал работать X, но гораздо медленнее, без использования апертурного драйвера.[20]

15 февраля 2014 года X был изменён, чтобы он работал без полномочий суперпользователя root.[21][22]

[править] Прочие функции

Разделение и аннулирование полномочий[23], chroot и рандомизированная загрузка библиотек также играют роль в увеличении безопасности системы. Многие из этих мер были применены к OpenBSD-версиям таких программ, как tcpdump и Apache, а также к системе аутентификации BSD.

Команда OpenBSD предоставляет пользователям полную информацию о различных системных ошибках и об обнаруженных уязвимостях, что иллюстрируется лозунгом проекта: «Всего две удаленные уязвимости за черт знает сколько лет!»[24]

В OpenBSD 5.3 была представлена поддержка полного шифрования дисков.[25]

[править] Примечания

[править] Ссылки

Функции безопасности OpenBSD относится к теме «Информационная безопасность»   ±