Аппаратные закладки в процессорах – мифы и реальность
Вокруг вопроса наличия аппаратных закладок в процессорах циркулирует большое количество слухов и спекуляций. Угроза их присутствия в современных процессорах очень часто является едва ли не основным лейтмотивом в обосновании необходимости использования только отечественной компонентной базы в России. Более того, зачастую, некоторые горе-эксперты, подвизавшиеся зарабатывать славу на ниве темы отечественной микроэлектроники, постулируют наличие недокументируемых возможностей в зарубежных CPU как вопрос самоочевидный. В данной статье хотелось бы обрисовать общую картину того, какова ситуация с потенциальным наличием аппаратных закладок в реальности и насколько эта угроза представляет проблему.
Для начала немного определимся с дефинициями. Аппаратной закладкой в процессоре мы будем называть некоторый намеренно скрытый от пользователя на этапе создания (проектирования, производства) и зашитый в кремнии аппаратный блок в процессоре, который может в определённых случаях (по команде, в назначененное время) позволить неавторизованное пользователем действие (дать управление процессором, дать доступ к данным, вывести из строя процессор или изменить его характеристики). Здесь особенно стоит оговориться, что мы не говорим о злонамеренном системном ПО или прошивках, которые могут быть изменены после производства процессора (производителем уже конечных устройств или просто любым пользователем). Также я буду говорить об аппаратных закладках именно в CPU, а не в конечных продуктах, построенных на их базе, как то компьютерах, планшетах, различных промышленных устройствах, составных комплектующих (например, материнских платах) и т.д. И ещё один важный момент – мы будем говорить об индустриальных процессорах от известных компаний типа Intel, AMD, Qualcomm и т.д., доступных на массовом рынке. Ибо очевидно, что в ноунейм процессоре от АНБ/ФСБ может быть потенциально всё, что угодно.
Начнём с главного посыла всей статьи. В последние годы тема исследования методов внедрения и обнаружения аппаратных закладок становится всё более популярной. Проводятся конференции, исследовательские группы публикуют статьи различной степени полезности о методах внедрения закладок в процессоры. Но во всей этой академической дискуссии есть один факт, который необходимо понимать при чтении опубликованных материалов – за десятилетия развития кремниевой микроэлектронники не обнаружено НИ ОДНОЙ достоверно доказанной аппаратной закладки в массовых промышленных процессорах. Таким образом можно констатировать, что данная угроза является на данный момент чисто теоретической, но не нашедшей (по-крайней мере пока) своё применение на практике. Попробуем разобраться, почему так происходит.
Современный микропроцессор является крайне сложным инженерным продуктом, который может содержать несколько десятков миллиардов транзисторов (и не только транзисторов). В общем-то на первый взгляд выглядит так, что при таком количестве элементов не составляет труда добавить некоторые цепи, которые потенциально могут выполнять скрытые от пользователя действия. Но внедрение закладки имеет, если грубо, два аспекта: технический и бизнесовый. Разберём их отдельно.
Технические аспекты внедрения закладок
Примерно так выглядит академический взгляд на проблему аппаратных троянов:
Не углубляясь в таксономию аппаратных закладок, рассмотрим три наиболее важных для понимания класса проблем с вышеприведённой схемы:
Способы появления закладки в процессоре.
Виды закладок по механизмам активации.
Результат несанкционированного воздействия.
Остальные детали не влияют принципиально на общее понимание вопроса.
Результат несанкционированного воздействия
Начнём с последнего пункта – ведь именно для его реализации существуют все остальные. Чтобы упростить вопрос, давайте за возможные варианты срабатывания аппаратной закладки примем два – выход процессора из строя и утечка информации. По-большому счёту, другие приведённые варианты (ухудшение характеристик и изменение поведения процессора) являются в пределе выходом процессора из строя и для более лёгкого восприятия материала вполне допустимо, я считаю, свести их к одному пункту.
Способы появления закладок в процессоре
Для упрощения понимания данный вопрос я хотел бы рассмотреть несколько с другим подходом, чем предлагают авторы вышеприведённой классификации.
Здесь для начала стоит напомнить, что современное производство микропроцессоров крайне глобализировано и имеет большое разделение труда. Есть компании-разработчики процессоров, например, из зарубежных: Intel, AMD, Nvidia, Qualcomm, MediaTek и т.д., из отечественных: Байкал Электроникс, МЦСТ, НИИСИ, Элвис и т.д. Но отвечая непосредственно за разработку, эти компании для создания конечного продукта в цепочку производства привлекают множество сторонних предприятий. Например, все вышеуказанные компании осуществляют непосредственное производство большинства своих процессоров на фабриках TSMC в Тайване (кроме Intel, который также имеет собственное производство и заказывает на TSMC пока лишь небольшую часть своих процессоров). Также все компании используют стороннее ПО для проектирования процессоров, в первую очередь от компаний Synopsis и Cadence. Массово используются лицензированные IP-блоки, где-то больше, где-то меньше, но они есть везде. Поэтому тут стоит разделить вопрос потенциального появления аппаратных закладок в процессоре на две части – когда она появляется по умыслу непосредственно разработчика, или когда она появляется скрытно от компании-разработчика из-за использования в производстве сторонних компаний или результатов их интеллектуального труда
Внедрение закладки непосредственно разработчиком процессора
Тут нет никаких технических сложностей добавить в процессор ту логику, которую создатель пожелает, это очевидно. Но возникает проблема - каким образом потом такой закладкой воспользоваться? А также разнообразные организационные сложности и последствия. Об этом мы поговорим чуть ниже.
Внедрение закладки третьими лицами при производстве процессора.
Данный вариант стоит признать куда более сложным (я бы сказал практически нереалистичным). Он обладает всеми теми же техническими и организационными сложностями (и даже больше), что и предыдущий пункт, но с той лишь разницей, что разработчику процессора куда легче контролировать возникновение неавторизованных изменений. Любая более-менее сложная цепь, неожиданно вдруг появившаяся при компиляции исходного кода проекта, вряд ли сможет ускользнуть от бдительных глаз инженеров. Высокая степень разделения труда при создании процессора также является препятствием на пути внедрения закладок, т.к. в общем случае не даёт злоумышленнику знаний о том, каковы характеристики и особенности остальных звеньев производства. Например, создание фотошаблонов, как правило, разделено от производства на фабрике, корпусирование также осуществляется в других местах, не говоря уж о том, что внедрение любого транзистора на данном этапе без ведома разработчика может превратить чип в кирпич.
Но давайте допустим, что зловредный разработчик процессора таки решил сделать секретный бэкдор, что бы им не двигало в таком желании. Опуская организационные сложности (о них далее), есть чисто технические аспекты, делающие такое решение достаточно малоосмысленным.
Виды закладок по механизмам активации
Закладки можно грубо разделить на 2 категории – требующих активации (по команде извне через различные каналы, или включающихся по достижению определённого события, например, по внутреннему некому счётчику) и работающих постоянно
Закладки через активацию.
В теории, активировать закладку можно различными способами:
По событию внутреннего счётчика (достижения определённого времени, количества срабатываний цепи включения питания и т.д.). Проблема данных закладок очевидна – они не контролируемы. Каким образом можно предугадать, сколько раз будет включаться компьютер, один или тысячи? Или когда вам потребуется отключить процессор – через год, два, или пять лет?
По команде извне. В данном случае опять-таки возникает вопрос – каким образом передать команду на нужный процессор? Если компьютер с уязвимым процессором стоит в удалённом датацентре в железном корпусе и над ним стоит ещё пяток таких же стоек, то никакими радио или оптическими сигналами закладку не активируешь. Остаётся только вариант каким-то образом через сеть передать на исполнение на процессор сложную последовательность команд, которая будет триггером для включения. Но для того, чтобы такое сделать, необходимо иметь возможность непосредственно запустить код на процессоре. Здесь возможны следующие случаи:
Компьютер не подключен к глобальной сети напрямую. В таком случае, активировать закладку с помощью запуска нужной последовательности команд будет невозможно – вы просто не достучитесь до процессора физически.
Сервер с уязвимым процессором используется для предоставления удалённого доступа для клиентов (например, это сервис по аренде виртуалок). В таком случае запустить нужный код проще простого – вы арендуете виртуалку и в ней запускаете нужную последовательность инструкций.
Машина с уязвимым процессором имеет доступ к глобальной сети и предоставляет наружу определённые сервисы(но не позволяет напрямую запустить пользовательский код). В теории можно пофантазировать, что определённым воздействием на сервис (например, каким-то особым запросом), мы можем активировать в софте крайне редко работающую ветку кода, в которой будет находиться нужная для активации последовательность. Но тут проблема вполне очевидна – а как гарантировать, что на интересующей нас машине работает именно тот софтварный стэк, который нам требуется, вплоть до его бинарной идентичности? За время создания процессора, которое может занять несколько лет, может поменяться как сам софтварный стэк, так и версии его компонентов, библиотек, компиляторов и т.д. И малейшее изменение во всём этом ПО приведёт к бессмысленности вашей аппаратной закладки. И это я не говорю о всех прелестях преодоления сетевого оборудования/стэка, которое тоже может внести непреодолимые препятствия.
Возможна ещё одна вариация для п.3 – машина с сервисом взламывается через программную уязвимость, а потом на ней запускается нужный код. Но в таком случае смысл аппаратной закладки практически теряется – если можно взломать компьютер чисто программно, зачем заморачиваться с аппаратными бэкдорами? Разве что активировать закладку, которая физически уничтожит процессор.
Закладки, работающие постоянно
Но допустим, мы решили обойти все сложности с активацией аппаратной закладки и сделали её работающей сразу «с завода». Таким образом ваш процессор сразу же при включении начнёт пытаться передавать некую информацию куда-то. Проблема заключается как раз в этих «некую» и «куда-то». Процессор должен как-то определить, какая из всего обрабатываемого им массива информация ценная и куда её посылать. Даже если допустить, что ни один сетевой админ в мире не заметит постоянно фонящий непонятный траффик по своей сети, проблема в том, что на уровне имплементации логики процессора сложно определить, куда и как правильно отправить любые данные во внешний мир. Если в процессоре есть встроенный Ethernet-controller, то его аппаратную имплементацию (в которую, очевидно, и имеет смысл ставить закладку) надо ещё подружить со стэком драйверов машины и используемого в сети оборудования. Это может оказаться, мягко говоря, непростой задачей. А что если пользователь использует внешнюю сетевую карту? Для этого придётся каким-то образом внедряться в работу PCI интерфейса и при этом не разломать работу неизвестной сетевой карты и произвольных драйверов к ней. Звучит практически нереально. Но самое главное, даже если преодолеть все указанные трудности, непонятно как преодолеть вполне стандартные настройки безопасности на сетевом оборудовании. Сеть может быть организована разным образом, нужно знать адреса шлюзов, причём многие настройки находятся на уровнях OSI выше канального, на котором оперирует Ethernet-адаптер. Просто посылка пакета с зашитым в кремний IP-адресом получателя в любой минимально сложной сети приведёт к его отбраковке на первом же сетевом устройстве. В итоге, минимальные усилия по правильной организации внутренней сети делают сетевую закладку бессмысленным набором транзисторов. Реализовать в кремнии такой функционал, который сможет интеллектуально обходить сетевые настройки безопасности, выглядит из разряда фантастики
Все вышеописанные сложности также актуальны для закладок с активацией, в том случае, если мы как-то смогли активировать зловредный функционал и его цель – именно передача информации с процессора во внешний мир
Так какие аппаратные закладки реалистичны?
Если подытожить, то технически реалистичным вариантом выглядит ситуация, когда разработчик процессора сам заложил аппаратную закладку в процессор и она может быть активирована с помощью некоей специальной поледовательности команд. Использовать такую закладку можно только имея возможность напрямую запустить код на интересующем нас процессоре, что актуально для сервисов аренды виртуальных машин/серверов. В таком случае можно как получить доступ к чужим данным, так и уничтожить процессор физически. Также для машин, предоставляющих сервисы в глобальную сеть, можно использовать комбинацию программных уязвимостей и аппаратных закладок, чтобы уничтожить процессор физически.
Все остальные варианты выглядят как технически разумно нереализуемые.
Бизнес-аспекты внедрения закладок
Помимо технических, у умышленного внедрения закладок в чипы есть другие аспекты для компании-разработчика, которые мы можем грубо обобщить под термином «бизнесовые»:
Репутационные потери
Тут я думаю всё очевидно – если вдруг выяснится, что кто-то намеренно внедряет закладки в свои процессоры, данную компанию будут обходить стороной все, у кого будет для этого малейшая возможность
Риск утечки информации о механизмах эксплуатации аппаратной закладки третьим лицам
Реализация аппаратной закладки в процессоре требует вовлечения сотрудников компании, причём скорее всего в количестве более одного человека. Каждый из них может потом слить данную информацию, например, криминальным структурам или разведкам других стран. В итоге возникает опасность несанкционированного использования бэкдора
Юридические
Если эксплуатирование закладки приведёт к утечкам данных, или, тем более, к техногенным катастрофам, то разработчик такого чипа будет просто уничтожен в судах. Причём хочу отдельно отметить, что никакими методами организации поставок уязвимых чипов только в «нужные» страны этот вопрос не решить. Потому что физически невозможно проконтролировать движение всех чипов при миллионных тиражах. И гарантии, что процессора с закладкой не окажется на АЭС в Индии от РосАтома не даст никто
Экономические
Создание закладок требует дополнительных финансовых расходов. В пределе для этого потребуется создание отдельной линейки процессоров, с соответствующими затратами на создание отдельных фотошаблонов и производственного цикла в целом. Это крайне недешёвое удовольствие. Также внедрение сколь-либо сложной логики в процессор может привести к ухудшению его характеристик, как, например, снижение частоты или повышение энергопотребления. Что также имеет экономические последствия.
Что получается в итоге?
Резюмируя вышесказанное, можно сказать, что реализация аппаратных закладок в процессоре, с одной стороны, имеет множество рисков и негативных последствий для разработчика, которые могут просто уничтожить любую компанию. С другой стороны, с технической точки зрения внедрение закладки непосредственно в процессор не даёт желаемого результата – сценарии использования крайне ограничены и часто легко парируются простыми организационными мерами. Намного проще и эффективнее внедрять закладки на уровне создания прошивок, системного софта или конечных продуктов (оборудования, материнских плат и т.д.). Именно поэтому на текущий момент и сложилась такая ситуация, что будучи теоретически возможными для реализации, на практике аппаратные закладки в процессорах никогда не обнаруживались.
Известные заблуждения, принятые считать «аппаратными закладками в процессорах»
Для полноты картины, хотел бы пройтись по наиболее муссируемым в сети примерами «аппаратных закладок в процессорах», которые такими при ближайшем рассмотрении, конечно же, не являются:
Иранские центрифуги.
История с выведением из строя иранского ядерного объекта имеет тривиальную причину в виде внедрения (намеренного или нет) программного вируса Stuxnet
Не вдаваясь в рассуждения о том, насколько данные технологии безопасны, можно просто констатировать, что они реализованы на базе отдельного процессора на материнской плате и не являются частью CPU.
Разоблачение от бывшего сотрудника ЦРУ/АНБ даёт большой материал для анализа методов, используемых американской разведкой для получения необходимой информации без согласия пользователей. Но аппаратных закладок в индустриальных процессорах в нём нет.
Здесь имеем подозрение на небезопасную прошивку флеш-памяти модуля BMC.
VIA God Mode
Это достаточно интересный и наиболее близкий к аппаратной закладке случай. Авторы статьи, опубликованной в 2018-ом году, даже громко назвали его «первым когда-либо обнаруженным бэкдором в x86-процессорах». Всё бы ничего, но если бы авторы внимательно читали документацию на процессоры VIA, то обнаружили, что описание данной «закладки» там присутствует аж с 2004-го года. Поэтому назвать её недокументированной точно нельзя. Да и её активация требует включения в БИОСе, что тоже не позволяет её признать скрытой аппаратной закладкой.
Ещё одним косвенным (но очень весомым) доказательством отсутствия аппаратных закладок в процессорах являются события, развернувшиеся после 24 февраля 2022 года. После начала СВО на Украине, уровень противостояния России с США и ЕС достиг критического уровня. Фактически, стороны используют практически все возможные методы нанесения ущерба, кроме прямого военного столкновения армий государств. В том числе осуществляются регулярные хакерские атаки на информационную инфраструктуру России, что приводило к обрушению некоторых государственных сервисов. Но всё это происходило только с использованием программных уязвимостей. Я думаю, ни у кого не возникает сомнения, что при наличии аппаратных закладок в процессорах Intel/AMD (на которых построена вся инфраструктура страны), они были бы использованы. Но этого мы не наблюдаем. Более того, секретом Полишинеля является тот факт, что несмотря на массу бравурных заявлений для прессы про успехи импортозамещения в критических отраслях, даже в военной технике применялось и до сих пор широко применяется иностранная компонентная база. По данному поводу Минторг США даже инициировал отдельное расследование. Британский think tank RUSI опубликовал интересный отчёт с анализом компонентной базы в обломках ракет от Искандер-М и Торнадо, а в конце привёл детальный список зарубежных изделий в захваченной на Украине станции РЭБ Борисоглебск-2. И тем не менее, каких- либо массовых проблем с выходом военной техники из строя из-за активации закладок мы также не наблюдаем.
Так зачем нам отечественные процессоры, если не для борьбы с закладками?
Проблема активного муссирования пугалок про аппаратные закладки в том, что будучи не более, чем маркетинговым инструментом в недобросовестных руках, он порождает ложные пути развития отечественной микроэлектронной индустрии. Если наша цель именно обеспечение безопасности с точки зрения аппаратных закладок, то организация сборки конечных продуктов в России на базе любых комплектующих (включая иностранные) плюс контроль над безопасностью стэка системного ПО даёт желаемый результат – аппаратных закладок в отечественных вычислительных системах и оборудовании не будет. Как это не парадоксально звучит, но для решения проблемы аппаратных закладок разработка собственных процессоров, по большому счёту, не нужна.
Так зачем тогда нам отечественные процесссоры? Как минимум, для 2-х вполне очевидных целей:
Информационная безопасность. Только не в виде избавления от мифических аппаратных закладок, а в виде физического доступа к минимально современным процессорам. Актуальность данной проблемы в нынешних условиях, я думаю, всем более чем очевидна. В деревянных счетах точно нет закладок, но вряд ли это тот результат, который мы хотели бы достичь.
Создание развитой технологической отрасли, что приводит к повышению технологического уровня страны, уровня её экономического развития, и как следствие, наличие возможности продолжать конкурировать в области разработки новых технологий.
Как мне кажется, крайне важно понимать, что именно данные цели являются основополагающими. А снижение риска наличия потенциальных аппаратных закладок – просто приятный, но в реальности достаточно эфемерный бонус.