Одной из функциональных новинок, появившихся в процессорах Intel Core шестого поколения (Skylake), стала технология Intel Software Guard Extensions (Intel SGX). Легко убедиться гуглением, что информации о ней в интернете не так много. Мы решили восполнить этот пробел, тем более что под рукой у нас оказалась статья одного из разработчиков этой технологии, Мэтью Хойкстра (Matthew Hoekstra); в ней он описывает цели, которые преследует Intel SGX. Приводим ее перевод.
Если говорить о сути, то Intel SGX – это набор новых инструкций процессора, которые могут использоваться приложениями для выделения приватных областей кода и данных. Создавая эту технологию, мы преследовали следующие цели.
Цель 1. Позволить разработчикам приложений защитить чувствительные данные от несанкционированного доступа или изменения со стороны зловредного ПО, запущенного с более высокими привилегиями.
Хотел бы выделить в этом пункте несколько принципиальных моментов. Первое, защита чувствительных данных подразумевает обеспечение и их конфиденциальности (предотвращение утечек), и целостности (защита от подделок). Второе, защищать необходимо не только данные, но и код (например, атакующий может легко получить доступ к данным, изменив или отключив авторизацию). Третье, данные должны быть защищены не только когда они хранятся в зашифрованном виде, но и во время рантайма, когда они не зашифрованы и активно используются для вычислений. Наконец, критически важно обеспечить защиту рантайма против вредоносного ПО, обошедшего систему контроля привилегий с целью получить более высокий уровень прав.
Цель 2. Позволить приложениям обеспечивать конфиденциальность и целостность чувствительных данных и кода, не вмешиваясь в работу системы контроля привилегий, не мешая ей планировать и контролировать ресурсы платформы.
Чувствительные данные и код должны быть защищены от вредоносного ПО запущенного с высоким уровнем прав, однако в то же время система контроля привилегий должна постоянно делать свою работу, мешать ей нельзя. Недопустимо, чтобы защищаемые приложения брали на себя или нарушали базовую функциональность системы, такую как планирование задач, управление устройствами и т.д. Операционные системы развивались много лет, чтобы хорошо выполнять эти задачи, и создавать параллельную им сущность было бы непрактично.
Цель 3. Позволить пользователям компьютерных устройств держать над ними контроль, в то же время предоставляя свободу устанавливать и удалять приложения и сервисы.
Работа доверенного приложения не должна требовать каких-то специфических конфигураций и не должна ограничивать контроль пользователя над его компьютером. Обычной практикой обеспечения защиты сегодня является жесткое ограничение набора приложений, которое может быть загружено на платформу. В игровые приставки, смартфоны и т.д. сейчас обычно встроена специализированная операционная система, которая накладывает различного рода ограничения на доступность и поведение приложений, дабы не допустить проблем с безопасностью.
Корпоративное использование устройств может налагать еще более строгие дополнительные ограничения (например, на подключения USB-накопителей). В принципе, в этих мерах нет ничего плохого, но они не должны быть обязательными для обеспечения конфиденциальности и целостности данных. Это условие становится еще более очевидным, если мы будем говорить о персональном ПК, где необходимость в доверенном окружении так же велика, как и потребность в персонализации.
Цель 4. Позволить платформе измерять доверенный код приложения и производить с помощью процессора подписанный аттестат, который включает в себя это измерение и прочие сертификаты, удостоверяющие, что код был корректно инициализирован в доверенной среде.
Разрешая пользователю контролировать ПО на платформе, мы порождаем проблему доверенной доставки приложений. Как кто-либо может быть уверен, что платформа обладает всеми необходимыми примитивами для поддержки доверенных вычислений, которые требуются приложению, или что установленное приложение не было подделано? Или, говоря другими словами, как приложение может доказать, что оно доверенное?
Чтобы определить, было ли приложение корректно загружено и инициализировано, можно сравнить подпись приложения (криптографический хэш его отпечатка памяти в заранее заданной точке исполнения) с ожидаемым значением, полученным из считающейся доверенной системы – это называется измерением приложения. Чтобы подтвердить свое происхождение, измерение подписано приватным ключом, известным только доверенной системе, которая производит измерение.
Отметим, что разработчики не могут полагаться на вычисления, делаемые программно системой; как говорилось ранее, ПО всегда можно виртуализировать или обмануть с помощью вредоносной программы, имеющей достаточный уровень привилегий. Таким образом, вычисление должно быть аппаратным и исполняться тем же компонентом, которое создает доверенную среду, загружает/инициализирует доверенное приложение и осуществляет вычисление чувствительных данных.
Цель 5. Позволить разработчикам создавать доверенные приложения с использованием известных им средств и процессов.
Первые 4 цели обеспечивают преимущества более закрытой среды путем уменьшения набора сущностей, которые должны быть доверенными, при этом платформы остаются открытыми а выбор пользователя – свободным. Однако из этого не следует, что процесс разработки ПО останется неизменным. Например, если выяснится, что разработчикам придется кардинально менять свои процессы или они будут вынуждены писать софт под проприетарный контроллер безопасности, продуктивность процесса значительно уменьшится.
Цель 6. Позволить производительности доверенных приложений увеличиваться с ростом производительности процессоров.
Эта цель вырастает из идеи минимализации влияния на существующий процесс разработки ПО. Одной из движущих сил этого процесса состоит в том, что разработчики пытаются получить максимум преимуществ от увеличивающейся производительности процессора. Было бы здорово, если бы доверенные приложения не имели проблем с производительностью по сравнению с прочими.
Цель 7. Позволить производителям ПО распространять и обновлять приложения, используя наиболее удобные для них способы.
Если предлагаемое решение требует, чтобы независимые создатели ПО тесно работали с производителями платформ с целью предустановить их приложения в момент производства платформы или же обновления ПО могут быть установлены только вместе с обновлением системы, это также будет помехой созданию инновационных продуктов.
Цель 8. Позволить приложениям определять защищенные области кода и данных, которые содержат конфиденциальность, даже в том случае, если атакующий физически контролирует платформу и может производить прямые атаки на ее память.
Эффективное решение должно обеспечивать защиту от различных типов аппаратных атак, включая и те случаи, когда платформа физически находится в распоряжении врага. Исследователи Принстонского университета демонстрируют одну из таких атак. Возможны и другие варианты с использованием анализаторов шины памяти или подобных техник.
Комментарии (9)
a5b
14.10.2015 19:32+1> Цель 8. Позволить приложениям определять защищенные области кода и данных, которые содержат конфиденциальность, даже в том случае, если атакующий физически контролирует платформу и может производить прямые атаки на ее память.
Могут ли использовать данную технологию для защиты ботнетов и троянов (приложений) от антивирусов (атакующих, которые пытаются лишить приложение конфиденциальности)?
www.virusbtn.com/virusbulletin/archive/2014/01/vb201401-SGX «SGX: the good, the bad and the downright ugly», 2014-01-07 —...Unfortunately, SGX is also a prime weapon for use in malware. For better or worse, it currently looks like Intel will not be giving the option for ‘trusted anti-malware vendors’ to access the contents of enclaves to make sure they are safe. Thus, malware can, in principle, freely create enclaves to prevent the operating system/hypervisor/anti malware from knowing what it is executing.
Будут ли доступны SGX в бытовых процессорах (Pentium/Core i*)?
PS: Технические подробности технологии: web.stanford.edu/class/ee380/Abstracts/150415-slides.pdf Frank McKeen, Intel Labs (April 15, 2015)a5b
14.10.2015 19:42+1Более подробные слайды о SGX от Intel: software.intel.com/sites/default/files/332680-002.pdf — ISCA 2015 tutorial slides for Intel SGX (PDF), June 2015
KOLANICH
15.10.2015 01:22+2Самое главное забыли
https://software.intel.com/sites/default/files/article/413939/hasp-2013-innovative-technology-for-attestation-and-sealing.pdf
roboq6
TLDR: очередной зонд aka DRM.
Ага, то есть я своему компьютеру теперь не хозяин. Я теперь получается не смогу изменить код приложения даже обладая всеми правами в своей системе. Идея вируса, который эту фичу использует, так и напрашивается. В общем, идите вы к чертовой бабушке с такими технологиями.
AMDmi3
Если вы используете проприетарное ПО, вы своему компьютеру так и так не хозяин. А если свободное, то можете полностью контролировать как использовать подобные технологии, и, собственно, использовать только для собственной пользы. Например (предположительно, ибо в статье должно было быть написано как работает технология, а не маркетологическая вода), защить ключи в ssh-agent даже от root'а.
roboq6
Во-первых, если программа прикладная, то очень даже. Я могу просто ограничить права доступа ПО. Вот пример:
glowingsword.ru/ограничиваем-доступ-skype-к-вашим-данным-в-ub/
Во-вторых, в случае проприетарщины я могу как минимум изменить любой бит памяти программы, если того по какой-либо причине захочу. Я могу вылечить программу от вируса, я могу установить патч, я могу установить кряк (в том числе NoCD/NoDVD), я могу применить hex чит (привет ArtMoney и DOS играм!). С этой же технологией я данной свободы лишаюсь. Что отнюдь не вызывает приступа благодарности.
… и полностью поломать логику работы системы безопасности. root — царь и бог. Эта схема уже давно существует, она прошла испытания десятилетиями, на ЧТО предлагаете ее менять и главное, ЗАЧЕМ?
AMDmi3
> С этой же технологией я данной свободы лишаюсь.
Вы зачем-то валите на технологию проблемы проприетарного ПО. В реальном мире не нужно менять никаких битов, патчить бинарники и что-то ломать, когда можно изменить исходник и пересобрать, а вот от угроз защищаться надо. Внедрение технологии будет обосновано именно этим, а не вашим желанием городить костыли. У вас, впрочем, всегда остаются эмуляторы.
> … и полностью поломать логику работы системы безопасности. root — царь и бог. Эта схема уже давно существует, она прошла испытания десятилетиями, на ЧТО предлагаете ее менять
Во-первых, от уменьшения привилегий безопасность пока ещё никогда не страдала. Не существует никакой «логики работы системы безопасности», которая требовала бы что root — царь и бог.
Во-вторых, давно существует множество механизмов ограничения привилегий в том числе и root'а, и они замечательно работают. Появление железного механизма — большой плюс.
В-третьих, ничего менять я не предлагаю.
> и главное, ЗАЧЕМ?
В данном случае — очень просто: даже получив рута на машине, злоумышленник не получит расшифрованных ключей. Без железной поддержки это гарантировать невозможно.
roboq6
Окей, у святых которые используют только открытое ПО, вроде Ричарда Столлмана, данная технология не вызовет проблем. У всех же остальных она усугубит проблемы вызванные использованием проприетарного ПО. По мне одного этого аргумента хватает для того, чтобы послать всю технологию к черту.
Представьте, что у Вас волшебный бронежилет. Если Вы святой — он поможет. А если нет — лишь усугубит возможные ранения.
Думаю мало кто захочет носить такой бронежилет.
Сказал человек, который сам же призывал не городить костыли. Великолепный образчик двоемыслия, браво.
А не лучше ли вместо того, чтобы городить костыли(коим технология и является) и костыли для обхода эти костылей, сразу послать Guard Extensions в баню?
То есть, если я предлагаю оставить всё как есть, то я автоматически создаю костыли?
Чудная логика.
Безопасность может не страдает, но страдает свобода. Если я — единственный пользователь компьютера, то у меня должен быть контроль над ним. Люди джайлбреки тоже не от хорошей жизни делают.
Знаете что стало для меня последней каплей, которая привела к миграции с Windows XP на Linux? Я попытался изменить тип издания Windows XP в реестре, с Professional на Home, и получил отказ. Я был в шоке, я думал что администратор всё может. Однако я потом узнал, что в Windows администратор НЕ обладает высочайшим уровнем доступа, высочайшим уровнем доступа обладает фиктивный пользователь System, в то время как в Unix-like ОС администратор имеет полную власть.
Тут же получается, что с таким оборудованием я НЕ буду обладать всей полнотой власти даже в Linux.
А потом появится вирус, который с помощью эксплоитов(в том числе хардварных) получит все нужные привелегии. И выяснится, что находящийся на положении бесправного раба пользователь просто не сможет его прихлопнуть, у него будет недостаточно прав для этого. Это ущербная модель.
Да ну? Вы фактически посягаете на абсолютную власть root и говорите «ничего менять я не предлагаю». Ага, так я и поверил.
Это также означает, что даже будучи рутом я не смогу получить доступ к ключам вируса-шифровщика.
KivApple
Или наоборот. Вирус сможет защитить свои код и данные от чтения антивирусом, у которого не будет шансов распознать вредоносное ПО эвристическими методами.