Pull to refresh

Comments 30

Если я правильно понял, то описанная система (в том числе и микроядро) грузятся в ОЗУ. Если говорить только о дронах, то в этом случае можно достичь неизменность микроядра системы гораздо проще и надежнее: зашить его в ПЗУ. Серьезный минус такой системы — для обновления нужно физически менять ПЗУ, в случае дрона не существенен — если дрон в полете обновлять микроядро не нужно.
UFO just landed and posted this here
Да. Я знаю. ИМХО в случае дрона лучше использовать ПЗУ, а не ППЗУ. Но это не столь важно.
Должен быть физический переключатель «только чтение» на носителе, где хранится ОС. Захотел обновиться — отжал кнопку RO, автоматом отключился от интернета, залил обновление. Опять нажал кнопку RO

Тема защиты каналов данных нифига не раскрыта. Скажем, если мы поддерживаем обычный протокол типа SSL, и в нем найдены какие-то уязвимости by design — у нас в ОС они тоже есть? А если нет — то как верифицированное микроядро от них защитит?


Кроме того, слабое место всех без исключения подобных проектов — это периферия вообще. Т.е. грубо говоря, как только у вас появились устройства — у вас появились драйвера. Драйвера в пользовательском пространстве ограничены, потому что переключение контекста — иногда слишком дорогая штука, чтобы часто позволять ее себе.


А драйвера в пространстве ядра, с привилегиями ядра — это дырища, и это так во всех системах. Исключениями являются разве что системы типа IOS — у которых фактически не бывает сторонней периферии. Кроме того, нынешние железяки сами по себе содержат кучу закрытого софта.


Т.е., можно сделать сверхнадежную ОС — но она будет ограничена поддержкой узкого набора периферии, и плохой совместимостью с внешними системами. Как-то так.

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

Так это не вопрос. Вопрос в том, что это (т.е. верификацию кода ядра) нельзя рассматривать как технологию, которая позволить достичь безопасности массово.


Периферия — вопрос времени? А ничего, что производителей некоторых видов периферии считанное число в мире вообще? Т.е. например, типовой HDD или SSD, или видеокарта содержат внутри гигабайты кода, который никем не верифицирован, который вообще никто не видел, и при этом он имеет доступ ко всему железу (например к памяти, потому что архитектура-то компьютера у нас все равно может быть обычная, например x86). А ОС для дронов — почему нет, можно наверное.

Драйвера в пользовательском пространстве ограничены, потому что переключение контекста — иногда слишком дорогая штука, чтобы часто позволять ее себе

У L4 нет драйверов в ядре. У нее даже диспетчера памяти в ядре нет. Ядро в L4 сверхмаленькое, такие ядра даже называются наноядрами (чтобы отличать от микроядер, подобных Mach, которые по сравнению с L4 просто гиганты).


И переключение контекста в L4 на порядок или на два порядка дешевле мейнстримных ОС. Пересылка данных между процессами может быть в режиме «взял страницу памяти, убрал из памяти 1 процесса, заммэппил другому».

Дешевые переключения это хорошо. Впрочем, то про что я писал, это как правило нужно только в ограниченных случаях, типа гигабитных потоков данных. С остальными должны справляться более традиционные решения.

UFO just landed and posted this here
> В чистой математике нет «багов». Если есть правило, что делить на ноль нельзя, значит, случаи, когда в знаменателе оказывается ноль, просто не рассматриваются.

От вас несёт уринотерапией и прочим ГМО. Математика никогда не отказывается рассматривать все возникающие случаи. Просто она рассматривает специальные случаи отдельно. Вы ещё скажите, что математика не умеет оперировать полем характеристики 2. Ещё как умеет, просто этот случай описан отдельно, а для множества других теорем внесён как исключение. И так везде.

Это не так, все математические операции определены на некоторых множествах. Если вы видите «деление на ноль» как специальный случай, то вы определяете деление так, что второй операнд должен принадлежать множеству, включающему в себя ноль.


Отсутствие определения деления на ноль в ряде случаев — это явление того же порядка, как отсутствие определения деления, к примеру, на поле. Вот у нас есть поле (в котором, кстати, деление на ноль не определяется) и с ним мы можем написать a/b и что‐то с этим делать дальше. К вам пришёл студент и написал a/ℚ. Значит ли это, что вам внезапно нужно начать рассматривать «специальный случай» «деление числа на поле», добавив его во все теоремы, где вы что‐то на что‐то делите или нужно послать такого человека куда подальше, потому что поле не входит в множество рациональных чисел, на котором у вас определено деление (кроме деления на ноль, которое не определено вполне себе официально)?

математика — это не про написать формулы, а про сформулировать теоремы. Если студент даст валидное описание для объектов a/ℚ и оно будет рождать интересные и нетривиальные утверждения, то почему бы не рассматривать и это обозначения?

