В прошлом году мы в блоге Intel уже публиковали пост о технологии Intel Software Guard Extensions (Intel SGX), поддержку которой внедрили в процессорах Intel Core шестого поколения. Тогда речь шла в основном об идеологических моментах; думается, настало время рассказать, как это работает. В этом посте будет много иллюстраций из подробной (более 200 слайдов) презентации Intel, посвященной этой технологии. В ней, конечно, сказано гораздо больше, чем здесь, так что вы теперь знаете, где можно продолжить изучение вопроса.



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



Смысл SGX состоит в том, чтобы сузить периметр защиты, разместив все критически важные данные в отдельных областях-анклавах, недоступные даже из кода ядра. При этом, однако, не должен коренным образом изменяться процесс разработки и среда, где исполняется приложение.



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

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



При попытке доступа к анклаву проверяется, находятся ли по данному адресу данные вызывающего процесса (EPC, Enclave Page Cache). Далее подвергаются контролю полномочия функции (EPCM, Enclave Page Cache Metadata), и только потом предоставляется требуемый доступ.



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

Функционал Intel Software Guard Extensions реализуется с помощью комбинации SGX инструкций, поддерживающих локальную аттестацию и предоставляемого Intel аттестационного анклава для поддержки удаленной аттестации.

Разработчики SGX предусмотрели защиту от различного рода атак на данные и код: угрозы со стороны пользовательского и системного ПО, а также загрузчика. Заметим, что средствами SGX невозможно защититься от side-channel уязвимостей, когда злоумышленники собирают статистику использования ЦПУ для определения характеристик исполняемого на нем кода. Для решения подобного рода задач предназначены средства динамического анализа программ, такие, например, как Pin.



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



Как выглядит разработка приложений, поддерживающих SGX? Чувствительные фрагменты кода и данных размещаются в отдельном shared object (.so). Далее определяются интерфейса анклава и генерируются заглушки. Библиотеки SGX взаимодействуют с кодом через API, для разработки используются обычные, привычные для разработчика тулчейны. Для облегчения процесса обработки уже имеется Intel SGX SDK.

Что обещает нам технология Intel SGX? Прежде всего то, что требования к техническим навыкам пользователя, работающего с конфиденциальной информацией, могут быть сильно сокращены. Ей больше не страшны вирусы, трояны и странные программы, которые могут иметься на его компьютере. Далее, повысится доверие к облачным платформам – им можно будет доверять свои приложения, поскольку они будут защищены от любого кода хоста. Конечно, все это дело довольно далекого будущего, ведь процессоры Skylake еще только появились. Но использовать SGX можно уже сейчас. Мы готовы углубляться в эту тему и отвечать на любые вопросы, с ней связанные.

