Бэкдор — это обычно скрытый метод обхода обычной аутентификации или шифрования в компьютере, продукте, встроенном устройстве (например, домашнем маршрутизаторе ) или его варианте (например, части криптосистемы , алгоритма , набора микросхем или даже «компьютера-гомункула» — крошечный компьютер в компьютере, подобный тому, который используется в технологии Intel AMT ). [1] [2] Бэкдоры чаще всего используются для обеспечения удаленного доступа к компьютеру или получения доступа к открытому тексту в криптосистемах. Оттуда его можно использовать для получения доступа к конфиденциальной информации, такой как пароли, повреждения или удаления данных на жестких дисках или передачи информации в автосхематических сетях.
Бэкдор может принимать форму скрытой части программы, [3] отдельной программы (например, Back Orifice может подорвать систему через руткит ), кода встроенного ПО оборудования, [4] или частей операционной системы. например Windows . [5] [6] [7] Троянские кони могут использоваться для создания уязвимостей в устройстве. Троянский конь может показаться вполне законной программой, но при запуске он запускает действие, которое может установить бэкдор. [8] Хотя некоторые из них устанавливаются тайно, другие бэкдоры созданы намеренно и широко известны. Подобные бэкдоры имеют «законное» применение, например, предоставляют производителю возможность восстановить пароли пользователей.
Многие системы, хранящие информацию в облаке, не обеспечивают точных мер безопасности. Если многие системы подключены к облаку , хакеры могут получить доступ ко всем другим платформам через наиболее уязвимую систему. [9] Пароли по умолчанию (или другие учетные данные по умолчанию) могут действовать как бэкдоры, если они не изменены пользователем. Некоторые функции отладки также могут действовать как бэкдоры, если они не удалены в релизной версии. [10] В 1993 году правительство Соединенных Штатов попыталось внедрить систему шифрования , чип Clipper , с явным бэкдором для доступа правоохранительных органов и национальной безопасности. Чип оказался неудачным. [11]
Недавние предложения по противодействию бэкдорам включают создание базы данных триггеров бэкдоров и последующее использование нейронных сетей для их обнаружения. [12]
Угроза бэкдоров возникла, когда многопользовательские и сетевые операционные системы получили широкое распространение. Петерсен и Терн обсуждали компьютерную подрывную деятельность в статье, опубликованной в материалах конференции AFIPS 1967 года. [13] Они отметили класс активных атак, в которых используются «лазейки» для входа в систему для обхода средств безопасности и обеспечения прямого доступа к данным. Использование здесь слова «лазейка» явно совпадает с более поздними определениями «черного хода». Однако с появлением криптографии с открытым ключом термин « лазейка» приобрел другое значение (см. функцию «лазейка »), и, таким образом, термин «черный ход» теперь предпочтительнее, только после того, как термин «лазейка» вышел из употребления. В более общем плане такие нарушения безопасности подробно обсуждались в отчете целевой группы RAND Corporation , опубликованном при спонсорстве DARPA Дж. П. Андерсоном и DJ Эдвардсом в 1970 году. [14]
Первоначально нацеленные на область компьютерного зрения, бэкдор-атаки расширились и охватили различные другие области, включая текст, аудио, компьютерное проектирование на основе машинного обучения и классификацию беспроводных сигналов на основе машинного обучения. Кроме того, уязвимости бэкдоров были продемонстрированы в глубоких генеративных моделях , обучении с подкреплением (например, AI GO) и глубоких графовых моделях. Эти широкомасштабные потенциальные риски вызвали обеспокоенность органов национальной безопасности относительно их потенциально катастрофических последствий. [15]
Бэкдор в системе входа в систему может принимать форму жестко закодированной комбинации пользователя и пароля, которая обеспечивает доступ к системе. Пример такого рода бэкдора использовался в качестве сюжетного устройства в фильме 1983 года « Военные игры » , в котором архитектор компьютерной системы « WOPR » вставил жестко запрограммированную учетную запись без пароля, которая давала пользователю доступ к системе, а также к недокументированным файлам. части системы (в частности, режим симуляции, напоминающий видеоигру, и прямое взаимодействие с искусственным интеллектом ).
Хотя количество бэкдоров в системах, использующих проприетарное программное обеспечение (программное обеспечение, исходный код которого не является общедоступным), широко не упоминается, тем не менее, они часто обнаруживаются. Программистам даже удалось тайно установить большое количество безопасного кода в качестве пасхальных яиц в программах, хотя такие случаи могут потребовать официального разрешения, если не фактического разрешения.
При распределении ответственности в игру вступает ряд соображений, связанных с маскировкой и кинжалом .
Скрытые бэкдоры иногда маскируются под непреднамеренные дефекты (ошибки) по причинам правдоподобного отрицания . В некоторых случаях они могут начать жизнь как настоящая ошибка (непреднамеренная ошибка), которая, однажды обнаруженная, затем намеренно остается неисправленной и нераскрытой, будь то мошенническим сотрудником для личной выгоды или с осведомленностью и надзором высшего руководства.
Также возможно, что технологическая база полностью открытой корпорации может быть тайно и неотслеживаемо испорчена внешними агентами (хакерами), хотя считается, что этот уровень сложности существует в основном на уровне субъектов национального государства. Например, если фотомаска , полученная от поставщика фотомаски, на несколько элементов отличается от спецификации фотомаски, производителю чипа будет сложно обнаружить это, если в противном случае он функционально бесшумен; скрытый руткит, работающий в оборудовании для травления фотомаски, также может вызвать это несоответствие без ведома производителя фотомаски, и таким образом один бэкдор потенциально ведет к другому. [примечание 1]
В общих чертах, длинные цепочки зависимостей в современной, узкоспециализированной технологической экономике и бесчисленные человеческие точки управления процессами затрудняют окончательное определение ответственности в тот момент, когда открывается скрытый черный ход.
Даже прямое признание ответственности должно быть тщательно проверено, если признавшаяся сторона связана с другими влиятельными интересами.
Многие компьютерные черви , такие как Sobig и Mydoom , устанавливают бэкдор на пораженный компьютер (обычно это компьютер с широкополосным доступом под управлением Microsoft Windows и Microsoft Outlook ). Такие бэкдоры, судя по всему, устанавливаются для того, чтобы спамеры могли рассылать нежелательную почту с зараженных компьютеров. Другие, такие как руткит Sony/BMG , тайно размещенный на миллионах музыкальных компакт-дисков до конца 2005 года, задуманы как меры DRM — и, в данном случае, как агенты сбора данных , поскольку обе тайно установленные ими программы регулярно связываются с центральными серверами.
Сложная попытка внедрить бэкдор в ядро Linux , раскрытая в ноябре 2003 года, добавила небольшое и незаметное изменение кода, подорвав систему контроля версий . [16] В этом случае появилось двухстрочное изменение для проверки прав root-доступа вызывающего объекта к sys_wait4функции, но поскольку оно использовало присваивание =
вместо проверки на равенство ==
, оно фактически предоставляло разрешения системе. Эту разницу легко упустить из виду, и ее даже можно интерпретировать как случайную опечатку, а не как преднамеренное нападение. [17] [18]
В январе 2014 года бэкдор был обнаружен в некоторых продуктах Samsung Android , например в устройствах Galaxy. Собственные версии Android от Samsung оснащены бэкдором, который обеспечивает удаленный доступ к данным, хранящимся на устройстве. В частности, программное обеспечение Samsung Android, которое отвечает за обработку связи с модемом, используя протокол Samsung IPC, реализует класс запросов, известный как команды удаленного файлового сервера (RFS), который позволяет оператору бэкдора выполнять удаленные действия через модем. Операции ввода-вывода на жестком диске устройства или в другом хранилище. Поскольку на модеме установлено фирменное программное обеспечение Android от Samsung, вполне вероятно, что он предлагает беспроводное дистанционное управление, которое затем можно использовать для подачи команд RFS и, таким образом, для доступа к файловой системе на устройстве. [19]
Обнаружить бэкдоры сложнее, если модифицировать объектный код , а не исходный код. Объектный код гораздо труднее проверять, поскольку он предназначен для машиночитаемого, а не человекочитаемого кода. Эти бэкдоры можно вставлять либо непосредственно в объектный код на диске, либо в какой-то момент во время компиляции, компоновки сборки или загрузки — в последнем случае бэкдор никогда не появляется на диске, а только в памяти. Бэкдоры объектного кода трудно обнаружить путем проверки объектного кода, но их легко обнаружить путем простой проверки изменений (отличий), особенно в длине или контрольной сумме, а в некоторых случаях их можно обнаружить или проанализировать путем дизассемблирования объектного кода. Кроме того, бэкдоры объектного кода можно удалить (при условии, что исходный код доступен) путем простой перекомпиляции исходного кода в доверенной системе.
Таким образом, чтобы такие бэкдоры не были обнаружены, все существующие копии двоичного файла должны быть повреждены, а любые контрольные суммы проверки также должны быть скомпрометированы, а исходный код должен быть недоступен, чтобы предотвратить перекомпиляцию. Альтернативно, эти другие инструменты (проверка длины, разница, контрольная сумма, дизассемблеры) сами могут быть скомпрометированы, чтобы скрыть бэкдор, например, обнаружив, что подмененный двоичный файл проверяется контрольная сумма, и возвращая ожидаемое значение, а не фактическое значение. Чтобы скрыть эти дальнейшие подрывные действия, инструменты также должны скрывать изменения сами по себе — например, искажённая контрольная сумма должна также определять, подсчитывает ли она контрольную сумму сама (или другие подменённые инструменты), и возвращать ложные значения. Это приводит к обширным изменениям в системе и необходимости использования инструментов для сокрытия одного изменения.
Поскольку объектный код можно регенерировать путем перекомпиляции (повторной сборки, повторной компоновки) исходного исходного кода, создание постоянного бэкдора объектного кода (без изменения исходного кода) требует подрыва самого компилятора , чтобы, когда он обнаружит, что компилирует атакуемую программу, он вставляет бэкдор или, альтернативно, ассемблер, компоновщик или загрузчик. Поскольку это требует нарушения работы компилятора, это, в свою очередь, можно исправить, перекомпилировав компилятор, удалив код вставки бэкдора. Эту защиту, в свою очередь, можно обойти, поместив исходный мета-бэкдор в компилятор, чтобы, когда он обнаружит, что компилируется сам, он затем вставил этот генератор мета-бэкдора вместе с исходным генератором бэкдора для исходной атакуемой программы. После того, как это будет сделано, исходный мета-бэкдор можно удалить, а компилятор перекомпилировать из исходного кода со скомпрометированным исполняемым файлом компилятора: бэкдор будет загружен. Эта атака восходит к статье Каргера и Шелла 1974 года [20] и была популяризирована в статье Томпсона 1984 года, озаглавленной «Размышления о доверительном доверии»; [21] поэтому в просторечии она известна как атака «Доверяющее доверие». Подробности см. в разделе «бэкдоры компилятора» ниже. Аналогичные атаки могут быть нацелены на более низкие уровни системы, например операционную систему, и могут быть внедрены в процессе загрузки системы ; они также упоминаются Каргером и Шеллом в 1974 году и теперь существуют в виде вирусов загрузочного сектора . [20] [22]
Традиционный бэкдор — это симметричный бэкдор: любой, кто найдет бэкдор, может, в свою очередь, использовать его. Понятие асимметричного бэкдора было введено Адамом Янгом и Моти Юнгом в «Proceedings of Advances in Cryptology – Crypto '96» . Асимметричный бэкдор может использоваться только злоумышленником, который его устанавливает, даже если полная реализация бэкдора становится общедоступной (например, посредством публикации, обнаружения и раскрытия в результате обратного проектирования и т. д.). Кроме того, вычислительно сложно обнаружить наличие асимметричного бэкдора при запросах «черного ящика». Этот класс атак был назван клептографией ; они могут осуществляться с помощью программного обеспечения, аппаратных средств (например, смарт-карт ) или их комбинации. Теория асимметричных бэкдоров является частью более широкой области, которая сейчас называется криптовирусологией . Примечательно, что АНБ внедрило клептографический бэкдор в стандарт Dual EC DRBG . [4] [23] [24]
Существует экспериментальный асимметричный бэкдор при генерации ключей RSA. Этот бэкдор OpenSSL RSA, разработанный Янгом и Юнгом, использует витую пару эллиптических кривых и уже доступен. [25]
Сложная форма бэкдора «черного ящика» — это бэкдор компилятора , в котором компилятор не только подрывается — чтобы вставить бэкдор в какую-то другую программу, например программу входа в систему, — но и дополнительно модифицируется, чтобы обнаружить, когда он компилирует себя, а затем вставляет как код вставки бэкдора (нацеленный на другую программу), так и самокомпиляция, изменяющая код, например механизм, с помощью которого ретровирусы заражают свой хост. Это можно сделать, изменив исходный код, и получившийся скомпрометированный компилятор (объектный код) сможет скомпилировать исходный (немодифицированный) исходный код и вставить себя: эксплойт уже загружен.
Эта атака была первоначально представлена в работе Karger & Schell (1974), [примечание 2] , которая представляла собой анализ безопасности Multics ВВС США , где они описали такую атаку на компилятор PL/I и назвали ее «люком для компилятора». ". Они также упоминают вариант, где код инициализации системы модифицируется для вставки бэкдора во время загрузки , поскольку это сложно и плохо изучено, и называют его «люком инициализации»; теперь это известно как вирус загрузочного сектора . [22]
Эта атака была затем фактически реализована Кеном Томпсоном и популяризирована в его речи на вручении премии Тьюринга в 1983 году «Размышления о доверии к доверию» [21] , в которой указывается, что доверие относительно, и единственное программное обеспечение, которому можно по-настоящему доверять, - это код, в котором каждый шаг начальной загрузки был проверен. Этот механизм бэкдора основан на том факте, что люди просматривают только исходный (написанный человеком) код, а не скомпилированный машинный код ( объектный код ). Программа , называемая компилятором , используется для создания второго из первого, и компилятору обычно доверяют добросовестную работу.
В статье Томпсона [21] описывается модифицированная версия компилятора Unix C , которая помещала невидимый бэкдор в команду входа в систему Unix , когда замечала, что программа входа в систему компилируется, а также незаметно добавляла эту функцию в будущие версии компилятора после их компиляции. также. Поскольку компилятор сам по себе представлял собой скомпилированную программу, пользователи вряд ли заметят инструкции машинного кода, выполняющие эти задачи. (Из-за второй задачи исходный код компилятора будет казаться «чистым».) Что еще хуже, в доказательстве реализации концепции Томпсона ниспровергнутый компилятор также разрушил программу анализа ( дизассемблер ), так что любой, кто исследовал двоичные файлы в Обычный способ на самом деле не увидит реальный работающий код, а вместо этого увидит что-то другое.
Каргер и Шелл представили обновленный анализ оригинального эксплойта в 2002 году, а в 2009 году Уилер написал исторический обзор и обзор литературы. [примечание 3] В 2023 году Кокс опубликовал аннотированную версию исходного кода бэкдора Томпсона. [27]
Официально версия Томпсона так и не была выпущена в продажу. Однако считается, что версия была распространена на BBN и было зафиксировано как минимум одно использование бэкдора. [примечание 4] Есть разрозненные сообщения о таких бэкдорах в последующие годы.
В августе 2009 года подобную атаку обнаружила лаборатория Sophos. Вирус W32/Induc-A заразил компилятор программ Delphi — языка программирования Windows. Вирус вводил свой собственный код в компиляцию новых программ Delphi, что позволяло ему заражать и распространяться на многие системы без ведома программиста. Вирус ищет установку Delphi, модифицирует файл SysConst.pas, который является исходным кодом части стандартной библиотеки, и компилирует его. После этого каждая программа, скомпилированная с помощью этой установки Delphi, будет содержать вирус. Особенно сложно обнаружить атаку, которая распространяется путем создания собственного троянского коня . Это привело к тому, что многие поставщики программного обеспечения выпустили зараженные исполняемые файлы, даже не осознавая этого, иногда заявляя о ложных срабатываниях. В конце концов, исполняемый файл не был изменен, а компилятор. Считается, что вирус Induc-A распространялся как минимум год, прежде чем был обнаружен. [примечание 5]
В 2015 году вредоносная копия Xcode, XcodeGhost , также осуществила аналогичную атаку и заразила iOS-приложения десятка компаний-разработчиков программного обеспечения в Китае. Во всем мире было обнаружено 4000 приложений, которые были затронуты. Это не был настоящий троян Thompson, поскольку он не заражает сами инструменты разработки, но он доказал, что отравление инструментальной цепочки может нанести существенный ущерб. [30]
После того, как система была скомпрометирована с помощью бэкдора или троянского коня, такого как компилятор Trusting Trust , «законному» пользователю очень трудно восстановить контроль над системой – обычно необходимо перестроить чистую систему и передать данные (но не исполняемые файлы) закончились. Однако было предложено несколько практических недостатков в схеме Trusting Trust . Например, достаточно мотивированный пользователь может тщательно просмотреть машинный код ненадежного компилятора перед его использованием. Как упоминалось выше, существуют способы скрыть троянского коня, например, подрыв дизассемблера; но есть способы противостоять и этой защите, например, написать дизассемблер с нуля. [ нужна цитата ]
Общий метод противодействия атакам доверия называется разнообразной двойной компиляцией . Для этого метода требуется другой компилятор и исходный код тестируемого компилятора. Этот исходный код, скомпилированный с помощью обоих компиляторов, приводит к созданию двух разных компиляторов этапа 1, которые, однако, должны иметь одинаковое поведение. Таким образом, один и тот же исходный код, скомпилированный с помощью обоих компиляторов этапа 1, должен затем привести к созданию двух идентичных компиляторов этапа 2. Приводится формальное доказательство того, что последнее сравнение гарантирует соответствие предполагаемого исходного кода и исполняемого файла тестируемого компилятора при некоторых предположениях. Этот метод был применен автором для проверки того, что компилятор C пакета GCC (версия 3.0.4) не содержит трояна, используя icc (версия 11.0) в качестве другого компилятора. [26]
На практике такие проверки не выполняются конечными пользователями, за исключением чрезвычайных обстоятельств обнаружения и анализа вторжений, из-за редкости таких сложных атак и потому, что программы обычно распространяются в двоичной форме. Удаление бэкдоров (включая бэкдоры компилятора) обычно выполняется путем простой перестройки чистой системы. Однако сложные проверки представляют интерес для производителей операционных систем, чтобы гарантировать, что они не распространяют скомпрометированную систему, а также в условиях высокого уровня безопасности, где такие атаки представляют собой реальную проблему.