SOT

Security Orchestration Tools

Напишите нам на sales@securityvision.ru или закажите демонстрацию

Реверс-инжиниринг и безопасность приложений

Реверс-инжиниринг и безопасность приложений

Руслан Рахметов, Security Vision


Рассказав в двух предыдущих публикациях об обфускации различных объектов, мы затронули тему реверс-инжиниринга – исследования и анализа различных изделий и программ. В настоящей статье подробнее расскажем об аппаратном и программном реверс-инжиниринге, его целях и этапах, о декомпиляторах дизассемблерах и дебаггерах, а также о том, как реверс-инжиниринг используется в кибербезопасности.

 

Реверс-инжиниринг (англ. reverse engineering) называется также обратным проектированием или обратной разработкой и означает вскрытие и анализ определенного объекта для того, чтобы понять, как он устроен и как работает. В публикации «Reverse Engineering and Design Recovery: A Taxonomy» («Реверс-инжиниринг и восстановление дизайна: Таксономия») приводится следующее определение: реверс-инжиниринг – это процесс последовательного изучения образцов системы для обнаружения компонентов системы и их взаимосвязей, описания системы на определенных уровнях абстракции, разработки набора спецификаций. В общем случае, у реверс-инженеров нет доступа к детальной информации об исследуемом объекте – конструкторской документации, принципиальных электрических схем, исходному коду программ. Реверс-инжиниринг, как и обфускация, применяем к программному и аппаратному обеспечению – в случае с аппаратным обеспечением принципы обратной разработки можно спроецировать на промышленность, машиностроение, автомобилестроение, аэрокосмическую и судостроительную отрасли и иные сферы производства конструктивно сложных физических объектов.

 

