The OpenNET Project / Index page

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

Инициатива по верификации стандартной библиотеки Rust

24.11.2024 10:59

Компания Amazon и организация Rust Foundation представили инициативу, нацеленную на повышение безопасности стандартной библиотеки языка Rust. Целью заявлена проверка надёжности и безопасности функций, в которых используется ключевое слово "unsafe", допускающее операции, небезопасно работающие с памятью, такие как разыменование указателей, изменение статических переменных и обращение к внешним библиотекам на С/C++. Отмечается, что в настоящее время стандартная библиотека Rust насчитывает около 35 тысяч функций, из которых в 7500 встречаются блоки кода, выполняемые в контексте "unsafe". За последние три года в библиотеке было выявлено 57 проблем с корректностью работы, из которых 20 были помечены как уязвимости.

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

В настоящее время для решения предложено 13 заданий. Например, в одном из заданий предлагается убедится в безопасности работы с raw-указателями в функциях модуля core::ptr и предоставить формальное доказательство корректности операций с указателями. Для верификации можно использовать существующие инструменты, такие как Aeneas, Kani, Gillian, Verus и Creusot, или предложить новые. Примеры выполненных заданий.

  1. Главная ссылка к новости (https://foundation.rust-lang.o...)
  2. OpenNews: Выпуск Rust 1.82. Новый браузер на Rust. Использование Rust в Volvo
  3. OpenNews: Проект Asterinas развивает ядро на языке Rust, совместимое с Linux
  4. OpenNews: DARPA развивает AI-транслятор для переписывания Си-кода на Rust
  5. OpenNews: В каждом пятом пакете на языке Rust используется ключевое слово unsafe
  6. OpenNews: Открытие стандартной библиотеки языка Mojo. Обновление инструментария Mojo 24.2
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62286-rust
Ключевые слова: rust, unsafe
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (36) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:53, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > При этом за последние три года в библиотеке было выявлено 57 проблем с корректностью работы, из которых 20 были помечены как уязвимости.

    Как же так? Ведь Rust должен был обернуть небезопасные части в загончик unsafe, чтобы как раз не было такого.
    Выходит, не помогло? А верифицировать любой код можно, не только Rust.

     
     
  • 2.3, Аноним (-), 11:57, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > Ведь Rust должен был обернуть небезопасные части в загончик unsafe, чтобы как раз не было такого.

    Так они это и сделали. Поэтому проблемы если возникают, то именно unsafe блоках.
    Не считая логических багов. От них только формальная верификация и спасет.

    > Выходит, не помогло?

    Наоборот, помогло. Посмотри сколько функций и в скольки есть unsafe.

    > А верифицировать любой код можно, не только Rust.

    Можно. Но в расте тебе нужно будет верифицировать 7.5к функция, а не 35 тысяч как в других языках.
    А это почти в 5 раз меньше работы.

     
     
  • 3.8, Аноним (8), 12:23, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >А это почти в 5 раз меньше работы.

    А вот это вряд ли, потому что каждое включение unsafe на Rust в 5 раз сложнее проверять, чем в других языках.

     
     
  • 4.9, Facemaker (?), 12:24, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >каждое включение unsafe на Rust в 5 раз сложнее проверять, чем в других языках

    Как вычислялась эта метрика?

     
     
  • 5.12, Аноним (-), 12:37, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Как вычислялась эта метрика?

    Методика 'Пальцем в небо' сертифицированного сотрудника 'НИИ Кекспертизы и вбросов' им. Опеннета.
    Все утверждения истинны на 146%!

    Я бы спросил в чем отличие unsafe rust от обычной сишки, но смысла нет - все равно ответа не получим))

     
     
  • 6.35, Аноним (35), 14:23, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В чем отличие safe rust от обычной сишки?
     
  • 4.21, erthink_ (?), 13:15, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. Ровно наоборот.

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

    В среднем по больнице, unsafe-код в Rust более регулярен и проще (менее комплексный) чем подобный в сишных библиотеках.

    Есть и обратный эффект, в unsafe-функциях концентрация странностей/мутностей больше чем в средней glibc. Но это только потому, что в rust есть возможность и стремление отделять мух от котлет, а в glibc любые unsafe операции могут быть в любом месте (в самом безобидном и неожиданном).

    Конечно, можно найти зубодробительные unsafe-сценарии, но тогда и сравнивать их надо с аналогичными сишными случаями.

     
  • 3.13, Аноним (13), 12:39, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Но в расте тебе нужно будет верифицировать 7.5к функция, а не 35 тысяч как в других языках.

    в другом языке есть формально верифицированный компилятор

    https://compcert.org

    а у раста пока что даже не формализовали ситему типов

    https://blog.rust-lang.org/2023/01/20/types-announcement.html

     
     
  • 4.28, erthink_ (?), 13:56, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > в другом языке есть формально верифицированный компилятор
    > https://compcert.org

    Нисколько не хочу принизить ценность проекта и достигнутые там результаты, но всё-таки нужно слегка критично читать написанное с осознанием всего комплекса проблем/задач.

    Формальная/математическая верификация покрывает часть функционала, т.е. "не всё".
    При этом возникает некая проблема/задача верификации "самого верификатора", т.е. доказательства что сформированного списка свойств достаточно для "верифицированного компилятора".

    Например, предположим что у вас есть "верифицированный компилятор". В нём могут быть баги ?
    - если "нет, багов быть не может", то упомянутый компилятор нельзя назвать верифицированным.
    - если "да, баги могут быть", то верификация перестаёт что-либо гарантировать на практике.

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

     
  • 3.16, 21yosenior (?), 12:52, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Поэтому проблемы если возникают, то именно unsafe блоках.

    https://github.com/Speykious/cve-rs - в фантазиях.

    > А это почти в 5 раз меньше работы.

    Нет, это столько же работы, точнее даже больше. Сейф раст ничего не гарантирует.

     
     
  • 4.33, Аноним (-), 14:21, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вот эпичный тред, где люди в течение недели(!) пытались заставить это работать
    https://github.com/Speykious/cve-rs/issues/4

    Им пришлось написать самописный null_mute, модифицировать transmute() подменив там crate::null_mut на самописный... и даже после этого получается ошибка компиляции

    error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
    error: could not compile 'cve-rs' (lib) due to previous error

     
     
  • 5.36, Аноним (35), 14:30, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, что ты там компилируешь?




    $ cargo install cve-rs
    $ ~/.cargo/bin/cve-rs segfault
    Segmentation fault (core dumped)



     
     
  • 6.40, 21yosenior (?), 14:42, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Он ничего не компилирует, он агитатор который потерялся в ветке ниже.

    Если непонятно, почему они так цепляются за "кастомный" трансмут. Это опшн-селект такой. Если трансмут стандартный - орём "там ансейф, поэтому не считается". Если трансмут свой - орём "надо было брать стандартный, поэтому не считается". Система непотопляема, как говорится.

     
  • 2.6, Аноним (6), 12:03, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет ничего иделаьного! А результат всяко лучше по сравнению с С/C++.
     
  • 2.7, proninyaroslav (ok), 12:04, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А теперь представим что unsafe нет, и нужно перелопатить 35к функций, вместо 7500 если бы unsafe был.
     
     
  • 3.15, 21yosenior (?), 12:48, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Там и так нужно перелопатить 35к, уб в расте есть везде. Не говоря о том, что многие из этих 35к - хэлворды.
     
     
  • 4.18, proninyaroslav (ok), 12:59, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    UB в расте не может быть за пределами unsafe блока. Это гарантированно. Все остальное он конечно не гарантирует, например утечки памяти.
     
     
  • 5.22, 21yosenior (?), 13:23, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Эти гарантии уже умножены на ноль. Кидал ссылку ниже.
     
  • 5.34, Аноним (34), 14:21, 24/11/2024 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     

  • 1.5, ijuij (?), 12:02, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Unsafe был введён более пяти лет назад (https://github.com/rust-lang/rust/commit/10855a36b53d33aa2e4f8b98107ee54a0cca5), и за это время люди успели использовать этот ключевое слово в множестве проектов. Однако только сейчас они начали заниматься его верификацией. Ну что ж, подход к безопасности действительно "на высшем уровне".

     
     
  • 2.31, Аноним (34), 14:15, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Верифицируют библиотеку, а не unsafe.
     

  • 1.14, 21yosenior (?), 12:46, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    https://github.com/Speykious/cve-rs - там уб в сейфе, толку валидировать ансейф.
     
     
  • 2.17, Карлос Сношайтилис (ok), 12:58, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ага, со своей версий transmute. Из стандартной библиотеки "не подошла".

    https://github.com/Speykious/cve-rs/blob/main/src/transmute.rs

     
     
  • 3.19, 21yosenior (?), 13:08, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Хоть со своей, хоть с чьей-то ещё. Заявляется безопасность кода на языке, а не либы - подучи логику. Ансейфа нет, проблемы есть.
     
     
  • 4.23, Аноним (23), 13:35, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> cve-rs also contains safe reimplementations of:
    >> std::mem::transmute
    >> std::ptr::null()/null_mut() but for references
    >>> pub const unsafe extern "rust-intrinsic" fn transmute<Src, Dst>
    >>> Reinterprets the bits of a value of one type as another type.
    > Хоть со своей, хоть с чьей-то ещё. Заявляется безопасность кода на языке,
    > а не либы - подучи логику. Ансейфа нет, проблемы есть.

    Кекспертизм опеннетный, аз из
    Да и то, что для появления проблем (т.е. чтобы найти баг в компиляторе - ведь "работатет" оно только с кастомным null/transmute) там целый консилиум корпел не одну неделю (см. обсуждение на гитхабе) - кексперты скромненько умалчивают.
    И правда, какая разница: заиметь UB после траха^W написания кастомного null и принудительного каста типа данных - или заиметь UB, просто сложив два числа или забыв пустую строку в конце исходника ...

     
     
  • 5.26, 21yosenior (?), 13:44, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Всё, ответов не будет? С одного вопроса потеряться - мощно.

    > cve-rs also contains safe reimplementations of
    > safe reimplementations

    Молодец, умножил на ноль тезисы предыдущего героя. Хоть не зря кучу левого мусора спастил.

     
     
  • 6.32, Аноним (23), 14:15, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Всё, ответов не будет? С одного вопроса потеряться - мощно.

    Не суметь прочесть три предложения и сразу перейти к "папа, где море?" - намного уныл^W мощнее.

    >> cve-rs also contains safe reimplementations of
    >> safe reimplementations
    > Молодец, умножил на ноль тезисы предыдущего героя. Хоть не зря кучу левого мусора спастил.

    Молодец, обозвал сигнатуру transmute "левым мусором" и не сумел написать ничего по существу ... зато выдал хороший, объемный выхлоп метана - Газпром гордится тобой!


     
     
  • 7.37, 21yosenior (?), 14:36, 24/11/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.20, Аноним (20), 13:14, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Компания Amazon и организация Rust Foundation представили инициативу

    Только один вопрос. Кто им разрешил?

     
     
  • 2.24, nume (ok), 13:41, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А кто запрещал?
     
  • 2.27, ijuij (?), 13:54, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Хороший вопрос! Иногда кажется, что разрешение не требуется.
     
     
  • 3.39, Аноним (20), 14:40, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос не праздный. Вспомним Ada, созданный МО. Да, он есть, но связываться с ним как-то не хотелось и не хочется. За Rust также топит МО. И это тоже как бы намекает. Последствия будут, если не сейчас, так потом. Смотреть надо не сиюминутные выгоды, а на перспективу.
    Наверное, лучше остаться на относительно свободном C/C++, в том числе для новых проектов.
     

  • 1.29, Аноним (29), 13:59, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Инициатива наказуема.
     
  • 1.30, Аноним (34), 14:04, 24/11/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.38, Аноним (38), 14:37, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как насчет верификации хлама, который cargo тащит из-за бугра?
     
     
  • 2.41, Аноним (34), 14:48, 24/11/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В суверенных проектах его использовать нельзя.
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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