Программисты часто повторяют мантру о том, что инструкции x86 совершенно непрозрачны: Intel говорит нам, что они что-то делают, но нет надежды, что кто-нибудь сможет проверить, что происходит, поэтому, если АНБ скажет им, чтобы они замаскировали свои ГСЧ, то мы не можем на самом деле сделать что-нибудь с этим.
Ну, я считаю, что программисты ничего не могут сделать с этой проблемой. Но как на это напал бы инженер-электрик? Существуют ли методы, которые инженер-электрик мог бы использовать для проверки того, что схема действительно выполняет операции, описанные в ее спецификации, и никаких других операций?
cpu
reverse-engineering
user14717
источник
источник
Ответы:
Лучшая статья, которую я прочитал на эту тему, - «Скрытые аппаратные трояны уровня допанта» (Becker et al) от 2014 года.
В документе описывается, как вносятся изменения, как чрезвычайно трудно обнаружить при проверке кремния, способы скрытия его от производственного теста и как это можно сделать, чтобы снизить безопасность аппаратного крипто-ГСЧ или утечь ключевую информацию. через боковой канал силовой шины реализации AES.
Побочные каналы представляют собой новую область интересов. Intel страдает от проблем, связанных со спекулятивным исполнением утечки информации из памяти, которая даже не использовалась программой. Может ли это быть преднамеренным недостатком дизайна? Это почти невозможно сказать.
источник
Существуют ли методы, которые инженер-электрик мог бы использовать для проверки того, что схема действительно выполняет операции, описанные в ее спецификации, и никаких других операций?
В теории да, я думаю, что это возможно. Однако для сложного процессора это займет много времени и денег. Кроме того, если вы не в полной мере знаете и не понимаете дизайн, вы не сможете судить, является ли какое-либо действие «законным» или нет.
Процессор - это просто сложная цифровая схема, состоящая из множества логических ячеек.
Можно перепроектировать чип и реконструировать конструкцию путем наблюдения металлических соединений. Таких соединительных слоев может быть много, например, до 8 или более слоев.
Вам понадобятся эксперты в этой области, чтобы распознать логические ячейки, а затем, возможно, какое-то программное обеспечение сможет выяснить, как они все связаны, чтобы вы могли восстановить список соединений.
Как только у вас есть список соединений, вы «знаете» дизайн. Это не значит, что вы теперь также знаете, как это работает!
Может случиться так, что определенная функция активирует 2 раздела проекта, в то время как вы думаете, что этого должно быть достаточно, чтобы потом подозревать, что происходит какая-то подозрительная деятельность. Тем не менее, дизайн делает некоторые хитрые трюки, о которых вы не знаете, для ускорения операций.
Не зная и не понимая дизайн, любой вывод, который вы сделаете, все равно может быть неправильным. Только инженеры, спроектировавшие ЦП, имеют всю информацию о конструкции и имеют наилучшие шансы на то, чтобы выяснить или угадать, что на самом деле происходит или должно происходить в ЦП.
источник
Не существует хороших способов найти задние двери, один из способов найти аппаратный черный ход - это проверить комбинации или недокументированные инструкции. Вот хороший разговор о ком-то, кто на самом деле делает это и проводит аудит на оборудовании x86 . Это можно сделать без взлома чипа. Одна из проблем с Intel (я не уверен насчет других чипов) состоит в том, что на самом деле на нем работает процессор с linux, поэтому на некоторых процессорах также работает программное обеспечение, и у вас, возможно, нет доступа к нему.
Есть способы протестировать использование самого оборудования для тестирования функциональности. Поскольку x86 имеет недокументированную часть своего набора инструкций, было бы необычно вводить бэкдоры в обычные инструкции, потому что это представляло бы возможность ошибок (например, если у вас был бэкдор в инструкции add или mult), поэтому первое место, на которое следует обратить внимание будет в недокументированных инструкциях.
Если вам нужно было проверить функциональность обычных инструкций, вы могли бы наблюдать за временем, которое требуется для выполнения инструкций, посмотрите, сколько энергии требуется для выполнения инструкций, чтобы увидеть, есть ли отличия от того, что вы ожидаете.
источник
Единственный способ состоит в том, чтобы разделять микросхему слой за слоем и записывать каждый транзистор с помощью электронного микроскопа, а затем вводить это в какую-то программу моделирования и затем наблюдать за ее работой.
По сути, это проблема «черного ящика», в которой вы пытаетесь восстановить внутреннее устройство по измерениям входов и выходов. Как только сложность внутренних элементов или количество операций ввода / вывода выходит за рамки тривиального, возникает комбинаторный взрыв, в котором число возможных внутренних состояний становится астрономическим. Где номера , как Googol вышвырнут о.
источник
Доказать, что процессор не делает ничего хитрого, чрезвычайно сложно. Классический пример - машина для голосования. Если в нем есть хоть один бит, который берет копию вашего голоса, а затем передает его какому-то диктатору, в некоторых местах это может стать для вас жизнью или смертью. И доказать, что среди миллиардов нет ни единого подобного, довольно сложно.
Вы можете подумать об изоляции чипа физически, поэтому практично убедиться, что к нему нет неправильных проводных соединений. И добавление другого чипа или нескольких последовательных чипов (из разных источников) в сетевое соединение, которое гарантирует, что он подключается только в нужном месте. Затем включите его после того, как он проголосует. И надеясь, что там нет энергонезависимых битов. Или подлый беспроводной связи. Но ты бы доверил свою жизнь этому?
источник
Передача любых данных в АНБ потребует доступа к сети, поэтому будет очень легко обнаружить такой черный ход, запустив ОС с отключенными сетевыми службами и проверив сетевые интерфейсы на наличие трафика. Для ОС с открытым исходным кодом даже можно работать с полной поддержкой сети и определять мошенническое соединение по IP-адресу назначения, который не будет совпадать ни с одним адресом, к которому ОС может иметь законный доступ.
Бэкдор на основе ГСЧ без передачи данных будет иметь очень ограниченную полезность. Если только процессорный ГСЧ не является единственным источником энтропии, шансы на то, что такой бэкдор предоставит атакующему какое-либо преимущество, хотя и не будучи очевидными в то же время, практически равны нулю . Если вы не настаиваете на том, что чайник Рассела существует, несмотря на то, что у него нет веских причин для существования, вы должны иметь возможность применить тот же аргумент к аппаратным черным дверям ГСЧ.
источник
rdrand
илиrdseed
как предложила Intel: в качестве единственного источника энтропии для семян PRNG. Linux (ядро) решил не делать для/dev/random
, но Glibc / libstdc ++ s токаstd::random_device
делает использование толькоrdrand
если он доступен во время выполнения вместо открытия/dev/random
. Войдите в стандартный библиотечный звонок с Годболтомstd::random_device
не является криптографически сильным ГСЧ. Стандарт C ++ позволяет реализовать его с помощью PRNG, эффективно возвращая одну и ту же последовательность каждый раз , поэтому совершенно очевидно, что никто не должен использовать его для шифрования.