Но пока студент не дал «валидное описание для объектов a/ℚ» эта ситуация именно что «просто не рассматривается». И с делением на ноль то же самое: оно может быть не определено и, соответственно, не рассматриваться. Возможно, это приведёт к возникновению специального случая в другом месте (пример: решение a * x = b, когда a = 0: мы не будем рассматривать неопределённое b / a, мы скажем, что если a = 0, то x — любое число, если b = 0 и укажем на отсутствие решения, когда b ≠ 0), возможно мы доопределим операцию деления, но случай за границами области определения рассматриваться не будет.

Вы явно не видели математиков за работой. Зачем вообще деление? Допустим, мы решаем СЛАУ. Что является решением? Назвать множество значений переменных, удовлетворяющих системе. Мно-жес-тво! Оно может быть пустым, если система несовместна, как например, будет 0*x = 2. Может содержать единственное решение, может содержать целое линейное подпространство решений. В отличие от вас, математики держат свой ум в строгости и всяческие неоднозначности явно разрешают.

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

Математический подход в корне отличается от того, что вы написали — давайте сделаем какую-нибудь запись алгоритма, и проигнорируем все возможные ошибки выполнения. В математике записи и формулы ничего не стоят, если за ними не стоит какой-то теории, доказательств существования и корректности объектов, упомянутых в этих записях. Написать (назвать) можно всё что угодно, хоть треугольник с четырьмя углами. Объектом рассмотрения математики эта бессмыслица не станет.
Лично мое мнение, такой адский невроз от компании создавшей и обсуживающий данный дрон есть только в том случае, если сходный код или его части попали в чужие руки и компания стараеться всеми силами выправить ситуацию до здачи дрона в експлуатацию заказчику, дёргая за сиськи такие серьезные компании кака Boeing и DARPA!
Скорее всего кодом или частью когда кто то уже располагает, иначе они б не офишировали то что пробуют создать самую крутую для дронов ОС или исправить уязвимости коих нет, как выходит из статьи тем более что услуги данных компаний стоят как ВВП некоторых стран!
Если ее действительно тестили то ошибки точно были найдены и убраны, так как никто не будет писать что в дронах специального(военного) назначение нашли уязвимости… кто их купит после того ?)
2.Теперь тупая идея с ПЗУ от third112:
(ПЗУ) предназначены для постоянного хранения информации, которая записывается туда при изготовлении и не подлежит изменению. Следовательно, прочитать эту информацию можно, а изменить нельзя. Даже при выключении питания информация в ПЗУ остается, в этом состоит отличие ПЗУ от ОЗУ. — Отличный повод сбить дрон, снять ПЗУ считать все ПО и дизесимблировать или изменить под себя! Поверте самый тугой способ защиты!
Для разницы и контраста:
(ОЗУ) предназначены для записи, хранения и считывания информации при запуске и работе системы;
При выключении питания вся информация из ОЗУ разрушается. — следовательно противник может похвастаться что у него есть чистый ОЗУ отжатый у дрона на котором нифига нет :)
2. Если ПО системы не открытое, то такому ПО доверять не следует, за исключением особых случаев. А если ПО открытое — то сбивать дрон нет смысла.

Вопрос в том, является ли дрон тем случаем, когда надо закрыть ПО. Ну, наверно, закрыть его от произвольного доступа — надо: доступ д.б. только у тех, кто разрабатывает дрон. Осталось понять, сколько людей будут иметь доступ к ПО, и какова вероятность того, что ПО утечёт через одного из людей, имеющих доступ.

