Операционная система, где полномочия держат в руках, а не подразумевают
Почти любой взлом устроен одинаково: программа дотягивается до того, до чего не должна. ParanoidBSD — операционная система, построенная так, чтобы это было невозможно. Каждой программе выдаётся только то, что ей нужно, а всё остальное не просто запрещено — оно недосягаемо. Основана на HardenedBSD, переписана на современном C++, а оригинал лежит рядом, чтобы каждое изменение можно было с ним сверить.
Что это такое за минуту
Операционная система лежит под всем остальным, что работает в организации. Большинство построено на коде, которому десятки лет, и любая программа может попросить что угодно — система решает уже потом, разрешить ли. Поэтому одна дыра в чём-то безобидном, например в коде, который рисует шрифт на экране, может закончиться кражей паролей.
ParanoidBSD меняет то, о чём программа вообще способна попросить. Вместо проверки прав после запроса каждой программе выдаётся короткий список того, к чему ей можно прикоснуться, и никакого способа назвать что-то ещё. Дыра в одной части перестаёт быть дорогой ко всему остальному.
Поставщики в обороне и госсекторе, от которых теперь требуют софт на более безопасных языках. Техника, которая годами стоит в поле и которую нельзя быстро обновить — заводские контроллеры, медицинские аппараты, оборудование коммунальных служб. Преподаватели и исследователи, которым нужна настоящая операционная система, достаточно небольшая, чтобы прочитать её целиком.
Окружающие полномочия — это баг, который нельзя пропатчить
В обычном Unix процесс не владеет правом открыть
/etc/master.passwd. Он просто просит, а ядро решает уже после, исходя из того, кем процесс себя объявляет. Любой процесс может назвать любой ресурс в системе. Пространство имён глобальное и окружающее; проверка приделана задним числом.
Именно поэтому одна ошибка разбора в отрисовщике шрифтов превращается в кражу учётных данных. Отрисовщику никогда не был нужен файл паролей — но в архитектуре ничто не помешало ему его запросить.
HardenedBSD здесь уже делает серьёзную работу: рандомизация размещения адресного пространства (ASLR), которая каждый раз загружает программу в другое место, так что атакующий не угадает, где что лежит; целостность потока управления (CFI), которая не даёт увести программу в код, для исполнения которого она не предназначалась; а рядом с ними меры из PaX, SafeStack и укреплённые распределители памяти. PBSD сохраняет всё это и меняет сам вопрос, который стоит ниже — от “разрешено ли это процессу?” к “есть ли у процесса дескриптор на это?”
Два способа ответить на один системный вызов
// Ambient authority — the traditional path int fd = open("/etc/master.passwd", O_RDONLY); // kernel walks a global namespace, then // checks uid/gid/MAC after the fact // Handle nucleus — the PBSD path auto f = dir_handle.open("master.passwd", Rights::Read); // there is no global namespace to walk. // no handle, no name, no operation.
Иллюстративная форма различия, а не дословный перечень вызовов, которые программа делает в ядро — его интерфейса прикладного программирования, или API. Эталонная модель лежит в docs/.
Проведите системный вызов через ядро
Выдайте процессу дескрипторы, выберите, что ему попробовать, и переключайтесь между двумя моделями полномочий. Вердикт и обоснование считаются прямо в вашем браузере — это учебная модель устройства, а не эмулятор ядра.
Ядро возможностей — монитор обращений
Процесс пытается…
Трассировка
Дескрипторы у процесса
Вердикт
“Достижимо” считает, сколько из перечисленных операций этот процесс вообще может выполнить при текущей модели. При окружающих полномочиях достижимость определяется личностью процесса; при ядре — теми дескрипторами, которые у него реально есть.
pbsd/; спецификация — в
docs/specs/.
Четыре этапа и модель, которая никогда не удостоверяет себя сама
Перенести пользовательское окружение и ядро Berkeley Software Distribution (BSD) на C++23 вручную — это десять лет работы. Перенести, попросив языковую модель переписать файлы, — быстрый способ получить правдоподобный мусор. PBSD не делает ни того, ни другого.
Инвентаризация
tools/inventory_c_sources.py и clang_cxx23_port.py оценивают каждый файл на C по сложности и пишут c_inventory.csv. Об объёме работ ничего не угадывается.
Детерминированные проходы
run_todo_passes.py применяет безопасные механические переписывания на уровнях 0–4. Модель не участвует. Всё, от чего проход отказался, записывается в
refusals.jsonl а не продавливается силой.
Агентный цикл
pbsd.py заполняет файлы-заглушки и отвергнутые файлы через DeepSeek Flash с эскалацией на Pro при максимальном усилии рассуждения — по умолчанию 48 воркеров Flash и 24 Pro.
Именно это и финансирует Kickstarter.
Барьер проверки
Компиляция, ASan, UBSan, дифференциальное исполнение и сравнение на уровне промежуточного представления (IR) компилятора. Файл, который только компилируется, —
непроверенный. Отказы попадают в
agent_port_failures.jsonl.
Перенос — это утверждение об эквивалентности
Сказать, что файл перенесён, значит сказать, что новый ведёт себя как старый. Это утверждение, а утверждениям нужны доказательства. Переписанный на C++23 файл, который компилируется, — это правдоподобно выглядящий каркас; это ещё не тот же самый демон.
Поэтому знак равенства и есть барьер. Дифференциальное исполнение запускает обе версии и сравнивает наблюдаемое поведение. Сверка IR проверяет, что для компилятора они значат одно и то же. Пока не пройдено ни то, ни другое, файл остаётся открытым в журнале миграции и не идёт в зачёт прогресса — как бы законченно он ни выглядел.
Правила, которым репозиторий действительно подчиняется
Файл не готов, пока не пройдена дифференциальная проверка или сверка IR
Переносить точно — не “чинить” молча баги оригинала
Сначала детерминированные инструменты; модели закрывают только остаток
C++ в ядре — freestanding: -fno-exceptions -fno-rtti
docs/specs/KERNEL_CXX_ABI.md чтобы участник мог понять, что допустимо в контексте ядра, не гадая.
У каждого модуля должна быть запись о происхождении, прежде чем он считается готовым
docs/PROVENANCE.md фиксирует, откуда взялся каждый модуль и под какой лицензией. Именно это делает заявление о лицензиях ниже проверяемым, а не декларативным — можно модуль за модулем посмотреть, какой код происходит из HardenedBSD, а какой является новой работой PBSD.
Две лицензии, честно разделённые
Новый код PBSD — ядро, модули C++23, инструменты — предлагается на стандартных условиях Imortek: GNU Affero General Public License (AGPL-3.0+), бесплатно для личного использования, благотворительности, образования и организаций с доходом меньше 50 000 австралийских долларов (AUD) в год, с многоуровневой коммерческой лицензией выше этого порога.
Код, производный от HardenedBSD, остаётся под своей исходной лицензией BSD. Его нельзя перелицензировать, и Imortek этого не заявляет. docs/PROVENANCE.md — это запись о том, что к чему относится.
Новая работа PBSD
pbsd/, tools/, scripts/, ядро возможностей, UDA, BIFROST, композитор и тема.
Производное от HardenedBSD
hbsd/ и каждый перенесённый файл, который к нему восходит. Исходные условия, исходное указание авторства.
Операционная система, в которую труднее влезть
Большинство взломов пользуется ошибкой одного и того же рода: программа дотягивается до памяти, которую трогать была не должна. ParanoidBSD пересобирает проверенную систему на языке, где такую ошибку сделать гораздо труднее, и выдаёт каждой программе только тот доступ, который ей действительно нужен.
Поставщики для оборонного и госсектора
Заказчики начинают требовать софт на языках, которые закрывают целые классы атак. Начинать заново с нуля — это десять лет. Здесь вместо этого переносится уже проверенная система и ведётся письменная запись по каждому изменённому файлу и по тому, как это изменение проверяли.
Оборудование, которое годами стоит в поле
Заводские контроллеры, медицинские аппараты, оборудование коммунальных служб. Когда всплывает уязвимость, выкатить обновление часто просто нельзя. Здесь ограничено, насколько далеко зайдёт тот, кто уже внутри, потому что ни одна программа не дотянется дальше того, что ей выдали.
Университеты и исследователи безопасности
Настоящая операционная система, достаточно небольшая, чтобы прочитать её целиком, и рядом лежит оригинал для сравнения. Годится для преподавания и для проверки идей на чём-то, что действительно работает.
Перенос держится на вычислениях, которых у него нет
Детерминированные проходы бесплатны. Агентный цикл, который закрывает остаток — и проверочные прогоны, через которые он обязан пройти — нет. В этом вся просьба.