I. Объектами аппаратного реверс-инжиниринга (англ. hardware reverse engineering) можно назвать различные сложные устройства (двигатели, турбины, компрессоры, приборы, автомобили, самолеты), микроэлектронные устройства (микросхемы, микроконтроллеры, процессоры), электроника и бытовая техника. Целями аппаратного реверс-инжиниринга могут быть:


  • Воссоздание копии исследуемого объекта: разработка нового сложного продукта – ресурсоёмкая задача, поэтому решать её «с нуля» зачастую бывает нерационально и экономически неэффективно. Для создания копии изделия в отсутствие документации и схем требуется изучить работу оригинального устройства: разобрать его, понять структуру и принцип функционирования, изучить взаимосвязи компонентов и используемые материалы, создать модель устройства и документацию, а при необходимости воссоздания множества копий в промышленном масштабе дополнительно потребуется обеспечить запуск производственной линии.


  • Улучшение характеристик изученного изделия: детально изучив работу и внутренности устройства, а также результаты его работы в реальных условиях эксплуатации, инженеры могут предложить способы улучшения изделия. Например, заменить материал наиболее нагруженных компонентов на более износостойкий, перераспределить собственный вес устройства, повысить быстродействие или расширить диапазоны рабочих температур устройства.


  • Воссоздание документации, принципиальных электрических схем, функциональных и структурных схем, создание 3D-модели устройства: для обеспечения производства аналогичного или улучшенного изделия, компонентов и запасных деталей для изделия потребуется полный комплект документации, чертежи и модели, химические формулы материалов, описание условий производственного процесса.


  • Обеспечение функциональной совместимости различных изделий, которые либо уже не поддерживаются производителем, либо изначально не предусматривали взаимодействия со сторонними системами: некоторые производители не встраивают интерфейсы или функциональные элементы для обеспечения интеграции изделия с другими устройствами, поэтому реверс-инжиниринг может использоваться для модификации исходной системы таким образом, чтобы обеспечить такие возможности.


  • Обеспечение функционирования устаревшего изделия, поддержка которого прекращена производителем, в том числе из-за перехода на производство других моделей, по причине банкротства производителя или приобретения его другим вендором: потребители могут столкнуться с ситуацией, когда добросовестно приобретенное устройство больше не поддерживается разработчиком, к нему становится невозможно достать оригинальные запасные части и произвести ремонт в авторизованном центре. В таком случае обратная разработка поможет воспроизвести производственный процесс изготовителя и создать необходимые детали и компоненты изделия хотя бы кустарным образом.


  • Конкурентный анализ: детальное изучение работы систем и технологий конкурентов в целях понимания реальных возможностей конкурирующего продукта, поиска его слабых мест и путей для усовершенствования собственных решений.


  • Промышленный шпионаж: при отсутствии возможности легального получения информации об изделии (невозможность приобрести или арендовать) некоторыми акторами могут использоваться методы промышленного шпионажа, нарушающие определенные положения законодательства (например, нормы о защите коммерческой тайны и интеллектуальной собственности, в ряде случаев – требования о защите государственной и служебной тайны). Кроме конкурентов и частных компаний, определенными разработками могут интересоваться и спецслужбы зарубежных стран. В промышленном шпионаже могут применяться такие методы, как хищение интересующего изделия и/или документации и чертежей, захват трофейного изделия на поле боя, перехват прототипа или его компонентов в рамках цепочки поставок, целенаправленное внедрение инсайдера или вербовка нелояльных сотрудников компании-производителя интересующего изделия, изучение производственных объектов и цифрового следа компании-разработчика, кибератаки с использованием вирусов-шпионов, троянов удаленного доступа, несанкционированных удаленных подключений с использованием украденных учетных записей.


  • Проверка соответствия характеристик реального образца изделия проектным расчетам: получив готовый образец или выборку изделий с уже налаженного производства, изготовитель или заказчик с помощью реверс-инжиниринга может проверить соответствие свойств реального объекта тому, что было запланировано и профинансировано.


  • Проведение функционально-стоимостного анализа: для снижения себестоимости продукции производитель выполняет обратную разработку бывшего в употреблении изделия с целью поиска возможностей для снижения излишних затрат на производство при сохранении потребительских свойств – например, рациональной может стать замена одного типа материала на другой и повышение прочности отдельных узлов и элементов изделия.


  • Улучшение свойств изделия: производитель может выполнить аппаратный реверс-инжиниринг бывшего в употреблении изделия для того, чтобы улучшить его характеристики – например, анализ сломавшегося раньше положенного срока устройства может повлечь усиление конструкции и изменения в составе используемых материалов.


  • Эффективное использование всего доступного функционала: некоторые производители в целях продуктового позиционирования или увеличения продаж в определенном сегменте искусственно ограничивают функционал своих изделий – например, разница в двух устройствах, отличающихся по цене, может заключаться лишь в разных прошивках или в искусственно отключенном функционале в более дешевом изделии. Энтузиасты, желающие извлечь максимум функционала из правомерно приобретенного устройства, начинают изучать его состав и прошивку – зачастую, попутно устраняя видимые огрехи или нарочно допущенные изготовителем недочеты (эффект «запланированного устаревания» или «программируемого старения» изделий, англ. planned obsolescence). Первые энтузиасты-хакеры были в первую очередь исследователями и аналитиками, а уже потом – взломщиками, поэтому стремились детально разобраться с используемыми технологиями и устройствами, осуществляя их реверс-инжиниринг.


  • Обеспечение безопасности: реверс-инжиниринг позволяет не только понять принцип работы изделия, но и защитить его от негативного воздействия внешних факторов – например, закрепить слабые узлы и детали, добавить дополнительную защиту чувствительных частей корпуса, модифицировать материал для повышения его ударопрочности. Кроме того, осуществив контролируемую попытку взлома или повреждения, можно понять, следует ли пользоваться устройством в боевых условиях для защиты значимых активов – например, учебная попытка самостоятельно взломать замок может показать, следует ли ставить его на входную дверь.

 

