The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Google открыл систему для создания sandbox-окружений для библиотек C/C++

19.03.2019 13:46

Компания Google объявила от открытии проекта Sandboxed API, позволяющего автоматизировать процесс формирования sandbox-окружений для изолированного выполнения произвольных библиотек на языках C и C++. Изоляция кода библиотек позволяет защититься от потенциальных атак на предоставляемые библиотеками обработчики, создавая дополнительный барьер на случай наличия в их коде уязвимостей, которые можно эксплуатировать через манипуляции с поступающими в библиотеку внешними данными. Код открыт под лицензией Apache 2.0.

Изоляция осуществляется при помощи runtime Sandbox2, в котором применяются пространства имён, cgroups и seccomp-bpf. Вынесенный в sandbox код выполняется в отдельном процессе, для которого ограничивается доступ к системным вызовам и ресурсам, таким как файлы и сетевые соединения. Процессы получают доступ только к системным возможностям, которые непосредственно требуются для выполнения изолируемого кода.

Sandbox2 определяет компоненты для запуска процесса, применения к нему правил изоляции и сопровождения дальнейшего выполнения. Sandbox2 может использоваться отдельно от Sandboxed API для изоляции не только библиотек, но и произвольных процессов. Кроме повышения защиты, положительным моментом выноса кода в отдельные процессы является возможность отдельного регулирования лимитов на потребление библиотекой памяти и CPU, а также защита от сбоев - сбой в библиотеке не приводит к краху всего приложения.

Sandboxed API является надстройкой над Sandbox2, упрощающей портирование существующих библиотек для выполнения в изолированном режиме. Sandboxed API предоставляет промежуточный программный интерфейс, дающий возможность запустить код библиотеки в sandbox-окружении, а также организовать проброс в sandbox-окружение обращений к библиотечным вызовам и обеспечить доставку в основную программу результатов работы библиотеки. Обращение к изолированной библиотеке осуществляется через специализированный RPC, базирующийся на протоколе ProtoBuffs.

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

Для изолируемой библиотеки автоматически генерируется код с аннотациями изолируемых функций для сборочной системы Bazel и программным интерфейсом (SAPI) для взаимодействия между базовыми и изолированным процессами. Разработчик также должен сформировать заголовочный файл с правилами изоляции, который определяет все разрешённые системные вызовы и операции (чтение, запись, открытие файлов, доступ к времени, возможность установки обработчиков сигналов, поддержка выделения памяти через malloc и т.п.). Отдельно определяются файлы и каталоги к которым должна иметь доступ библиотека.

