Обратное проектирование (также известное как обратное проектирование или обратное проектирование ) — это процесс или метод, посредством которого человек пытается понять с помощью дедуктивного рассуждения, как ранее созданное устройство, процесс, система или часть программного обеспечения выполняет задачу с очень небольшим (если вообще) пониманием того, как именно оно это делает. В зависимости от рассматриваемой системы и используемых технологий знания, полученные в ходе обратного проектирования, могут помочь в повторном использовании устаревших объектов, проведении анализа безопасности или изучении того, как что-то работает. [1] [2] [3]
Хотя процесс специфичен для объекта, на котором он выполняется, все процессы обратного проектирования состоят из трех основных шагов: извлечение информации, моделирование и обзор. Извлечение информации - это практика сбора всей соответствующей информации для выполнения операции. Моделирование - это практика объединения собранной информации в абстрактную модель, которая может использоваться в качестве руководства для проектирования нового объекта или системы. Обзор - это тестирование модели для обеспечения достоверности выбранной абстракции. [1] Обратное проектирование применимо в областях компьютерной инженерии , машиностроения , дизайна , электронной инженерии , разработки программного обеспечения , химической инженерии , [4] и системной биологии . [5]
Существует множество причин для выполнения обратного проектирования в различных областях. Обратное проектирование берет свое начало в анализе оборудования для коммерческого или военного преимущества. [6] : 13 Однако процесс обратного проектирования не всегда может быть связан с созданием копии или изменением артефакта каким-либо образом. Он может использоваться как часть анализа для выведения конструктивных особенностей из продуктов с небольшими или отсутствующими дополнительными знаниями о процедурах, задействованных в их оригинальном производстве. [6] : 15
В некоторых случаях целью процесса обратного проектирования может быть просто повторное документирование устаревших систем . [6] : 15 [7] Даже если продукт, подвергнутый обратному проектированию, принадлежит конкуренту, целью может быть не его копирование, а проведение анализа конкурентов . [8] Обратное проектирование также может использоваться для создания совместимых продуктов , и, несмотря на некоторые узкоспециализированные законы США и Европейского союза, законность использования определенных методов обратного проектирования для этой цели горячо оспаривается в судах по всему миру на протяжении более двух десятилетий. [9]
Обратный инжиниринг программного обеспечения может помочь улучшить понимание базового исходного кода для обслуживания и улучшения программного обеспечения, может быть извлечена соответствующая информация для принятия решения о разработке программного обеспечения, а графические представления кода могут предоставить альтернативные представления относительно исходного кода, которые могут помочь обнаружить и исправить ошибку или уязвимость программного обеспечения . Часто, по мере разработки некоторого программного обеспечения, его проектная информация и улучшения часто теряются с течением времени, но эту потерянную информацию обычно можно восстановить с помощью обратного инжиниринга. Процесс также может помочь сократить время, необходимое для понимания исходного кода, тем самым снижая общую стоимость разработки программного обеспечения. [10] Обратный инжиниринг также может помочь обнаружить и устранить вредоносный код, написанный в программном обеспечении, с помощью лучших детекторов кода. Обратный инжиниринг исходного кода может использоваться для поиска альтернативных вариантов использования исходного кода, таких как обнаружение несанкционированного копирования исходного кода там, где он не предназначался для использования, или раскрытие того, как был построен продукт конкурента. [11] Этот процесс обычно используется для «взлома» программного обеспечения и носителей с целью снятия защиты от копирования , [11] : 7 или для создания возможно улучшенной копии или даже подделки , что обычно является целью конкурента или хакера. [11] : 8
Разработчики вредоносных программ часто используют методы обратного проектирования для поиска уязвимостей в операционной системе с целью создания компьютерного вируса , который может использовать уязвимости системы. [11] : 5 Обратное проектирование также используется в криптоанализе для поиска уязвимостей в шифре подстановки , алгоритме симметричного ключа или криптографии с открытым ключом . [11] : 6
Существуют и другие применения обратного инжиниринга:
Поскольку автоматизированное проектирование (САПР) становится все более популярным, обратное проектирование стало жизнеспособным методом создания 3D-виртуальной модели существующей физической детали для использования в 3D САПР , CAM , CAE или другом программном обеспечении . [14] Процесс обратного проектирования включает измерение объекта и последующую его реконструкцию в виде 3D-модели. Физический объект можно измерить с помощью технологий 3D-сканирования, таких как КИМ , лазерные сканеры , структурированные световые дигитайзеры или промышленная КТ-сканирование (компьютерная томография). Измеренные данные сами по себе, обычно представленные в виде облака точек , не содержат топологической информации и замысла проекта. Первое можно восстановить, преобразовав облако точек в сетку с треугольной гранью . Обратное проектирование направлено на то, чтобы выйти за рамки создания такой сетки и восстановить замысел проекта в терминах простых аналитических поверхностей, где это уместно ( плоскости , цилиндры и т. д.), а также, возможно, поверхностей NURBS для создания модели САПР с граничным представлением . Восстановление такой модели позволяет модифицировать конструкцию в соответствии с новыми требованиями, сформировать производственный план и т. д.
Гибридное моделирование — это широко используемый термин, когда NURBS и параметрическое моделирование реализуются вместе. Использование комбинации геометрических и свободных поверхностей может обеспечить мощный метод 3D-моделирования . Области данных свободной формы могут быть объединены с точными геометрическими поверхностями для создания гибридной модели. Типичным примером этого может быть обратное проектирование головки блока цилиндров, которая включает литые элементы свободной формы, такие как водяные рубашки и обработанные области с высоким допуском. [15]
Обратное проектирование также используется предприятиями для переноса существующей физической геометрии в цифровые среды разработки продуктов, для создания цифровой 3D-записи собственных продуктов или для оценки продуктов конкурентов. Оно используется для анализа того, как работает продукт, что он делает, какие у него есть компоненты; оценки затрат; выявления потенциального нарушения патентных прав и т. д.
Ценностная инженерия , родственная деятельность, которая также используется предприятиями, включает в себя деконструкцию и анализ продуктов. Однако цель состоит в том, чтобы найти возможности для сокращения расходов.
Обратное проектирование печатных плат подразумевает воссоздание данных по изготовлению конкретной печатной платы. Это делается в первую очередь для идентификации конструкции и изучения функциональных и структурных характеристик конструкции. Это также позволяет обнаружить принципы проектирования, лежащие в основе продукта, особенно если эта информация о конструкции нелегкодоступна.
Устаревшие печатные платы часто подвергаются обратному проектированию, особенно когда они выполняют критически важные функции, такие как питание машин или других электронных компонентов. Обратное проектирование этих старых деталей может позволить реконструировать печатную плату, если она выполняет какую-то важную задачу, а также найти альтернативы, которые обеспечивают ту же функцию, или модернизировать старую печатную плату. [16]
Обратное проектирование печатных плат в основном следует той же серии шагов. Сначала создаются изображения путем рисования, сканирования или фотографирования печатной платы. Затем эти изображения переносятся в подходящее программное обеспечение для обратного проектирования, чтобы создать элементарный дизайн для новой печатной платы. Качество этих изображений, необходимое для подходящего обратного проектирования, пропорционально сложности самой печатной платы. Более сложные печатные платы требуют хорошо освещенных фотографий на темном фоне, в то время как довольно простые печатные платы можно воссоздать просто с помощью базовых размеров. Каждый слой печатной платы тщательно воссоздается в программном обеспечении с целью создания окончательного дизайна, максимально приближенного к исходному. Затем, наконец, генерируются схемы для цепи с использованием соответствующего инструмента. [17]
В 1990 году Институт инженеров по электротехнике и электронике (IEEE) определил (программное) обратное проектирование (SRE) как «процесс анализа предметной системы для идентификации компонентов системы и их взаимосвязей и создания представлений системы в другой форме или на более высоком уровне абстракции», в котором «предметная система» является конечным продуктом разработки программного обеспечения. Обратное проектирование — это только процесс исследования, и рассматриваемая программная система не модифицируется, что в противном случае было бы реинжинирингом или реструктуризацией. Обратное проектирование может быть выполнено с любой стадии цикла продукта, не обязательно с функционального конечного продукта. [10]
В обратном проектировании есть два компонента: передокументирование и восстановление проекта. Передокументирование — это создание нового представления компьютерного кода, чтобы его было легче понять. Между тем, восстановление проекта — это использование вывода или рассуждения из общих знаний или личного опыта продукта для полного понимания функциональности продукта. [10] Его также можно рассматривать как «движение назад по циклу разработки». [18] В этой модели выходной результат фазы внедрения (в форме исходного кода) подвергается обратному проектированию обратно в фазу анализа, в инверсии традиционной каскадной модели . Другой термин для этого метода — понимание программы . [7] Рабочая конференция по обратному проектированию (WCRE) проводится ежегодно для изучения и расширения методов обратного проектирования. [11] [19] Компьютерная инженерия программного обеспечения (CASE) и автоматизированная генерация кода внесли большой вклад в область обратного проектирования. [11]
Технология защиты от несанкционированного доступа к программному обеспечению, такая как обфускация, используется для предотвращения как обратного проектирования, так и реинжиниринга фирменного программного обеспечения и систем на основе программного обеспечения. На практике возникают два основных типа обратного проектирования. В первом случае исходный код программного обеспечения уже доступен, но обнаруживаются более высокоуровневые аспекты программы, которые, возможно, плохо документированы или документированы, но больше недействительны. Во втором случае исходный код программного обеспечения отсутствует, и любые попытки обнаружить один возможный исходный код программного обеспечения рассматриваются как обратное проектирование. Второе использование термина более знакомо большинству людей. Обратное проектирование программного обеспечения может использовать технику проектирования чистой комнаты , чтобы избежать нарушения авторских прав.
В связи с этим, тестирование черного ящика в программной инженерии имеет много общего с обратной инженерией. Тестировщик обычно имеет API , но его цели заключаются в поиске ошибок и недокументированных функций путем критики продукта извне. [20]
Другие цели обратного проектирования включают аудит безопасности, снятие защиты от копирования (« взлом »), обход ограничений доступа, часто присутствующих в бытовой электронике , настройку встроенных систем (например, систем управления двигателем), внутренний ремонт или модернизацию, включение дополнительных функций на недорогом «урезанном» оборудовании (например, некоторых чипсетах видеокарт) или даже простое удовлетворение любопытства.
Двоичный обратный инжиниринг выполняется, если исходный код программного обеспечения недоступен. [11] Этот процесс иногда называют обратным проектированием кода , или RCE. [21] Например, декомпиляция двоичных файлов для платформы Java может быть выполнена с помощью Jad. Одним из известных случаев обратного проектирования была первая не- IBM реализация BIOS ПК , которая запустила историческую отрасль , совместимую с IBM PC , которая была подавляюще доминирующей компьютерной аппаратной платформой в течение многих лет. Обратный инжиниринг программного обеспечения защищен в США исключением о добросовестном использовании в законе об авторском праве . [22] Программное обеспечение Samba , которое позволяет системам, не работающим под управлением систем Microsoft Windows , обмениваться файлами с системами, которые его запускают, является классическим примером обратного проектирования программного обеспечения [23], поскольку проект Samba должен был выполнить обратное проектирование неопубликованной информации о том, как работает общий доступ к файлам Windows, чтобы компьютеры, не работающие под управлением Windows, могли его эмулировать. Проект Wine делает то же самое для API Windows , и OpenOffice.org является одной из сторон, делающей это для форматов файлов Microsoft Office . Проект ReactOS еще более амбициозен в своих целях, стремясь обеспечить двоичную (ABI и API) совместимость с текущими операционными системами Windows ветви NT, что позволяет программному обеспечению и драйверам, написанным для Windows, работать на чистом аналоге обратного проектирования свободного программного обеспечения ( GPL ). WindowsSCOPE позволяет выполнять обратную разработку всего содержимого оперативной памяти системы Windows, включая двоичный уровень, графический обратный инжиниринг всех запущенных процессов.
Другим классическим, хотя и не очень известным, примером является то, что в 1987 году Bell Laboratories провела обратную разработку Mac OS System 4.1, изначально работавшей на Apple Macintosh SE , чтобы ее можно было запускать на собственных RISC-машинах . [24]
Обратный инжиниринг программного обеспечения может быть выполнен различными методами. Три основные группы обратного инжиниринга программного обеспечения:
Классификация программного обеспечения — это процесс выявления сходств между различными двоичными файлами программного обеспечения (например, двумя разными версиями одного и того же двоичного файла), используемый для обнаружения связей кода между образцами программного обеспечения. Традиционно эта задача выполнялась вручную по нескольким причинам (например, анализ исправлений для обнаружения уязвимостей и нарушения авторских прав ), но теперь ее можно выполнять в некоторой степени автоматически для большого количества образцов.
Этот метод в основном используется для длительных и тщательных задач обратного инжиниринга (полный анализ сложного алгоритма или большого фрагмента программного обеспечения). В целом статистическая классификация считается сложной задачей, что также верно для классификации программного обеспечения, и поэтому существует мало решений/инструментов, которые хорошо справляются с этой задачей.
Ряд инструментов UML называют процесс импорта и анализа исходного кода для создания диаграмм UML «обратным проектированием». См. Список инструментов UML .
Хотя UML является одним из подходов к обеспечению «обратного проектирования», более поздние достижения в области международных стандартов привели к разработке метамодели обнаружения знаний (KDM). Стандарт предоставляет онтологию для промежуточного (или абстрактного) представления конструкций языка программирования и их взаимосвязей. Стандарт Object Management Group (на пути к тому, чтобы стать также стандартом ISO), [ требуется ссылка ] KDM начал закрепляться в отрасли с разработкой инструментов и сред анализа, которые могут обеспечить извлечение и анализ исходного, двоичного и байтового кода. Для анализа исходного кода архитектура гранулярных стандартов KDM позволяет извлекать потоки программной системы (данные, управление и карты вызовов), архитектуры и знания бизнес-уровня (правила, термины и процесс). Стандарт позволяет использовать общий формат данных (XMI), позволяющий сопоставлять различные слои знаний системы для детального анализа (например, первопричины, воздействия) или производного анализа (например, извлечения бизнес-процесса). Хотя попытки представить языковые конструкции могут быть бесконечными из-за количества языков, непрерывной эволюции языков программного обеспечения и разработки новых языков, стандарт позволяет использовать расширения для поддержки широкого набора языков, а также эволюции. KDM совместим с UML, BPMN, RDF и другими стандартами, что позволяет осуществлять миграцию в другие среды и, таким образом, использовать системные знания для таких усилий, как трансформация программной системы и анализ уровня бизнеса предприятия.
Протоколы — это наборы правил, описывающие форматы сообщений и то, как происходит обмен сообщениями: машина состояний протокола . Соответственно, проблема обратного проектирования протокола может быть разделена на две подзадачи: формат сообщения и обратный проектирование машины состояний.
Традиционно форматы сообщений подвергались обратному проектированию с помощью утомительного ручного процесса, включавшего анализ того, как реализации протоколов обрабатывают сообщения, но недавние исследования предложили ряд автоматических решений. [25] [26] [27] Обычно автоматические подходы группируют наблюдаемые сообщения в кластеры, используя различные анализы кластеризации , или они эмулируют реализацию протокола, отслеживая обработку сообщений.
Было меньше работ по обратному проектированию конечных автоматов протоколов. В общем, конечные автоматы протоколов могут быть изучены либо через процесс офлайн-обучения , который пассивно наблюдает за коммуникацией и пытается построить наиболее общий конечный автомат, принимающий все наблюдаемые последовательности сообщений, и онлайн-обучения , которое позволяет интерактивно генерировать зондирующие последовательности сообщений и слушать ответы на эти зондирующие последовательности. В общем, офлайн-обучение небольших конечных автоматов известно как NP-полное , [28] но онлайн-обучение может быть выполнено за полиномиальное время. [29] Автоматический офлайн-подход был продемонстрирован Компарретти и др. [27] , а онлайн-подход — Чо и др. [30]
Другие компоненты типичных протоколов, такие как шифрование и хэш-функции, также могут быть автоматически реверсированы. Обычно автоматические подходы отслеживают выполнение реализаций протоколов и пытаются обнаружить буферы в памяти, содержащие незашифрованные пакеты. [31]
Обратное проектирование — это инвазивная и разрушительная форма анализа смарт-карты . Злоумышленник использует химикаты для травления слоя за слоем смарт-карты и делает снимки с помощью сканирующего электронного микроскопа (СЭМ). Этот метод может раскрыть полную аппаратную и программную часть смарт-карты. Основная проблема для злоумышленника — привести все в правильный порядок, чтобы выяснить, как все работает. Создатели карты пытаются скрыть ключи и операции, смешивая позиции памяти, например, с помощью скремблирования шины. [32] [33]
В некоторых случаях можно даже прикрепить зонд для измерения напряжения, пока смарт-карта все еще работает. Производители карт используют датчики для обнаружения и предотвращения этой атаки. [34] Эта атака не очень распространена, поскольку она требует как больших вложений в усилия, так и специального оборудования, которое обычно доступно только крупным производителям микросхем. Кроме того, отдача от этой атаки низкая, поскольку часто используются другие методы безопасности, такие как теневые счета. Пока еще неясно, обеспечат ли атаки на карты с чипом и ПИН-кодом для копирования данных шифрования и последующего взлома ПИН-кодов экономически эффективную атаку на многофакторную аутентификацию.
Полный обратный инжиниринг выполняется в несколько основных этапов.
Первый шаг после того, как изображения были сделаны с помощью SEM, — это сшивание изображений, что необходимо, поскольку каждый слой не может быть захвачен одним снимком. SEM должен пройти по всей области схемы и сделать несколько сотен изображений, чтобы покрыть весь слой. Сшивание изображений принимает в качестве входных данных несколько сотен изображений и выводит одно правильно перекрывающееся изображение всего слоя.
Далее, сшитые слои необходимо выровнять, поскольку образец после травления не может быть каждый раз помещен в одно и то же положение относительно СЭМ. Поэтому сшитые версии не будут перекрываться правильным образом, как на реальной схеме. Обычно выбираются три соответствующие точки, и на их основе применяется преобразование.
Чтобы извлечь структуру схемы, выровненные, сшитые изображения необходимо сегментировать, что позволит выделить важную схему и отделить ее от неинтересного фона и изолирующих материалов.
Наконец, можно проследить провода от одного слоя к другому и восстановить список соединений схемы, содержащий всю информацию о схеме.
Обратное проектирование часто используется людьми для копирования технологий, устройств или информации других стран, которые были получены регулярными войсками в полевых условиях или в ходе разведывательных операций. Оно часто использовалось во время Второй мировой войны и Холодной войны . Вот известные примеры из Второй мировой войны и более поздних времен:
Концепции обратного проектирования были применены и в биологии , в частности, к задаче понимания структуры и функции сетей регуляции генов . Они регулируют почти каждый аспект биологического поведения и позволяют клеткам осуществлять физиологические процессы и реагировать на возмущения. Поэтому понимание структуры и динамического поведения сетей генов является одной из важнейших задач системной биологии, с немедленными практическими последствиями в нескольких приложениях, которые выходят за рамки фундаментальных исследований. [42] Существует несколько методов обратного проектирования сетей регуляции генов с использованием методов молекулярной биологии и науки о данных. Они, как правило, делятся на шесть классов: [43]
Часто надежность генной сети проверяется с помощью экспериментов по генетическому возмущению, за которыми следует динамическое моделирование, основанное на принципе, что удаление одного узла сети имеет предсказуемые эффекты на функционирование оставшихся узлов сети. [44] Приложения обратного проектирования генных сетей варьируются от понимания механизмов физиологии растений [45] до выявления новых целей для противораковой терапии. [46]
Обратное проектирование применяется в первую очередь для понимания процесса или артефакта, способ его создания, использования или внутренних процессов которого не был ясен его создателем.
Запатентованные элементы сами по себе не должны подвергаться обратному проектированию для изучения, поскольку суть патента заключается в том, что изобретатели сами предоставляют подробное публичное раскрытие информации и взамен получают правовую защиту изобретения, которое в нем участвует. Однако элемент, произведенный по одному или нескольким патентам, может также включать другую технологию, которая не запатентована и не раскрыта. Действительно, одной из распространенных мотиваций обратного проектирования является определение того, содержит ли продукт конкурента нарушение патента или нарушение авторских прав .
В Соединенных Штатах, даже если артефакт или процесс защищен коммерческой тайной , обратная разработка артефакта или процесса часто является законной, если он был получен законным путем. [47]
Обратное проектирование компьютерного программного обеспечения часто подпадает как под договорное право как нарушение договора , так и под любые другие соответствующие законы. Это связано с тем, что большинство лицензионных соглашений с конечным пользователем прямо запрещают это, и суды США постановили, что если такие условия присутствуют, они отменяют закон об авторском праве, который прямо разрешает это (см . Bowers против Baystate Technologies [48] [49] ). Согласно разделу 103(f) Закона об авторском праве в цифровую эпоху (17 USC § 1201 (f)), лицо, законно владеющее программой, может осуществить обратное проектирование и обойти ее защиту, если это необходимо для достижения «взаимодействия», термина, который в целом охватывает другие устройства и программы, которые могут взаимодействовать с ней, использовать ее, а также использовать и передавать данные в нее и из нее полезными способами. Существует ограниченное исключение, которое позволяет обмениваться полученными таким образом знаниями и использовать их для целей обеспечения взаимодействия. [a]
Директива ЕС 2009/24 о правовой защите компьютерных программ, которая заменила более раннюю (1991 г.) директиву, [50] регулирует обратную разработку в Европейском Союзе . [51] [b]
Несанкционированное воспроизведение, перевод, адаптация или преобразование формы кода, в которой была предоставлена копия компьютерной программы, является нарушением исключительных прав автора. Тем не менее, могут существовать обстоятельства, когда такое воспроизведение кода и перевод его формы являются необходимыми для получения необходимой информации для достижения взаимодействия независимо созданной программы с другими программами. Поэтому следует учитывать, что только в этих ограниченных обстоятельствах выполнение действий по воспроизведению и переводу лицом или от имени лица, имеющего право использовать копию программы, является законным и совместимым с добросовестной практикой и, следовательно, должно считаться не требующим разрешения правообладателя. Целью этого исключения является обеспечение возможности соединения всех компонентов компьютерной системы, включая компоненты разных производителей, таким образом, чтобы они могли работать вместе. Такое исключение из исключительных прав автора не может использоваться способом, который наносит ущерб законным интересам правообладателя или который противоречит нормальному использованию программы.