Этапы аппаратной обратной разработки включают в себя:


1. Получение объекта: методы могут быть как вполне правомерными (добросовестное приобретение, аренда, безвозмездное получение в академических целях), так и нелегальными (кража, перехват, получение под надуманным предлогом с участием фиктивных лиц и т.д.).


2. Разборка объекта на составные элементы: снятие корпуса, защитных элементов, навесного оборудования и т.д., очистка компонентов.


3. Анализ: получение информации о линейных размерах объекта (снятие геометрии) с помощью измерительных приборов и координатно-измерительных машин, определение состава материала с помощью методов элементного анализа (спектроскопии, спектрометрии, хроматографии), изучение изделия с помощью электронных микроскопов и промышленных компьютерных томографов (для анализа внутренней структуры изделия без его разрушения/декорпусирования), анализ принципов и особенностей работы устройства.


4. Документирование: фиксация полученных на предыдущем этапе результатов анализа, составление CAD/3D-модели с помощью 3D-сканеров, формирование схем и чертежей изделия, создание спецификации и описания работы устройства.


5. Создание прототипа (образца) реплицированного изделия, сравнение его характеристик со свойствами оригинала, доработка моделей и документации при необходимости.

 

II. Объектами программного реверс-инжиниринга (англ. software reverse engineering) могут быть отдельные файлы (произвольных форматов), программное обеспечение, драйверы, протоколы взаимодействия, операционные системы, прошивки (микропрограммы) устройств. К целям программного реверс-инжиниринга можно отнести:


  • Обеспечение функционирования: если объект (программа, ОС) больше не поддерживается производителем (истек срок поддержки, вендор ушел с рынка), то едва ли не единственным способом продолжения эффективного использования становится реверс-инжиниринг, который позволяет исправить возникающие ошибки, обеспечить совместимость с более новым окружением (программным, аппаратным обеспечением).


  • Обеспечение взаимодействия со сторонними объектами: зачастую разработчики не обеспечивают или не поддерживают функциональную совместимость своих решений с другими системами – это могут быть как программное окружение (ПО и бизнес-системы), так и различные защитные решения. Для того, чтобы эффективно использовать программный продукт, пользователям приходится прибегать к методам обратной разработки, что позволяет обнаружить скрытые API-эндпоинты и методы, разобраться со структурой сохраняемых программой файлов, обнаружить возможности экспорта данных, изучить работу протоколов сетевого взаимодействия программы – и далее реализовать интеграцию с целевой системой.


  • Конкурентный анализ: легальным образом получив программный объект, исследователи могут изучить работу конкурирующего решения – при этом актуальными становятся правовые вопросы, которые мы обсудим далее.


  • Промышленный шпионаж: изучение программного объекта может производится после несанкционированного получения продукта и в нарушение требований законодательства. Подобным образом действуют в том числе нечистые на руку конкуренты, спецслужбы и различные APT-группы и кибершпионы, которые различными путями получают доступ к образцам программ (например, в результате кибератак, атак на цепочку поставок, подкупа или шантажа сотрудников, внедрения инсайдеров) и далее изучают их либо для копирования в нарушение лицензии, либо для взлома или удаленного управления ими.


  • Разработка вредоносного ПО: крупные киберпреступные кластеры и APT-группировки инвестируют значительные ресурсы в реверс-инжиниринг ПО в целях обнаружения уязвимостей и разработки эксплойтов. Цена эксплойтов для популярного ВПО может достигать десятков и сотен тысяч долларов, а обнаружение уязвимости (или цепочки уязвимостей) и разработка эксплойта для проприетарного специфического ПО (например, для АСУТП или киберфизической системы) настолько трудозатратны, что могут выполняться только спецслужбами и проправительственными группами хакеров. При этом некоторые ИБ-вендоры работают и в подобной «серой зоне», на профессиональном уровне занимаясь реверс-инжинирингом для обнаружения уязвимостей и разработки эксплойтов для них с последующей продажей в виде программного комплекса – например, Pegasus от NSO Group, Hermit от RCS Lab, Predator от Cytrox, Graphite от Paragon Solutions, продукты компании Memento Labs (ранее Hacking Team) и некоторые другие.


  • Взлом программ: исторически компании-разработчики ПО полагались не только на технические меры защиты своих продуктов от несанкционированного копирования или использования в нарушение лицензионных ограничений, но и на организационные меры, включая различные законодательные нормы о защите интеллектуальной собственности и авторских прав. Западные игроки, приходя на новые рынки, не всегда могли защищать свои интересы в правовом поле, поскольку в 1990-х и начале 2000-х годов законодательство многих стран не было готово к работе с нарушениями копирайтов и условий лицензий на программные продукты, в том числе в силу низкого уровня цифровизации экономики. В силу этой правовой неопределенности и невысоких финансовых возможностей пользователей развивающихся стран возник спрос на обход лицензионных ограничений путем взлома защитного функционала программ с помощью различных «кряков», «кейгенов», «серийников» и «эмуляторов». Для обхода ограничений ПО энтузиасты-исследователи («crackers», от англ. crack – раскалывать) применяли методы реверс-инжиниринга полученных образцов программ и компьютерных игр, что в простейшем случае позволяло найти в исполняемом файле алгоритм проверки вводимого пользователем серийного номера легально купленного экземпляра программы и либо изменить исполняемый файл программы на «пропатченный» (в котором проверка не производится), либо создать генератор ключей (которые проходили проверку подлинности). В дальнейшем производители ПО совершенствовали методы защиты – добавляли привязку к оригинальному CD-диску, поставляли лицензии на USB-токенах, включали онлайн-проверку лицензии и привязку активации ключа к аппаратному обеспечению и т.д., а взломщики ПО объединялись в warez-группы и занимались обходом лицензионных ограничений уже не для пользовательского софта и игр, а для дорогих бизнес-систем. В настоящее время подобное компьютерное пиратство практически исчезло, но реверс-инжиниринг в среде пользовательского ПО продолжает применяться – например, для получения root-прав на последних моделях смартфонов и для обхода античит-ограничений компьютерных игр.


  • Выявление и устранение уязвимостей: исследователи ИБ (баг-хантеры) изучают работу ПО в целях нахождения различных уязвимостей с последующим информированием вендоров об обнаружениях. Однако, не все вендоры оперативно выпускают обновления, а пользователи неподдерживаемых и устаревших продуктов или программ от ушедших с рынка игроков рискуют вообще не дождаться выхода патча – в подобных случаях энтузиасты и некоторые вендоры выпускают патчи для уязвимого ПО, предварительно проведя его реверс-инжиниринг.


  • Аудит кибербезопасности и обеспечение совместимости с защитными решениями: для того, чтобы эффективно защитить программный продукт, необходимо понимать, как он работает. Как правило, создатели программ взаимодействуют с компаниями из сферы кибербезопасности в целях проведения аудита ИБ, для обеспечения совместимости и корректной работы СЗИ с защищаемыми продуктами, но в случае отсутствия конструктивного диалога ИБ-компании применяют методы реверс-инжиниринга для понимания работы ПО, проверки безопасности его работы и выявления слабых мест, разработки защитного функционала.


  • Разработка защитных мер и решений: реверс-инжиниринг используется в кибербезопасности для анализа вредоносного ПО, эксплойтов, хакерского инструментария, что позволяет понять, как они работают, а затем создать сигнатуры, поведенческие признаки, индикаторы компрометации и индикаторы атаки для успешного обнаружения ВПО защитными решениями. Реверс-инжиниринг позволяет «заглянуть» внутрь вредоноса и понять, что он делает, какие уязвимости эксплуатирует, с какими внешними ресурсами взаимодействует, какие дополнительные модули подгружает, на какие задачи ориентирован (кража данных, шифрование, шпионаж, скрытый удаленный доступ и т.д.), а в некоторых случаях ИБ-аналитик сможет понять, какая кибергруппа стоит за созданием того или иного образца ВПО, и использовать полученные сведения для аналитики киберугроз с помощью решения TIP.

 

Этапы программной обратной разработки включают в себя:


1. Получение объекта: в случае с вредоносным ПО аналитики получают сэмпл (образец) малвари из «песочниц», из решений honeypot/honeynet и систем класса TDP/DDP (Threat Deception Platform/Distributed Deception Platform), из дампа сетевого трафика, из «карантина» сетевых и хостовых СЗИ, либо же из памяти или диска атакованного устройства с использованием инструментов форензики. Если же требуется реверс-инжиниринг недоступного широкой публике ПО, то применяются инструменты конкурентного анализа и промышленного шпионажа.


2. Неинвазивный анализ: изучить работу программы можно по косвенным признакам – за счет наблюдения за сетевым и программным окружением (системные вызовы ОС, запускаемые процессы, работа с памятью, используемые библиотеки, изменяемые файловые объекты, реестр, DCOM-объекты, переменные среды). Например, с использованием сниффера можно изучить сетевой трафик устройства с установленной анализируемой программой и понять, какие внешние и локальные сетевые ресурсы она использует, а также исследовать обмен данными устройства с периферией (например, с USB-устройствами).


3. Динамический анализ: анализ программы с использованием отладчика (дебаггера) позволит изучать её поведение после запуска. Установка точек останова, трассировка, работа с памятью и регистрами ЦПУ в дебаггере позволяют не только выявить ошибки при работе программы, но и понять принцип её работы при реверс-инжиниринге. Примерами популярных дебаггеров являются OllyDbg, GDB, LLDB, x64dbg, WinDbg, а также устаревший, но некогда крайне популярный SoftICE. Однако, следует знать, что большинство защищенных программ и ВПО обнаруживают запуск под отладчиком и не функционируют стандартным образом или преждевременно завершают свою работу.


