Страницы

Показаны сообщения с ярлыком безопасность. Показать все сообщения
Показаны сообщения с ярлыком безопасность. Показать все сообщения

воскресенье, 8 декабря 2024 г.

Подход для безопасности по памяти в системном ЯВУ

На примере языка Oberon представлен общий подход[0], позволяющий на основе высокоуровневых средств создать безопасную по памяти программную среду, защищённую от нарушений изнутри её же средствами. Так как основная часть языка Oberon сама по себе защищена от нарушений границ, то основу предложения составляет ограничение псевдомодулей для работы с переменными с возможными нарушениями типизации, что может быть нужно в системных задачах. Ограничение позволяет сохранить общую целостность. Даже обычный интерфейс псевдомодуля SYSTEM позволяет применять схожий подход[1], но в силу несоответствия воплощения исходной простой задумке, это приводит к ограниченности применения и бо́льшим накладным расходам.


[0] github/vostok-space/безопасно-по-памяти.md
[1] проверяемые адреса при работе с SYSTEM

четверг, 29 февраля 2024 г.

Обработка отказов и ошибок

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

Возникающие при работе кода отказы по своему происхождению можно разделить на:

  1. отказы ввода и вывода
  2. ошибки самого кода
  3. ошибки исполнителя кода

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

среда, 6 декабря 2023 г.

Проверка пересечений ссылочных параметров в Oberon

В языке Oberon можно передавать переменные через ссылочные параметры процедур — параметры-значения[0] и параметры-переменные. Это удобно, потому что позволяет передавать ссылки на данные без обязательного размещения их в динамической памяти. Если же данные всё равно динамические, существует гарантия неутекания значений указателей с возможным побочным доступом к данным уже после вызова процедуры.

Но иногда возникает потребность в проверке того, не являются ли однотипные параметры на самом деле одним и тем же элементом, что может вызвать затруднение, так как в отличии от указателей сравнения параметров-ссылок в Oberon не предусмотрено. А это может быть важно, если как минимум один параметр — переменный(VAR), и его изменение может привести к нежелательному изменению другого параметра.

воскресенье, 5 ноября 2023 г.

Проверяемые адреса при работе с SYSTEM

Добавлено свойство проверяемости при работе с низкоуровневыми адресами в процедурах из SYSTEM — ADR, BIT, GET, PUT, COPY.

  • Проверка выхода за границы адресуемого объекта.
  • Проверка обращения к локальным объектам после выхода из содержащих их процедуры.
  • Проверка разрешённости записи в соответствии с правилами языка.
  • Запрет получения адреса от переменной, содержащей указатели.

Подход показывает возможность отказа от принципа «всё или ничего» в отношении безопасности указателей. В таком воплощении низкоуровневая адресация позволяет обойти типизацию в тех случаях, когда это может быть необходимо, но не предоставляет произвольный грубый доступ ко всей памяти, не позволяя также нарушить многие гарантии исходного языка, и помогая избежать ряда уязвимостей[0]. Правильный код, написанный под такое воплощение SYSTEM будет правилен и для бесконтрольного обращения к памяти. Обратное, естественно, верно не всегда.

Расширение командного режима

Расширены возможности кода Oberon-команд в трансляторе Восток. Эти возможности являются альтернативой частным и в то же время однообразным р...