В прошлом году мы в блоге Intel уже публиковали пост о технологии Intel Software Guard Extensions (Intel SGX), поддержку которой внедрили в процессорах Intel Core шестого поколения. Тогда речь шла в основном об идеологических моментах; думается, настало время рассказать, как это работает. В этом посте будет много иллюстраций из подробной (более 200 слайдов) презентации Intel, посвященной этой технологии. В ней, конечно, сказано гораздо больше, чем здесь, так что вы теперь знаете, где можно продолжить изучение вопроса.
![](https://habrastorage.org/r/w1560/files/5b6/71c/226/5b671c226bc34348b506c8c3bcc7cdda.png)
Кольца защищенного режима разделяют привилегированный код ядра и код приложений, а также отделяют приложения друг от друга. Однако при этом приложения не защищены от атак со стороны привилегированного кода. Зловредное приложение может проникнуть в него с помощью эксплойта и затем внедриться в беззащитную жертву. При этом участок для атаки очень широк: нападать можно и на компоненты ОС, и на само приложение, и даже на аппаратную подсистему.
![](https://habrastorage.org/r/w1560/files/4de/144/ff9/4de144ff95454d2ea86fc163c0228487.png)
Смысл SGX состоит в том, чтобы сузить периметр защиты, разместив все критически важные данные в отдельных областях-анклавах, недоступные даже из кода ядра. При этом, однако, не должен коренным образом изменяться процесс разработки и среда, где исполняется приложение.
![](https://habrastorage.org/r/w1560/files/8db/226/739/8db226739a164af69144d8c0337157f0.png)
Приложение состоит из двух частей: доверенного и общего. При запуске оно создает анклав в защищенной части памяти, состоящий из страниц размером 4 Кб. При вызове доверенной функции она видит данные анклава, любой другой внешний доступ (в том числе и со стороны ОС) запрещен. После окончания работы функции анклав остается в защищенной области.
Среда защищенного исполнения встроена в пользовательский процесс, у нее собственные код и данные. Она обеспечивает безопасность, целостность данных, контроль входных точек, поддерживает многопоточность.
![](https://habrastorage.org/r/w1560/files/ac7/d45/683/ac7d4568331c4b5fb822d9c4284a54a0.png)
При попытке доступа к анклаву проверяется, находятся ли по данному адресу данные вызывающего процесса (EPC, Enclave Page Cache). Далее подвергаются контролю полномочия функции (EPCM, Enclave Page Cache Metadata), и только потом предоставляется требуемый доступ.
![](https://habrastorage.org/r/w1560/files/33f/ec7/65f/33fec765fe684a4f8c70a3ec0e7886ac.png)
Аттестация происходит следующим образом. Анклав запрашивает аппаратно подписанный отчет, содержащий, в том числе информацию о целостности анклава. Этот отчет отсылается на аттестующий сервер, где происходит его верификация. Анклаву высылается ключ приложения (открытая часть ключа), где генерируется подписывающий (приватный) ключ, зависящий от анклава и платформы. Ключ приложения шифруется подписывающим ключом и сохраняется для дальнейшего использования.
Функционал Intel Software Guard Extensions реализуется с помощью комбинации SGX инструкций, поддерживающих локальную аттестацию и предоставляемого Intel аттестационного анклава для поддержки удаленной аттестации.
Разработчики SGX предусмотрели защиту от различного рода атак на данные и код: угрозы со стороны пользовательского и системного ПО, а также загрузчика. Заметим, что средствами SGX невозможно защититься от side-channel уязвимостей, когда злоумышленники собирают статистику использования ЦПУ для определения характеристик исполняемого на нем кода. Для решения подобного рода задач предназначены средства динамического анализа программ, такие, например, как Pin.
![](https://habrastorage.org/r/w1560/files/2fe/ffe/16a/2feffe16aed4495f875768ae121b3b27.png)
Для предотвращения перехвата данных при обмене между процессором и памятью используется Memory Encryption Engine (MEE), работающий как расширение контроллера памяти и поддерживающий технологию SGX. Для определенных областей памяти осуществляется шифрование данных, передающихся по шине. MEE использует специальные комбинации криптографических примитивов для эффективного шифрования при очень жестких требованиях по задержкам.
![](https://habrastorage.org/r/w1560/files/1b2/85e/302/1b285e3021304249ae858c693c5961ff.png)
Как выглядит разработка приложений, поддерживающих SGX? Чувствительные фрагменты кода и данных размещаются в отдельном shared object (.so). Далее определяются интерфейса анклава и генерируются заглушки. Библиотеки SGX взаимодействуют с кодом через API, для разработки используются обычные, привычные для разработчика тулчейны. Для облегчения процесса обработки уже имеется Intel SGX SDK.
Что обещает нам технология Intel SGX? Прежде всего то, что требования к техническим навыкам пользователя, работающего с конфиденциальной информацией, могут быть сильно сокращены. Ей больше не страшны вирусы, трояны и странные программы, которые могут иметься на его компьютере. Далее, повысится доверие к облачным платформам – им можно будет доверять свои приложения, поскольку они будут защищены от любого кода хоста. Конечно, все это дело довольно далекого будущего, ведь процессоры Skylake еще только появились. Но использовать SGX можно уже сейчас. Мы готовы углубляться в эту тему и отвечать на любые вопросы, с ней связанные.
![](https://habrastorage.org/files/5b6/71c/226/5b671c226bc34348b506c8c3bcc7cdda.png)
Кольца защищенного режима разделяют привилегированный код ядра и код приложений, а также отделяют приложения друг от друга. Однако при этом приложения не защищены от атак со стороны привилегированного кода. Зловредное приложение может проникнуть в него с помощью эксплойта и затем внедриться в беззащитную жертву. При этом участок для атаки очень широк: нападать можно и на компоненты ОС, и на само приложение, и даже на аппаратную подсистему.
![](https://habrastorage.org/files/4de/144/ff9/4de144ff95454d2ea86fc163c0228487.png)
Смысл SGX состоит в том, чтобы сузить периметр защиты, разместив все критически важные данные в отдельных областях-анклавах, недоступные даже из кода ядра. При этом, однако, не должен коренным образом изменяться процесс разработки и среда, где исполняется приложение.
![](https://habrastorage.org/files/8db/226/739/8db226739a164af69144d8c0337157f0.png)
Приложение состоит из двух частей: доверенного и общего. При запуске оно создает анклав в защищенной части памяти, состоящий из страниц размером 4 Кб. При вызове доверенной функции она видит данные анклава, любой другой внешний доступ (в том числе и со стороны ОС) запрещен. После окончания работы функции анклав остается в защищенной области.
Среда защищенного исполнения встроена в пользовательский процесс, у нее собственные код и данные. Она обеспечивает безопасность, целостность данных, контроль входных точек, поддерживает многопоточность.
![](https://habrastorage.org/files/ac7/d45/683/ac7d4568331c4b5fb822d9c4284a54a0.png)
При попытке доступа к анклаву проверяется, находятся ли по данному адресу данные вызывающего процесса (EPC, Enclave Page Cache). Далее подвергаются контролю полномочия функции (EPCM, Enclave Page Cache Metadata), и только потом предоставляется требуемый доступ.
![](https://habrastorage.org/files/33f/ec7/65f/33fec765fe684a4f8c70a3ec0e7886ac.png)
Аттестация происходит следующим образом. Анклав запрашивает аппаратно подписанный отчет, содержащий, в том числе информацию о целостности анклава. Этот отчет отсылается на аттестующий сервер, где происходит его верификация. Анклаву высылается ключ приложения (открытая часть ключа), где генерируется подписывающий (приватный) ключ, зависящий от анклава и платформы. Ключ приложения шифруется подписывающим ключом и сохраняется для дальнейшего использования.
Функционал Intel Software Guard Extensions реализуется с помощью комбинации SGX инструкций, поддерживающих локальную аттестацию и предоставляемого Intel аттестационного анклава для поддержки удаленной аттестации.
Разработчики SGX предусмотрели защиту от различного рода атак на данные и код: угрозы со стороны пользовательского и системного ПО, а также загрузчика. Заметим, что средствами SGX невозможно защититься от side-channel уязвимостей, когда злоумышленники собирают статистику использования ЦПУ для определения характеристик исполняемого на нем кода. Для решения подобного рода задач предназначены средства динамического анализа программ, такие, например, как Pin.
![](https://habrastorage.org/files/2fe/ffe/16a/2feffe16aed4495f875768ae121b3b27.png)
Для предотвращения перехвата данных при обмене между процессором и памятью используется Memory Encryption Engine (MEE), работающий как расширение контроллера памяти и поддерживающий технологию SGX. Для определенных областей памяти осуществляется шифрование данных, передающихся по шине. MEE использует специальные комбинации криптографических примитивов для эффективного шифрования при очень жестких требованиях по задержкам.
![](https://habrastorage.org/files/1b2/85e/302/1b285e3021304249ae858c693c5961ff.png)
Как выглядит разработка приложений, поддерживающих SGX? Чувствительные фрагменты кода и данных размещаются в отдельном shared object (.so). Далее определяются интерфейса анклава и генерируются заглушки. Библиотеки SGX взаимодействуют с кодом через API, для разработки используются обычные, привычные для разработчика тулчейны. Для облегчения процесса обработки уже имеется Intel SGX SDK.
Что обещает нам технология Intel SGX? Прежде всего то, что требования к техническим навыкам пользователя, работающего с конфиденциальной информацией, могут быть сильно сокращены. Ей больше не страшны вирусы, трояны и странные программы, которые могут иметься на его компьютере. Далее, повысится доверие к облачным платформам – им можно будет доверять свои приложения, поскольку они будут защищены от любого кода хоста. Конечно, все это дело довольно далекого будущего, ведь процессоры Skylake еще только появились. Но использовать SGX можно уже сейчас. Мы готовы углубляться в эту тему и отвечать на любые вопросы, с ней связанные.