Пиратство и другие угрозы для Android-приложений. Как защищаться? Противостояние добрых и злых сил. Как спасти Android-приложения от различных угроз? Иван Кинаш, Licel, 2014, Москва
О нас Иван Кинаш – генеральный директор и со-основатель компании Licel Licel создает решения для защиты интеллектуальной собственности от кражи и нелегального использования для платформ Android и Java Наш проект jCardSim завоевал награду Dukes Choice Award 2013, Java One, San Francisco
Отчет Mobile Techworld Report: Looking at a total of 230 apps – the top 100 paid apps and top 15 free apps for Android and iOS – Arxan found that 100 percent of the top paid apps on Android and 56 percent on iOS were being impersonated in a compromised form on grey markets.
Краткие факты о модели безопасности Android Нет стандартного EULA (Google Play) APK хранятся на устройстве и доступны даже без rootа APK подписываются сертификатом разработчика или публикующей компании Есть система привилегий. Конечные пользователи не воспринимают всерьез требования приложений, а порой, просто не имеют выбора
Краткие факты о модели безопасности Android Подпись должна гарантировать целостность приложений (пассивная защита). На деле – не работает Нужно 2 минуты, чтобы переподписать приложение своим сертификатом После этого, можно выкладывать чужое приложение на серые маркеты, p2p, варезные сайты и т.п. Или даже на тот же маркет, где есть (или было)
Структура APK classes.dex (dalvik bytecode) resources.arsc (compiled resources) META-INF/ (signatures) res/ (resources) assets/ (assets) lib/ (native libs) AndroidManifest.xml (name, version, access rights, referenced libs)
Dalvik Bytecode Защищен ли он? Как сложно reverse-engineerить? Нет, не сложно, совсем.
Пример Представим, что у нас есть приложение с рекламой Что злоумышленник должен сделать, чтобы крутить свою рекламу в вашем приложении? Apktool disassemble -> изменить ad id -> Apktool assemble -> подпись -> zipalign -> распространение (p2p, grey markets, official markets, warez sites) = 10 минут Если используются обфускаторы с, так называемой, name obfuscation функциональностью, нужна будет еще одна минута
Демо
Угрозы Клонирование приложений Кража чувствительной информации Взлом систем лицензирования Реверс-инжиниринг
Клонирование приложений Нелегальная публикация в серых магазинах Снижение дохода от продаж приложения Перенаправление доходов от рекламы и/или In-App покупок Потеря дохода от вышеупомянутых источников Внедрение вредоносного кода Утрата репутации и вред пользователю
Кража чувствительной информации Данные пользователя –Логины, пароли, ключи, данные банковских карт… –Приватная информация из социальных сетей, мессенджеров, почтовых клиентов и т.п. –Местоположение Данные приложений –Уникальные ресурсы (видео, звук, графика, …) –Информация из встроенных БД –Алгоритмы, бизнес логика Корпоративные данные –БД, Конфиденциальные документы
Взлом систем лицензирования. Google Play LVL Основной сервис лицензирования в Google Play Основан на ассиметричной криптографии –Секретные ключи на сервере лицензирования, публичные – в коде приложения Автоматическая утилита для снятия лицензирования: AntiLVL (+ Amazon DRM, Verizon DRM, Debbugable и Debbuger connected хуки, свои правила и многое другое)
Реверс-инжиниринг Порой безобидно Анализ «слабых» и критичных мест, чтобы найти уязвимости Анализ внутренней логики приложений –Банковский OTP-токен, Средства для реверса: ApkTool, Androguard, Dex2jar
Реверс-инжинирим токен моего банка Оригинальное приложение для Android, генерирующее OTP После декомпиляции –Определен алгоритм генерации паролей – TOTP TOTP = HOTP(SecretKey, TimeCounter) –Извлечен секретный ключ –Сделан клон на Arduino
Реверс-инжинирим токен моего банка
Стандартные техники защиты и лицензирования Name Obfuscation (в частности ProGuard) Системы лицензирования, предоставляемые магазинами приложений –Google Play Licensing –Amazon DRM Пользовательские native-библиотеки для проверки лицензий, шифрование строк и классов Server-side computation Математические пазлы (Mathematical Jigsaw Puzzle Obfuscation, держите ProGuard с включенной оптимизацией подальше)
Полезно, но не работает Все это не работает без… Активной и надежной системы контроля целостности приложения
Популярные и общедоступные средства для взлома Автоматические – AntiLVL Анализ и модификация –ApkTool –Androlib –Dex2Jar –JD-GUI/JEB/… Текстовый редактор и grep
Продвинутые методы защиты Шифрование строк (WhiteBoxCrypto) Сокрытие вызовов API Шифрование классов Шифрование ресурсов Активная система контроля целостности приложения
Цель Реверс-инжиниринг байт-кода (даже если удалось сделать его дамп) должен быть на сколько тяжелым, на сколько это возможно: строки зашифрованы, ценные алгоритмы и вызовы API скрыты Хорошая система контроля целостности приложения, чтобы предотвратить злонамеренную модификацию и последующую перепаковку приложения Уникальные ресурсы зашифрованы
Схема Защиты APK Bytecode String Encryption Class Encryption Hide API calls Resources Resource encryption Signature Active Integrity Protection (Repackaging protection) Если в приложении есть сетевая функциональность, можно менять параметры протокола взаимодействия от версии к версии
Несколько важных советов Если вы разрабатываете банковское/финансовое/корпоративное/безопасное приложение: Device fingerprint Device-related OTP через второй коммуникационный канал (SMS) Защищенные протоколы и сильная криптография Чувствительная информация должна быть зашифрована, если это БД – SQLCipher, ключи должны быть зашифрованы Баланс между защищенностью и производительностью Думайте о защите и защищайтесь заранее, ДО ДНЯ РЕЛИЗА
Когда все хорошо После того, как приложение надежно защищено, можно подумать над следующими проверками: Проверка сертификата приложения Проверка на debug-mode Проверка на rootа Проверка на запуск в эмуляторе
Вывод К сожалению, никто не сможет гарантировать вам 100% вероятности, что приложение не будет взломано Актуальность проблемы растет с каждым днем, вместе с ростом рынка Android-приложений Стандартные методы уже никак не противостоят текущим техникам и инструментам злоумышленников, например, даже script-kiddies смогут поменять учетные данные рекламной площадки Должны быть применены несколько технологий защиты Контроль целостности – одна из самых важных вещей
Вывод 2 Если вы применили технологии защиты с умом – 90% потенциальных хакеров либо не смогут справиться с защитой, либо им будет неинтересно Не у каждого пользователя rooted-устройство Google? Jelly Bean Encrypted Containers? Secured boot-loader?
Контакты Web: