Русская Википедия:Расширения Intel SGX
Расширения Intel Software Guard Extensions (Intel SGX) — набор инструкций центрального процессора, предоставляющих возможность приложению создавать анклавы — области в виртуальном адресном пространстве, защищённые от чтения и записи извне этой области другими процессами, включая ядро операционной системы. Intel SGX обеспечивают целостность и конфиденциальность вычислений с повышенными требованиями к безопасности, производимыми на системах, где привилегированные процессы (ядро операционной системы, гипервизор, и т. д.) считаются ненадёжными.
Intel SGX создан для применения в безопасных удалённых вычислениях, безопасного просмотра веб страниц и защиты авторских прав. Другие практические применения данной технологии включают обеспечение конфиденциальности проприетарных алгоритмов и ключей шифрования.
История создания
Расширения Intel SGX появились в 2015 году с шестым поколением микропроцессоров Intel, основанным на микроархитектуре Skylake. Начиная со Skylake в процессоре появился новый аппаратный модуль под названием Memory Encryption Engine (MEE), позволяющий автоматически зашифровывать данные, передаваемые от процессора к области памяти анклава. Это позволило отказаться от допущения надёжности оперативной памяти и ограничить периметр безопасности одним центральным процессором, что и сделало возможным создание SGX[1].
В 2016 году была представлена вторая версия технологии SGX, названная SGX2. Она расширила набор инструкций SGX1 возможностью динамического управления памятью анклавов. SGX1 налагал ограничения, касающиеся выделения памяти и повторного использования памяти анклава — разработчик обязан был выделять всю память при создании экземпляра анклава. В SGX2 были представлены новые инструкции и модели программирования для расширения поддержки динамического управления памятью анклава[2].
Поддерживается только в процессорах Intel Core поколений 7000, 8000, 9000 и 10000 (в процессорах Core 11 и 12 поколений поддержка технологии SGX удалена), также серверными процессорами Intel Xeon Scalabale третьего поколения. Процессоры компании AMD не поддерживают SGX.[3]
Постановка проблемы
Прежде всего, технология SGX была создана для возможности безопасных удалённых вычислений — запуска программного обеспечения на удалённом компьютере, принадлежащем ненадёжной стороне, с некоторыми гарантиями целостности и конфиденциальности. В общем случае, безопасные удалённые вычисления — это нерешённая проблема. Полностью гомоморфное шифрование решает проблему для ограниченного семейства вычислений, но имеет непрактичные накладные расходы производительности[4].
Расширения Intel SGX решают проблему безопасных удалённых вычислений путём использования надёжного оборудования на удалённом компьютере. Подлинность оборудования устанавливается в процессе аттестации. Надёжное оборудование создаёт «безопасную область», и пользователь службы удалённых вычислений может загружать необходимый код и данные в эту «область». Надёжное оборудование защищает конфиденциальность и целостность данных во время выполнения вычислений на нём[5].
Цели
Разработка Intel SGX преследовала 8 основных целей[6]:
- Позволить разработчикам приложений защищать конфиденциальные данные от несанкционированного доступа или изменения с помощью вредоносного программного обеспечения, работающего на более высоком уровне привилегий.
- Позволить приложениям сохранять конфиденциальность и целостность конфиденциального кода и данных, не нарушая возможности системного программного обеспечения управлять использованием ресурсов платформы.
- Предоставлять потребителям вычислительных устройств возможность контролировать используемые платформы и свободу устанавливать и удалять приложения и службы по своему усмотрению.
- Позволить платформе оценивать доверенный код приложения и, базируясь только на центральном процессоре, создавать подпись, которая включает эту оценку и другие подтверждения того, что код был правильно инициализирован в надёжной среде.
- Позволить создавать программное обеспечение с повышенными требованиями к безопасности с помощью привычных разработчикам инструментов.
- Сделать возможным масштабировать производительность доверенных приложений вместе с возможностями центрального процессора.
- Дать возможность поставщикам программного обеспечения доставлять доверенные приложения и обновления по своему усмотрению, используя каналы распространения по своему выбору.
- Позволить приложениям определять безопасные области кода и данных, которые поддерживают конфиденциальность, даже если злоумышленник имеет физический контроль над платформой и может проводить прямые атаки на память.
Детали устройства
SGX выделяет область памяти, называемую зарезервированной памятью процессора (Processor Reserved Memory, PRM). Процессор защищает PRM от всех не-анклавных обращений к памяти, включая доступ ядра, гипервизора и режима системного управления (System Management Mode, SMM), а также доступ DMA от периферийных устройств[5][7].
PRM содержит Enclave Page Cache (EPC), который состоит из 4-килобайтных страниц, в которых хранятся код и данные анклавов. Ненадёжное системное программное обеспечение отвечает за назначение страниц EPC анклавам. Центральный процессор отслеживает состояние каждой страницы EPC в метаданных кэша страниц анклава (Enclave Page Cache Metadata, EPCM), чтобы гарантировать, что каждая страница EPC принадлежит только одному анклаву[7].
Исходный код и данные в анклаве загружаются ненадёжным системным программным обеспечением. На этапе загрузки системное программное обеспечение просит центральный процессор скопировать данные из незащищённой памяти (вне PRM) на страницы EPC и назначает страницы для устанавливаемого анклава. Отсюда следует, что начальное состояние анклава известно системному программному обеспечению[5][7].
После того, как все страницы анклава загружены в EPC, системное программное обеспечение просит центральный процессор пометить анклав как инициализированный, после чего прикладное программное обеспечение может выполнить код внутри анклава. После инициализации анклава запрещается способ загрузки, описанный выше[5][7].
Пока анклав загружается, на основе его содержимого вычисляется криптографический хэш. После инициализации анклава, процесс хеширования завершается и полученный хэш становится проверочным хэшем анклава (measurement hash)[8].
Удалённая сторона может пройти процедуру аттестации, чтобы убедиться, что она обменивается данными с анклавом, который имеет определённый проверочный хэш и работает в защищённой среде[9].
Поток выполнения может войти в анклав только через специальные инструкции центрального процессора, которые аналогичны механизму переключения из режима пользователя в режим ядра. Выполнение анклава всегда происходит в защищённом режиме, на кольце 3, и использует трансляцию адресов, установленную ядром ОС и гипервизором[5][7].
Чтобы избежать утечки конфиденциальных данных, во время выполнения кода анклава центральный процессор не обслуживает прерывания (например, page fault) или выход виртуальной машины (vmexit). Вместо этого центральный процессор сначала выполняет Асинхронный Выход из Анклава (Asynchronous Enclave Exit, AEX), чтобы переключиться с кода анклава на код кольца 3, а затем обслуживает прерывание или выход виртуальной машины. Центральный процессор выполняет AEX, сохраняя своё состояние в предварительно определённой области внутри анклава, и передаёт управление предварительно определённой инструкции вне анклава, заменяя регистры центрального процессора синтетическими значениями[5][7].
Выделение страниц EPC для анклавов делегируется ядру операционной системы (или гипервизору). Операционная система сообщает о своих решениях о выделении памяти реализации SGX посредством специальных инструкций центрального процессора кольца 0. Операционная система также может выгружать страницы EPC в ненадёжную оперативную память, а затем загружать их обратно, используя специальные инструкции процессора[5].
SGX использует Memory Encryption Engine (MEE), чтобы обеспечить конфиденциальность, целостность и актуальность выгруженных страниц EPC, пока они хранятся в ненадёжной памяти[5]. MME работает как расширение блока управления памятью и автоматически зашифровывает все данные, передаваемые от процессора к памяти[10].
Дизайн приложений
Дизайн приложения с Intel SGX требует, чтобы приложение было разделено на два компонента[9]:
- Доверенный компонент — это анклав, содержащий код оперирующий с секретами приложения. В приложении может быть более одного доверенного компонента/анклава.
- Ненадёжный компонент — остальная часть приложения. Важно отметить, операционная система и гипервизор считаются ненадёжными компонентами.
Доверенный компонент должен быть ограничен только теми данными, которые нуждаются в наибольшей защите, и теми операциями, которые должны взаимодействовать с ними. Большой анклав со сложным интерфейсом не только потребляет больше защищённой памяти, он также увеличивает площадь атаки. Анклавы также должны иметь минимальное взаимодействие доверенных компонентов. Хотя анклавы и могут вызывать функции в ненадёжном компоненте (с помощью специальной инструкции), ограничение таких вызовов укрепит анклав от атак[9][8].
Аттестация
В архитектуре Intel SGX аттестацией называется процесс подтверждения подлинности анклава. Существует два механизма аттестации[9]:
- Локальная аттестация происходит, когда два анклава на одной платформе выполняют взаимную проверку подлинности.
- Удалённая аттестация происходит, когда анклав получает доверие удалённой стороны.
Локальная аттестация
Локальная аттестация полезна, когда приложение имеет более одного анклава, которые должны работать совместно, или когда два приложения должны обмениваться данными между анклавами[9].
В процессе аттестации между двумя анклавами, каждый анклав сначала должен убедиться, что второй заслуживает доверия. Анклав подтверждает свою подлинность другому целевому анклаву с помощью инструкции EREPORT. Эта инструкция SGX создаёт отчёт об аттестации (REPORT), который криптографически связывает сообщение анклава с идентификационными данными, основанными на хэше анклава и на основе сертификатов. Криптографическое связывание выполняется с помощью специального тэга, вычисленного с использованием симметричного ключа, который доступен только целевому анклаву и реализации SGX[5].
После этого анклавы могут установить защищённый сеанс, используя протокол Диффи-Хеллмана для обмена сеансовым ключом. Этот сеансовый ключ может использоваться для шифрования данных, которые должны быть разделены между двумя анклавами[9].
Поскольку один анклав не может получить доступ к защищённому пространству памяти другого анклава, даже если они принадлежат одному приложению, все указатели должны быть разыменованы, и между анклавами должны передаваться непосредственно данные[9].
Удалённая аттестация
Процесс аттестации выглядит следующим образом. Процессор с поддержкой SGX вычисляет хэш кода и данных в каждом анклаве. Программное обеспечение внутри анклава запускает процесс вычисления подписи аттестации SGX, которая включает хэш анклава и сообщение анклава[8].
Криптографический примитив, используемый в подписи аттестации SGX, слишком сложен, чтобы его можно было реализовать на аппаратном уровне, поэтому процесс подписи выполняется привилегированным Quoting Enclave, предоставляемым Intel, и имеющим доступ к ключу аттестации SGX — уникальному для каждой платформы асимметричному ключу от аппаратного обеспечения. Ключ аттестации SGX не существует на момент создания процессора. Он выдаётся позже, с помощью Provisioning Enclave, предоставляемого Intel[5].
Так как подпись вычисляется в Quoting Enclave, существует необходимость в безопасном канале связи между анклавом, проходящим аттестацию программного обеспечения, и Quoting Enclave. Эта проблема решается с помощью механизма локальной аттестации[5].
Если удалённый сервер определяет, что анклав был должным образом создан и работает на подлинном процессоре с поддержкой Intel SGX, он теперь может доверять анклаву и передавать ему секреты по доверенному каналу[9].
Безопасность
При удалённых вычислениях содержимое анклава загружается системным программным обеспечением на компьютер и, следовательно, не должно содержать секреты в незашифрованном виде. После инициализации проходит процесс аттестации, когда анклав аутентифицируется на удалённом сервере. Ожидается, что после успешной аутентификации удалённый сервер раскроет некоторые секреты анклаву по безопасному каналу связи. Дизайн Intel SGX пытается гарантировать, что хэш, посчитанный во время процесса аттестации, точно отражает содержимое, загруженное в анклав[8].
SGX также предлагает систему идентификации на основе сертификатов. Её используют для обмена секретами между анклавами, которые имеют сертификаты, выданные одним и тем же центром сертификации. Процесс обмена включает в себя шифрование секретов перед передачей их ненадёжному системному программному обеспечению, которое осуществляет их передачу в другой анклав[5][8].
Этот же механизм можно использовать для кэширования секретов, полученных во время процесса аттестации, на ненадёжных носителях данных, управляемых системным программным обеспечением. Это кэширование может сократить число процессов аттестации в распределённой системе[5].
Атака Prime+Probe
27 марта 2017 года исследователи из Грацского технического университета разработали прототип, способный с помощью атаки по времени в течение пяти минут получать ключи RSA из анклавов SGX, работающих на той же системе[11][12]. Одна из мер противодействия этому типу атаки была представлена и опубликована Daniel Gruss et al. на симпозиуме по безопасности USENIX в 2017 году[13]. Среди других опубликованных контрмер 28 сентября 2017 г. была утилита DR.SGX. Утверждается, что DR.SGX обладает превосходной производительностью и при этом гораздо проще в реализации, чем другие предлагаемые решения[14].
Атаки типа Spectre
Шаблон:Main Группа LSDS в лондонском Имперском колледже продемонстрировала, что спекулятивная уязвимость безопасности Spectre может быть адаптирована для атаки на анклав[15]. Атака Foreshadow, раскрытая в августе 2018 года, сочетает спекулятивное выполнение и переполнение буфера для обхода SGX[16].
Атака анклава
8 февраля 2019 года исследователи из Грацского технического университета опубликовали результаты исследований, которые показали, что в некоторых случаях можно запускать вредоносный код из самого анклава[17]. В документе утверждается, что из-за конфиденциальной и защищённой природы анклава антивирусное программное обеспечение не может обнаружить и удалить находящиеся в нём вредоносные программы. Однако, поскольку современные антивирусные решения отслеживают системные вызовы и взаимодействие приложения с операционной системой, должна быть возможность идентифицировать вредоносные анклавы по их поведению. Корпорация Intel опубликовала заявление, в котором говорилось, что эта атака была за пределами модели угроз SGX, что они не могут гарантировать, что код, выполняемый пользователем, поступает из надёжных источников, и призвала потребителей использовать только доверенный код[18].
Атака «утконос»
Исследователи из Грацского университета в Австрии обнаружили новую опасную уязвимость, основанную на измерении напряжения процессора, которая позволяет извлекать AES- и RSA-ключи из защищённого анклава SGX. Такая возможность присутствует во всех процессорах Intel, начиная с Sandy Bridge, в которых функции северного моста были полностью заменены интегрированным в кристалл процессора системным агентом. Уязвимость эксплуатирует нетребующую привилегированного доступа возможность системы RAPL (Running Average Power Limit) получать подробные оценки энергопотребления ядром, системным агентом и DRAM[19]. Для борьбы с уязвимостью Intel выпустила микрокод с исправлением (INTEL-SA-0389[20]).
Примечания
Ссылки
- How Confidential Computing Delivers A Personalised Shopping Experience, январь 2021 года.
- Intel® SGX: Конфиденциальные вычисления для современной сетевой экономики, Юлия Гонтарь, сентябрь 2021 года.
- ↑ Шаблон:Cite web
- ↑ Шаблон:Статья
- ↑ Intel запретила владельцам своих новых процессоров смотреть лицензионные фильмы с дисков в 4K Шаблон:Wayback // CNews, 17 Января 2022
- ↑ Шаблон:Статья
- ↑ 5,00 5,01 5,02 5,03 5,04 5,05 5,06 5,07 5,08 5,09 5,10 5,11 5,12 Шаблон:Статья
- ↑ Шаблон:Cite web
- ↑ 7,0 7,1 7,2 7,3 7,4 7,5 Шаблон:Cite web
- ↑ 8,0 8,1 8,2 8,3 8,4 Шаблон:Статья
- ↑ 9,0 9,1 9,2 9,3 9,4 9,5 9,6 9,7 Шаблон:Cite web
- ↑ Шаблон:Статья
- ↑ Шаблон:Cite arxiv
- ↑ Шаблон:Cite news
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite arXiv
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite arxiv
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web