Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Интернет вещей

Аппаратная безопасность DDS - SGX:Часть 2 (Micro + Security + SCONE)

Это вторая часть из шести -серия блогов по этой теме. Если вы пропустили обзор части 1, прочтите его здесь.

Разработка для Software Guard Extensions (SGX) изначально была разработана Intel® как процесс рефакторинга. Каждое приложение будет спроектировано с нуля или переархивировано для разделения секретов и кода управления секретами из другого кода, а затем скомпилировано с помощью комплекта разработки программного обеспечения SGX (SDK) для защиты конфиденциального раздела кода. Это соответствовало цели Intel по сокращению доверенной вычислительной базы (TCB) до минимально возможной площади.

Однако с существующими приложениями это довольно сложный процесс. В ходе тестирования Intel и Академия ВВС США реорганизовали программу просмотра PDF-файлов с открытым исходным кодом в рамках исследования раннего доступа. Рефакторинг включал добавление контроля доступа к любой части документа (цифровое редактирование) и приложение для видеоконференцсвязи с открытым исходным кодом (VTC) (шифрование между экранами). Для завершения обоих проектов потребовалось два человеко-года.

Поскольку рефакторинг / перекомпиляция - это тяжелая задача и, что еще хуже, не всегда возможна из-за доступа к коду, ряд других проектов выступили для создания защищенных SGX контейнеров / LibOS и кросс-компиляторов. Graphene и SCONE - хорошие примеры публично доступных проектов для решения этих задач. Я посмотрел и на Graphene, и на SCONE, и у обоих есть свои плюсы и минусы для конечных результатов успешной сборки. Однако SCONE уже может кросс-компилировать плагины RTI Connext® DDS Micro и RTI Connext DDS Security только с настройками для создания сценариев и / или создания тривиальных изменений библиотеки musl.

Кроме того, SCONE создает статически связанное приложение, которое можно исполнять на обычной Ubuntu 16.04 с установленным драйвером SGX (и соответствующим процессором).

Graphene требует реализации по крайней мере одного нового системного вызова (getifaddrs) или изменений в DDS, чтобы избежать этого вызова, а также нескольких изменений в других вызовах DDS, часто выполняемых в Connext DDS Micro с более ограниченными операционными системами (например, nanosleep). Графен также должен быть выполнен как докер-контейнер. В результате, это первое внимание уделяется реализации безопасного приложения Connext DDS Micro с помощью SCONE. Мы поговорим о графене подробнее позже в этой серии блогов.

Один из проектов SCONE состоит из кросс-компилятора, который выводит исполняемый двоичный файл, который помещает приложение в среду, защищенную SGX. Этот кросс-компилятор статически связывается с musl, а не с GLibC. В результате мы статически скомпилируем все компоненты, необходимые для создания нашего приложения, включая OpenSSL и Connext DDS Micro.

Для продолжения вам потребуется RTI DDS Connext Micro 3.0 (включая сборочный исходный код), исходный код openssl 1.0.2r и SCONE. Продукты RTI Connext DDS можно получить (с лицензионным доступом), обратившись в RTI; OpelSSL доступен по адресу https://www.openssl.org/source/; доступ к SCONE осуществляется через курируемые образы SCONE на dockerhub. Эти контейнеры SCONE являются частными, и вы должны получить доступ, связавшись с SCONE по адресу [email protected].

Моя хост-система поддерживает SGX и работает под управлением Ubuntu 16.04 LTS. Вы можете продолжить без системы SGX. Если у вас есть система SGX и вы хотите использовать SGX, вы должны установить драйвер Intel SGX с https://github.com/intel/linux-sgx-driver. Если вы читаете этот блог, предполагается, что вы знаете, как использовать docker, docker hub и Linux (или хотите учиться).

Для начала я поместил RTI DDS Connext Micro 3.0 и OpenSSL 1.0.2r в свой домашний каталог. Я распаковал их в домашнем каталоге и в итоге получил два каталога:

<код> openssl-1.0.2r
rti_connext_dds_micro-3.0.0

Все следующие команды относятся к этим каталогам. Войдите в докер и убедитесь, что вы находитесь в своем домашнем каталоге. Выполните следующие команды, чтобы запустить контейнер в интерактивном режиме. Если вы следуете без SGX, опустите --device =/ dev / isgx из команды.

<код> cd ~
docker run -it --device =/ dev / isgx -v "$ PWD":/ home
sconecuratedimages / кросс-компиляторы:ubuntu

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

подходящее обновление
apt install -y сделать default-jre cmake nano меньше
apt install -y perl --reinstall

Затем давайте скомпилируем OpenSSL. Предыдущая переустановка perl позаботилась о некоторых недостающих модулях в скрипте конфигурации. Чтобы создать, протестировать и установить OpenSSL в ваш контейнер, выполните следующие команды. Имейте в виду, что на выполнение теста потребуется некоторое время. Для приблизительного теста на выполнение следующих команд на i5 NUC потребовалось 45 минут.

cd /home/openssl-1.0.2r
./config
сделать
сделать тест
выполнить установку
экспорт OPENSSLHOME =/ usr / local / ssl

<код> ln -s /usr/local/ssl/lib/libcrypto.a /usr/local/ssl/lib/libcryptoz.a
ln -s /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libsslz.a

