Реверс инжиниринг: что такое обратная разработка и как она применяется в информационной безопасности

BOOX

Стаж на ФС с 2012 года
Команда форума
Служба безопасности
Private Club
Регистрация
23/1/18
Сообщения
28.773
Репутация
11.595
Реакции
61.685
RUB
50
Где используют реверс инжиниринг? Какие задачи информационной безопасности можно решить с его помощью? Какими компетенциями должен обладать специалист по обратной разработке?


Рассказываем в этой статье.

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

mftlr107zfx120ovwgk9wc1u86svnymu.png


Для реверс инжиниринга специалисты применяют следующие способы:

  • Используя анализаторы трафика, анализируют обмен данными.
  • Дизассемблируют машинный код программы, чтобы получить её листинг на языке ассемблера.
  • Декомпилируют машинный или байт-код программы, чтобы создать исходный код на языке программирования высокого уровня.

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

Где применяют реверс-инжиниринг

Реверс инжиниринг часто используется в разработке приложений или ПО. Например, некоторые программы для компьютера созданы специально для техники Apple и недоступны для пользователей Windows, потому что не имеют аналогов. В этом случае исследователь с помощью реверс-инжиниринга может декодировать продукт и создать аналог.

Например, программное обеспечение Apple Logic Pro, которое доступно только для устройств Mac стоит относительно дорого. Если инженеру удастся декодировать его цифровые инструменты и выяснить, как они работают, то у него будет возможность сделать их совместимыми с другим ПО, работающем на Windows. Другой пример — разработка модов для игр. Реверс-инжениринг дает возможность выпускать модификации игр, добавляя в них дополнительные функции.

Реверс-инжиниринг, он же обратная разработка, используется для решения ряда ИБ-задач, т.к. в данном случае речь также идет об алгоритмах работы ПО, хоть и выполняющего защитные либо атакующие функции. Некоторые с его помощью выявляют уязвимости программ и оборудования. Также его используют для поиска преимуществ и уязвимостей продуктов конкурентов и импортозамещения зарубежных решений, т.к. понимание, как то или иное решение было произведено и как работает, позволяет улучшить собственные продукты в целом и точнее настроить новую систему под конкретного клиента. Бывают случаи, когда сами производители также обращаются к услугам реверс-инжиниринга, чтобы проверить надежность своих продуктов.

Еще один вариант применения реверс-инжиниринга — необходимость исследовать старые технологии, legacy-код или восстановить утерянный исходный код. Например, для повышения производительности или в целях повышения информационной безопасности, защиты приложений, требуется провести анализ уязвимостей или исправить ошибки в коде, доступ к которому утерян. Кроме того Разработчики ПО не всегда готовы предоставить исследователям исходный код, чтобы проверить его на безопасность, в том числе из-за опасения, что будет создан аналог.

Сотрудники антивирусных компаний используют обратную разработку во время исследования компьютерных вирусов и других вредоносных ПО. Такой подход дает возможность обнаружить сигнатуры вирусов и добавить их в базу антивируса, сканера уязвимостей или систему обнаружения вторжений.

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

Как хакер может использовать реверс-инжиниринг

Обратная разработка позволяет разобрать программу или устройство и исследовать, как она работает, какие данные и куда отправляет, как реагирует на аварийные ситуации и какие дыры есть в ее защите, и, конечно, злоумышленники используют этот метод в собственных целях. Хакеры могут использовать реверс-инжиниринг, чтобы сделать «кряки» — программу, с помощью которой можно устранить защиту ПО, предусмотренную разработчиками. Для взлома существует несколько методов.

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

Руководитель отдела реагирования на инциденты, ООО "Бастион"
Злоумышленники часто покупают или самостоятельно разрабатывают те или иные эксплойты, приводящие к желаемому результату (обход средств защиты, удаленное выполнение кода, повышение привилегий и т.д.). Чаще всего разработка эксплойтов невозможна без реверс-инжиниринга.

Однако, software cracking или создание кряков может быть использовано легально реверс-инженерами, если цель специалиста — протестировать защиту ПО, найти уязвимости и расширить понимание работы программы.

Как защитить свои ПО от обратной разработки

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

Основные методы защиты сводятся к двум направлениям:
  • Защита от статического анализа, которая включает в себя различные техники обфускации и запутывания кода (например, внесение «мусорных инструкций», усложняющих работу дизассемблеров/декомпиляторов, сжатие и упаковка кода, что приводит к невозможности анализа без его выполнения и распаковки).
  • Защита от динамического анализа, которая включает в себя различные методы антиотладки (как самый базовый пример - проверка debug-флага), обнаружения исполнения в контролируемой или виртуальной среде (например, обнаружение запуска внутри виртуальной машины за счёт замера времени выполнения определенных ассемблерных инструкций).

Чаще всего методы защиты от динамического и статического анализа комбинируются с целью усложнения процесса обратной разработки. Стоит отметить, что это лишь простейшие примеры. Встречаются и более сложные решения (виртуализация кода, использование различных hardware-решений для проверки лицензий и т.д.).

Компетенции специалиста по обратной разработке

Работа реверс инженера, исследователя отчасти напоминает работу тестировщика. Специалисты по ИБ сходятся во мнении, что начинающему специалисту пригодятся следующие навыки и компетенции:

  • базовое знание языков программирования (ассемблер, python или др.);
  • навык работы с отладчиками;
  • базовые знания в области информационной безопасности.

Зависит от выбора направления деятельности. Для вирусных аналитиков крайне полезно понимание того, каким образом устроена ОС и её API, каким образом атакующий может использовать те или иные механизмы ОС для достижения своих целей (например, каким образом можно закрепиться на зараженном устройстве), умение писать сигнатуры/YARA-правила и т.д. Отдельно хотелось бы выделить умение работать с документацией и стандартами, так как это умение очень сильно экономит время, затрачиваемое на анализ.

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

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

Реверс-инжиниринг — это важный инструмент для изучения работы программного обеспечения, который дает возможность анализировать исходный код программы и выявить ее уязвимости, найти способы повышения производительности. Тем не менее нельзя забывать об этических и юридических аспектах при проведении реверс-инжиниринга, чтобы не нарушать законы и не создавать угрозы безопасности данных.

 
  • Теги
    информационная безопасность обратная разработка реверс инжиниринг
  • Сверху Снизу