Комментарии (58)


  1. amarao
    13.04.2016 16:13
    +8

    Простите, я правильно понимаю, что теперь вредоносный код сможет создать области памяти, к которым нельзя получить доступ даже с правами суперпользователя? Например, отладить.

    Лично меня, как пользователя, очень возмущает ситуация, что какое-либо ПО создаёт области памяти к которым я не имею права доступа.

    И я вижу в этом очередную попытку пропихнуть DRM на мой компьютер за мой счёт.

    Спасибо, не надо.


    1. 0serg
      13.04.2016 20:04

      Ага. Вирусописатели, авторы руткитов и создатели DRM будут счастливы. Технология остроумная и продуманная, но здесь явно тот случай когда вреда будет больше чем пользы.


    1. sumanai
      13.04.2016 21:27

      > Спасибо, не надо.
      К сожалению, ни вас, ни меня не спрашивают ((
      Просто процессоры без этого исчезнут из продажи.


      1. amarao
        13.04.2016 21:37
        +3

        Это в любом случае будет привилегированная инструкция (т.к. ядро должно понимать, что «эту страницу нельзя своппить») и в приличных ядрах (линукс) обязательно появится возможность её либо запретить (т.е. уронить того, кто её выполнит), либо просто заменить на noop.

        Если же каким-то образом её сделают неотключаемой, то добротная виртуализация с pci-passthrough наше всё. Включаем эмуляцию процессора предыдущего поколения — и живём с этим.

        В опенсорсе её, ествественно, сделают опциональной. Что будут делать пользователи проприетарных систем, когда windows 10 в 2025 году скажет, что после нового принудительного апдейта старые процы не поддерживаются — не знаю.


        1. nidalee
          14.04.2016 01:14

          Не будут обновляться, потому что им это обновление даже не предложат?..


          1. amarao
            14.04.2016 10:00

            В рамках новой модели windows — автоматически обновятся и заметят только когда будет слишком поздно.


            1. nidalee
              14.04.2016 15:15

              Windows не обновляется, если железо ее не поддерживает. В вашем посте явная несовместимость «старого процессора» с «новой системой».


    1. dartraiden
      14.04.2016 02:50
      +4

      Так у вас и сейчас уже потенциально может быть запущен код, к которому вы никак не сможете получить доступ и даже узнать о факте запуска. Называется эта штука Intel ME и представляет собой RISC-процессор + немножко собственной оперативной и флеш-памяти. Всё это богатство работает под управлением собственной ОС реального времени и уже лет 10 встроено во все десктопные и мобильные чипсеты Intel. Микропроцессор обладает доступом к оперативной памяти, набортному сетевому контроллеру. Умеет исполнять Java-апплеты, подписанные Intel, и осуществлять функции DRM.

      Раньше была возможность прошить вместо BIOS что-то свободное (тот же Coreboot/Libreboot), но после 2008 года требуется подсовывать бинарный блоб для работы ME. При отсутствии оного чипсет принудительно выполняет перезагрузку. Именно по этой причине, кстати, все «свободные» компьютеры, одобренные Фондом СПО (Столлманом и компанией) обладают материнками и процессорами того самого 2008 года, поскольку на более новом железе Libreboot не заработает, а блоб грузить им не позволяют убеждения.

      На базе этой же технологии работает удалённое администрирование Intel vPro. Вся разница там в том, что рычаги доступа к vPro доступны пользователю (на соответствующих чипсетах), а ME, хоть и есть абсолютно везде, пользователю совершенно не подконтролен.

      У AMD всё аналогично, только хуже изучено и документировано. Если вам захочется свалить из этого ада — придётся попрощаться с архитектурой x86. И с ARM заодно, у них уже давно есть TrustZone.

      Теперь решили дать эти возможности более широкому кругу разработчиков.


      1. amarao
        14.04.2016 10:01

        И это очень печалит.



    1. MariannaSvetlosanova
      14.04.2016 11:36
      +1

      Давайте не будем паниковать. SGX включается и выключается на уровне BIOS компьютера. Никто насильно никого не обязывает.

      тем не менее, это возможность защиты на аппаратном уровне от вредоносного ПО и да, защита своего контента


      1. amarao
        14.04.2016 17:35

        Простите, «защита своего контента» от кого? От пользователя?

        На всякий случай — я пользователь. И я очень не люблю когда за мой счёт кто-то что-то от меня защищает.


    1. ToSHiC
      14.04.2016 13:05
      +1

      Вот есть у вас сейчас какой-то ноутбук с процессором от Интела, в котором уже есть ряд мест, куда даже ябро/гипервизор не может подсмотреть:
      1. SMM, на центральном процессоре
      2. ME, на отдельном процессоре в чипсете
      3. довольно мощное ядро в wifi карточке
      4. хиленькое ядро в ряде ethernet карточек
      5. код, запущенный на GPU

      Ещё 5 лет назад один мужик смог сделать firmware для карточки marvell (если я не ошибаюсь), которая могла форвардить пакеты в другие интерфейсы и запускать небольшой шелл на GPU, с доступом ко всей оперативной памяти через DMA.


      1. dartraiden
        14.04.2016 14:48

        И это плохо. Но, если в подъезде уже разбили 5 окон, зачем же бить шестое? Наоборот, число таких мест нужно сокращать.


      1. amarao
        14.04.2016 17:36

        Доступ к DMA будет только если VT-D или что-то подобное отсутсвует. Остальное — да, печальная правда.


        1. ToSHiC
          14.04.2016 21:03

          А VT-D будет изолировать доступ, если инициатором транзакции является pci-e устройство?


          1. a5b
            15.04.2016 01:47

            Да (устройства часто обычно сами и инициируют DMA транзакции).


            http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/vt-directed-io-spec.pdf


            When the device attempts to access system memory, the DMA-remapping hardware intercepts the access and utilizes the page tables to determine whether the access can be permitted; it also determines the actual location to access.

            Отображение работает даже для устройств без PASID — "Second-level translation applies to requests-without-PASID" (3.7).


            DMA remapping использует source-id (PCI Bus/Device/Function number) для идентификации устройств и выбора таблиц трансляции (раздел 3.9). (Есть предположения о попытках подделать source-id — [11] = doi:10.1109/MALWARE.2010.5665798 — "3.2.2 I/O controller source-id theft"). Не думаю, что root-complex пропустит запрос с левым для данного порта source-id, т.е. атака возможна только из-за дальних мостов, можно представиться другим устройством из-за того же моста.


            Даже p2p запросы между двумя pci-e устройствами могут быть оттранслированы, если прошли через Root-complex (а они пройдут, если pcie switch умеет ACS и был настроен).


          1. amarao
            15.04.2016 14:42

            Да. Требуется согласие кого-то. Если VT-D используется, то mmu (точнее, IOmmu) учитывает пожелания системы виртуализации (или ядра) о трансляции страниц памяти, в т.ч. в page fault.


  1. a5b
    13.04.2016 20:05
    +1

    Сможет ли автор трояна/шифратора воспользоваться SGX для скрытия своего кода/ключей от "враждебного" антивируса?
    https://www.virusbulletin.com/virusbulletin/2014/01/sgx-good-bad-and-downright-ugly — "Scenario 1, the botnet creator:… With SGX, the attacker could create an enclave, perform remote attestation with their C&C (command and control) server from inside the enclave, set up some private-public key encryption based on their SGX keys, and receive a payload to execute inside the enclave or any other commands from the C&C server."


    Будет ли вводится "белый список" для компаний желающих воспользоваться SGX? Ожидается ли выдача авторам отдельных антивирусов возможности обхода SGX? (Возможен ли обход из ME?)
    J. Rutkowska. Thoughts on Intel’s upcoming Software Guard Extensions (Part
    2), Sept. 2013. http://theinvisiblethings.blogspot.com/2013/09/thoughts-on-intels-upcoming-software.html "Unless there was a way for “Certified Antivirus companies” to get around SGX protection..."


    Возможно ли отключение возможностей SGX в BIOS?


    1. a5b
      14.04.2016 02:33
      +2

      В работе
      "Intel SGX Explained", Cryptology ePrint Archive: Report 2016/086, Jan 2016 https://eprint.iacr.org/2016/086.pdf
      действительно подробно описана известная информация об SGX — инициализация привилегированная (потребуется разрешение от ОС, она же может и отключить весь SGX), при инициализации работает Launch Enclave, в которой заложена возможность проверки создаваемого Enclave, вероятно для запуска потребуется сертификат, подписанный Intel:
      5.9.2 Licensing "SGX patents… Launch Enclave is intended to be an enclave licensing mechanism that allows Intel to force itself as an intermediary in the distribution of all enclave software."
      5.9.3 System Software Can Enforce a Launch Policy "SGX instructions used to load and
      initialize enclaves (ECREATE, EADD, EINIT) can only be issued by privileged system software"
      5.9.4 Enclaves Cannot Damage the Host Computer "In SGX, the system software can always evict an enclave’s EPC pages to non-EPC memory, and then to disk. The system software can also outright deallocate an enclave’s EPC pages"
      5.9.5 Interaction with Anti-Virus Software "Enclave code always executes at the lowest privilege mode (ring 3 / user mode), so it cannot perform any I/O without invoking the services of system software.… SGX’s enclave loading model allows the possibility of performing static analysis on the enclave’s software."


      Документация по SGX от Intel:


      Intel Software Guard Extensions Programming Reference, 329298-002US, OCTOBER 2014
      https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf


  1. 0serg
    13.04.2016 20:07
    +2

    Уважаемая компания Intel, а предусмотрена ли возможность принудительно заблокировать выполнение SGX в Ваших процессорах?
    В идеале — будет ли доступна широкая линейка процессоров без поддержки SGX?


    1. dartraiden
      14.04.2016 02:58

      Скорее всего нет. Так же, как недоступны чипсеты без ME (см. в комментариях выше). Потребителю выбор не даётся.


    1. alazarev27
      14.04.2016 11:01
      +2

      Поддержка SGX включается и выключается в БИОСе


  1. zim32
    13.04.2016 21:19

    >Чувствительные фрагменты кода и данных размещаются в отдельном shared object (.so).
    Зато сразу ясно где искать интересные данные. И если пропатчить тот сошник, то защиту можно обойти?


    1. 0serg
      13.04.2016 23:32
      +1

      Там принцип как я понимаю следующий:
      1. Оформляется so-шник в виде небольшой программы с кодом, стеком и данными и к нему дописывается публичный ключ
      2. Обычный код загружает этот so-шник вместе с ключем в специальный раздел памяти.
      3. После того как загрузка завершена раздел блокируется для любого доступа
      4. Процессор аппаратно генерит на все загруженное уникальный хэш (надо полагать с участием соли, хотя в доках про это я не нашел) по которому можно проверить что загруженное соответствует ожидаемому
      5. Хэш отсылается обычным же кодом по интернету «владельцу» кода
      6. Владелец проверяет что хэш верный и генерирует на основе известного только ему секретного ключа подпись «разблокировки» которую отправляет обратно
      7. Программа получив код разблокировки использует его для того чтобы получить доступ к созданному ранее защищенному разделу. Процессор проверяет валидность подписи по публичному ключу.
      8. «Доступ» означает что софт может начать выполнять код расположенный в этом разделе. Этот код проверен через хэш разработчиком и его уже невозможно модифицировать «извне».

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

      9. Помещаем в защищенный подобным образом раздел специальный «загрузчик» который устанавливает зашифрованное безопасное соединение с серваком разработчика
      10. Качаем по зашифрованному каналу любой желаемый код либо просто ключ расшифровки к тому что уже лежит в памяти и выполняем полученное в контексте уже созданного «безопасного раздела»

      И всё. К тому что таким образом скачано доступ получить без отмычки на уровне процессора будет невозможно.


      1. 0serg
        13.04.2016 23:54

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


        1. zim32
          14.04.2016 00:23

          Короче авторы вирусов вымогателей вообще ликуют ) Вернуть данные не будет никакой возможности 100%


          1. 0serg
            14.04.2016 00:29

            Ну это и сейчас так при правильно написанном вымогателе, к сожалению


            1. KivApple
              14.04.2016 00:58

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


              1. zim32
                14.04.2016 05:59

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


                1. 0serg
                  14.04.2016 10:40
                  +1

                  Там в лучшем случае возможна только защита уровня «данные на отдельном NAS в сети».


        1. 0serg
          14.04.2016 01:42
          +1

          Хотя нет, напротив все сложнее. Например анклав может запустить кто угодно (со своей собственной подписью), поэтому код работающий в защищенном анклаве получает возможность аппаратно подписывать сообщения ключем интела, процессора и хэша идентифицирующего работающий в анклаве код. Это обеспечивает возможность безопасного установления канала связи с secure enclave гарантирующего защиту от MITM

          Хорошее описание SGX здесь
          https://eprint.iacr.org/2016/086.pdf

          И там куча всего интересного о чем интел не очень-то спешит распространяться. Например о Launch Enclave.


      1. KivApple
        14.04.2016 00:55

        Тут важно каким образом будет реализовано это самое создание защищённой области. Если это будет делаться через привилегированную инструкцию (вызываемую через системный вызов ядра), то на OpenSource-платформах (Linux и т. д.), можно просто сымитировать данное действие, а по факту защиту не делать.

        Но вообще, несмотря на якобы благие намерения, это откровенный DRM. Как по мне, если вредоносный код уже проник в ядро ОС, то у него есть тысячи способов нанести ущерб. Одним больше, одним меньше — не суть важно (так что чистое ядро — единственный способ гарантировать безопасность). Тем более, что данная технология точно также хорошо будет играть и на стороне злоумышленника (защита от антивирусов и просто исследования кода антивирусными компаниями).


      1. d_olex
        14.04.2016 11:52
        -1

        > 5. Хэш отсылается обычным же кодом по интернету «владельцу» кода

        И в этот момент вредоносный код (ранее внедривший бекдор в SGX анклав перехватив процедуру его инициализации) подменяет невалидный хэш на валидный, в результате чего программа/сервер думает что все ok.


        1. 0serg
          14.04.2016 16:16
          +1

          Полученная в ответ от удаленного сервера для «правильного» хэша подпись не сработает на фактически загруженном коде с «неправильным»


  1. Ca5per
    13.04.2016 22:19

    Видимо пора переходить на процессоры от AMD


    1. dartraiden
      14.04.2016 02:59

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

      Да и мы с вами перейдём, а обычный пользователь? В бенчмарках попугаев больше, в играх FPS выше, угадайте, что он возьмёт?


      1. Ca5per
        14.04.2016 11:04
        +1

        Выше сообщили, что у AMD тоже самое, мы в заложниках.


        1. ValdikSS
          14.04.2016 15:34

          Как говорит coderush, у AMD все-таки есть десктопные процессоры без этого.


          1. CodeRush
            14.04.2016 16:26
            +2

            Мобильные тоже есть, eKabini (FT3) и более старые APU, но тенденция на внедрение fTPM 2.0 для Windows 10 никуда не девается, поэтому AMD может внедрить PSP в десктопные процессоры в любой момент.


  1. 0serg
    14.04.2016 01:57
    +2

    Еще один вопрос к господам из Интела. Согласно вот этому документу
    https://eprint.iacr.org/2016/086.pdf
    любая процедура инициализации нового secure enclave проходит через специальный защищенный анклав Launch Enclave который предоставляется исключительно самой компанией Intel.

    1) Верно ли что любая инициализация Secure Enclave должна проходить проверку в Launch Enclave доступном сугубо от компании Intel?
    2) Верно ли что из этого следует что для того чтобы запустить что-либо в Secure Enclave код кроме как в «debug» или «prerelease» версии придется код подписывать у Intel дабы LE авторизовал его инициализацию?
    3) Верно ли что процедура аутентификации проводится Launch Enclave через серверы Intel и Intel может в любой момент отозвать авторизацию для ранее подписанного SE?
    4) Верно ли что все остальные процедуры аутентификации доступные коду работающему в Secure Enclave базируются на ключе генерируемом в ходе авторизации запуска SE на серверах Intel?


  1. ultrinfaern
    14.04.2016 11:02

    Эта муть — TPM внедренный в процессор. Борцуны авторских прав спали и видели впаянный TPM в каждый компьютер. Ну что-же, Интел подсобил — теперь не нужно никого уламывать, теперь на шару принудительно для всех.


  1. Ca5per
    14.04.2016 11:10

    Сначала это >новые процессоры Intel Skylake не будут работать с Windows 7 и 8
    Теперь еще эта ваша новая «фича», крутимся как можем?

    Мало вам денег за процессоры?


  1. d_olex
    14.04.2016 11:39
    +2

    «Меня терзают смутные сомнения» ©(TM) не получится ли с SGX такой же фейл как и с TXT? NB: для тех кто не в курсе истории TXT, там была примерно следующая ситуация: Intel зарелизила технологию TXT, спустя некоторое время ITL показали как обходить TXT через SMM. Для того что бы защититься от продемонстрированной ITL атаки — Intel спустя 5 или около того лет (!!!) создала другой механизм под названием STM, который в настоящий момент времени не используется ни в одном (вообще ни в одном, ноль) реально существующем на рынке продукте. Таким образом, Intel TXT представляет собой broken by design технологию практического смысла в использовании которой нет.

    Так вот, возвращаясь к SGX, давайте внимательно прочтем спецификацию и проведем следующий мысленный эксперимент:
    1) У нас есть ОС и два приложения: secured app которое при запуске создает SGX анклав, и evil app которое пытается получить доступ к данным которые хранятся внутри анклава. Когда анклав уже запущен — evil app по очевидным причинам не может получить к нему доступ;
    2) Процесс evil app делает kill -9 процессу secured app;
    3) Когда пользователь или ОС заново запускает secured app — evil app внедряет в процесс secured app код, который перехватывает процедуру загрузки .so в анклав и модифицирует этот самый .so на лету с целью внедрения бекдора внутрь анкалва;
    4) Работая внутри анклава бекдор реализует скрытый канал связи с внешним миром который позволяет evil app получить полный доступ к хранящимся в анклаве данным;
    5) PROFIT!
    Увы, продемонстрировать данную атаку PoC-ом (как я обычно делаю) у меня нет возможности — Intel SGX пока еще нигде не используется. Однако, причин по которым данная атака была бы невозможной я не вижу, такие дела.

    PS: алсо, посмеялся с идиотов которые не удосужились разобраться с тем зачем нужен SGX и какие задачи он решает, но зато уже начали вопить а-ля «Intel нарушает нашу свободу!!111», «дайте нам железо без этого вашего SGX» и тому подобный бред :)


    1. CodeRush
      14.04.2016 12:05
      +2

      Подвижки в сторону внедрения STM определенные есть, и его даже можно потестировать на Minnowboard Max, но в остальном ты кругом прав.

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

      Много вы видели софта, который использовал бы AVX2? Я видел полторы оптимизированные вручную опенсорсные утилиты и дорогущий интеловский компилятор. А ведь набору инструкций уже больше трех лет, и он простой как валенок.

      Не могу сказать, что SGX вот прямо совсем мертворожденая фигня, как TXT, но в истории с ним очень четко прослеживается тенденция, которую я называю «много развожу, и много вешаю»: на каждом новом поколении Intel пробует какие-то новые технологии, часть которых «выстреливает» и их начинают поддерживать и использовать все (NX bit, SMEP, SMAP те же), а другая тихо уходит в небытие после 2-3 поколений. При этом презентуют их все с максимальной помпой, т.к. Инновации и Технологическое Лидерство. А потом приходят ребята вроде тебя или Рафаля и портят маркетингу всю малину. :)


      1. d_olex
        14.04.2016 12:13
        +1

        > Я тоже опасаюсь за будущее SGX, но по несколько другим причинам: технология банально слишком сложная для реализации даже очень опытным разработчиком

        Вот да, в плане правильной реализации это еще более нетривиальная штука чем TXT. Нужно ждать референсную реализацию в общем, а то сейчас чем больше читаешь о том как SGX работает — тем больше вопросов возникает.


    1. 0serg
      14.04.2016 16:24
      +1

      3) Для запуска анклава требуется подпись которая зависит от хэша содержимого анклава. Вы можете загрузить в анклав левый код, но запустить его не получится. Причем похоже подпись можно только у Intel получить, причем возможно что только по сети (= возможность отзыва ранее выданной подписи)
      4) Дабы избежать MITM код работающий внутри анклава (и только внутри) получает возможность подписывать сообщения секретным ключем зависящим от хэша анклава сделанного на момент запуска. На основе этой подписи сторонний код / сервер может проверить что общается со строго определенным (на момент запуска) кодом работающем в защищенном анклаве

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


      1. d_olex
        14.04.2016 16:46
        +1

        Я все равно не вполне понял где находится, так сказать, root of trust благодаря которому процессор «знает» какой код исполняемый внутри анклава является модифицированным, а какой нет. Там на каком-то этапе будет нужна цифровая подпись секретная часть ключа для которой есть только у Intel? Из того что я читал про SGX это не вполне очевидно.

        Алсо, для QEMU уже реализовали эмуляцию SGX в режиме бинарной трансляции. Получается, из этого следует возможность атаки когда вредоносный код внедряет себя в атакуемое приложение после чего полностью эмулирует SGX для бизнесс-логики этого самого приложения.


        1. 0serg
          14.04.2016 17:20
          +2

          Процессор идентифицирует выполняемый код по его хэшу вычисляемому и сохраняемому на этапе инициализации контейнера.
          Основная защита строится на основании того что код запущенный в контейнере может подписывать сообщения с использованием секретного ключа хранящегося в процессоре. В эти сообщения принудительно дописывается хэш контейнера который сообщение генерирует. Получаем подписанный секретным ключом хранящимся в процессоре мессадж вида «запущенный на процессоре в безопасном анклаве код с хэшем таким-то сообщает X». То есть процессор гарантирует (своим секретным ключем) что сообщение сгенерировал код идентифицируемый этим хэшем. Для эмуляции этого нужно знать секретный ключ, так что в QEMU скорее всего он просто задан от балды и известен, позволяя отлаживать код, однако подписанные этим кодом мессаджи будут однозначно идентифицированы как сгенерированные не на интеловском процессоре, а QEMU.

          Кроме этого в текущей реализации вроде запуск нового анклава возможен только через специальный «стартовый» анклав от самого интела. Стартовый анклав, вероятно, не запустится если его хэш не совпадет с прописанным непосредственно в процессоре (ну или не будет подписан ЭЦП от интела с публичным ключем опять же прошитым в процессоре). А дальше у стартового анклава есть куча возможностей типа, к примеру, отправки хэша контейнера который планируем запускать на сервер к интелу на «одобрение» по списку разрешенных хэшей.


          1. d_olex
            14.04.2016 23:31

            > Получаем подписанный секретным ключом хранящимся в процессоре

            Получается, достаточно распилить всего один процессор что бы извлечь ключ с помощью которого в последствии можно будет ломать любой SGX анклав где угодно? Не думаю что эти ключи уникальные для каждого CPU, ведь тогда будет нереальный гемор с key management на этапе расшифровки/верифицирования зашифрованного/подписанного сообщения.


            1. d_olex
              14.04.2016 23:37
              +2

              А в прочем нет, судя по докам они таки уникальны. Но key management в данном случае действительно будет болью которая потенциально может вылезти боком в виде рабочих схем атак и прочих проблем с безопасностью.


              1. a5b
                15.04.2016 01:57

                У Apple в SoC Ax зашиты два ключа — GID и UID. GID — в самой схеме для данной модели чипа (как GWK у Интела, см чуть ниже); уникальный для каждого чипа UID — в eFuse. Как показал недавний спор
                https://en.wikipedia.org/wiki/FBI-Apple_encryption_dispute и слухи о попытках CIA — https://www.theiphonewiki.com/wiki/GID_Key, ни тот, ни другой дешевыми способами не вытаскиваются. Серийные номера чипа в eFuse уже прошивают при изготовлении, прошить еще несколько десятков байт — не слишком сложно. Сохранять в базе уникальные ключи всех выпущенных чипов не обязательно, если есть общий GWK (GID) ключ, в который можно обернуть все что угодно (а развернуть — только зная GWK ключ). Еще предлагали какую-то магию с записью ключей, обернутых в PUFhttp://www.google.com/patents/US20140270177 "sending, by a key server, a global key… encrypting, by the integrated circuit, the global key using a physically unclonable function (PUF) key; and burning ...in fuses in the integrated circuit."


                1. d_olex
                  15.04.2016 21:34
                  +1

                  > ни тот, ни другой дешевыми способами не вытаскиваются

                  Зависит от того что именно считать дешевым способом, но вообще там несколько другая специфика. Если речь не идет про серьезные защищенные смарт-карты — то содержимое ROM-ов и фьюзов в целом вытаскивается: все технологии и оборудование которое для этого необходимо является коммерчески доступным, так как инвазивный анализ микрочипов активно используют сами же производители микрочипов для fault analysis на этапе запуска в производство нового изделия.
                  Другое дело, что никто в здравом уме не даст 100% гарантии того, что в ходе инвазивной атаки на один конкретный чип этот самый чип не будет фатально поврежден — это куда большая проблема чем стоимость.


        1. a5b
          14.04.2016 17:21
          +1

          В процессорах, вероятно, будут ключи: https://eprint.iacr.org/2016/086.pdf "original SGX patents [108, 136] disclose that the Fused Seal Key and the Provisioning Key, which are stored in e-fuses (§ 5.8.2), are encrypted with a global wrapping logic key (GWK). The GWK is a 128-bit AES key that is hard-coded in the processor’s circuitry… Newer Intel patents [67, 68] describe SGX-enabled processors that employ a Physical Unclonable Function (PUF)".
          https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf 3.4 INTEL SGX KEY AND ATTESTATION "Each processor is provisioned with a unique key as the root of the key hierarchy. This is done at manufacturing time. This key is the basis for all keys derived in the EGETKEY instruction."


          Можно построить такие схемы, в которых без знания ключа не получится полной эмуляции SGX.


          Ссылка на qemu-симулятор с SGX — https://github.com/sslab-gatech/opensgx https://taesoo.gtisc.gatech.edu/pubs/2016/jain:opensgx.pdf (в нем нет реального ключа от Intel, произвольный ключ подается как опция при запуске)


      1. d_olex
        14.04.2016 16:51
        +1

        Ну и еще наводящий на интересные мысли вопрос на засыпку: что будет если во время исполнения кода анклава произойдет SMI? :)
        Даже если SMI обработчик не сможет прочесть не_зашифрованное содержимое памяти анклава — он все равно получит доступ к сохраненному в SMRAM контексту исполнения SGX из которого вполне себе можно ликнуть ключи и прочую чувствительную инфу.


        1. d_olex
          14.04.2016 16:58

          (Это сугубо теоретические измышления, на самом деле я не знаю как именно SGX и SMM учитывают существование друг друга что бы все было крассиво и безопасно)


        1. a5b
          14.04.2016 17:14
          +2

          Контекст SGX не сохраняется в SMRAM при SMI. Сначала регистры SGX сохраняются внутри Enclave, затем регистры заполняются синтетическим состоянием (4.3.1), после чего начинает работать SMI обработчик
          https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf


          Chapter 4. For that reason, such events are called an enclave-exiting events (EEE);
          EEEs include external interrupts, non-maskable interrupts, system-management interrupts, exceptions, and VM exits. The process of leaving an enclave in response to an EEE is called an asynchronous enclave exit (AEX). To protect the secrecy of the enclave, an AEX saves the state of certain registers within enclave memory and then loads those registers with fixed values called synthetic state.

          6.8.2 SMI while Inside an Enclave


          If the logical processor executing inside an enclave receives an SMI when dual-monitor treatment is not enabled, the logical processor exits the enclave asynchronously, and transfers the control to the SMM handler
          If the logical processor executing inside an enclave receives an SMI when dual-monitor treatment is enabled, the logical processor exits the enclave asynchronously, and transfers the control to the SMM monitor via SMM VM exit.
          All processor registers saved in the SMRAM have the same synthetic values listed in Section 4.3.


        1. 0serg
          14.04.2016 17:26
          +2

          Любые прерывания и выходы принудительно триггерят специальную процедуру «выхода из защищенного анклава» которая сохраняет state анклава в зашифрованный раздел памяти и выдает на выход только код необходимый для продолжения исполнения анклава из сохраненного стейта.