Федеральное государственное образовательное бюджетное
Учреждение высшего образования
«Финансовый университет
При Правительстве Российской Федерации»
(Финансовый университет)
Студент группы ИБ4-1
Анточи А.С
Что такое "исследование" ПО и в чем оно заключается
Исследование программного обеспечения - процесс получения информации о поведении продукта, не зафиксированном в документации частично либо полностью.
Пример небольшого исследования Java-приложения:
Приложение запускается, но его работа в определенной мере не ясна...
Что такое "исследование" ПО и в чем оно заключается
Первый шаг - понять, с ччем мы имеем дело. В нашем случае - это Java-программа, которая в общем случае является архивом с подписанным байткодом:
Далее постараемся понять, каких данных на входе ждет данное приложение от пользователя. Поможет в этом стандартная утилита из JDK - javap:
Этих действий достаточно, чтобы восстановить логику кода на уровне опкодов виртуальной машины Java...
Что такое "исследование" ПО и в чем оно заключается
Небольшой анализ сразу же успешно завершает исследование - данная программа суммирует только те числа, суммарная длина которых > 10 символов
Осталось в этом убедиться
Что такое "исследование" ПО и в чем оно заключается
Вариант использования программы без понимания ее внутренней логики:
Вариант использования программы после исследования:
Теперь можно, например, реализовать свой вариант программы, который бы реализовывал данную логику на любом языке...
Что такое "исследование" ПО и в чем оно заключается
Таким образом, проведенное методом обратной разработки исследование позволило воссоздать рабочий экземпляр приложения
А вместо примитивного сумматора чисел могло находиться более сложное/важное с точки зрения интеллектуальной собственности программное средство
Потенциальные заказчики и их цели исследования ПО
У каждой группы заинтересованных лиц свои цели
Способы исследования ПО
Способы исследования ПО
Обнаружение общедоступных фрагментов кода
Сложность в данном случае составляет точная идентификация фрагментов кода
Способы исследования ПО
Анализ внешних взаимодействий
Данный способ позволяет лучше понять, что делает ПО, позволяя восстановить картину происходящего на уровне причинно-следственной связи.
Способы защиты от исследования ПО
Защита от обнаружения общедоступных фрагментов
1) Изменение имен
2) Изменение входных параметров алгоритма
3) Модификация протоколов передачи
Каждое ПО в той или иной мере использует общедоступные функциональные фрагменты, писать все с нуля нецелесообразно
Все что остается сделать - это скрыть "указатели" на такие фрагменты
=>
Способы сокрытия общедоступных фрагментов:
Основная цель этой защиты - не допустить, чтобы были обнаружены значительный фрагменты кода, которые можно было бы исследовать независимо по открытым исходным кодам или документациям
Способы защиты от исследования ПО
(Изменение имен для кода после его восстановления)
(Модификация входных параметров алгоритма)
Эксплуатация невнимательности исследователя
Способы защиты от исследования ПО
Защита от внешнего анализа
Основная цель защиты от внешнего анализа - не допустить, чтобы по внешним признакам работы ПО стали известны детали о внутренней работе
1) Обнаружение недоверенной среды выполнения
2) Шифрование данных
3) Отслеживание целостности подгружаемых системных модулей
При обнаружении подозрительных индикаторов - менять ход выполнения или запрещать дальнейшее выполнение
Способы защиты от исследования ПО
Защита от статического анализа кода
Основная цель этой защиты - обеспечить максимальную трудность исследования логики ПО на этапе, предшествующем исполнению
1) Обфускация (на примере JavaScript)
Способы защиты от исследования ПО
Защита от статического анализа кода
6) Подгрузка модулей ПО извне по мере необходимости
2) Упаковка кода
3) Шифрование строк
4) Запутывание алгоритма
5) Запутывание дизассемблера (усложнение восстановления стека вызовов)
Способы защиты от исследования ПО
Защита от динамического анализа кода
Основная цель защиты от внешнего анализа - обнаружить и отреагировать на факт исследования ПО в ходе его функционирования
2. Измерение длительности исполнения фрагмента кода
Чем больше отклонение в большую сторону от ожидаемой константы, тем более велика вероятность отладки
Способы защиты от исследования ПО
Защита на документальном уровне
Российское законодательство не запрещает исследовать чужое ПО, если:
Доказать факт исследования, как правило, достаточно сложно в большинстве случаев
Вопросы
Существует ли способ гарантированного предотвращения исследования
программного продукта?
Вопросы
Допустим, вы руководите разработкой мобильного приложения, часть кода которого можно вынести на низкий уровень, а другую часть - реализовать на Java. Какие из следующих функциональных механизмов вы бы распорядились вынести на низкий уровень с целью их защиты от исследования?
Механизм получения строк
Реализация пользовательского интерфейса
Управление сетевыми соединениями
Механизм шифрования
Механизм арифметических операций (+ и -)
Механизм арифметических операции (/ и *)
Обработка нажатий виртуальной клавиатуры
Вопросы : творческое задание
Предложите максимальное количество способов усложнения данного алгоритма с целью запутывания исследователя: