android_security.jpg

Защита мобильного приложения Android

Защита мобильного приложения (особенно для Android) – один из наиважнейших этапов его разработки. Без принятия должных мер в Сети сможет быстро появиться его взломанная копия, в которой, например, будет отключена реклама и/или верификация через социальные сервисы. Но главная опасность – пират сумеет произвести декомпиляцию приложения чтобы узнать его изнутри и воссоздать аналогичное. Существует целый ряд мер, направленных на защиту программы. То, какие именно нужно использовать, зависит от специфики проекта.

Способы предотвращения взлома приложения

Мы предлагаем вашему вниманию 9 хитростей, которыми пользуется наша компания для защиты информации.

1. Предотвращение декомпиляции

Получение исходного кода незащищенного приложения для Android – не проблема для опытного разработчика. Для этого достаточно преобразовать в jar dex файлы, а затем извлечь из них source-code, который легко читается. Предотвратить это возможно при помощи специальных инструментов: JAD, JD-GUI и dex2jar. Но следует понимать, что полностью защитить приложение от реверс-инжиринга нельзя. Возможно только усложнить пирату задачу настолько, чтобы ему было не выгодно заниматься взломом.

Обфускация кода для предотвращения его изучения

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

Написание некоторых модулей программы на C/C++

Чтобы увеличить защиту данных, которые обязательно должны храниться на клиентском устройстве, Appomant использует NDK. С его помощью возможно вынести часть кода в .so-файлы. Он, в свою очередь, пишется на C или C++. Результаты декомпиляции/дизассемблирования такого кода получаются трудно читабельными, что сводит к минимуму вероятность их несанкционированного использования в других проектах.

2. Перенос части приложения на сервер

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

3. Применение шифрования

Если приложение передает данные на сервер, то следует применять SSL. Однако к его использованию необходимо подходить ответственно. По нашим данным, около 40% всех применяющих SSL приложений, уязвимы к атаке "человек по середине".

4. Хранение важных пользовательских данных в обработанном виде

Хранить важную пользовательскую информацию (например, сведения о состоянии баланса) в открытом виде – плохая идея. Лучше ее обрабатывать по специальному алгоритму, что мы и делаем.

5. Работа с учетными данными

Чтобы приложение было защищено, нужно отказаться от хранения пароля на устройстве пользователя (для постоянного логина лучше использовать объект Credential). Также важно в приложении минимизировать количество запросов учетных данных.

6. Ответственное использование API-ключей

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

7. Использование надежных хэш-функций

Еще один важный нюанс, от которого зависит безопасность приложения – использование надежной хэш-функции. На текущий момент таковой является SHA-2. Другие, например, MD2, MD5 и SHA1 имеют известные уязвимости из-за которых обработанная конфиденциальная информация (например, пароли) может быть скомпрометирована. Здесь важно, чтобы хэш-функция была не только стойкой, но еще и достаточно медленной – это усложняет перебор. К таковым, в частности, относятся: scrypt, bcrypt и PBKDF2.

8. Предотвращение использование недопустимых аргументов

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

9. Запрет на установку данных на внешний накопитель

Когда пользователь подключает устройство к компьютеру в качестве USB-накопителя, открывается полный доступ к файлам, находящиеся на карте памяти. Кроме этого, после удаления приложения информация, записанная им на MicroSD, может на ней остаться. Это, в свою очередь, способно привести к компрометации конфиденциальных данных. Мы применяем SQLite, чтобы исключить ущерб от хранения критично важной информации на внешних накопителях. Несмотря на то, что вышеприведенные меры не гарантируют полной безопасности, они сводят к минимуму вероятность взлома. Поэтому обязательно включайте в техническое задание (узнать о нем можно на странице: Разработка технической документации для мобильноо приложения) требования, касающиеся защиты приложения. Если вы хотите заказать Android приложение, свяжитесь с нами по телефону или другим удобным для вас способом.
Все контакты указаны на странице: https://appomart.com/contacts.

Logo White
Клиентоориентированные мобильные приложения
и веб-сервисы

Для принятия решения

Contact us

Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.