В настоящее время проект доступен только для Linux, но в будущем обещают добавить поддержку macOS и BSD-систем, а в отдалённой перспективе и Windows. Из планов также отмечается возможность изоляции библиотек на языках, отличных от C и C++, поддержка дополнительных runtime для изоляции (например, на базе аппаратной виртуализации) и возможность использования CMake и других сборочных систем (сейчас поддержка ограничена сборочной системой Bazel).

  1. Главная ссылка к новости (https://security.googleblog.co...)
  2. OpenNews: Google открыл gVisor, гибрид системы виртуализации и контейнеров
  3. OpenNews: Оценка безопасности новой системы контейнерной изоляции Nabla
  4. OpenNews: Выпуск Kata Containers 1.0 с изоляцией на основе виртуализации
  5. OpenNews: Улучшение sandbox-изоляции в Firefox
  6. OpenNews: Для Firefox развивается режим строгой изоляции страниц
Лицензия: CC-BY
Тип: Программы
Ключевые слова: sandbox, google, limit, lib
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (33) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:51, 19/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Какая все же славная эта корпорация. Вот, еще одну технологию опубликовали в опенсорс.
     
  • 1.2, Anon_Erohin (?), 13:55, 19/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –42 +/
    На какие же извращенские технологии идут чтобы до сих пор пользоваться небезопасными С/C++... Нет чтобы просто взять и юзать Rust. Я просто не понимаю насколько нужен низкий интеллект у тех кто до сих пор юзает C/C++ для новых систем и сервисов.
     
     
  • 2.3, Онаним (?), 13:58, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Нет чтобы просто взять и юзать Rust.

    Ты уже взял и юзаешь? Или, как и большинство растофанов, получаешь зарплату за разработку на ненавистных крестах, а ржавой слюной брызжешь только на форумах?

     
     
  • 3.4, имя (?), 14:03, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    сильно сомневаюсь, что он пишет на расте, жир протекает через монитор.
     
  • 3.18, Anon_Erohin (?), 18:18, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/vn971?tab=repositories
     
     
  • 4.19, Аноним (19), 18:34, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что это за ржавые пет-проекты со случайного гитхаб-аккаунта?
     
     
  • 5.23, Аноним (23), 23:49, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Только звёзд у него будет побольше чем у всех местных растоненавистников вместе взятых
     
  • 3.21, JustCurious (?), 19:39, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Прям про меня...
     
  • 2.5, Alexey (??), 14:21, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Твой Раст не юзабильный еще на столько. А синтаксис так он вообще убогий.
     
     
  • 3.11, Anon_Erohin (?), 15:41, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Приведи пример на твое мнение хороший синтаксис. Как по мне синтаксис у Rust минималистичен и лаконичен. https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
    И теперь сравни эту простоту с синтаксисом С с поинтерами и особенно разбором конструкций дефайнов с поинтерами на функции... А так же посмотри на темплейты С++.

    Кажому языку свое время, С и С++ уже изжили себя. Интересно почему до сих пор не пишут на Cobol? (ну кроме допотопных единичных программ на поддержки)

     
     
  • 4.13, time (?), 16:43, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    c/c++ изжили себя, php умер и блаблабла
     
  • 4.15, Wladmis (ok), 17:33, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Приведи пример на твое мнение хороший синтаксис. Как по мне синтаксис у
    > Rust минималистичен и лаконичен. https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
    > И теперь сравни эту простоту с синтаксисом С с поинтерами и особенно
    > разбором конструкций дефайнов с поинтерами на функции... А так же посмотри
    > на темплейты С++.

    Синтаксис Си на порядок проще синтаксиса Rust'а.

    > Кажому языку свое время, С и С++ уже изжили себя. Интересно почему
    > до сих пор не пишут на Cobol? (ну кроме допотопных единичных
    > программ на поддержки)

     
  • 2.6, Wladmis (ok), 14:27, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Rust не обезопасивает от логических ошибок. Выполнять программу в песочнице — хорошая мысль, даже если программа написана на Rust'е.
     
  • 2.7, IRASoldier (?), 14:30, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Запомни и повторяй как мантру: "ЯП, годного на роль серебряной пули не бывает". Поутру, в обед и перед сном. И поставь себе на смартфон какую-нибудь приблуду, чтобы каждый день выводила тебе на экран рандомную цитату из трудов "Банды четырех" - медитируй над ней и размышляй о своей греховности.

    Интеллект же у тех, кто юзает C/С++ в промышленной разработке заведомо поболее, чем у культистов очередного модного поветрия. Порог вхождения, хвала Омниссии, не позволяет иначе.

    (Дисклаймер - ничего не имею против Rust как такового, пусть развивается, тогда будем посмотреть.)

     
  • 2.9, Анонимус154 (?), 15:03, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    "Безопасный" Rust? Подскажите пожалуйста, сколько раз в исходниках библиотеки встречается unsafe?
     
  • 2.10, Аноним (10), 15:17, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Напиши и отладь тонну либ на расте, затем поговорим
     
     
  • 3.12, Deny (?), 15:52, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Сперва добейся
     
  • 3.16, Anon_Erohin (?), 17:52, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ага, скажете это десяткам разрабов и десятку лет разработки OpenSSL библиотеки и вспомните HeartBleed и другие уязвимости там связанные со спецификой языка, например не очисткой за собой памяти нулями, переполнением буфера, уход за границы массива и т.д. и т.п.
    Это лишь один из тысяч примеров когда перепись на Rust просто сразу обеспечивала защиту от подоюных уязвимостей.
     
     
  • 4.20, Аноним (19), 18:35, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это лишь один из тысяч примеров когда перепись на Rust просто сразу обеспечивала защиту от подоюных уязвимостей.

    А что, OpenSSL переписали на Rust?

     
     
  • 5.34, Аноним (34), 10:47, 22/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А что, тысячи других программ уже тоже? Похоже, автор комментария просто забыл сослагательное наклонение использовать.
     
  • 2.14, Ordu (ok), 17:03, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > На какие же извращенские технологии идут чтобы до сих пор пользоваться небезопасными С/C++

    Да ладно, для раста такие контейнеры ещё полезнее чем для C++. Ты можешь подключать C'шные либы делать unsafe { unsafe_lib::unsafe_c_func() } и в случае если там какая хрень, то делать что-то в стиле panic!("unsafe code is so unsafe"). Или вместо няшной паники, ты можешь сделать return Err(UnsafeIsSoUnsafe::new()), и в процессе размотки стека этой ошибкой подчистить ресурсы, закрыть правильно файлы, сделать другие полезные вещи, и только после этого няшно спаниковать.

     
  • 2.17, Tifereth (?), 18:06, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что за извращение, Rust! Только хардкор, только Erlang! Ну на худой конец - Malbolge.
     
  • 2.24, Аноним (23), 23:53, 19/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема Rust в том, что трудовой рынок ещё не до конца сформирован. Разработчиков днём с огнём не сыщешь даже в крупных городах вроде Москвы. Хотя те, кто уже есть уровнем явно выше C++/PHP-макаки.

    Говорю как пишущий на ржавчине за еду^Wзарплату.

     
  • 2.30, Аноним (30), 20:33, 20/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А ничего что в Rust'е есть unsafe и практических во всех "узконаправленных" вещах приходится его использовать? А там вообще что угодно происходит. В C/C++ хоть в стандарте прописано UB, а в unsafe плевать что происходит.
     

  • 1.22, Аноним (22), 21:11, 19/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Обращение к изолированной библиотеке осуществляется через специализированный RPC, базирующийся на протоколе ProtoBuffs

    А какой транспорт используется для реализации этого RPC, shared memory?

     
  • 1.25, Аноним (23), 23:54, 19/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё дурака валяют вместо того, чтобы переписать сишный говнокод на няшной ржавчине.
     
     
  • 2.26, аноним3 (?), 00:21, 20/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    си еще долго будет языком системного уровня. просто потому что... стандарт? у других нет удобства того же питона( хотя некоторые места там спорно) и нет скорости выполнения. плюс библиотек в си/с++ вагон и маленькая тележка. да и правда смотрел я на раст как то ... сомнительная стилистика написания кода. и не сишная и не явская и не питоновская. такой каламбур, что диву даешься. и е походу чем больше модернизируют, тем все более запутанная. походу они в попытках убрать ошибки проектирования языка делают его все ... тяжелее в использовании?
     
     
  • 3.31, Аноним (30), 20:35, 20/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А еще практически во всех ОС ABI все еще от первых Unix и C.
     
     
  • 4.32, Wladmis (ok), 20:48, 20/03/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А еще практически во всех ОС ABI все еще от первых Unix
    > и C.

    Будто что-то плохое.

     
  • 2.29, А (??), 09:56, 20/03/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Да проблема индустрии ж не в языке. И не в синтаксисе ЯП. Проблема в том что давно уже пришла пора написать новый язык вместе с новой ОС. Как в свое время Юникс родился вместе с Си - до этого все ОС писали на АСМ-е или вообще в машинных кодах. Вот давно уже пора написать совершенно новую ОС в которой ВСЕ будет объектами с нативной поддержкой объектных API сверху-донизу, в новом ЯП... Но тут куча проблем, и первая же - где "граница" для этой новой ОС и должно ли сетевое взаимодействие в этом "чудном новом объектном мире" тоже играть по общим "новым правилам"... И как вообще "договориться" между "старым и новым миром"? ... И попытки таких проектов я так понимаю уже были, только ни одна не завершилась коммерческим успехом... Ну а в существующем программном окружении "только костыли, только хардкорд"...
     
     
  • 3.35, Прохожий (??), 23:38, 01/04/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Есть такая ОС (попытка его создать): Фантом ОС https://ru.wikipedia.org/wiki/Фантом_(операционная_система) , где всё есть объекты. Он много раз всплывал в разных конференциях, но дальше обсуждений, вроде не дошло.
     

  • 1.28, Аноним (28), 09:42, 20/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    firejail?
     
  • 1.33, Аноним (33), 01:57, 21/03/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    По описанию похоже на cloudabi
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру