Реверс-инжиниринг в контексте безопасности ПО | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Java Developer. Basic C++ Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" C++ Developer. Basic
Инфраструктура
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
Разработчик IoT
-13%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Базы данных Network engineer Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер-практикум по использованию и настройке GIT Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Реверс-инжиниринг в контексте безопасности ПО

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

Метод № 1: обфускация кода

Обфускация – это приведение кода к трудному для анализа виду при сохранении функциональности кода. К примеру, обфускация значительно усложнит задачу хакера, ведь даже в случае получения исходного кода ему будет очень сложно понять, что же этот код делает.

Мутация — один из самых эффективных видов обфускации. Это означает, что приложение регулярно меняет свой исходный код в процессе работы, что значительно усложняет задачу реверс-инжиниринга. Но это палка о двух концах: обфусцированный код «нечитаем» как для злоумышленника, так и для разработчика. К тому же, добавление лишних ветвей кода может понижать производительность приложения и даже добавлять ошибки.

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

Метод № 2: проверка целостности

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

Метод № 3: шифрование

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

Что учесть при выборе?

Кроме вышеописанных, есть и другие методы защиты – защищенные среды исполнения, водяные знаки, вынесение критических участков кода в отдельные модули и так далее. Что бы бы это ни было, важно запомнить, что ни один из методов не сможет обеспечить полную безопасность. Следовательно, подход к защите программного приложения должен быть уникальным для каждого случая.

Именно поэтому, при выборе надо руководствоваться моделью угроз и учитывать, что конкретно в приложении важно защитить и как злоумышленник может попробовать это получить («Чтобы поймать одного маньяка, нужен другой маньяк»). Если есть риск изменения кода, делают упор на проверку целостности, если возможно изучение части приложения, может быть полезным вариант шифрования либо обфускации.

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

По материалам: https://www.a1qa.ru/blog.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться