Процесс изоляции в ржавчине

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

Поток анализатора должен потерять любую возможность изменить память другого потока и потерять способность выполнять системные вызовы (используя seccomp).

Есть ли простой способ добиться такого поведения для потока анализатора в Rust?

1 ответ

Решение

Если вас волнуют проблемы, выходящие за рамки того, от чего может защитить сильная система безопасности и типов Rust (например, ошибки в них, или в сторонних библиотеках и т. Д.), То вам действительно нужны отдельные процессы, а не только потоки; даже если вы используете seccomp в ненадежном потоке, на уровне ОС / ЦП он по-прежнему имеет полный доступ на запись в память других потоков в том же процессе.

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

Существует довольно полезная дискуссия по seccomp в Rust, в которой есть некоторые предложения.

Лучшая ставка выглядит как gaol из проекта Servo, который является более общей изолированной программной средой процесса (включая seccomp). Есть также некоторые другие обёртки второкурсников более низкого уровня, подобные этой.

Я еще не пробовал ничего из этого, поэтому мне было бы интересно услышать другие точки зрения / опыт.

Другие вопросы по тегам