4. Статический анализ: для глубокого анализа структуры программы используются методы дизассемблирования и декомпиляции. Дизассемблер переводит машинный код бинарного файла в низкоуровневый ассемблерный код, т.е. в перечень данных и команд для процессора, при этом сложность понимания полученного кода крайне высока. Примерами дизассемблеров являются IDA Pro, Binary Ninja, Ghidra, Hiew, Radare2. Декомпилятор переводит машинный код бинарного файла в человекочитаемый код на языке высокого уровня (например, C или Java), что снижает сложность понимания кода, который, однако, будет далек от оригинала из-за особенностей работы компиляторов, оптимизаторов, обфускаторов. Примерами декомпиляторов являются ILSpy, dotPeek, uncompyle6, JEB decompiler.


5. Документирование: разобравшись со структурой и логикой программы, аналитик фиксирует находки и сохраняет созданные проекты и отчеты в использованных инструментах (дебаггере, дизассемблере, декомпиляторе).


6. Применение: если вредоносный объект исследовался в целях его дальнейшего обнаружения защитными решениями, то аналитик создаёт сигнатуры, поведенческие признаки, индикаторы компрометации/атаки. Если целью была разработка патча или обновления безопасности, то полученные на предыдущих этапах знания позволят выпустить свежую версию программы с устраненными ошибками и уязвимостями или выполнить обновление инсталляции иными средствами. Если задача включала в себя изменение программы, то полученный в результате необходимых корректировок файл сохраняется и используется вместо оригинального.

 