Программные ссылки в конце команды помогут с Makefile в примере, который мы будем использовать. Да, это немного взломано (чего вы ждете от охранника?), Но это работает.

Теперь давайте скомпилируем RTI DDS Micro 3.0. Выполните следующие команды.

cp /opt/scone/cross-compiler/x86_64-linux-musl/lib/libpthread.a /opt/scone/cross-compiler/x86_64-linux-musl/lib/libnsl.a

PATH =$ PATH:/opt/scone/cross-compiler/libexec/gcc/x86_64-linux-musl/7.3.0/
экспорт RTIMEHOME =/ home / rti_connext_dds_micro-3.0.0
экспорт RTIMEARCH =sgxLinux_x64gcc

cd /home/rti_connext_dds_micro-3.0.0/

./resource/scripts/rtime-make -DRTI_NO_SHARED_LIB:bool =true -DOPENSSLHOME =/ usr / local / ssl --delete --target self --name $ RTIMEARCH -G "Unix Makefiles" --build - выпуск конфигурации

На этом этапе у нас должны быть библиотеки из OpenSSL и RTI DDS Micro (включая безопасность), связанные с musl, а не с GLibC.

Перейдем к тестированию приложения. Выполните следующие команды.

cd / home /
cd rti_connext_dds_micro-3.0.0 / example / unix / C /
cd HelloWorld_dpde_secure
rm -rf objs
сделать

Если все прошло хорошо, у нас будут издатель и подписчик в следующем каталоге:/home/rti_connext_dds_micro-3.0.0/example/unix/C/HelloWorld_dpde_secure/objs/sgxLinux_x64gcc/. Давайте запустим его, чтобы увидеть, что у нас есть.

SCONE_VERSION =1 SCONE_HEAP =87108864 ./objs/sgxLinux_x64gcc/HelloWorld_publisher

Результат должен выглядеть примерно так:

экспорт SCONE_QUEUES =1
экспорт SCONE_SLOTS =256
экспорт SCONE_SIGPIPE =0
экспорт SCONE_MMAP32BIT =0
экспорт SCONE_SSPINS =100
экспорт SCONE_SSLEEP =4000
экспорт SCONE_KERNEL =0
экспорт SCONE_HEAP =87108864
экспорт SCONE_STACK =81920
экспорт SCONE_CONFIG =/ home / jason / sgx-musl.conf
экспорт SCONE_ESPINS =10000
экспорт SCONE_MODE =hw
экспорт SCONE_SGXBOUNDS =нет
экспорт SCONE_VARYS =нет
экспорт SCONE_ALLOW_DLOPEN =нет
экспорт SCONE_MPROTECT =no
Версия:4be39d5943d5c15e11fa17055b859de4a25c0288 (четверг, 23 августа, 14:14:04 2018 +0200)
Ветвь:cf-java-fix (грязный)
Параметры настройки:--enable-shared --enable-debug --prefix =/ home / christof / GIT / subtree-scone / built / cross-compiler / x86_64-linux-musl

Хэш анклава:14fa1810e1d35799ba9910243cab89660b7146f96babb97a32caef9c06b3c9a2

[1555446711.154091000] ОШИБКА:ModuleID =0 Код ошибки =17 X =1 E =0 T =1
osapi / posixThread.c:96 / OSAPI_Thread_get_policy:sysrc =38
# Identity CA,:file:security / ca / ​​ca.pem
# Permissions CA,:file:security / ca / ​​ca.pem
# PEER certificate:file:security / ca / ​​certs / publisher.pem
# PEER ключ:файл:security / ca / ​​certs / publisher_key.pem
# Управление XML:файл:security / xml / management.p7s
# Разрешения XML:файл:security / xml / permissions_publisher.p7s

[1555446711.159431000] ОШИБКА:ModuleID =0 Код ошибки =17 X =0 E =1 T =1
/ :- 1 / :

[1555446711.159704000] ОШИБКА:ModuleID =0 Код ошибки =17 X =0 E =1 T =1
/ :- 1 / :

[1555446711.197874000] ОШИБКА:ModuleID =0 Код ошибки =17 X =0 E =1 T =1
<код> <не найдено> / <не найдено>:- 1 / <не найдено>:
Привет мир! (0)
Привет, мир! (1)
Привет, мир! (2)
Привет, мир! (3)
Привет, мир! (4)

Не бойтесь сообщенных ошибок. Они

[1] [2] 下一页

Интернет вещей

  1. Аппаратная безопасность DDS - SGX, часть 3:усиленные службы DDS
  2. Путь к промышленной безопасности Интернета вещей
  3. Устранение уязвимостей безопасности промышленного Интернета вещей
  4. Защита Интернета вещей от кибератак
  5. Защита вектора угроз Интернета вещей
  6. Гиперконвергенция и вычисления на краю:часть 3
  7. Проблема безопасности, создаваемая Интернетом вещей:часть 2
  8. Проблема безопасности, создаваемая Интернетом вещей:часть 1
  9. Защита промышленного Интернета вещей:принятие подхода следующего поколения - Часть 2
  10. Безопасность раскрывает истинный потенциал Интернета вещей