Если ПО дрона в ОЗУ, то как оно там окажется? Заливать его туда перед запуском?
Кстати, интересная идея. Ведь задачу (координаты цели) всё равно надо будет заливать.
1.Если дрон над охраняемой територией то смысл сбить есть еще какой, не теребить же флашками ему что мол проход закрыт, ты нарушил воздушное пространство)))
2.ПО для военных разработок — сугубо закрытое, глупо спорить почему оно не должно быть ОПЕН СОРС)))
3.Есть смысл заливать через каналы, так как он будет заточен именно под конкретные задачи и например набор программ для операторов дрона будет сугубо для выполнения миссии! Не нужно знать операторам всевозможные программы и интерфейсы дрона (я в том смысле на заданиях, что бы не отвликать внимание и не иметь возможность превышать полномочия)
UFO just landed and posted this here
Если ПО дрона в ОЗУ, то как оно там окажется? Заливать его туда перед запуском?
Такой метод очень уязвим. Если в дроне стоит носитель информации, нпр., HDD или ПЗУ, то бортовой компьютер можно сделать в виде единого невскрываемого блока залитого эпоксидкой, с устройством саморазрушения. В этом случае у технического персонала, обслуживающего дрон, не будет возможности скопировать систему. А если заливать систему с компа перед запуском, нпр., через USB, то оператор-шпион может легко записать ее на флешку с минимальным риском для себя.
Отличный повод сбить дрон, снять ПЗУ считать все ПО и дизесимблировать или изменить под себя!
Чтобы секретная информация не попала в руки противника борт снабжают системой саморазрушения. Если не весь дрон, то ПЗУ разрушить не так уж сложно. Зачем читать ПЗУ? Чтобы сделать копию дрона? У противника для этого должен быть неслабый индустриальный уровень. Но учитывая нарастающую скорость прогресса подобное копирование становится все более и более сомнительным — пока противник делает копию, появятся более совершенные дроны и копия окажется устаревшей. Если я правильно понял статью, речь идет о другой защите — о защите от перехвата управления дроном в полете, когда противник по каналам связи внедряет в систему свои компоненты. В ПЗУ такое внедрение невозможно. ОЗУ уязвимо не только внедрением осмысленного кода, но, что гораздо проще сделать, внедрением случайного кода, который просто нарушит работу системы и дрон упадет. Если дрон сбит и попал в руки противника источник питания (а значит и информация в ОЗУ) может уцелеть. Если противнику так нужна система дрона, то он будет сбивать так, чтобы ОЗУ и питание уцелели, нпр., стрелять по винтам и двигателям, но не по корпусу. ИМХО над этими вопросами не могли не думать разработчики и если они не использовали столь простое и очевидное решение, как ПЗУ, значит на это есть веские основания. К сожалению, статья их не приводит.
Небольшое уточнение:
(ПЗУ) предназначены для постоянного хранения информации, которая записывается туда при изготовлении и не подлежит изменению.
Само ПЗУ (микросхему) обычно делают на заводе пустой. А зашить туда инфу можно где угодно (хоть в полевых условиях) для этого нужен ПК с картой программатора. Столь же просто, как DVD-R прожечь.
Формальная верификация это проверка соответствия алгоритма его математической модели. Она с некоторой (высокой) вероятностью защищает от уязвимостей в реализации, но от уязвимостей в самом алгоритме она помочь не в состоянии.

Кстати, я совершенно не понимаю, зачем тут приведено три «типа атак». Все они сводятся к «уязвимостям в ПО».
Если говорить о мат.модели отдельного алгоритма, нпр., алгоритма перемножения двух матриц, то построение такой модели особых проблем обычно не вызывает. А вот построение полной мат.модели ОС представляется трудновыполнимым, если вообще выполнимым. Тут, видимо, нужно говорить о наборе моделей, с неизбежными в этом случае конфликтами между ними. Не уверен, что даже микроядро (о котором говорится в статье) возможно адекватно смоделировать. Будет ли модель адекватной без моделирования CPU? — О проблеме моделирования CPU писал такой лидер, как Интел в своих публикациях.

Т.о. ИМХО можно говорить только о частичной и очень ограниченной верификации.
UFO just landed and posted this here
Спасибо за ссылку, но это предварительное сообщение, в котором предпоследняя фраза:
Полное изложение работы исследователей будет озвучено на 22-ом симпозиуме, посвященном принципам работы операционных систем (SOSP).
Год сообщения 2009. Работу признали?
Работой по формулировке алгоритма математического доказательства в течение четырех лет занималась команда из 12 исследователей NICTA, аспирантов и техников. Они успешно проверили более 10 тыс. промежуточных теорем, изучив более чем 200 тыс. строк кода.
При таких объемах возникают большие сомнения.

Обычно под формальной верификацией понимают скорее проверку соответствия формальной модели (не конкретной конечной реализации) некоторым требованиям (например, нет гонок, нет бесконечных циклов, нет выходов за границы массивов и так далее). То есть, например, я пишу некий алгоритм, и хочу формально доказать, что он ни при каких условиях — любые комбинации собственного состояния, входных данных, переключений контекста потоков — не сможет писать/читать не свою память, не зависнет, всегда выполнится за ограниченное количество шагов… вот такого плана задачи. Хотя, судя по их публикациям, корректность реализации они тоже проверяли.

реакция совсем другая: «это непрактично», «всего не предусмотришь»

А ведь так и есть, собственно, из идеи «всего не предусмотришь» и выросла философия аджайл. Другое дело, когда программисты просто ленятся или не могут(в силу неразвитости абстрактного мышления) качественно продумать концепцию во всех аспектах перед реализацией. То есть им, грубо говоря, проще сначала вырыть траншею, а потом уже посмотреть, ровная ли она и подровнять(или подг***ять), если не очень. Работаю в среднестатистической веб-конторе, таких большинство.
Основная ультимативная идея которую пытаются реализовать в seL4 — это capability-based подход, который в совокупности с верификацией дает предельную надежность, что на любой эксцепшн система отреагирует предсказуемо и окуклится в нужную сторону. Однако это не защищает от ошибок на уровне железа и более верхнеуровневой реализации приложений.
Что еще более интересно теперь нам, спустя 5 лет — то что этот L4 MSM похоже взломали:
research.checkpoint.com/2021/security-probe-of-qualcomm-msm
Фирме Nicta на 7500 строк кода микроядра пришлось написать 200 тысяч строк доказательств (которые потом проверили программой-пруфчекером). Объём писанины вырос в 28 раз.
Sign up to leave a comment.

Articles

Change theme settings