В заключение остановимся на правовых аспектах обратной разработки. Реверс-инжиниринг в контексте защиты интеллектуальной собственности означает процесс извлечения ноу-хау или знаний из продукта. Данная практика традиционно считалась юридически приемлемой и рассматривалась как научное исследование законно продаваемых и покупаемых продуктов, в противовес хищению секретов производства путем промышленного кибершпионажа, подкупа и т.д. С развитием технологий появились новые регуляторные нормы, запрещающие взлом или обход защитных мер – скажем, лицензии на ПО могут включать запреты на реверс-инжиниринг, декомпиляцию, дизассемблирование, однако в Евросоюзе Директива 2009/24/EC прямо запрещает наложение ограничений на анализ и изучение программ законным пользователем. В России права пользователей программных продуктов регулируются Статьей 1280 ГК РФ, в которой указано, что правомерный владелец программы может без согласия правообладателя и без выплаты дополнительного вознаграждения выполнить декомпиляцию, но исключительно для обеспечения совместимости и взаимодействия с другими программами. Организационные меры защиты исходного кода и логики программы могут включать в себя применение законодательных норм о защите секрета производства (ноу-хау) (Статья 1465 ГК РФ) и о государственной регистрации программы в Роспатенте (Статья 1262 ГК РФ) компанией-разработчиком.

ИБ для начинающих Анализ защищенности и пентесты Управление ИБ

Похожие статьи

Управление рисками информационной безопасности
Управление рисками информационной безопасности
Архитектура SOC: три линии реагирования (L1, L2 и L3)
Архитектура SOC: три линии реагирования (L1, L2 и L3)
Динамический поведенческий анализ и его инструменты
Динамический поведенческий анализ и его инструменты
Что такое дипфейк, как его распознать и защититься.
Что такое дипфейк, как его распознать и защититься.
Технологии сетевого сканирования и поиска уязвимостей
Технологии сетевого сканирования и поиска уязвимостей
Всё, что вы хотели знать о веб-токенах, но боялись спросить
Всё, что вы хотели знать о веб-токенах, но боялись спросить
eBPF глазами хакера. Часть 1
eBPF глазами хакера. Часть 1
Виды спуфинга и типы спуферов, методы выявления и предотвращения spoofing-атак
Виды спуфинга и типы спуферов, методы выявления и предотвращения spoofing-атак
Харденинг: что это такое и как укреплять безопасность Linux, Windows и серверов
Харденинг: что это такое и как укреплять безопасность Linux, Windows и серверов
Анализ концепций MDR и TDIR (XDR): архитектура, технологии и практическая реализация
Анализ концепций MDR и TDIR (XDR): архитектура, технологии и практическая реализация
Deep Packet Inspection (DPI) - что это такое?
Deep Packet Inspection (DPI) - что это такое?

Похожие статьи

Управление рисками информационной безопасности
Управление рисками информационной безопасности
Архитектура SOC: три линии реагирования (L1, L2 и L3)
Архитектура SOC: три линии реагирования (L1, L2 и L3)
Динамический поведенческий анализ и его инструменты
Динамический поведенческий анализ и его инструменты
Что такое дипфейк, как его распознать и защититься.
Что такое дипфейк, как его распознать и защититься.
Технологии сетевого сканирования и поиска уязвимостей
Технологии сетевого сканирования и поиска уязвимостей
Всё, что вы хотели знать о веб-токенах, но боялись спросить
Всё, что вы хотели знать о веб-токенах, но боялись спросить
eBPF глазами хакера. Часть 1
eBPF глазами хакера. Часть 1
Виды спуфинга и типы спуферов, методы выявления и предотвращения spoofing-атак
Виды спуфинга и типы спуферов, методы выявления и предотвращения spoofing-атак
Харденинг: что это такое и как укреплять безопасность Linux, Windows и серверов
Харденинг: что это такое и как укреплять безопасность Linux, Windows и серверов
Анализ концепций MDR и TDIR (XDR): архитектура, технологии и практическая реализация
Анализ концепций MDR и TDIR (XDR): архитектура, технологии и практическая реализация
Deep Packet Inspection (DPI) - что это такое?
Deep Packet Inspection (DPI) - что это такое?